diff --git a/Jakefile.js b/Jakefile.js index a3141559bfb..5112a8db597 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -160,7 +160,7 @@ var harnessSources = harnessCoreSources.concat([ "protocol.d.ts", "session.ts", "client.ts", - "editorServices.ts", + "editorServices.ts" ].map(function (f) { return path.join(serverDirectory, f); })); @@ -174,7 +174,7 @@ var es2015LibrarySources = [ "es2015.proxy.d.ts", "es2015.reflect.d.ts", "es2015.symbol.d.ts", - "es2015.symbol.wellknown.d.ts", + "es2015.symbol.wellknown.d.ts" ]; var es2015LibrarySourceMap = es2015LibrarySources.map(function(source) { @@ -183,25 +183,25 @@ var es2015LibrarySourceMap = es2015LibrarySources.map(function(source) { var es2016LibrarySource = [ "es2016.array.include.d.ts" ]; -var es2016LibrarySourceMap = es2016LibrarySource.map(function(source) { +var es2016LibrarySourceMap = es2016LibrarySource.map(function (source) { return { target: "lib." + source, sources: ["header.d.ts", source] }; -}) +}); var es2017LibrarySource = ["es2017.object.d.ts"]; -var es2017LibrarySourceMap = es2017LibrarySource.map(function(source) { +var es2017LibrarySourceMap = es2017LibrarySource.map(function (source) { return { target: "lib." + source, sources: ["header.d.ts", source] }; -}) +}); -var hostsLibrarySources = ["dom.generated.d.ts", "webworker.importscripts.d.ts", "scripthost.d.ts"] +var hostsLibrarySources = ["dom.generated.d.ts", "webworker.importscripts.d.ts", "scripthost.d.ts"]; var librarySourceMap = [ // Host library - { target: "lib.dom.d.ts", sources: ["header.d.ts", "dom.generated.d.ts"], }, - { target: "lib.dom.iterable.d.ts", sources: ["header.d.ts", "dom.iterable.d.ts"], }, - { target: "lib.webworker.d.ts", sources: ["header.d.ts", "webworker.generated.d.ts"], }, - { target: "lib.scripthost.d.ts", sources: ["header.d.ts", "scripthost.d.ts"], }, - + { target: "lib.dom.d.ts", sources: ["header.d.ts", "dom.generated.d.ts"] }, + { target: "lib.dom.iterable.d.ts", sources: ["header.d.ts", "dom.iterable.d.ts"] }, + { target: "lib.webworker.d.ts", sources: ["header.d.ts", "webworker.generated.d.ts"] }, + { target: "lib.scripthost.d.ts", sources: ["header.d.ts", "scripthost.d.ts"] }, + // JavaScript library { target: "lib.es5.d.ts", sources: ["header.d.ts", "es5.d.ts"] }, { target: "lib.es2015.d.ts", sources: ["header.d.ts", "es2015.d.ts"] }, @@ -209,8 +209,8 @@ var librarySourceMap = [ { target: "lib.es2017.d.ts", sources: ["header.d.ts", "es2017.d.ts"] }, // JavaScript + all host library - { target: "lib.d.ts", sources: ["header.d.ts", "es5.d.ts"].concat(hostsLibrarySources), }, - { target: "lib.es6.d.ts", sources: ["header.d.ts", "es5.d.ts"].concat(es2015LibrarySources, hostsLibrarySources, "dom.iterable.d.ts"), }, + { target: "lib.d.ts", sources: ["header.d.ts", "es5.d.ts"].concat(hostsLibrarySources) }, + { target: "lib.es6.d.ts", sources: ["header.d.ts", "es5.d.ts"].concat(es2015LibrarySources, hostsLibrarySources, "dom.iterable.d.ts") } ].concat(es2015LibrarySourceMap, es2016LibrarySourceMap, es2017LibrarySourceMap); var libraryTargets = librarySourceMap.map(function (f) { @@ -251,7 +251,7 @@ function concatenateFiles(destinationFile, sourceFiles) { } var useDebugMode = true; -var host = (process.env.TYPESCRIPT_HOST || process.env.host || "node"); +var host = process.env.TYPESCRIPT_HOST || process.env.host || "node"; var compilerFilename = "tsc.js"; var LKGCompiler = path.join(LKGDirectory, compilerFilename); var builtLocalCompiler = path.join(builtLocalDirectory, compilerFilename); @@ -300,7 +300,7 @@ function compileFile(outFile, sources, prereqs, prefixes, useBuiltCompiler, opts options += " --out " + outFile; } else { - options += " --module commonjs" + options += " --module commonjs"; } if(opts.noResolve) { @@ -315,7 +315,7 @@ function compileFile(outFile, sources, prereqs, prefixes, useBuiltCompiler, opts } if (opts.stripInternal) { - options += " --stripInternal" + options += " --stripInternal"; } var cmd = host + " " + compilerPath + " " + options + " "; @@ -453,9 +453,9 @@ file(scriptsTsdJson); task("tsd-scripts", [scriptsTsdJson], function () { var cmd = "tsd --config " + scriptsTsdJson + " install"; - console.log(cmd) + console.log(cmd); exec(cmd); -}, { async: true }) +}, { async: true }); var importDefinitelyTypedTestsDirectory = path.join(scriptsDirectory, "importDefinitelyTypedTests"); var importDefinitelyTypedTestsJs = path.join(importDefinitelyTypedTestsDirectory, "importDefinitelyTypedTests.js"); @@ -525,9 +525,10 @@ compileFile(servicesFileInBrowserTest, servicesSources,[builtLocalDirectory, cop var serverFile = path.join(builtLocalDirectory, "tsserver.js"); compileFile(serverFile, serverSources,[builtLocalDirectory, copyright].concat(serverSources), /*prefixes*/ [copyright], /*useBuiltCompiler*/ true); -var lsslFile = path.join(builtLocalDirectory, "tslssl.js"); +var tsserverLibraryFile = path.join(builtLocalDirectory, "tsserverlibrary.js"); +var tsserverLibraryDefinitionFile = path.join(builtLocalDirectory, "tsserverlibrary.d.ts"); compileFile( - lsslFile, + tsserverLibraryFile, languageServiceLibrarySources, [builtLocalDirectory, copyright].concat(languageServiceLibrarySources), /*prefixes*/ [copyright], @@ -536,7 +537,7 @@ compileFile( // Local target to build the language service server library desc("Builds language service server library"); -task("lssl", [lsslFile]); +task("lssl", [tsserverLibraryFile, tsserverLibraryDefinitionFile]); // Local target to build the compiler and services desc("Builds the full compiler and services"); @@ -595,8 +596,8 @@ task("generate-spec", [specMd]); // Makes a new LKG. This target does not build anything, but errors if not all the outputs are present in the built/local directory desc("Makes a new LKG out of the built js files"); -task("LKG", ["clean", "release", "local"].concat(libraryTargets), function() { - var expectedFiles = [tscFile, servicesFile, serverFile, nodePackageFile, nodeDefinitionsFile, standaloneDefinitionsFile].concat(libraryTargets); +task("LKG", ["clean", "release", "local", "lssl"].concat(libraryTargets), function() { + var expectedFiles = [tscFile, servicesFile, serverFile, nodePackageFile, nodeDefinitionsFile, standaloneDefinitionsFile, tsserverLibraryFile, tsserverLibraryDefinitionFile].concat(libraryTargets); var missingFiles = expectedFiles.filter(function (f) { return !fs.existsSync(f); }); @@ -622,7 +623,7 @@ directory(builtLocalDirectory); var run = path.join(builtLocalDirectory, "run.js"); compileFile(run, harnessSources, [builtLocalDirectory, tscFile].concat(libraryTargets).concat(harnessSources), [], /*useBuiltCompiler:*/ true); -var internalTests = "internal/" +var internalTests = "internal/"; var localBaseline = "tests/baselines/local/"; var refBaseline = "tests/baselines/reference/"; @@ -709,15 +710,16 @@ function runConsoleTests(defaultReporter, defaultSubsets) { testTimeout = 100000; } - colors = process.env.colors || process.env.color + colors = process.env.colors || process.env.color; colors = colors ? ' --no-colors ' : ' --colors '; reporter = process.env.reporter || process.env.r || defaultReporter; + var lintFlag = process.env.lint !== 'false'; // timeout normally isn't necessary but Travis-CI has been timing out on compiler baselines occasionally // default timeout is 2sec which really should be enough, but maybe we just need a small amount longer var subsetRegexes; if(defaultSubsets.length === 0) { - subsetRegexes = [tests] + subsetRegexes = [tests]; } else { var subsets = tests ? tests.split("|") : defaultSubsets; @@ -728,19 +730,20 @@ function runConsoleTests(defaultReporter, defaultSubsets) { tests = subsetRegex ? ' -g "' + subsetRegex + '"' : ''; var cmd = "mocha" + (debug ? " --debug-brk" : "") + " -R " + reporter + tests + colors + ' -t ' + testTimeout + ' ' + run; console.log(cmd); - exec(cmd, function () { + function finish() { deleteTemporaryProjectOutput(); - if (i === 0) { + complete(); + } + exec(cmd, function () { + if (lintFlag && i === 0) { var lint = jake.Task['lint']; lint.addListener('complete', function () { complete(); }); lint.invoke(); } - else { - complete(); - } - }); + finish(); + }, finish); }); } @@ -750,7 +753,7 @@ task("runtests-parallel", ["build-rules", "tests", builtLocalDirectory], functio runConsoleTests('min', ['compiler', 'conformance', 'Projects', 'fourslash']); }, {async: true}); -desc("Runs the tests using the built run.js file. Optional arguments are: t[ests]=regex r[eporter]=[list|spec|json|] d[ebug]=true color[s]=false."); +desc("Runs the tests using the built run.js file. Optional arguments are: t[ests]=regex r[eporter]=[list|spec|json|] d[ebug]=true color[s]=false lint=true."); task("runtests", ["build-rules", "tests", builtLocalDirectory], function() { runConsoleTests('mocha-fivemat-progress-reporter', []); }, {async: true}); @@ -763,8 +766,8 @@ task("generate-code-coverage", ["tests", builtLocalDirectory], function () { }, { async: true }); // Browser tests -var nodeServerOutFile = 'tests/webTestServer.js' -var nodeServerInFile = 'tests/webTestServer.ts' +var nodeServerOutFile = "tests/webTestServer.js"; +var nodeServerInFile = "tests/webTestServer.ts"; compileFile(nodeServerOutFile, [nodeServerInFile], [builtLocalDirectory, tscFile], [], /*useBuiltCompiler:*/ true, { noOutFile: true }); desc("Runs browserify on run.js to produce a file suitable for running tests in the browser"); @@ -776,7 +779,7 @@ task("browserify", ["tests", builtLocalDirectory, nodeServerOutFile], function() desc("Runs the tests using the built run.js file like 'jake runtests'. Syntax is jake runtests-browser. Additional optional parameters tests=[regex], port=, browser=[chrome|IE]"); task("runtests-browser", ["tests", "browserify", builtLocalDirectory, servicesFileInBrowserTest], function() { cleanTestDirs(); - host = "node" + host = "node"; port = process.env.port || process.env.p || '8888'; browser = process.env.browser || process.env.b || "IE"; tests = process.env.test || process.env.tests || process.env.t; @@ -790,13 +793,13 @@ task("runtests-browser", ["tests", "browserify", builtLocalDirectory, servicesFi } tests = tests ? tests : ''; - var cmd = host + " tests/webTestServer.js " + port + " " + browser + " " + tests + var cmd = host + " tests/webTestServer.js " + port + " " + browser + " " + tests; console.log(cmd); exec(cmd); }, {async: true}); function getDiffTool() { - var program = process.env['DIFF'] + var program = process.env['DIFF']; if (!program) { fail("Add the 'DIFF' environment variable to the path of the program you want to use."); } @@ -825,11 +828,11 @@ task("tests-debug", ["setDebugMode", "tests"]); // Makes the test results the new baseline desc("Makes the most recent test results the new baseline, overwriting the old baseline"); task("baseline-accept", function(hardOrSoft) { - if (!hardOrSoft || hardOrSoft == "hard") { + if (!hardOrSoft || hardOrSoft === "hard") { jake.rmRf(refBaseline); fs.renameSync(localBaseline, refBaseline); } - else if (hardOrSoft == "soft") { + else if (hardOrSoft === "soft") { var files = jake.readdirR(localBaseline); for (var i in files) { jake.cpR(files[i], refBaseline); @@ -908,14 +911,14 @@ task("update-sublime", ["local", serverFile], function() { }); var tslintRuleDir = "scripts/tslint"; -var tslintRules = ([ +var tslintRules = [ "nextLineRule", "preferConstRule", "booleanTriviaRule", "typeOperatorSpacingRule", "noInOperatorRule", "noIncrementDecrementRule" -]); +]; var tslintRulesFiles = tslintRules.map(function(p) { return path.join(tslintRuleDir, p + ".ts"); }); @@ -940,7 +943,7 @@ function getLinterOptions() { function lintFileContents(options, path, contents) { var ll = new Linter(path, contents, options); - console.log("Linting '" + path + "'.") + console.log("Linting '" + path + "'."); return ll.lint(); } @@ -961,6 +964,7 @@ function lintFileAsync(options, path, cb) { var servicesLintTargets = [ "navigateTo.ts", + "navigationBar.ts", "outliningElementsCollector.ts", "patternMatcher.ts", "services.ts", @@ -971,19 +975,26 @@ var servicesLintTargets = [ }); var lintTargets = compilerSources .concat(harnessCoreSources) + // Other harness sources + .concat(["instrumenter.ts"].map(function(f) { return path.join(harnessDirectory, f) })) .concat(serverCoreSources) + .concat(["client.ts"].map(function(f) { return path.join(serverDirectory, f); })) .concat(tslintRulesFiles) .concat(servicesLintTargets); -desc("Runs tslint on the compiler sources"); +desc("Runs tslint on the compiler sources. Optional arguments are: f[iles]=regex"); task("lint", ["build-rules"], function() { var lintOptions = getLinterOptions(); var failed = 0; + var fileMatcher = RegExp(process.env.f || process.env.file || process.env.files || ""); for (var i in lintTargets) { - var result = lintFile(lintOptions, lintTargets[i]); - if (result.failureCount > 0) { - console.log(result.output); - failed += result.failureCount; + var target = lintTargets[i]; + if (fileMatcher.test(target)) { + var result = lintFile(lintOptions, target); + if (result.failureCount > 0) { + console.log(result.output); + failed += result.failureCount; + } } } if (failed > 0) { diff --git a/lib/lib.d.ts b/lib/lib.d.ts index da43acc116a..6bded7a1135 100644 --- a/lib/lib.d.ts +++ b/lib/lib.d.ts @@ -22,7 +22,7 @@ declare const NaN: number; declare const Infinity: number; /** - * Evaluates JavaScript code and executes it. + * Evaluates JavaScript code and executes it. * @param x A String value that contains valid JavaScript code. */ declare function eval(x: string): any; @@ -30,25 +30,25 @@ declare function eval(x: string): any; /** * Converts A string to an integer. * @param s A string to convert into a number. - * @param radix A value between 2 and 36 that specifies the base of the number in numString. + * @param radix A value between 2 and 36 that specifies the base of the number in numString. * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. * All other strings are considered decimal. */ declare function parseInt(s: string, radix?: number): number; /** - * Converts a string to a floating-point number. - * @param string A string that contains a floating-point number. + * Converts a string to a floating-point number. + * @param string A string that contains a floating-point number. */ declare function parseFloat(string: string): number; /** - * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). + * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). * @param number A numeric value. */ declare function isNaN(number: number): boolean; -/** +/** * Determines whether a supplied number is finite. * @param number Any numeric value. */ @@ -66,7 +66,7 @@ declare function decodeURI(encodedURI: string): string; */ declare function decodeURIComponent(encodedURIComponent: string): string; -/** +/** * Encodes a text string as a valid Uniform Resource Identifier (URI) * @param uri A value representing an encoded URI. */ @@ -105,18 +105,18 @@ interface Object { valueOf(): Object; /** - * Determines whether an object has a property with the specified name. + * Determines whether an object has a property with the specified name. * @param v A property name. */ hasOwnProperty(v: string): boolean; /** - * Determines whether an object exists in another object's prototype chain. + * Determines whether an object exists in another object's prototype chain. * @param v Another object whose prototype chain is to be checked. */ isPrototypeOf(v: Object): boolean; - /** + /** * Determines whether a specified property is enumerable. * @param v A property name. */ @@ -131,36 +131,36 @@ interface ObjectConstructor { /** A reference to the prototype for a class of objects. */ readonly prototype: Object; - /** - * Returns the prototype of an object. + /** + * Returns the prototype of an object. * @param o The object that references the prototype. */ getPrototypeOf(o: any): any; /** - * Gets the own property descriptor of the specified object. - * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype. + * Gets the own property descriptor of the specified object. + * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype. * @param o Object that contains the property. * @param p Name of the property. */ getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; - /** - * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly + /** + * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions. * @param o Object that contains the own properties. */ getOwnPropertyNames(o: any): string[]; - /** + /** * Creates an object that has the specified prototype, and that optionally contains specified properties. * @param o Object to use as a prototype. May be null - * @param properties JavaScript object that contains one or more property descriptors. + * @param properties JavaScript object that contains one or more property descriptors. */ create(o: any, properties?: PropertyDescriptorMap): any; /** - * Adds a property to an object, or modifies attributes of an existing property. + * Adds a property to an object, or modifies attributes of an existing property. * @param o Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object. * @param p The property name. * @param attributes Descriptor for the property. It can be for a data property or an accessor property. @@ -168,7 +168,7 @@ interface ObjectConstructor { defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; /** - * Adds one or more properties to an object, and/or modifies attributes of existing properties. + * Adds one or more properties to an object, and/or modifies attributes of existing properties. * @param o Object on which to add or modify the properties. This can be a native JavaScript object or a DOM object. * @param properties JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property. */ @@ -176,7 +176,7 @@ interface ObjectConstructor { /** * Prevents the modification of attributes of existing properties, and prevents the addition of new properties. - * @param o Object on which to lock the attributes. + * @param o Object on which to lock the attributes. */ seal(o: T): T; @@ -188,25 +188,25 @@ interface ObjectConstructor { /** * Prevents the addition of new properties to an object. - * @param o Object to make non-extensible. + * @param o Object to make non-extensible. */ preventExtensions(o: T): T; /** * Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object. - * @param o Object to test. + * @param o Object to test. */ isSealed(o: any): boolean; /** * Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object. - * @param o Object to test. + * @param o Object to test. */ isFrozen(o: any): boolean; /** * Returns a value that indicates whether new properties can be added to an object. - * @param o Object to test. + * @param o Object to test. */ isExtensible(o: any): boolean; @@ -231,7 +231,6 @@ interface Function { * @param thisArg The object to be used as the this object. * @param argArray A set of arguments to be passed to the function. */ - apply(this: (this: T, ...argArray: any[]) => U, thisArg: T, argArray?: any): U; apply(this: Function, thisArg: any, argArray?: any): any; /** @@ -239,16 +238,14 @@ interface Function { * @param thisArg The object to be used as the current object. * @param argArray A list of arguments to be passed to the method. */ - call(this: (this: T, ...argArray: any[]) => U, thisArg: T, ...argArray: any[]): U; call(this: Function, thisArg: any, ...argArray: any[]): any; /** - * For a given function, creates a bound function that has the same body as the original function. + * For a given function, creates a bound function that has the same body as the original function. * The this object of the bound function is associated with the specified object, and has the specified initial parameters. * @param thisArg An object to which the this keyword can refer inside the new function. * @param argArray A list of arguments to be passed to the new function. */ - bind(this: (this: T, ...argArray: any[]) => U, thisArg: T, ...argArray: any[]): (this: void, ...argArray: any[]) => U; bind(this: Function, thisArg: any, ...argArray: any[]): any; prototype: any; @@ -287,7 +284,7 @@ interface String { */ charAt(pos: number): string; - /** + /** * Returns the Unicode value of the character at the specified location. * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned. */ @@ -295,12 +292,12 @@ interface String { /** * Returns a string that contains the concatenation of two or more strings. - * @param strings The strings to append to the end of the string. + * @param strings The strings to append to the end of the string. */ concat(...strings: string[]): string; /** - * Returns the position of the first occurrence of a substring. + * Returns the position of the first occurrence of a substring. * @param searchString The substring to search for in the string * @param position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string. */ @@ -319,15 +316,15 @@ interface String { */ localeCompare(that: string): number; - /** + /** * Matches a string with a regular expression, and returns an array containing the results of that search. * @param regexp A variable name or string literal containing the regular expression pattern and flags. */ match(regexp: string): RegExpMatchArray | null; - /** + /** * Matches a string with a regular expression, and returns an array containing the results of that search. - * @param regexp A regular expression object that contains the regular expression pattern and applicable flags. + * @param regexp A regular expression object that contains the regular expression pattern and applicable flags. */ match(regexp: RegExp): RegExpMatchArray | null; @@ -361,40 +358,40 @@ interface String { /** * Finds the first substring match in a regular expression search. - * @param regexp The regular expression pattern and applicable flags. + * @param regexp The regular expression pattern and applicable flags. */ search(regexp: string): number; /** * Finds the first substring match in a regular expression search. - * @param regexp The regular expression pattern and applicable flags. + * @param regexp The regular expression pattern and applicable flags. */ search(regexp: RegExp): number; /** * Returns a section of a string. - * @param start The index to the beginning of the specified portion of stringObj. - * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end. + * @param start The index to the beginning of the specified portion of stringObj. + * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end. * If this value is not specified, the substring continues to the end of stringObj. */ slice(start?: number, end?: number): string; /** * Split a string into substrings using the specified separator and return them as an array. - * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. + * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. * @param limit A value used to limit the number of elements returned in the array. */ split(separator: string, limit?: number): string[]; /** * Split a string into substrings using the specified separator and return them as an array. - * @param separator A Regular Express that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. + * @param separator A Regular Express that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. * @param limit A value used to limit the number of elements returned in the array. */ split(separator: RegExp, limit?: number): string[]; /** - * Returns the substring at the specified location within a String object. + * Returns the substring at the specified location within a String object. * @param start The zero-based index number indicating the beginning of the substring. * @param end Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end. * If end is omitted, the characters from start through the end of the original string are returned. @@ -440,8 +437,8 @@ interface StringConstructor { fromCharCode(...codes: number[]): string; } -/** - * Allows manipulation and formatting of text strings and determination and location of substrings within strings. +/** + * Allows manipulation and formatting of text strings and determination and location of substrings within strings. */ declare const String: StringConstructor; @@ -465,7 +462,7 @@ interface Number { */ toString(radix?: number): string; - /** + /** * Returns a string representing a number in fixed-point notation. * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. */ @@ -498,21 +495,21 @@ interface NumberConstructor { /** The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324. */ readonly MIN_VALUE: number; - /** + /** * A value that is not a number. * In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function. */ readonly NaN: number; - /** + /** * A value that is less than the largest negative number that can be represented in JavaScript. - * JavaScript displays NEGATIVE_INFINITY values as -infinity. + * JavaScript displays NEGATIVE_INFINITY values as -infinity. */ readonly NEGATIVE_INFINITY: number; /** - * A value greater than the largest number that can be represented in JavaScript. - * JavaScript displays POSITIVE_INFINITY values as infinity. + * A value greater than the largest number that can be represented in JavaScript. + * JavaScript displays POSITIVE_INFINITY values as infinity. */ readonly POSITIVE_INFINITY: number; } @@ -542,23 +539,23 @@ interface Math { /** The square root of 2. */ readonly SQRT2: number; /** - * Returns the absolute value of a number (the value without regard to whether it is positive or negative). + * Returns the absolute value of a number (the value without regard to whether it is positive or negative). * For example, the absolute value of -5 is the same as the absolute value of 5. * @param x A numeric expression for which the absolute value is needed. */ abs(x: number): number; /** - * Returns the arc cosine (or inverse cosine) of a number. + * Returns the arc cosine (or inverse cosine) of a number. * @param x A numeric expression. */ acos(x: number): number; - /** - * Returns the arcsine of a number. + /** + * Returns the arcsine of a number. * @param x A numeric expression. */ asin(x: number): number; /** - * Returns the arctangent of a number. + * Returns the arctangent of a number. * @param x A numeric expression for which the arctangent is needed. */ atan(x: number): number; @@ -569,49 +566,49 @@ interface Math { */ atan2(y: number, x: number): number; /** - * Returns the smallest number greater than or equal to its numeric argument. + * Returns the smallest number greater than or equal to its numeric argument. * @param x A numeric expression. */ ceil(x: number): number; /** - * Returns the cosine of a number. + * Returns the cosine of a number. * @param x A numeric expression that contains an angle measured in radians. */ cos(x: number): number; /** - * Returns e (the base of natural logarithms) raised to a power. + * Returns e (the base of natural logarithms) raised to a power. * @param x A numeric expression representing the power of e. */ exp(x: number): number; /** - * Returns the greatest number less than or equal to its numeric argument. + * Returns the greatest number less than or equal to its numeric argument. * @param x A numeric expression. */ floor(x: number): number; /** - * Returns the natural logarithm (base e) of a number. + * Returns the natural logarithm (base e) of a number. * @param x A numeric expression. */ log(x: number): number; /** - * Returns the larger of a set of supplied numeric expressions. + * Returns the larger of a set of supplied numeric expressions. * @param values Numeric expressions to be evaluated. */ max(...values: number[]): number; /** - * Returns the smaller of a set of supplied numeric expressions. + * Returns the smaller of a set of supplied numeric expressions. * @param values Numeric expressions to be evaluated. */ min(...values: number[]): number; /** - * Returns the value of a base expression taken to a specified power. + * Returns the value of a base expression taken to a specified power. * @param x The base value of the expression. * @param y The exponent value of the expression. */ pow(x: number, y: number): number; /** Returns a pseudorandom number between 0 and 1. */ random(): number; - /** + /** * Returns a supplied numeric expression rounded to the nearest number. * @param x The value to be rounded to the nearest number. */ @@ -687,24 +684,24 @@ interface Date { getUTCMilliseconds(): number; /** Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). */ getTimezoneOffset(): number; - /** + /** * Sets the date and time value in the Date object. - * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT. + * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT. */ setTime(time: number): number; /** - * Sets the milliseconds value in the Date object using local time. + * Sets the milliseconds value in the Date object using local time. * @param ms A numeric value equal to the millisecond value. */ setMilliseconds(ms: number): number; - /** + /** * Sets the milliseconds value in the Date object using Universal Coordinated Time (UTC). - * @param ms A numeric value equal to the millisecond value. + * @param ms A numeric value equal to the millisecond value. */ setUTCMilliseconds(ms: number): number; /** - * Sets the seconds value in the Date object using local time. + * Sets the seconds value in the Date object using local time. * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ @@ -716,16 +713,16 @@ interface Date { */ setUTCSeconds(sec: number, ms?: number): number; /** - * Sets the minutes value in the Date object using local time. - * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. + * Sets the minutes value in the Date object using local time. + * @param min A numeric value equal to the minutes value. + * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ setMinutes(min: number, sec?: number, ms?: number): number; /** * Sets the minutes value in the Date object using Universal Coordinated Time (UTC). - * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. + * @param min A numeric value equal to the minutes value. + * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ setUTCMinutes(min: number, sec?: number, ms?: number): number; @@ -733,7 +730,7 @@ interface Date { * Sets the hour value in the Date object using local time. * @param hours A numeric value equal to the hours value. * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. + * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ setHours(hours: number, min?: number, sec?: number, ms?: number): number; @@ -741,23 +738,23 @@ interface Date { * Sets the hours value in the Date object using Universal Coordinated Time (UTC). * @param hours A numeric value equal to the hours value. * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. + * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ setUTCHours(hours: number, min?: number, sec?: number, ms?: number): number; /** - * Sets the numeric day-of-the-month value of the Date object using local time. + * Sets the numeric day-of-the-month value of the Date object using local time. * @param date A numeric value equal to the day of the month. */ setDate(date: number): number; - /** + /** * Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC). - * @param date A numeric value equal to the day of the month. + * @param date A numeric value equal to the day of the month. */ setUTCDate(date: number): number; - /** - * Sets the month value in the Date object using local time. - * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. + /** + * Sets the month value in the Date object using local time. + * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. * @param date A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used. */ setMonth(month: number, date?: number): number; @@ -802,7 +799,7 @@ interface DateConstructor { */ parse(s: string): number; /** - * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. + * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year. * @param month The month as an number between 0 and 11 (January to December). * @param date The date as an number between 1 and 31. @@ -828,13 +825,13 @@ interface RegExpExecArray extends Array { } interface RegExp { - /** + /** * Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search. * @param string The String object or string literal on which to perform the search. */ exec(string: string): RegExpExecArray | null; - /** + /** * Returns a Boolean value that indicates whether or not a pattern exists in a searched string. * @param string String on which to perform the search. */ @@ -859,7 +856,9 @@ interface RegExp { } interface RegExpConstructor { + new (pattern: RegExp): RegExp; new (pattern: string, flags?: string): RegExp; + (pattern: RegExp): RegExp; (pattern: string, flags?: string): RegExp; readonly prototype: RegExp; @@ -881,6 +880,7 @@ declare const RegExp: RegExpConstructor; interface Error { name: string; message: string; + stack?: string; } interface ErrorConstructor { @@ -961,8 +961,8 @@ interface JSON { /** * Converts a JavaScript Object Notation (JSON) string into an object. * @param text A valid JSON string. - * @param reviver A function that transforms the results. This function is called for each member of the object. - * If a member contains nested objects, the nested objects are transformed before the parent object is. + * @param reviver A function that transforms the results. This function is called for each member of the object. + * If a member contains nested objects, the nested objects are transformed before the parent object is. */ parse(text: string, reviver?: (key: any, value: any) => any): any; /** @@ -1065,22 +1065,22 @@ interface ReadonlyArray { some(callbackfn: (value: T, index: number, array: ReadonlyArray) => boolean, thisArg?: any): boolean; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: T, index: number, array: ReadonlyArray) => void, thisArg?: any): void; /** * Calls a defined callback function on each element of an array, and returns an array that contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: T, index: number, array: ReadonlyArray) => U, thisArg?: any): U[]; /** * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: T, index: number, array: ReadonlyArray) => boolean, thisArg?: any): T[]; + filter(callbackfn: (value: T, index: number, array: ReadonlyArray) => any, thisArg?: any): T[]; /** * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. @@ -1095,13 +1095,13 @@ interface ReadonlyArray { reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray) => U, initialValue: U): U; /** * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T, initialValue?: T): T; /** * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray) => U, initialValue: U): U; @@ -1139,14 +1139,14 @@ interface Array { */ join(separator?: string): string; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): T[]; /** * Removes the first element from an array and returns it. */ shift(): T | undefined; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -1156,7 +1156,7 @@ interface Array { * Sorts an array. * @param compareFn The name of the function used to determine the order of the elements. If omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: T, b: T) => number): T[]; + sort(compareFn?: (a: T, b: T) => number): this; /** * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. * @param start The zero-based location in the array from which to start removing elements. @@ -1200,22 +1200,22 @@ interface Array { some(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; /** * Calls a defined callback function on each element of an array, and returns an array that contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): T[]; + filter(callbackfn: (value: T, index: number, array: T[]) => any, thisArg?: any): T[]; /** * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. @@ -1228,15 +1228,15 @@ interface Array { * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; - /** + /** * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; - /** + /** * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; @@ -1290,10 +1290,10 @@ interface ArrayLike { } /** - * Represents a raw buffer of binary data, which is used to store data for the - * different typed arrays. ArrayBuffers cannot be read from or written to directly, - * but can be passed to a typed array or DataView Object to interpret the raw - * buffer as needed. + * Represents a raw buffer of binary data, which is used to store data for the + * different typed arrays. ArrayBuffers cannot be read from or written to directly, + * but can be passed to a typed array or DataView Object to interpret the raw + * buffer as needed. */ interface ArrayBuffer { /** @@ -1316,7 +1316,7 @@ declare const ArrayBuffer: ArrayBufferConstructor; interface ArrayBufferView { /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ buffer: ArrayBuffer; @@ -1336,124 +1336,124 @@ interface DataView { readonly byteLength: number; readonly byteOffset: number; /** - * Gets the Float32 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Float32 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getFloat32(byteOffset: number, littleEndian?: boolean): number; /** * Gets the Float64 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getFloat64(byteOffset: number, littleEndian?: boolean): number; /** - * Gets the Int8 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Int8 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getInt8(byteOffset: number): number; /** - * Gets the Int16 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Int16 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getInt16(byteOffset: number, littleEndian?: boolean): number; /** - * Gets the Int32 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Int32 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getInt32(byteOffset: number, littleEndian?: boolean): number; /** - * Gets the Uint8 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Uint8 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getUint8(byteOffset: number): number; /** - * Gets the Uint16 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Uint16 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getUint16(byteOffset: number, littleEndian?: boolean): number; /** - * Gets the Uint32 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Uint32 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getUint32(byteOffset: number, littleEndian?: boolean): number; /** - * Stores an Float32 value at the specified byte offset from the start of the view. + * Stores an Float32 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setFloat32(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Float64 value at the specified byte offset from the start of the view. + * Stores an Float64 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setFloat64(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Int8 value at the specified byte offset from the start of the view. + * Stores an Int8 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. */ setInt8(byteOffset: number, value: number): void; /** - * Stores an Int16 value at the specified byte offset from the start of the view. + * Stores an Int16 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setInt16(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Int32 value at the specified byte offset from the start of the view. + * Stores an Int32 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setInt32(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Uint8 value at the specified byte offset from the start of the view. + * Stores an Uint8 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. */ setUint8(byteOffset: number, value: number): void; /** - * Stores an Uint16 value at the specified byte offset from the start of the view. + * Stores an Uint16 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setUint16(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Uint32 value at the specified byte offset from the start of the view. + * Stores an Uint32 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setUint32(byteOffset: number, value: number, littleEndian?: boolean): void; @@ -1465,17 +1465,17 @@ interface DataViewConstructor { declare const DataView: DataViewConstructor; /** - * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested + * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested * number of bytes could not be allocated an exception is raised. */ interface Int8Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -1489,21 +1489,21 @@ interface Int8Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Int8Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -1513,49 +1513,49 @@ interface Int8Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Int8Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): Int8Array; + filter(callbackfn: (value: number, index: number, array: Int8Array) => any, thisArg?: any): Int8Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Int8Array) => void, thisArg?: any): void; @@ -1570,7 +1570,7 @@ interface Int8Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -1578,7 +1578,7 @@ interface Int8Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -1589,65 +1589,65 @@ interface Int8Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Int8Array) => number, thisArg?: any): Int8Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Int8Array; @@ -1665,7 +1665,7 @@ interface Int8Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -1674,31 +1674,31 @@ interface Int8Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Int8Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Int8Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Int8Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -1716,7 +1716,7 @@ interface Int8ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int8Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -1725,7 +1725,7 @@ interface Int8ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Int8Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -1738,17 +1738,17 @@ interface Int8ArrayConstructor { declare const Int8Array: Int8ArrayConstructor; /** - * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the + * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Uint8Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -1762,21 +1762,21 @@ interface Uint8Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Uint8Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -1786,49 +1786,49 @@ interface Uint8Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Uint8Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): Uint8Array; + filter(callbackfn: (value: number, index: number, array: Uint8Array) => any, thisArg?: any): Uint8Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Uint8Array) => void, thisArg?: any): void; @@ -1843,7 +1843,7 @@ interface Uint8Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -1851,7 +1851,7 @@ interface Uint8Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -1862,65 +1862,65 @@ interface Uint8Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Uint8Array) => number, thisArg?: any): Uint8Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Uint8Array; @@ -1938,7 +1938,7 @@ interface Uint8Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -1947,31 +1947,31 @@ interface Uint8Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Uint8Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Uint8Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Uint8Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -1990,7 +1990,7 @@ interface Uint8ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -1999,7 +1999,7 @@ interface Uint8ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Uint8Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -2012,17 +2012,17 @@ interface Uint8ArrayConstructor { declare const Uint8Array: Uint8ArrayConstructor; /** - * A typed array of 8-bit unsigned integer (clamped) values. The contents are initialized to 0. + * A typed array of 8-bit unsigned integer (clamped) values. The contents are initialized to 0. * If the requested number of bytes could not be allocated an exception is raised. */ interface Uint8ClampedArray { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -2036,21 +2036,21 @@ interface Uint8ClampedArray { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Uint8ClampedArray; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -2060,49 +2060,49 @@ interface Uint8ClampedArray { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Uint8ClampedArray; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): Uint8ClampedArray; + filter(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => any, thisArg?: any): Uint8ClampedArray; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => void, thisArg?: any): void; @@ -2117,7 +2117,7 @@ interface Uint8ClampedArray { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -2125,7 +2125,7 @@ interface Uint8ClampedArray { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -2136,65 +2136,65 @@ interface Uint8ClampedArray { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => number, thisArg?: any): Uint8ClampedArray; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Uint8ClampedArray; @@ -2212,7 +2212,7 @@ interface Uint8ClampedArray { */ set(array: Uint8ClampedArray, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -2221,31 +2221,31 @@ interface Uint8ClampedArray { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Uint8ClampedArray; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Uint8ClampedArray view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Uint8ClampedArray; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -2264,7 +2264,7 @@ interface Uint8ClampedArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8ClampedArray; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -2285,17 +2285,17 @@ interface Uint8ClampedArrayConstructor { declare const Uint8ClampedArray: Uint8ClampedArrayConstructor; /** - * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the + * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Int16Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -2309,21 +2309,21 @@ interface Int16Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Int16Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -2333,49 +2333,49 @@ interface Int16Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Int16Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): Int16Array; + filter(callbackfn: (value: number, index: number, array: Int16Array) => any, thisArg?: any): Int16Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Int16Array) => void, thisArg?: any): void; @@ -2390,7 +2390,7 @@ interface Int16Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -2398,7 +2398,7 @@ interface Int16Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -2409,65 +2409,65 @@ interface Int16Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Int16Array) => number, thisArg?: any): Int16Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Int16Array; @@ -2485,7 +2485,7 @@ interface Int16Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -2494,31 +2494,31 @@ interface Int16Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Int16Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Int16Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Int16Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -2537,7 +2537,7 @@ interface Int16ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int16Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -2546,7 +2546,7 @@ interface Int16ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Int16Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -2559,17 +2559,17 @@ interface Int16ArrayConstructor { declare const Int16Array: Int16ArrayConstructor; /** - * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the + * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Uint16Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -2583,21 +2583,21 @@ interface Uint16Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Uint16Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -2607,49 +2607,49 @@ interface Uint16Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Uint16Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): Uint16Array; + filter(callbackfn: (value: number, index: number, array: Uint16Array) => any, thisArg?: any): Uint16Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Uint16Array) => void, thisArg?: any): void; @@ -2664,7 +2664,7 @@ interface Uint16Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -2672,7 +2672,7 @@ interface Uint16Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -2683,65 +2683,65 @@ interface Uint16Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Uint16Array) => number, thisArg?: any): Uint16Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Uint16Array; @@ -2759,7 +2759,7 @@ interface Uint16Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -2768,31 +2768,31 @@ interface Uint16Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Uint16Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Uint16Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Uint16Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -2811,7 +2811,7 @@ interface Uint16ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint16Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -2820,7 +2820,7 @@ interface Uint16ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Uint16Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -2832,17 +2832,17 @@ interface Uint16ArrayConstructor { } declare const Uint16Array: Uint16ArrayConstructor; /** - * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the + * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Int32Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -2856,21 +2856,21 @@ interface Int32Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Int32Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -2880,49 +2880,49 @@ interface Int32Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Int32Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): Int32Array; + filter(callbackfn: (value: number, index: number, array: Int32Array) => any, thisArg?: any): Int32Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Int32Array) => void, thisArg?: any): void; @@ -2937,7 +2937,7 @@ interface Int32Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -2945,7 +2945,7 @@ interface Int32Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -2956,65 +2956,65 @@ interface Int32Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Int32Array) => number, thisArg?: any): Int32Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Int32Array; @@ -3032,7 +3032,7 @@ interface Int32Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -3041,31 +3041,31 @@ interface Int32Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Int32Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Int32Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Int32Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -3084,7 +3084,7 @@ interface Int32ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int32Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -3093,7 +3093,7 @@ interface Int32ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Int32Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -3105,17 +3105,17 @@ interface Int32ArrayConstructor { declare const Int32Array: Int32ArrayConstructor; /** - * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the + * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Uint32Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -3129,21 +3129,21 @@ interface Uint32Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Uint32Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -3153,49 +3153,49 @@ interface Uint32Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Uint32Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): Uint32Array; + filter(callbackfn: (value: number, index: number, array: Uint32Array) => any, thisArg?: any): Uint32Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Uint32Array) => void, thisArg?: any): void; @@ -3210,7 +3210,7 @@ interface Uint32Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -3218,7 +3218,7 @@ interface Uint32Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -3229,65 +3229,65 @@ interface Uint32Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Uint32Array) => number, thisArg?: any): Uint32Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Uint32Array; @@ -3305,7 +3305,7 @@ interface Uint32Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -3314,31 +3314,31 @@ interface Uint32Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Uint32Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Uint32Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Uint32Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -3357,7 +3357,7 @@ interface Uint32ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint32Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -3366,7 +3366,7 @@ interface Uint32ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Uint32Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -3383,12 +3383,12 @@ declare const Uint32Array: Uint32ArrayConstructor; */ interface Float32Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -3402,21 +3402,21 @@ interface Float32Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Float32Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -3426,49 +3426,49 @@ interface Float32Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Float32Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): Float32Array; + filter(callbackfn: (value: number, index: number, array: Float32Array) => any, thisArg?: any): Float32Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Float32Array) => void, thisArg?: any): void; @@ -3483,7 +3483,7 @@ interface Float32Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -3491,7 +3491,7 @@ interface Float32Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -3502,65 +3502,65 @@ interface Float32Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Float32Array) => number, thisArg?: any): Float32Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Float32Array; @@ -3578,7 +3578,7 @@ interface Float32Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -3587,31 +3587,31 @@ interface Float32Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Float32Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Float32Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Float32Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -3630,7 +3630,7 @@ interface Float32ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float32Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -3639,7 +3639,7 @@ interface Float32ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Float32Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -3652,17 +3652,17 @@ interface Float32ArrayConstructor { declare const Float32Array: Float32ArrayConstructor; /** - * A typed array of 64-bit float values. The contents are initialized to 0. If the requested + * A typed array of 64-bit float values. The contents are initialized to 0. If the requested * number of bytes could not be allocated an exception is raised. */ interface Float64Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -3676,21 +3676,21 @@ interface Float64Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Float64Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -3700,49 +3700,49 @@ interface Float64Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Float64Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): Float64Array; + filter(callbackfn: (value: number, index: number, array: Float64Array) => any, thisArg?: any): Float64Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Float64Array) => void, thisArg?: any): void; @@ -3757,7 +3757,7 @@ interface Float64Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -3765,7 +3765,7 @@ interface Float64Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -3776,65 +3776,65 @@ interface Float64Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Float64Array) => number, thisArg?: any): Float64Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Float64Array; @@ -3852,7 +3852,7 @@ interface Float64Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -3861,31 +3861,31 @@ interface Float64Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Float64Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Float64Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Float64Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -3904,7 +3904,7 @@ interface Float64ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float64Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -3913,7 +3913,7 @@ interface Float64ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Float64Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -3925,7 +3925,7 @@ interface Float64ArrayConstructor { declare const Float64Array: Float64ArrayConstructor; ///////////////////////////// -/// ECMAScript Internationalization API +/// ECMAScript Internationalization API ///////////////////////////// declare module Intl { @@ -4068,14 +4068,14 @@ interface String { interface Number { /** - * Converts a number to a string by using the current or specified locale. + * Converts a number to a string by using the current or specified locale. * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleString(locales?: string[], options?: Intl.NumberFormatOptions): string; /** - * Converts a number to a string by using the current or specified locale. + * Converts a number to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ @@ -4084,46 +4084,47 @@ interface Number { interface Date { /** - * Converts a date and time to a string by using the current or specified locale. + * Converts a date and time to a string by using the current or specified locale. * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleString(locales?: string[], options?: Intl.DateTimeFormatOptions): string; /** - * Converts a date to a string by using the current or specified locale. + * Converts a date to a string by using the current or specified locale. * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleDateString(locales?: string[], options?: Intl.DateTimeFormatOptions): string; /** - * Converts a time to a string by using the current or specified locale. + * Converts a time to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleTimeString(locale?: string[], options?: Intl.DateTimeFormatOptions): string; - + /** - * Converts a date and time to a string by using the current or specified locale. + * Converts a date and time to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleString(locale?: string, options?: Intl.DateTimeFormatOptions): string; - + /** - * Converts a date to a string by using the current or specified locale. + * Converts a date to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleDateString(locale?: string, options?: Intl.DateTimeFormatOptions): string; /** - * Converts a time to a string by using the current or specified locale. + * Converts a time to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleTimeString(locale?: string, options?: Intl.DateTimeFormatOptions): string; } + ///////////////////////////// /// IE DOM APIs ///////////////////////////// @@ -5083,7 +5084,7 @@ declare var ApplicationCache: { interface AriaRequestEvent extends Event { readonly attributeName: string; - attributeValue: string; + attributeValue: string | null; } declare var AriaRequestEvent: { @@ -5094,7 +5095,7 @@ declare var AriaRequestEvent: { interface Attr extends Node { readonly name: string; readonly ownerElement: Element; - readonly prefix: string; + readonly prefix: string | null; readonly specified: boolean; value: string; } @@ -5120,7 +5121,7 @@ declare var AudioBuffer: { } interface AudioBufferSourceNode extends AudioNode { - buffer: AudioBuffer; + buffer: AudioBuffer | null; readonly detune: AudioParam; loop: boolean; loopEnd: number; @@ -5256,7 +5257,7 @@ interface AudioTrackList extends EventTarget { onaddtrack: (ev: TrackEvent) => any; onchange: (ev: Event) => any; onremovetrack: (ev: TrackEvent) => any; - getTrackById(id: string): AudioTrack; + getTrackById(id: string): AudioTrack | null; item(index: number): AudioTrack; addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; @@ -5470,343 +5471,343 @@ declare var CSSRuleList: { } interface CSSStyleDeclaration { - alignContent: string; - alignItems: string; - alignSelf: string; - alignmentBaseline: string; - animation: string; - animationDelay: string; - animationDirection: string; - animationDuration: string; - animationFillMode: string; - animationIterationCount: string; - animationName: string; - animationPlayState: string; - animationTimingFunction: string; - backfaceVisibility: string; - background: string; - backgroundAttachment: string; - backgroundClip: string; - backgroundColor: string; - backgroundImage: string; - backgroundOrigin: string; - backgroundPosition: string; - backgroundPositionX: string; - backgroundPositionY: string; - backgroundRepeat: string; - backgroundSize: string; - baselineShift: string; - border: string; - borderBottom: string; - borderBottomColor: string; - borderBottomLeftRadius: string; - borderBottomRightRadius: string; - borderBottomStyle: string; - borderBottomWidth: string; - borderCollapse: string; - borderColor: string; - borderImage: string; - borderImageOutset: string; - borderImageRepeat: string; - borderImageSlice: string; - borderImageSource: string; - borderImageWidth: string; - borderLeft: string; - borderLeftColor: string; - borderLeftStyle: string; - borderLeftWidth: string; - borderRadius: string; - borderRight: string; - borderRightColor: string; - borderRightStyle: string; - borderRightWidth: string; - borderSpacing: string; - borderStyle: string; - borderTop: string; - borderTopColor: string; - borderTopLeftRadius: string; - borderTopRightRadius: string; - borderTopStyle: string; - borderTopWidth: string; - borderWidth: string; - bottom: string; - boxShadow: string; - boxSizing: string; - breakAfter: string; - breakBefore: string; - breakInside: string; - captionSide: string; - clear: string; - clip: string; - clipPath: string; - clipRule: string; - color: string; - colorInterpolationFilters: string; + alignContent: string | null; + alignItems: string | null; + alignSelf: string | null; + alignmentBaseline: string | null; + animation: string | null; + animationDelay: string | null; + animationDirection: string | null; + animationDuration: string | null; + animationFillMode: string | null; + animationIterationCount: string | null; + animationName: string | null; + animationPlayState: string | null; + animationTimingFunction: string | null; + backfaceVisibility: string | null; + background: string | null; + backgroundAttachment: string | null; + backgroundClip: string | null; + backgroundColor: string | null; + backgroundImage: string | null; + backgroundOrigin: string | null; + backgroundPosition: string | null; + backgroundPositionX: string | null; + backgroundPositionY: string | null; + backgroundRepeat: string | null; + backgroundSize: string | null; + baselineShift: string | null; + border: string | null; + borderBottom: string | null; + borderBottomColor: string | null; + borderBottomLeftRadius: string | null; + borderBottomRightRadius: string | null; + borderBottomStyle: string | null; + borderBottomWidth: string | null; + borderCollapse: string | null; + borderColor: string | null; + borderImage: string | null; + borderImageOutset: string | null; + borderImageRepeat: string | null; + borderImageSlice: string | null; + borderImageSource: string | null; + borderImageWidth: string | null; + borderLeft: string | null; + borderLeftColor: string | null; + borderLeftStyle: string | null; + borderLeftWidth: string | null; + borderRadius: string | null; + borderRight: string | null; + borderRightColor: string | null; + borderRightStyle: string | null; + borderRightWidth: string | null; + borderSpacing: string | null; + borderStyle: string | null; + borderTop: string | null; + borderTopColor: string | null; + borderTopLeftRadius: string | null; + borderTopRightRadius: string | null; + borderTopStyle: string | null; + borderTopWidth: string | null; + borderWidth: string | null; + bottom: string | null; + boxShadow: string | null; + boxSizing: string | null; + breakAfter: string | null; + breakBefore: string | null; + breakInside: string | null; + captionSide: string | null; + clear: string | null; + clip: string | null; + clipPath: string | null; + clipRule: string | null; + color: string | null; + colorInterpolationFilters: string | null; columnCount: any; - columnFill: string; + columnFill: string | null; columnGap: any; - columnRule: string; + columnRule: string | null; columnRuleColor: any; - columnRuleStyle: string; + columnRuleStyle: string | null; columnRuleWidth: any; - columnSpan: string; + columnSpan: string | null; columnWidth: any; - columns: string; - content: string; - counterIncrement: string; - counterReset: string; - cssFloat: string; + columns: string | null; + content: string | null; + counterIncrement: string | null; + counterReset: string | null; + cssFloat: string | null; cssText: string; - cursor: string; - direction: string; - display: string; - dominantBaseline: string; - emptyCells: string; - enableBackground: string; - fill: string; - fillOpacity: string; - fillRule: string; - filter: string; - flex: string; - flexBasis: string; - flexDirection: string; - flexFlow: string; - flexGrow: string; - flexShrink: string; - flexWrap: string; - floodColor: string; - floodOpacity: string; - font: string; - fontFamily: string; - fontFeatureSettings: string; - fontSize: string; - fontSizeAdjust: string; - fontStretch: string; - fontStyle: string; - fontVariant: string; - fontWeight: string; - glyphOrientationHorizontal: string; - glyphOrientationVertical: string; - height: string; - imeMode: string; - justifyContent: string; - kerning: string; - left: string; + cursor: string | null; + direction: string | null; + display: string | null; + dominantBaseline: string | null; + emptyCells: string | null; + enableBackground: string | null; + fill: string | null; + fillOpacity: string | null; + fillRule: string | null; + filter: string | null; + flex: string | null; + flexBasis: string | null; + flexDirection: string | null; + flexFlow: string | null; + flexGrow: string | null; + flexShrink: string | null; + flexWrap: string | null; + floodColor: string | null; + floodOpacity: string | null; + font: string | null; + fontFamily: string | null; + fontFeatureSettings: string | null; + fontSize: string | null; + fontSizeAdjust: string | null; + fontStretch: string | null; + fontStyle: string | null; + fontVariant: string | null; + fontWeight: string | null; + glyphOrientationHorizontal: string | null; + glyphOrientationVertical: string | null; + height: string | null; + imeMode: string | null; + justifyContent: string | null; + kerning: string | null; + left: string | null; readonly length: number; - letterSpacing: string; - lightingColor: string; - lineHeight: string; - listStyle: string; - listStyleImage: string; - listStylePosition: string; - listStyleType: string; - margin: string; - marginBottom: string; - marginLeft: string; - marginRight: string; - marginTop: string; - marker: string; - markerEnd: string; - markerMid: string; - markerStart: string; - mask: string; - maxHeight: string; - maxWidth: string; - minHeight: string; - minWidth: string; - msContentZoomChaining: string; - msContentZoomLimit: string; + letterSpacing: string | null; + lightingColor: string | null; + lineHeight: string | null; + listStyle: string | null; + listStyleImage: string | null; + listStylePosition: string | null; + listStyleType: string | null; + margin: string | null; + marginBottom: string | null; + marginLeft: string | null; + marginRight: string | null; + marginTop: string | null; + marker: string | null; + markerEnd: string | null; + markerMid: string | null; + markerStart: string | null; + mask: string | null; + maxHeight: string | null; + maxWidth: string | null; + minHeight: string | null; + minWidth: string | null; + msContentZoomChaining: string | null; + msContentZoomLimit: string | null; msContentZoomLimitMax: any; msContentZoomLimitMin: any; - msContentZoomSnap: string; - msContentZoomSnapPoints: string; - msContentZoomSnapType: string; - msContentZooming: string; - msFlowFrom: string; - msFlowInto: string; - msFontFeatureSettings: string; + msContentZoomSnap: string | null; + msContentZoomSnapPoints: string | null; + msContentZoomSnapType: string | null; + msContentZooming: string | null; + msFlowFrom: string | null; + msFlowInto: string | null; + msFontFeatureSettings: string | null; msGridColumn: any; - msGridColumnAlign: string; + msGridColumnAlign: string | null; msGridColumnSpan: any; - msGridColumns: string; + msGridColumns: string | null; msGridRow: any; - msGridRowAlign: string; + msGridRowAlign: string | null; msGridRowSpan: any; - msGridRows: string; - msHighContrastAdjust: string; - msHyphenateLimitChars: string; + msGridRows: string | null; + msHighContrastAdjust: string | null; + msHyphenateLimitChars: string | null; msHyphenateLimitLines: any; msHyphenateLimitZone: any; - msHyphens: string; - msImeAlign: string; - msOverflowStyle: string; - msScrollChaining: string; - msScrollLimit: string; + msHyphens: string | null; + msImeAlign: string | null; + msOverflowStyle: string | null; + msScrollChaining: string | null; + msScrollLimit: string | null; msScrollLimitXMax: any; msScrollLimitXMin: any; msScrollLimitYMax: any; msScrollLimitYMin: any; - msScrollRails: string; - msScrollSnapPointsX: string; - msScrollSnapPointsY: string; - msScrollSnapType: string; - msScrollSnapX: string; - msScrollSnapY: string; - msScrollTranslation: string; - msTextCombineHorizontal: string; + msScrollRails: string | null; + msScrollSnapPointsX: string | null; + msScrollSnapPointsY: string | null; + msScrollSnapType: string | null; + msScrollSnapX: string | null; + msScrollSnapY: string | null; + msScrollTranslation: string | null; + msTextCombineHorizontal: string | null; msTextSizeAdjust: any; - msTouchAction: string; - msTouchSelect: string; - msUserSelect: string; + msTouchAction: string | null; + msTouchSelect: string | null; + msUserSelect: string | null; msWrapFlow: string; msWrapMargin: any; msWrapThrough: string; - opacity: string; - order: string; - orphans: string; - outline: string; - outlineColor: string; - outlineStyle: string; - outlineWidth: string; - overflow: string; - overflowX: string; - overflowY: string; - padding: string; - paddingBottom: string; - paddingLeft: string; - paddingRight: string; - paddingTop: string; - pageBreakAfter: string; - pageBreakBefore: string; - pageBreakInside: string; + opacity: string | null; + order: string | null; + orphans: string | null; + outline: string | null; + outlineColor: string | null; + outlineStyle: string | null; + outlineWidth: string | null; + overflow: string | null; + overflowX: string | null; + overflowY: string | null; + padding: string | null; + paddingBottom: string | null; + paddingLeft: string | null; + paddingRight: string | null; + paddingTop: string | null; + pageBreakAfter: string | null; + pageBreakBefore: string | null; + pageBreakInside: string | null; readonly parentRule: CSSRule; - perspective: string; - perspectiveOrigin: string; - pointerEvents: string; - position: string; - quotes: string; - right: string; - rubyAlign: string; - rubyOverhang: string; - rubyPosition: string; - stopColor: string; - stopOpacity: string; - stroke: string; - strokeDasharray: string; - strokeDashoffset: string; - strokeLinecap: string; - strokeLinejoin: string; - strokeMiterlimit: string; - strokeOpacity: string; - strokeWidth: string; - tableLayout: string; - textAlign: string; - textAlignLast: string; - textAnchor: string; - textDecoration: string; - textIndent: string; - textJustify: string; - textKashida: string; - textKashidaSpace: string; - textOverflow: string; - textShadow: string; - textTransform: string; - textUnderlinePosition: string; - top: string; - touchAction: string; - transform: string; - transformOrigin: string; - transformStyle: string; - transition: string; - transitionDelay: string; - transitionDuration: string; - transitionProperty: string; - transitionTimingFunction: string; - unicodeBidi: string; - verticalAlign: string; - visibility: string; - webkitAlignContent: string; - webkitAlignItems: string; - webkitAlignSelf: string; - webkitAnimation: string; - webkitAnimationDelay: string; - webkitAnimationDirection: string; - webkitAnimationDuration: string; - webkitAnimationFillMode: string; - webkitAnimationIterationCount: string; - webkitAnimationName: string; - webkitAnimationPlayState: string; - webkitAnimationTimingFunction: string; - webkitAppearance: string; - webkitBackfaceVisibility: string; - webkitBackgroundClip: string; - webkitBackgroundOrigin: string; - webkitBackgroundSize: string; - webkitBorderBottomLeftRadius: string; - webkitBorderBottomRightRadius: string; - webkitBorderImage: string; - webkitBorderRadius: string; - webkitBorderTopLeftRadius: string; - webkitBorderTopRightRadius: string; - webkitBoxAlign: string; - webkitBoxDirection: string; - webkitBoxFlex: string; - webkitBoxOrdinalGroup: string; - webkitBoxOrient: string; - webkitBoxPack: string; - webkitBoxSizing: string; - webkitColumnBreakAfter: string; - webkitColumnBreakBefore: string; - webkitColumnBreakInside: string; + perspective: string | null; + perspectiveOrigin: string | null; + pointerEvents: string | null; + position: string | null; + quotes: string | null; + right: string | null; + rubyAlign: string | null; + rubyOverhang: string | null; + rubyPosition: string | null; + stopColor: string | null; + stopOpacity: string | null; + stroke: string | null; + strokeDasharray: string | null; + strokeDashoffset: string | null; + strokeLinecap: string | null; + strokeLinejoin: string | null; + strokeMiterlimit: string | null; + strokeOpacity: string | null; + strokeWidth: string | null; + tableLayout: string | null; + textAlign: string | null; + textAlignLast: string | null; + textAnchor: string | null; + textDecoration: string | null; + textIndent: string | null; + textJustify: string | null; + textKashida: string | null; + textKashidaSpace: string | null; + textOverflow: string | null; + textShadow: string | null; + textTransform: string | null; + textUnderlinePosition: string | null; + top: string | null; + touchAction: string | null; + transform: string | null; + transformOrigin: string | null; + transformStyle: string | null; + transition: string | null; + transitionDelay: string | null; + transitionDuration: string | null; + transitionProperty: string | null; + transitionTimingFunction: string | null; + unicodeBidi: string | null; + verticalAlign: string | null; + visibility: string | null; + webkitAlignContent: string | null; + webkitAlignItems: string | null; + webkitAlignSelf: string | null; + webkitAnimation: string | null; + webkitAnimationDelay: string | null; + webkitAnimationDirection: string | null; + webkitAnimationDuration: string | null; + webkitAnimationFillMode: string | null; + webkitAnimationIterationCount: string | null; + webkitAnimationName: string | null; + webkitAnimationPlayState: string | null; + webkitAnimationTimingFunction: string | null; + webkitAppearance: string | null; + webkitBackfaceVisibility: string | null; + webkitBackgroundClip: string | null; + webkitBackgroundOrigin: string | null; + webkitBackgroundSize: string | null; + webkitBorderBottomLeftRadius: string | null; + webkitBorderBottomRightRadius: string | null; + webkitBorderImage: string | null; + webkitBorderRadius: string | null; + webkitBorderTopLeftRadius: string | null; + webkitBorderTopRightRadius: string | null; + webkitBoxAlign: string | null; + webkitBoxDirection: string | null; + webkitBoxFlex: string | null; + webkitBoxOrdinalGroup: string | null; + webkitBoxOrient: string | null; + webkitBoxPack: string | null; + webkitBoxSizing: string | null; + webkitColumnBreakAfter: string | null; + webkitColumnBreakBefore: string | null; + webkitColumnBreakInside: string | null; webkitColumnCount: any; webkitColumnGap: any; - webkitColumnRule: string; + webkitColumnRule: string | null; webkitColumnRuleColor: any; - webkitColumnRuleStyle: string; + webkitColumnRuleStyle: string | null; webkitColumnRuleWidth: any; - webkitColumnSpan: string; + webkitColumnSpan: string | null; webkitColumnWidth: any; - webkitColumns: string; - webkitFilter: string; - webkitFlex: string; - webkitFlexBasis: string; - webkitFlexDirection: string; - webkitFlexFlow: string; - webkitFlexGrow: string; - webkitFlexShrink: string; - webkitFlexWrap: string; - webkitJustifyContent: string; - webkitOrder: string; - webkitPerspective: string; - webkitPerspectiveOrigin: string; - webkitTapHighlightColor: string; - webkitTextFillColor: string; + webkitColumns: string | null; + webkitFilter: string | null; + webkitFlex: string | null; + webkitFlexBasis: string | null; + webkitFlexDirection: string | null; + webkitFlexFlow: string | null; + webkitFlexGrow: string | null; + webkitFlexShrink: string | null; + webkitFlexWrap: string | null; + webkitJustifyContent: string | null; + webkitOrder: string | null; + webkitPerspective: string | null; + webkitPerspectiveOrigin: string | null; + webkitTapHighlightColor: string | null; + webkitTextFillColor: string | null; webkitTextSizeAdjust: any; - webkitTransform: string; - webkitTransformOrigin: string; - webkitTransformStyle: string; - webkitTransition: string; - webkitTransitionDelay: string; - webkitTransitionDuration: string; - webkitTransitionProperty: string; - webkitTransitionTimingFunction: string; - webkitUserModify: string; - webkitUserSelect: string; - webkitWritingMode: string; - whiteSpace: string; - widows: string; - width: string; - wordBreak: string; - wordSpacing: string; - wordWrap: string; - writingMode: string; - zIndex: string; - zoom: string; + webkitTransform: string | null; + webkitTransformOrigin: string | null; + webkitTransformStyle: string | null; + webkitTransition: string | null; + webkitTransitionDelay: string | null; + webkitTransitionDuration: string | null; + webkitTransitionProperty: string | null; + webkitTransitionTimingFunction: string | null; + webkitUserModify: string | null; + webkitUserSelect: string | null; + webkitWritingMode: string | null; + whiteSpace: string | null; + widows: string | null; + width: string | null; + wordBreak: string | null; + wordSpacing: string | null; + wordWrap: string | null; + writingMode: string | null; + zIndex: string | null; + zoom: string | null; getPropertyPriority(propertyName: string): string; getPropertyValue(propertyName: string): string; item(index: number): string; removeProperty(propertyName: string): string; - setProperty(propertyName: string, value: string, priority?: string): void; + setProperty(propertyName: string, value: string | null, priority?: string): void; [index: number]: string; } @@ -5898,6 +5899,9 @@ interface CanvasRenderingContext2D extends Object, CanvasPathMethods { strokeStyle: string | CanvasGradient | CanvasPattern; textAlign: string; textBaseline: string; + mozImageSmoothingEnabled: boolean; + webkitImageSmoothingEnabled: boolean; + oImageSmoothingEnabled: boolean; beginPath(): void; clearRect(x: number, y: number, w: number, h: number): void; clip(fillRule?: string): void; @@ -6012,7 +6016,7 @@ declare var CloseEvent: { interface CommandEvent extends Event { readonly commandName: string; - readonly detail: string; + readonly detail: string | null; } declare var CommandEvent: { @@ -6071,7 +6075,7 @@ declare var Console: { } interface ConvolverNode extends AudioNode { - buffer: AudioBuffer; + buffer: AudioBuffer | null; normalize: boolean; } @@ -6082,12 +6086,12 @@ declare var ConvolverNode: { interface Coordinates { readonly accuracy: number; - readonly altitude: number; - readonly altitudeAccuracy: number; - readonly heading: number; + readonly altitude: number | null; + readonly altitudeAccuracy: number | null; + readonly heading: number | null; readonly latitude: number; readonly longitude: number; - readonly speed: number; + readonly speed: number | null; } declare var Coordinates: { @@ -6213,10 +6217,10 @@ declare var DOMException: { } interface DOMImplementation { - createDocument(namespaceURI: string, qualifiedName: string, doctype: DocumentType): Document; - createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType; + createDocument(namespaceURI: string | null, qualifiedName: string | null, doctype: DocumentType): Document; + createDocumentType(qualifiedName: string, publicId: string | null, systemId: string | null): DocumentType; createHTMLDocument(title: string): Document; - hasFeature(feature: string, version: string): boolean; + hasFeature(feature: string | null, version: string | null): boolean; } declare var DOMImplementation: { @@ -6245,7 +6249,7 @@ declare var DOMSettableTokenList: { interface DOMStringList { readonly length: number; contains(str: string): boolean; - item(index: number): string; + item(index: number): string | null; [index: number]: string; } @@ -6307,8 +6311,8 @@ declare var DataTransfer: { interface DataTransferItem { readonly kind: string; readonly type: string; - getAsFile(): File; - getAsString(_callback: FunctionStringCallback): void; + getAsFile(): File | null; + getAsString(_callback: FunctionStringCallback | null): void; } declare var DataTransferItem: { @@ -6318,7 +6322,7 @@ declare var DataTransferItem: { interface DataTransferItemList { readonly length: number; - add(data: File): DataTransferItem; + add(data: File): DataTransferItem | null; clear(): void; item(index: number): DataTransferItem; remove(index: number): void; @@ -6353,9 +6357,9 @@ declare var DelayNode: { } interface DeviceAcceleration { - readonly x: number; - readonly y: number; - readonly z: number; + readonly x: number | null; + readonly y: number | null; + readonly z: number | null; } declare var DeviceAcceleration: { @@ -6373,11 +6377,11 @@ declare var DeviceLightEvent: { } interface DeviceMotionEvent extends Event { - readonly acceleration: DeviceAcceleration; - readonly accelerationIncludingGravity: DeviceAcceleration; - readonly interval: number; - readonly rotationRate: DeviceRotationRate; - initDeviceMotionEvent(type: string, bubbles: boolean, cancelable: boolean, acceleration: DeviceAccelerationDict, accelerationIncludingGravity: DeviceAccelerationDict, rotationRate: DeviceRotationRateDict, interval: number): void; + readonly acceleration: DeviceAcceleration | null; + readonly accelerationIncludingGravity: DeviceAcceleration | null; + readonly interval: number | null; + readonly rotationRate: DeviceRotationRate | null; + initDeviceMotionEvent(type: string, bubbles: boolean, cancelable: boolean, acceleration: DeviceAccelerationDict | null, accelerationIncludingGravity: DeviceAccelerationDict | null, rotationRate: DeviceRotationRateDict | null, interval: number | null): void; } declare var DeviceMotionEvent: { @@ -6387,10 +6391,10 @@ declare var DeviceMotionEvent: { interface DeviceOrientationEvent extends Event { readonly absolute: boolean; - readonly alpha: number; - readonly beta: number; - readonly gamma: number; - initDeviceOrientationEvent(type: string, bubbles: boolean, cancelable: boolean, alpha: number, beta: number, gamma: number, absolute: boolean): void; + readonly alpha: number | null; + readonly beta: number | null; + readonly gamma: number | null; + initDeviceOrientationEvent(type: string, bubbles: boolean, cancelable: boolean, alpha: number | null, beta: number | null, gamma: number | null, absolute: boolean): void; } declare var DeviceOrientationEvent: { @@ -6399,9 +6403,9 @@ declare var DeviceOrientationEvent: { } interface DeviceRotationRate { - readonly alpha: number; - readonly beta: number; - readonly gamma: number; + readonly alpha: number | null; + readonly beta: number | null; + readonly gamma: number | null; } declare var DeviceRotationRate: { @@ -6494,7 +6498,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Retrieves a collection, in source order, of all form objects in the document. */ forms: HTMLCollectionOf; - readonly fullscreenElement: Element; + readonly fullscreenElement: Element | null; readonly fullscreenEnabled: boolean; readonly head: HTMLHeadElement; readonly hidden: boolean; @@ -6509,7 +6513,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven /** * Returns the character encoding used to create the webpage that is loaded into the document object. */ - readonly inputEncoding: string; + readonly inputEncoding: string | null; /** * Gets the date that the page was last modified, if the page supplies one. */ @@ -6854,7 +6858,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Retrieves a collection of all script objects in the document. */ scripts: HTMLCollectionOf; - readonly scrollingElement: Element; + readonly scrollingElement: Element | null; /** * Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document. */ @@ -6868,16 +6872,16 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Sets or gets the color of the links that the user has visited. */ vlinkColor: string; - readonly webkitCurrentFullScreenElement: Element; - readonly webkitFullscreenElement: Element; + readonly webkitCurrentFullScreenElement: Element | null; + readonly webkitFullscreenElement: Element | null; readonly webkitFullscreenEnabled: boolean; readonly webkitIsFullScreen: boolean; - readonly xmlEncoding: string; + readonly xmlEncoding: string | null; xmlStandalone: boolean; /** * Gets or sets the version attribute specified in the declaration of an XML document. */ - xmlVersion: string; + xmlVersion: string | null; adoptNode(source: Node): Node; captureEvents(): void; caretRangeFromPoint(x: number, y: number): Range; @@ -6891,7 +6895,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param name String that sets the attribute object's name. */ createAttribute(name: string): Attr; - createAttributeNS(namespaceURI: string, qualifiedName: string): Attr; + createAttributeNS(namespaceURI: string | null, qualifiedName: string): Attr; createCDATASection(data: string): CDATASection; /** * Creates a comment object with the specified data. @@ -6987,6 +6991,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven createElement(tagName: "x-ms-webview"): MSHTMLWebViewElement; createElement(tagName: "xmp"): HTMLPreElement; createElement(tagName: string): HTMLElement; + createElementNS(namespaceURI: "http://www.w3.org/1999/xhtml", qualifiedName: string): HTMLElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "a"): SVGAElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "circle"): SVGCircleElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "clipPath"): SVGClipPathElement @@ -7049,7 +7054,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "use"): SVGUseElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "view"): SVGViewElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: string): SVGElement - createElementNS(namespaceURI: string, qualifiedName: string): Element; + createElementNS(namespaceURI: string | null, qualifiedName: string): Element; createExpression(expression: string, resolver: XPathNSResolver): XPathExpression; createNSResolver(nodeResolver: Node): XPathNSResolver; /** @@ -7110,12 +7115,12 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param elementId String that specifies the ID value. Case-insensitive. */ getElementById(elementId: string): HTMLElement; - getElementsByClassName(classNames: string): NodeListOf; + getElementsByClassName(classNames: string): HTMLCollectionOf; /** * Gets a collection of objects based on the value of the NAME or ID attribute. * @param elementName Gets a collection of objects based on the value of the NAME or ID attribute. */ - getElementsByName(elementName: string): NodeListOf; + getElementsByName(elementName: string): NodeListOf; /** * Retrieves a collection of objects based on the specified element name. * @param name Specifies the name of an element. @@ -7297,7 +7302,9 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven getElementsByTagName(tagname: "x-ms-webview"): NodeListOf; getElementsByTagName(tagname: "xmp"): NodeListOf; getElementsByTagName(tagname: string): NodeListOf; - getElementsByTagNameNS(namespaceURI: string, localName: string): NodeListOf; + getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf; + getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf; + getElementsByTagNameNS(namespaceURI: string, localName: string): HTMLCollectionOf; /** * Returns an object representing the current selection of the document that is loaded into the object displaying a webpage. */ @@ -7364,8 +7371,6 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param content The text and HTML tags to write. */ writeln(...content: string[]): void; - createElement(tagName: "picture"): HTMLPictureElement; - getElementsByTagName(tagname: "picture"): NodeListOf; addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void; addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; @@ -7482,11 +7487,11 @@ declare var DocumentFragment: { interface DocumentType extends Node, ChildNode { readonly entities: NamedNodeMap; - readonly internalSubset: string; + readonly internalSubset: string | null; readonly name: string; readonly notations: NamedNodeMap; - readonly publicId: string; - readonly systemId: string; + readonly publicId: string | null; + readonly systemId: string | null; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -7577,14 +7582,14 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec ontouchstart: (ev: TouchEvent) => any; onwebkitfullscreenchange: (ev: Event) => any; onwebkitfullscreenerror: (ev: Event) => any; - readonly prefix: string; + readonly prefix: string | null; readonly scrollHeight: number; scrollLeft: number; scrollTop: number; readonly scrollWidth: number; readonly tagName: string; innerHTML: string; - getAttribute(name?: string): string; + getAttribute(name?: string): string | null; getAttributeNS(namespaceURI: string, localName: string): string; getAttributeNode(name: string): Attr; getAttributeNodeNS(namespaceURI: string, localName: string): Attr; @@ -7767,7 +7772,9 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec getElementsByTagName(name: "x-ms-webview"): NodeListOf; getElementsByTagName(name: "xmp"): NodeListOf; getElementsByTagName(name: string): NodeListOf; - getElementsByTagNameNS(namespaceURI: string, localName: string): NodeListOf; + getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf; + getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf; + getElementsByTagNameNS(namespaceURI: string, localName: string): HTMLCollectionOf; hasAttribute(name: string): boolean; hasAttributeNS(namespaceURI: string, localName: string): boolean; msGetRegionContent(): MSRangeCollection; @@ -7792,7 +7799,6 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec webkitRequestFullscreen(): void; getElementsByClassName(classNames: string): NodeListOf; matches(selector: string): boolean; - getElementsByTagName(tagname: "picture"): NodeListOf; addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; @@ -7860,7 +7866,7 @@ interface Event { readonly eventPhase: number; readonly isTrusted: boolean; returnValue: boolean; - readonly srcElement: Element; + readonly srcElement: Element | null; readonly target: EventTarget; readonly timeStamp: number; readonly type: string; @@ -8155,7 +8161,7 @@ interface HTMLAppletElement extends HTMLElement { * Sets or retrieves the shape of the object. */ name: string; - object: string; + object: string | null; /** * Sets or retrieves a message to be displayed while an object is loading. */ @@ -10210,7 +10216,7 @@ interface HTMLMediaElement extends HTMLElement { * Gets or sets a flag to specify whether playback should restart after it completes. */ loop: boolean; - readonly mediaKeys: MediaKeys; + readonly mediaKeys: MediaKeys | null; /** * Specifies the purpose of the audio or video media, such as background audio or alerts. */ @@ -10283,7 +10289,7 @@ interface HTMLMediaElement extends HTMLElement { * The address or URL of the a media resource that is to be considered. */ src: string; - srcObject: MediaStream; + srcObject: MediaStream | null; readonly textTracks: TextTrackList; readonly videoTracks: VideoTrackList; /** @@ -10321,7 +10327,7 @@ interface HTMLMediaElement extends HTMLElement { * Loads and starts playback of a media resource. */ play(): void; - setMediaKeys(mediaKeys: MediaKeys): PromiseLike; + setMediaKeys(mediaKeys: MediaKeys | null): PromiseLike; readonly HAVE_CURRENT_DATA: number; readonly HAVE_ENOUGH_DATA: number; readonly HAVE_FUTURE_DATA: number; @@ -11633,8 +11639,8 @@ declare var HTMLVideoElement: { } interface HashChangeEvent extends Event { - readonly newURL: string; - readonly oldURL: string; + readonly newURL: string | null; + readonly oldURL: string | null; } declare var HashChangeEvent: { @@ -11840,7 +11846,7 @@ declare var IDBTransaction: { } interface IDBVersionChangeEvent extends Event { - readonly newVersion: number; + readonly newVersion: number | null; readonly oldVersion: number; } @@ -11863,7 +11869,7 @@ declare var ImageData: { interface KeyboardEvent extends UIEvent { readonly altKey: boolean; - readonly char: string; + readonly char: string | null; readonly charCode: number; readonly ctrlKey: boolean; readonly key: string; @@ -12206,7 +12212,7 @@ declare var MSMediaKeyError: { } interface MSMediaKeyMessageEvent extends Event { - readonly destinationURL: string; + readonly destinationURL: string | null; readonly message: Uint8Array; } @@ -12216,7 +12222,7 @@ declare var MSMediaKeyMessageEvent: { } interface MSMediaKeyNeededEvent extends Event { - readonly initData: Uint8Array; + readonly initData: Uint8Array | null; } declare var MSMediaKeyNeededEvent: { @@ -12225,7 +12231,7 @@ declare var MSMediaKeyNeededEvent: { } interface MSMediaKeySession extends EventTarget { - readonly error: MSMediaKeyError; + readonly error: MSMediaKeyError | null; readonly keySystem: string; readonly sessionId: string; close(): void; @@ -12395,7 +12401,7 @@ declare var MediaElementAudioSourceNode: { } interface MediaEncryptedEvent extends Event { - readonly initData: ArrayBuffer; + readonly initData: ArrayBuffer | null; readonly initDataType: string; } @@ -12537,7 +12543,7 @@ interface MediaStream extends EventTarget { addTrack(track: MediaStreamTrack): void; clone(): MediaStream; getAudioTracks(): MediaStreamTrack[]; - getTrackById(trackId: string): MediaStreamTrack; + getTrackById(trackId: string): MediaStreamTrack | null; getTracks(): MediaStreamTrack[]; getVideoTracks(): MediaStreamTrack[]; removeTrack(track: MediaStreamTrack): void; @@ -12563,8 +12569,8 @@ declare var MediaStreamAudioSourceNode: { } interface MediaStreamError { - readonly constraintName: string; - readonly message: string; + readonly constraintName: string | null; + readonly message: string | null; readonly name: string; } @@ -12574,7 +12580,7 @@ declare var MediaStreamError: { } interface MediaStreamErrorEvent extends Event { - readonly error: MediaStreamError; + readonly error: MediaStreamError | null; } declare var MediaStreamErrorEvent: { @@ -12750,11 +12756,11 @@ declare var MutationObserver: { interface MutationRecord { readonly addedNodes: NodeList; - readonly attributeName: string; - readonly attributeNamespace: string; - readonly nextSibling: Node; - readonly oldValue: string; - readonly previousSibling: Node; + readonly attributeName: string | null; + readonly attributeNamespace: string | null; + readonly nextSibling: Node | null; + readonly oldValue: string | null; + readonly previousSibling: Node | null; readonly removedNodes: NodeList; readonly target: Node; readonly type: string; @@ -12768,10 +12774,10 @@ declare var MutationRecord: { interface NamedNodeMap { readonly length: number; getNamedItem(name: string): Attr; - getNamedItemNS(namespaceURI: string, localName: string): Attr; + getNamedItemNS(namespaceURI: string | null, localName: string | null): Attr; item(index: number): Attr; removeNamedItem(name: string): Attr; - removeNamedItemNS(namespaceURI: string, localName: string): Attr; + removeNamedItemNS(namespaceURI: string | null, localName: string | null): Attr; setNamedItem(arg: Attr): Attr; setNamedItemNS(arg: Attr): Attr; [index: number]: Attr; @@ -12837,33 +12843,33 @@ declare var Navigator: { interface Node extends EventTarget { readonly attributes: NamedNodeMap; - readonly baseURI: string; + readonly baseURI: string | null; readonly childNodes: NodeList; readonly firstChild: Node; readonly lastChild: Node; - readonly localName: string; - readonly namespaceURI: string; + readonly localName: string | null; + readonly namespaceURI: string | null; readonly nextSibling: Node; readonly nodeName: string; readonly nodeType: number; - nodeValue: string; + nodeValue: string | null; readonly ownerDocument: Document; readonly parentElement: HTMLElement; readonly parentNode: Node; readonly previousSibling: Node; - textContent: string; + textContent: string | null; appendChild(newChild: Node): Node; cloneNode(deep?: boolean): Node; compareDocumentPosition(other: Node): number; contains(child: Node): boolean; hasAttributes(): boolean; hasChildNodes(): boolean; - insertBefore(newChild: Node, refChild?: Node): Node; - isDefaultNamespace(namespaceURI: string): boolean; + insertBefore(newChild: Node, refChild: Node): Node; + isDefaultNamespace(namespaceURI: string | null): boolean; isEqualNode(arg: Node): boolean; isSameNode(other: Node): boolean; - lookupNamespaceURI(prefix: string): string; - lookupPrefix(namespaceURI: string): string; + lookupNamespaceURI(prefix: string | null): string | null; + lookupPrefix(namespaceURI: string | null): string | null; normalize(): void; removeChild(oldChild: Node): Node; replaceChild(newChild: Node, oldChild: Node): Node; @@ -13092,10 +13098,10 @@ interface PerfWidgetExternal { addEventListener(eventType: string, callback: Function): void; getMemoryUsage(): number; getProcessCpuUsage(): number; - getRecentCpuUsage(last: number): any; - getRecentFrames(last: number): any; - getRecentMemoryUsage(last: number): any; - getRecentPaintRequests(last: number): any; + getRecentCpuUsage(last: number | null): any; + getRecentFrames(last: number | null): any; + getRecentMemoryUsage(last: number | null): any; + getRecentPaintRequests(last: number | null): any; removeEventListener(eventType: string, callback: Function): void; repositionWindow(x: number, y: number): void; resizeWindow(width: number, height: number): void; @@ -13402,13 +13408,13 @@ declare var RTCDTMFToneChangeEvent: { } interface RTCDtlsTransport extends RTCStatsProvider { - ondtlsstatechange: (ev: RTCDtlsTransportStateChangedEvent) => any; - onerror: (ev: Event) => any; + ondtlsstatechange: ((ev: RTCDtlsTransportStateChangedEvent) => any) | null; + onerror: ((ev: Event) => any) | null; readonly state: string; readonly transport: RTCIceTransport; getLocalParameters(): RTCDtlsParameters; getRemoteCertificates(): ArrayBuffer[]; - getRemoteParameters(): RTCDtlsParameters; + getRemoteParameters(): RTCDtlsParameters | null; start(remoteParameters: RTCDtlsParameters): void; stop(): void; addEventListener(type: "dtlsstatechange", listener: (ev: RTCDtlsTransportStateChangedEvent) => any, useCapture?: boolean): void; @@ -13458,8 +13464,8 @@ declare var RTCIceCandidatePairChangedEvent: { interface RTCIceGatherer extends RTCStatsProvider { readonly component: string; - onerror: (ev: Event) => any; - onlocalcandidate: (ev: RTCIceGathererEvent) => any; + onerror: ((ev: Event) => any) | null; + onlocalcandidate: ((ev: RTCIceGathererEvent) => any) | null; createAssociatedGatherer(): RTCIceGatherer; getLocalCandidates(): RTCIceCandidate[]; getLocalParameters(): RTCIceParameters; @@ -13484,16 +13490,16 @@ declare var RTCIceGathererEvent: { interface RTCIceTransport extends RTCStatsProvider { readonly component: string; - readonly iceGatherer: RTCIceGatherer; - oncandidatepairchange: (ev: RTCIceCandidatePairChangedEvent) => any; - onicestatechange: (ev: RTCIceTransportStateChangedEvent) => any; + readonly iceGatherer: RTCIceGatherer | null; + oncandidatepairchange: ((ev: RTCIceCandidatePairChangedEvent) => any) | null; + onicestatechange: ((ev: RTCIceTransportStateChangedEvent) => any) | null; readonly role: string; readonly state: string; addRemoteCandidate(remoteCandidate: RTCIceCandidate | RTCIceCandidateComplete): void; createAssociatedTransport(): RTCIceTransport; - getNominatedCandidatePair(): RTCIceCandidatePair; + getNominatedCandidatePair(): RTCIceCandidatePair | null; getRemoteCandidates(): RTCIceCandidate[]; - getRemoteParameters(): RTCIceParameters; + getRemoteParameters(): RTCIceParameters | null; setRemoteCandidates(remoteCandidates: RTCIceCandidate[]): void; start(gatherer: RTCIceGatherer, remoteParameters: RTCIceParameters, role?: string): void; stop(): void; @@ -13517,9 +13523,9 @@ declare var RTCIceTransportStateChangedEvent: { } interface RTCRtpReceiver extends RTCStatsProvider { - onerror: (ev: Event) => any; + onerror: ((ev: Event) => any) | null; readonly rtcpTransport: RTCDtlsTransport; - readonly track: MediaStreamTrack; + readonly track: MediaStreamTrack | null; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; getContributingSources(): RTCRtpContributingSource[]; receive(parameters: RTCRtpParameters): void; @@ -13537,8 +13543,8 @@ declare var RTCRtpReceiver: { } interface RTCRtpSender extends RTCStatsProvider { - onerror: (ev: Event) => any; - onssrcconflict: (ev: RTCSsrcConflictEvent) => any; + onerror: ((ev: Event) => any) | null; + onssrcconflict: ((ev: RTCSsrcConflictEvent) => any) | null; readonly rtcpTransport: RTCDtlsTransport; readonly track: MediaStreamTrack; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; @@ -13558,7 +13564,7 @@ declare var RTCRtpSender: { } interface RTCSrtpSdesTransport extends EventTarget { - onerror: (ev: Event) => any; + onerror: ((ev: Event) => any) | null; readonly transport: RTCIceTransport; addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; @@ -15605,9 +15611,9 @@ interface SubtleCrypto { encrypt(algorithm: string | Algorithm, key: CryptoKey, data: ArrayBufferView): PromiseLike; exportKey(format: string, key: CryptoKey): PromiseLike; generateKey(algorithm: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; - importKey(format: string, keyData: ArrayBufferView, algorithm: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; + importKey(format: string, keyData: ArrayBufferView, algorithm: string | Algorithm | null, extractable: boolean, keyUsages: string[]): PromiseLike; sign(algorithm: string | Algorithm, key: CryptoKey, data: ArrayBufferView): PromiseLike; - unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string | Algorithm, unwrappedKeyAlgorithm: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; + unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string | Algorithm, unwrappedKeyAlgorithm: string | Algorithm | null, extractable: boolean, keyUsages: string[]): PromiseLike; verify(algorithm: string | Algorithm, key: CryptoKey, signature: ArrayBufferView, data: ArrayBufferView): PromiseLike; wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: string | Algorithm): PromiseLike; } @@ -15741,7 +15747,7 @@ declare var TextTrackCueList: { interface TextTrackList extends EventTarget { readonly length: number; - onaddtrack: (ev: TrackEvent) => any; + onaddtrack: ((ev: TrackEvent) => any) | null; item(index: number): TextTrack; addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; @@ -15797,7 +15803,7 @@ declare var TouchEvent: { interface TouchList { readonly length: number; - item(index: number): Touch; + item(index: number): Touch | null; [index: number]: Touch; } @@ -15939,7 +15945,7 @@ interface VideoTrackList extends EventTarget { onchange: (ev: Event) => any; onremovetrack: (ev: TrackEvent) => any; readonly selectedIndex: number; - getTrackById(id: string): VideoTrack; + getTrackById(id: string): VideoTrack | null; item(index: number): VideoTrack; addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; @@ -15992,7 +15998,7 @@ declare var WEBGL_depth_texture: { } interface WaveShaperNode extends AudioNode { - curve: Float32Array; + curve: Float32Array | null; oversample: string; } @@ -16066,12 +16072,12 @@ interface WebGLRenderingContext { readonly drawingBufferHeight: number; readonly drawingBufferWidth: number; activeTexture(texture: number): void; - attachShader(program: WebGLProgram, shader: WebGLShader): void; - bindAttribLocation(program: WebGLProgram, index: number, name: string): void; - bindBuffer(target: number, buffer: WebGLBuffer): void; - bindFramebuffer(target: number, framebuffer: WebGLFramebuffer): void; - bindRenderbuffer(target: number, renderbuffer: WebGLRenderbuffer): void; - bindTexture(target: number, texture: WebGLTexture): void; + attachShader(program: WebGLProgram | null, shader: WebGLShader | null): void; + bindAttribLocation(program: WebGLProgram | null, index: number, name: string): void; + bindBuffer(target: number, buffer: WebGLBuffer | null): void; + bindFramebuffer(target: number, framebuffer: WebGLFramebuffer | null): void; + bindRenderbuffer(target: number, renderbuffer: WebGLRenderbuffer | null): void; + bindTexture(target: number, texture: WebGLTexture | null): void; blendColor(red: number, green: number, blue: number, alpha: number): void; blendEquation(mode: number): void; blendEquationSeparate(modeRGB: number, modeAlpha: number): void; @@ -16085,28 +16091,28 @@ interface WebGLRenderingContext { clearDepth(depth: number): void; clearStencil(s: number): void; colorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void; - compileShader(shader: WebGLShader): void; + compileShader(shader: WebGLShader | null): void; compressedTexImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, data: ArrayBufferView): void; compressedTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, data: ArrayBufferView): void; copyTexImage2D(target: number, level: number, internalformat: number, x: number, y: number, width: number, height: number, border: number): void; copyTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, x: number, y: number, width: number, height: number): void; - createBuffer(): WebGLBuffer; - createFramebuffer(): WebGLFramebuffer; - createProgram(): WebGLProgram; - createRenderbuffer(): WebGLRenderbuffer; - createShader(type: number): WebGLShader; - createTexture(): WebGLTexture; + createBuffer(): WebGLBuffer | null; + createFramebuffer(): WebGLFramebuffer | null; + createProgram(): WebGLProgram | null; + createRenderbuffer(): WebGLRenderbuffer | null; + createShader(type: number): WebGLShader | null; + createTexture(): WebGLTexture | null; cullFace(mode: number): void; - deleteBuffer(buffer: WebGLBuffer): void; - deleteFramebuffer(framebuffer: WebGLFramebuffer): void; - deleteProgram(program: WebGLProgram): void; - deleteRenderbuffer(renderbuffer: WebGLRenderbuffer): void; - deleteShader(shader: WebGLShader): void; - deleteTexture(texture: WebGLTexture): void; + deleteBuffer(buffer: WebGLBuffer | null): void; + deleteFramebuffer(framebuffer: WebGLFramebuffer | null): void; + deleteProgram(program: WebGLProgram | null): void; + deleteRenderbuffer(renderbuffer: WebGLRenderbuffer | null): void; + deleteShader(shader: WebGLShader | null): void; + deleteTexture(texture: WebGLTexture | null): void; depthFunc(func: number): void; depthMask(flag: boolean): void; depthRange(zNear: number, zFar: number): void; - detachShader(program: WebGLProgram, shader: WebGLShader): void; + detachShader(program: WebGLProgram | null, shader: WebGLShader | null): void; disable(cap: number): void; disableVertexAttribArray(index: number): void; drawArrays(mode: number, first: number, count: number): void; @@ -16115,51 +16121,51 @@ interface WebGLRenderingContext { enableVertexAttribArray(index: number): void; finish(): void; flush(): void; - framebufferRenderbuffer(target: number, attachment: number, renderbuffertarget: number, renderbuffer: WebGLRenderbuffer): void; - framebufferTexture2D(target: number, attachment: number, textarget: number, texture: WebGLTexture, level: number): void; + framebufferRenderbuffer(target: number, attachment: number, renderbuffertarget: number, renderbuffer: WebGLRenderbuffer | null): void; + framebufferTexture2D(target: number, attachment: number, textarget: number, texture: WebGLTexture | null, level: number): void; frontFace(mode: number): void; generateMipmap(target: number): void; - getActiveAttrib(program: WebGLProgram, index: number): WebGLActiveInfo; - getActiveUniform(program: WebGLProgram, index: number): WebGLActiveInfo; - getAttachedShaders(program: WebGLProgram): WebGLShader[]; - getAttribLocation(program: WebGLProgram, name: string): number; + getActiveAttrib(program: WebGLProgram | null, index: number): WebGLActiveInfo | null; + getActiveUniform(program: WebGLProgram | null, index: number): WebGLActiveInfo | null; + getAttachedShaders(program: WebGLProgram | null): WebGLShader[] | null; + getAttribLocation(program: WebGLProgram | null, name: string): number; getBufferParameter(target: number, pname: number): any; getContextAttributes(): WebGLContextAttributes; getError(): number; getExtension(name: string): any; getFramebufferAttachmentParameter(target: number, attachment: number, pname: number): any; getParameter(pname: number): any; - getProgramInfoLog(program: WebGLProgram): string; - getProgramParameter(program: WebGLProgram, pname: number): any; + getProgramInfoLog(program: WebGLProgram | null): string | null; + getProgramParameter(program: WebGLProgram | null, pname: number): any; getRenderbufferParameter(target: number, pname: number): any; - getShaderInfoLog(shader: WebGLShader): string; - getShaderParameter(shader: WebGLShader, pname: number): any; - getShaderPrecisionFormat(shadertype: number, precisiontype: number): WebGLShaderPrecisionFormat; - getShaderSource(shader: WebGLShader): string; - getSupportedExtensions(): string[]; + getShaderInfoLog(shader: WebGLShader | null): string | null; + getShaderParameter(shader: WebGLShader | null, pname: number): any; + getShaderPrecisionFormat(shadertype: number, precisiontype: number): WebGLShaderPrecisionFormat | null; + getShaderSource(shader: WebGLShader | null): string | null; + getSupportedExtensions(): string[] | null; getTexParameter(target: number, pname: number): any; - getUniform(program: WebGLProgram, location: WebGLUniformLocation): any; - getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation; + getUniform(program: WebGLProgram | null, location: WebGLUniformLocation | null): any; + getUniformLocation(program: WebGLProgram | null, name: string): WebGLUniformLocation | null; getVertexAttrib(index: number, pname: number): any; getVertexAttribOffset(index: number, pname: number): number; hint(target: number, mode: number): void; - isBuffer(buffer: WebGLBuffer): boolean; + isBuffer(buffer: WebGLBuffer | null): boolean; isContextLost(): boolean; isEnabled(cap: number): boolean; - isFramebuffer(framebuffer: WebGLFramebuffer): boolean; - isProgram(program: WebGLProgram): boolean; - isRenderbuffer(renderbuffer: WebGLRenderbuffer): boolean; - isShader(shader: WebGLShader): boolean; - isTexture(texture: WebGLTexture): boolean; + isFramebuffer(framebuffer: WebGLFramebuffer | null): boolean; + isProgram(program: WebGLProgram | null): boolean; + isRenderbuffer(renderbuffer: WebGLRenderbuffer | null): boolean; + isShader(shader: WebGLShader | null): boolean; + isTexture(texture: WebGLTexture | null): boolean; lineWidth(width: number): void; - linkProgram(program: WebGLProgram): void; + linkProgram(program: WebGLProgram | null): void; pixelStorei(pname: number, param: number): void; polygonOffset(factor: number, units: number): void; - readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void; + readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView | null): void; renderbufferStorage(target: number, internalformat: number, width: number, height: number): void; sampleCoverage(value: number, invert: boolean): void; scissor(x: number, y: number, width: number, height: number): void; - shaderSource(shader: WebGLShader, source: string): void; + shaderSource(shader: WebGLShader | null, source: string): void; stencilFunc(func: number, ref: number, mask: number): void; stencilFuncSeparate(face: number, func: number, ref: number, mask: number): void; stencilMask(mask: number): void; @@ -16178,27 +16184,27 @@ interface WebGLRenderingContext { texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, canvas: HTMLCanvasElement): void; texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, video: HTMLVideoElement): void; texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels: ImageData): void; - uniform1f(location: WebGLUniformLocation, x: number): void; + uniform1f(location: WebGLUniformLocation | null, x: number): void; uniform1fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; - uniform1i(location: WebGLUniformLocation, x: number): void; + uniform1i(location: WebGLUniformLocation | null, x: number): void; uniform1iv(location: WebGLUniformLocation, v: Int32Array | number[]): void; - uniform2f(location: WebGLUniformLocation, x: number, y: number): void; + uniform2f(location: WebGLUniformLocation | null, x: number, y: number): void; uniform2fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; - uniform2i(location: WebGLUniformLocation, x: number, y: number): void; + uniform2i(location: WebGLUniformLocation | null, x: number, y: number): void; uniform2iv(location: WebGLUniformLocation, v: Int32Array | number[]): void; - uniform3f(location: WebGLUniformLocation, x: number, y: number, z: number): void; + uniform3f(location: WebGLUniformLocation | null, x: number, y: number, z: number): void; uniform3fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; - uniform3i(location: WebGLUniformLocation, x: number, y: number, z: number): void; + uniform3i(location: WebGLUniformLocation | null, x: number, y: number, z: number): void; uniform3iv(location: WebGLUniformLocation, v: Int32Array | number[]): void; - uniform4f(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void; + uniform4f(location: WebGLUniformLocation | null, x: number, y: number, z: number, w: number): void; uniform4fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; - uniform4i(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void; + uniform4i(location: WebGLUniformLocation | null, x: number, y: number, z: number, w: number): void; uniform4iv(location: WebGLUniformLocation, v: Int32Array | number[]): void; uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array | number[]): void; uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array | number[]): void; uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array | number[]): void; - useProgram(program: WebGLProgram): void; - validateProgram(program: WebGLProgram): void; + useProgram(program: WebGLProgram | null): void; + validateProgram(program: WebGLProgram | null): void; vertexAttrib1f(indx: number, x: number): void; vertexAttrib1fv(indx: number, values: Float32Array | number[]): void; vertexAttrib2f(indx: number, x: number, y: number): void; @@ -17108,7 +17114,7 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window open(url?: string, target?: string, features?: string, replace?: boolean): Window; postMessage(message: any, targetOrigin: string, transfer?: any[]): void; print(): void; - prompt(message?: string, _default?: string): string; + prompt(message?: string, _default?: string): string | null; releaseEvents(): void; requestAnimationFrame(callback: FrameRequestCallback): number; resizeBy(x?: number, y?: number): void; @@ -17261,7 +17267,7 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { withCredentials: boolean; abort(): void; getAllResponseHeaders(): string; - getResponseHeader(header: string): string; + getResponseHeader(header: string): string | null; msCachingEnabled(): boolean; open(method: string, url: string, async?: boolean, user?: string, password?: string): void; overrideMimeType(mime: string): void; @@ -17785,14 +17791,6 @@ interface ProgressEventInit extends EventInit { total?: number; } -interface HTMLPictureElement extends HTMLElement { -} - -declare var HTMLPictureElement: { - prototype: HTMLPictureElement; - new(): HTMLPictureElement; -} - interface ClipboardEventInit extends EventInit { data?: string; dataType?: string; @@ -18006,7 +18004,7 @@ declare function msWriteProfilerMark(profilerMarkName: string): void; declare function open(url?: string, target?: string, features?: string, replace?: boolean): Window; declare function postMessage(message: any, targetOrigin: string, transfer?: any[]): void; declare function print(): void; -declare function prompt(message?: string, _default?: string): string; +declare function prompt(message?: string, _default?: string): string | null; declare function releaseEvents(): void; declare function requestAnimationFrame(callback: FrameRequestCallback): number; declare function resizeBy(x?: number, y?: number): void; diff --git a/lib/lib.dom.d.ts b/lib/lib.dom.d.ts index 27a38590913..673bd34ee3c 100644 --- a/lib/lib.dom.d.ts +++ b/lib/lib.dom.d.ts @@ -14,6 +14,7 @@ and limitations under the License. ***************************************************************************** */ /// + ///////////////////////////// /// IE DOM APIs ///////////////////////////// @@ -973,7 +974,7 @@ declare var ApplicationCache: { interface AriaRequestEvent extends Event { readonly attributeName: string; - attributeValue: string; + attributeValue: string | null; } declare var AriaRequestEvent: { @@ -984,7 +985,7 @@ declare var AriaRequestEvent: { interface Attr extends Node { readonly name: string; readonly ownerElement: Element; - readonly prefix: string; + readonly prefix: string | null; readonly specified: boolean; value: string; } @@ -1010,7 +1011,7 @@ declare var AudioBuffer: { } interface AudioBufferSourceNode extends AudioNode { - buffer: AudioBuffer; + buffer: AudioBuffer | null; readonly detune: AudioParam; loop: boolean; loopEnd: number; @@ -1146,7 +1147,7 @@ interface AudioTrackList extends EventTarget { onaddtrack: (ev: TrackEvent) => any; onchange: (ev: Event) => any; onremovetrack: (ev: TrackEvent) => any; - getTrackById(id: string): AudioTrack; + getTrackById(id: string): AudioTrack | null; item(index: number): AudioTrack; addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; @@ -1360,343 +1361,343 @@ declare var CSSRuleList: { } interface CSSStyleDeclaration { - alignContent: string; - alignItems: string; - alignSelf: string; - alignmentBaseline: string; - animation: string; - animationDelay: string; - animationDirection: string; - animationDuration: string; - animationFillMode: string; - animationIterationCount: string; - animationName: string; - animationPlayState: string; - animationTimingFunction: string; - backfaceVisibility: string; - background: string; - backgroundAttachment: string; - backgroundClip: string; - backgroundColor: string; - backgroundImage: string; - backgroundOrigin: string; - backgroundPosition: string; - backgroundPositionX: string; - backgroundPositionY: string; - backgroundRepeat: string; - backgroundSize: string; - baselineShift: string; - border: string; - borderBottom: string; - borderBottomColor: string; - borderBottomLeftRadius: string; - borderBottomRightRadius: string; - borderBottomStyle: string; - borderBottomWidth: string; - borderCollapse: string; - borderColor: string; - borderImage: string; - borderImageOutset: string; - borderImageRepeat: string; - borderImageSlice: string; - borderImageSource: string; - borderImageWidth: string; - borderLeft: string; - borderLeftColor: string; - borderLeftStyle: string; - borderLeftWidth: string; - borderRadius: string; - borderRight: string; - borderRightColor: string; - borderRightStyle: string; - borderRightWidth: string; - borderSpacing: string; - borderStyle: string; - borderTop: string; - borderTopColor: string; - borderTopLeftRadius: string; - borderTopRightRadius: string; - borderTopStyle: string; - borderTopWidth: string; - borderWidth: string; - bottom: string; - boxShadow: string; - boxSizing: string; - breakAfter: string; - breakBefore: string; - breakInside: string; - captionSide: string; - clear: string; - clip: string; - clipPath: string; - clipRule: string; - color: string; - colorInterpolationFilters: string; + alignContent: string | null; + alignItems: string | null; + alignSelf: string | null; + alignmentBaseline: string | null; + animation: string | null; + animationDelay: string | null; + animationDirection: string | null; + animationDuration: string | null; + animationFillMode: string | null; + animationIterationCount: string | null; + animationName: string | null; + animationPlayState: string | null; + animationTimingFunction: string | null; + backfaceVisibility: string | null; + background: string | null; + backgroundAttachment: string | null; + backgroundClip: string | null; + backgroundColor: string | null; + backgroundImage: string | null; + backgroundOrigin: string | null; + backgroundPosition: string | null; + backgroundPositionX: string | null; + backgroundPositionY: string | null; + backgroundRepeat: string | null; + backgroundSize: string | null; + baselineShift: string | null; + border: string | null; + borderBottom: string | null; + borderBottomColor: string | null; + borderBottomLeftRadius: string | null; + borderBottomRightRadius: string | null; + borderBottomStyle: string | null; + borderBottomWidth: string | null; + borderCollapse: string | null; + borderColor: string | null; + borderImage: string | null; + borderImageOutset: string | null; + borderImageRepeat: string | null; + borderImageSlice: string | null; + borderImageSource: string | null; + borderImageWidth: string | null; + borderLeft: string | null; + borderLeftColor: string | null; + borderLeftStyle: string | null; + borderLeftWidth: string | null; + borderRadius: string | null; + borderRight: string | null; + borderRightColor: string | null; + borderRightStyle: string | null; + borderRightWidth: string | null; + borderSpacing: string | null; + borderStyle: string | null; + borderTop: string | null; + borderTopColor: string | null; + borderTopLeftRadius: string | null; + borderTopRightRadius: string | null; + borderTopStyle: string | null; + borderTopWidth: string | null; + borderWidth: string | null; + bottom: string | null; + boxShadow: string | null; + boxSizing: string | null; + breakAfter: string | null; + breakBefore: string | null; + breakInside: string | null; + captionSide: string | null; + clear: string | null; + clip: string | null; + clipPath: string | null; + clipRule: string | null; + color: string | null; + colorInterpolationFilters: string | null; columnCount: any; - columnFill: string; + columnFill: string | null; columnGap: any; - columnRule: string; + columnRule: string | null; columnRuleColor: any; - columnRuleStyle: string; + columnRuleStyle: string | null; columnRuleWidth: any; - columnSpan: string; + columnSpan: string | null; columnWidth: any; - columns: string; - content: string; - counterIncrement: string; - counterReset: string; - cssFloat: string; + columns: string | null; + content: string | null; + counterIncrement: string | null; + counterReset: string | null; + cssFloat: string | null; cssText: string; - cursor: string; - direction: string; - display: string; - dominantBaseline: string; - emptyCells: string; - enableBackground: string; - fill: string; - fillOpacity: string; - fillRule: string; - filter: string; - flex: string; - flexBasis: string; - flexDirection: string; - flexFlow: string; - flexGrow: string; - flexShrink: string; - flexWrap: string; - floodColor: string; - floodOpacity: string; - font: string; - fontFamily: string; - fontFeatureSettings: string; - fontSize: string; - fontSizeAdjust: string; - fontStretch: string; - fontStyle: string; - fontVariant: string; - fontWeight: string; - glyphOrientationHorizontal: string; - glyphOrientationVertical: string; - height: string; - imeMode: string; - justifyContent: string; - kerning: string; - left: string; + cursor: string | null; + direction: string | null; + display: string | null; + dominantBaseline: string | null; + emptyCells: string | null; + enableBackground: string | null; + fill: string | null; + fillOpacity: string | null; + fillRule: string | null; + filter: string | null; + flex: string | null; + flexBasis: string | null; + flexDirection: string | null; + flexFlow: string | null; + flexGrow: string | null; + flexShrink: string | null; + flexWrap: string | null; + floodColor: string | null; + floodOpacity: string | null; + font: string | null; + fontFamily: string | null; + fontFeatureSettings: string | null; + fontSize: string | null; + fontSizeAdjust: string | null; + fontStretch: string | null; + fontStyle: string | null; + fontVariant: string | null; + fontWeight: string | null; + glyphOrientationHorizontal: string | null; + glyphOrientationVertical: string | null; + height: string | null; + imeMode: string | null; + justifyContent: string | null; + kerning: string | null; + left: string | null; readonly length: number; - letterSpacing: string; - lightingColor: string; - lineHeight: string; - listStyle: string; - listStyleImage: string; - listStylePosition: string; - listStyleType: string; - margin: string; - marginBottom: string; - marginLeft: string; - marginRight: string; - marginTop: string; - marker: string; - markerEnd: string; - markerMid: string; - markerStart: string; - mask: string; - maxHeight: string; - maxWidth: string; - minHeight: string; - minWidth: string; - msContentZoomChaining: string; - msContentZoomLimit: string; + letterSpacing: string | null; + lightingColor: string | null; + lineHeight: string | null; + listStyle: string | null; + listStyleImage: string | null; + listStylePosition: string | null; + listStyleType: string | null; + margin: string | null; + marginBottom: string | null; + marginLeft: string | null; + marginRight: string | null; + marginTop: string | null; + marker: string | null; + markerEnd: string | null; + markerMid: string | null; + markerStart: string | null; + mask: string | null; + maxHeight: string | null; + maxWidth: string | null; + minHeight: string | null; + minWidth: string | null; + msContentZoomChaining: string | null; + msContentZoomLimit: string | null; msContentZoomLimitMax: any; msContentZoomLimitMin: any; - msContentZoomSnap: string; - msContentZoomSnapPoints: string; - msContentZoomSnapType: string; - msContentZooming: string; - msFlowFrom: string; - msFlowInto: string; - msFontFeatureSettings: string; + msContentZoomSnap: string | null; + msContentZoomSnapPoints: string | null; + msContentZoomSnapType: string | null; + msContentZooming: string | null; + msFlowFrom: string | null; + msFlowInto: string | null; + msFontFeatureSettings: string | null; msGridColumn: any; - msGridColumnAlign: string; + msGridColumnAlign: string | null; msGridColumnSpan: any; - msGridColumns: string; + msGridColumns: string | null; msGridRow: any; - msGridRowAlign: string; + msGridRowAlign: string | null; msGridRowSpan: any; - msGridRows: string; - msHighContrastAdjust: string; - msHyphenateLimitChars: string; + msGridRows: string | null; + msHighContrastAdjust: string | null; + msHyphenateLimitChars: string | null; msHyphenateLimitLines: any; msHyphenateLimitZone: any; - msHyphens: string; - msImeAlign: string; - msOverflowStyle: string; - msScrollChaining: string; - msScrollLimit: string; + msHyphens: string | null; + msImeAlign: string | null; + msOverflowStyle: string | null; + msScrollChaining: string | null; + msScrollLimit: string | null; msScrollLimitXMax: any; msScrollLimitXMin: any; msScrollLimitYMax: any; msScrollLimitYMin: any; - msScrollRails: string; - msScrollSnapPointsX: string; - msScrollSnapPointsY: string; - msScrollSnapType: string; - msScrollSnapX: string; - msScrollSnapY: string; - msScrollTranslation: string; - msTextCombineHorizontal: string; + msScrollRails: string | null; + msScrollSnapPointsX: string | null; + msScrollSnapPointsY: string | null; + msScrollSnapType: string | null; + msScrollSnapX: string | null; + msScrollSnapY: string | null; + msScrollTranslation: string | null; + msTextCombineHorizontal: string | null; msTextSizeAdjust: any; - msTouchAction: string; - msTouchSelect: string; - msUserSelect: string; + msTouchAction: string | null; + msTouchSelect: string | null; + msUserSelect: string | null; msWrapFlow: string; msWrapMargin: any; msWrapThrough: string; - opacity: string; - order: string; - orphans: string; - outline: string; - outlineColor: string; - outlineStyle: string; - outlineWidth: string; - overflow: string; - overflowX: string; - overflowY: string; - padding: string; - paddingBottom: string; - paddingLeft: string; - paddingRight: string; - paddingTop: string; - pageBreakAfter: string; - pageBreakBefore: string; - pageBreakInside: string; + opacity: string | null; + order: string | null; + orphans: string | null; + outline: string | null; + outlineColor: string | null; + outlineStyle: string | null; + outlineWidth: string | null; + overflow: string | null; + overflowX: string | null; + overflowY: string | null; + padding: string | null; + paddingBottom: string | null; + paddingLeft: string | null; + paddingRight: string | null; + paddingTop: string | null; + pageBreakAfter: string | null; + pageBreakBefore: string | null; + pageBreakInside: string | null; readonly parentRule: CSSRule; - perspective: string; - perspectiveOrigin: string; - pointerEvents: string; - position: string; - quotes: string; - right: string; - rubyAlign: string; - rubyOverhang: string; - rubyPosition: string; - stopColor: string; - stopOpacity: string; - stroke: string; - strokeDasharray: string; - strokeDashoffset: string; - strokeLinecap: string; - strokeLinejoin: string; - strokeMiterlimit: string; - strokeOpacity: string; - strokeWidth: string; - tableLayout: string; - textAlign: string; - textAlignLast: string; - textAnchor: string; - textDecoration: string; - textIndent: string; - textJustify: string; - textKashida: string; - textKashidaSpace: string; - textOverflow: string; - textShadow: string; - textTransform: string; - textUnderlinePosition: string; - top: string; - touchAction: string; - transform: string; - transformOrigin: string; - transformStyle: string; - transition: string; - transitionDelay: string; - transitionDuration: string; - transitionProperty: string; - transitionTimingFunction: string; - unicodeBidi: string; - verticalAlign: string; - visibility: string; - webkitAlignContent: string; - webkitAlignItems: string; - webkitAlignSelf: string; - webkitAnimation: string; - webkitAnimationDelay: string; - webkitAnimationDirection: string; - webkitAnimationDuration: string; - webkitAnimationFillMode: string; - webkitAnimationIterationCount: string; - webkitAnimationName: string; - webkitAnimationPlayState: string; - webkitAnimationTimingFunction: string; - webkitAppearance: string; - webkitBackfaceVisibility: string; - webkitBackgroundClip: string; - webkitBackgroundOrigin: string; - webkitBackgroundSize: string; - webkitBorderBottomLeftRadius: string; - webkitBorderBottomRightRadius: string; - webkitBorderImage: string; - webkitBorderRadius: string; - webkitBorderTopLeftRadius: string; - webkitBorderTopRightRadius: string; - webkitBoxAlign: string; - webkitBoxDirection: string; - webkitBoxFlex: string; - webkitBoxOrdinalGroup: string; - webkitBoxOrient: string; - webkitBoxPack: string; - webkitBoxSizing: string; - webkitColumnBreakAfter: string; - webkitColumnBreakBefore: string; - webkitColumnBreakInside: string; + perspective: string | null; + perspectiveOrigin: string | null; + pointerEvents: string | null; + position: string | null; + quotes: string | null; + right: string | null; + rubyAlign: string | null; + rubyOverhang: string | null; + rubyPosition: string | null; + stopColor: string | null; + stopOpacity: string | null; + stroke: string | null; + strokeDasharray: string | null; + strokeDashoffset: string | null; + strokeLinecap: string | null; + strokeLinejoin: string | null; + strokeMiterlimit: string | null; + strokeOpacity: string | null; + strokeWidth: string | null; + tableLayout: string | null; + textAlign: string | null; + textAlignLast: string | null; + textAnchor: string | null; + textDecoration: string | null; + textIndent: string | null; + textJustify: string | null; + textKashida: string | null; + textKashidaSpace: string | null; + textOverflow: string | null; + textShadow: string | null; + textTransform: string | null; + textUnderlinePosition: string | null; + top: string | null; + touchAction: string | null; + transform: string | null; + transformOrigin: string | null; + transformStyle: string | null; + transition: string | null; + transitionDelay: string | null; + transitionDuration: string | null; + transitionProperty: string | null; + transitionTimingFunction: string | null; + unicodeBidi: string | null; + verticalAlign: string | null; + visibility: string | null; + webkitAlignContent: string | null; + webkitAlignItems: string | null; + webkitAlignSelf: string | null; + webkitAnimation: string | null; + webkitAnimationDelay: string | null; + webkitAnimationDirection: string | null; + webkitAnimationDuration: string | null; + webkitAnimationFillMode: string | null; + webkitAnimationIterationCount: string | null; + webkitAnimationName: string | null; + webkitAnimationPlayState: string | null; + webkitAnimationTimingFunction: string | null; + webkitAppearance: string | null; + webkitBackfaceVisibility: string | null; + webkitBackgroundClip: string | null; + webkitBackgroundOrigin: string | null; + webkitBackgroundSize: string | null; + webkitBorderBottomLeftRadius: string | null; + webkitBorderBottomRightRadius: string | null; + webkitBorderImage: string | null; + webkitBorderRadius: string | null; + webkitBorderTopLeftRadius: string | null; + webkitBorderTopRightRadius: string | null; + webkitBoxAlign: string | null; + webkitBoxDirection: string | null; + webkitBoxFlex: string | null; + webkitBoxOrdinalGroup: string | null; + webkitBoxOrient: string | null; + webkitBoxPack: string | null; + webkitBoxSizing: string | null; + webkitColumnBreakAfter: string | null; + webkitColumnBreakBefore: string | null; + webkitColumnBreakInside: string | null; webkitColumnCount: any; webkitColumnGap: any; - webkitColumnRule: string; + webkitColumnRule: string | null; webkitColumnRuleColor: any; - webkitColumnRuleStyle: string; + webkitColumnRuleStyle: string | null; webkitColumnRuleWidth: any; - webkitColumnSpan: string; + webkitColumnSpan: string | null; webkitColumnWidth: any; - webkitColumns: string; - webkitFilter: string; - webkitFlex: string; - webkitFlexBasis: string; - webkitFlexDirection: string; - webkitFlexFlow: string; - webkitFlexGrow: string; - webkitFlexShrink: string; - webkitFlexWrap: string; - webkitJustifyContent: string; - webkitOrder: string; - webkitPerspective: string; - webkitPerspectiveOrigin: string; - webkitTapHighlightColor: string; - webkitTextFillColor: string; + webkitColumns: string | null; + webkitFilter: string | null; + webkitFlex: string | null; + webkitFlexBasis: string | null; + webkitFlexDirection: string | null; + webkitFlexFlow: string | null; + webkitFlexGrow: string | null; + webkitFlexShrink: string | null; + webkitFlexWrap: string | null; + webkitJustifyContent: string | null; + webkitOrder: string | null; + webkitPerspective: string | null; + webkitPerspectiveOrigin: string | null; + webkitTapHighlightColor: string | null; + webkitTextFillColor: string | null; webkitTextSizeAdjust: any; - webkitTransform: string; - webkitTransformOrigin: string; - webkitTransformStyle: string; - webkitTransition: string; - webkitTransitionDelay: string; - webkitTransitionDuration: string; - webkitTransitionProperty: string; - webkitTransitionTimingFunction: string; - webkitUserModify: string; - webkitUserSelect: string; - webkitWritingMode: string; - whiteSpace: string; - widows: string; - width: string; - wordBreak: string; - wordSpacing: string; - wordWrap: string; - writingMode: string; - zIndex: string; - zoom: string; + webkitTransform: string | null; + webkitTransformOrigin: string | null; + webkitTransformStyle: string | null; + webkitTransition: string | null; + webkitTransitionDelay: string | null; + webkitTransitionDuration: string | null; + webkitTransitionProperty: string | null; + webkitTransitionTimingFunction: string | null; + webkitUserModify: string | null; + webkitUserSelect: string | null; + webkitWritingMode: string | null; + whiteSpace: string | null; + widows: string | null; + width: string | null; + wordBreak: string | null; + wordSpacing: string | null; + wordWrap: string | null; + writingMode: string | null; + zIndex: string | null; + zoom: string | null; getPropertyPriority(propertyName: string): string; getPropertyValue(propertyName: string): string; item(index: number): string; removeProperty(propertyName: string): string; - setProperty(propertyName: string, value: string, priority?: string): void; + setProperty(propertyName: string, value: string | null, priority?: string): void; [index: number]: string; } @@ -1788,6 +1789,9 @@ interface CanvasRenderingContext2D extends Object, CanvasPathMethods { strokeStyle: string | CanvasGradient | CanvasPattern; textAlign: string; textBaseline: string; + mozImageSmoothingEnabled: boolean; + webkitImageSmoothingEnabled: boolean; + oImageSmoothingEnabled: boolean; beginPath(): void; clearRect(x: number, y: number, w: number, h: number): void; clip(fillRule?: string): void; @@ -1902,7 +1906,7 @@ declare var CloseEvent: { interface CommandEvent extends Event { readonly commandName: string; - readonly detail: string; + readonly detail: string | null; } declare var CommandEvent: { @@ -1961,7 +1965,7 @@ declare var Console: { } interface ConvolverNode extends AudioNode { - buffer: AudioBuffer; + buffer: AudioBuffer | null; normalize: boolean; } @@ -1972,12 +1976,12 @@ declare var ConvolverNode: { interface Coordinates { readonly accuracy: number; - readonly altitude: number; - readonly altitudeAccuracy: number; - readonly heading: number; + readonly altitude: number | null; + readonly altitudeAccuracy: number | null; + readonly heading: number | null; readonly latitude: number; readonly longitude: number; - readonly speed: number; + readonly speed: number | null; } declare var Coordinates: { @@ -2103,10 +2107,10 @@ declare var DOMException: { } interface DOMImplementation { - createDocument(namespaceURI: string, qualifiedName: string, doctype: DocumentType): Document; - createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType; + createDocument(namespaceURI: string | null, qualifiedName: string | null, doctype: DocumentType): Document; + createDocumentType(qualifiedName: string, publicId: string | null, systemId: string | null): DocumentType; createHTMLDocument(title: string): Document; - hasFeature(feature: string, version: string): boolean; + hasFeature(feature: string | null, version: string | null): boolean; } declare var DOMImplementation: { @@ -2135,7 +2139,7 @@ declare var DOMSettableTokenList: { interface DOMStringList { readonly length: number; contains(str: string): boolean; - item(index: number): string; + item(index: number): string | null; [index: number]: string; } @@ -2197,8 +2201,8 @@ declare var DataTransfer: { interface DataTransferItem { readonly kind: string; readonly type: string; - getAsFile(): File; - getAsString(_callback: FunctionStringCallback): void; + getAsFile(): File | null; + getAsString(_callback: FunctionStringCallback | null): void; } declare var DataTransferItem: { @@ -2208,7 +2212,7 @@ declare var DataTransferItem: { interface DataTransferItemList { readonly length: number; - add(data: File): DataTransferItem; + add(data: File): DataTransferItem | null; clear(): void; item(index: number): DataTransferItem; remove(index: number): void; @@ -2243,9 +2247,9 @@ declare var DelayNode: { } interface DeviceAcceleration { - readonly x: number; - readonly y: number; - readonly z: number; + readonly x: number | null; + readonly y: number | null; + readonly z: number | null; } declare var DeviceAcceleration: { @@ -2263,11 +2267,11 @@ declare var DeviceLightEvent: { } interface DeviceMotionEvent extends Event { - readonly acceleration: DeviceAcceleration; - readonly accelerationIncludingGravity: DeviceAcceleration; - readonly interval: number; - readonly rotationRate: DeviceRotationRate; - initDeviceMotionEvent(type: string, bubbles: boolean, cancelable: boolean, acceleration: DeviceAccelerationDict, accelerationIncludingGravity: DeviceAccelerationDict, rotationRate: DeviceRotationRateDict, interval: number): void; + readonly acceleration: DeviceAcceleration | null; + readonly accelerationIncludingGravity: DeviceAcceleration | null; + readonly interval: number | null; + readonly rotationRate: DeviceRotationRate | null; + initDeviceMotionEvent(type: string, bubbles: boolean, cancelable: boolean, acceleration: DeviceAccelerationDict | null, accelerationIncludingGravity: DeviceAccelerationDict | null, rotationRate: DeviceRotationRateDict | null, interval: number | null): void; } declare var DeviceMotionEvent: { @@ -2277,10 +2281,10 @@ declare var DeviceMotionEvent: { interface DeviceOrientationEvent extends Event { readonly absolute: boolean; - readonly alpha: number; - readonly beta: number; - readonly gamma: number; - initDeviceOrientationEvent(type: string, bubbles: boolean, cancelable: boolean, alpha: number, beta: number, gamma: number, absolute: boolean): void; + readonly alpha: number | null; + readonly beta: number | null; + readonly gamma: number | null; + initDeviceOrientationEvent(type: string, bubbles: boolean, cancelable: boolean, alpha: number | null, beta: number | null, gamma: number | null, absolute: boolean): void; } declare var DeviceOrientationEvent: { @@ -2289,9 +2293,9 @@ declare var DeviceOrientationEvent: { } interface DeviceRotationRate { - readonly alpha: number; - readonly beta: number; - readonly gamma: number; + readonly alpha: number | null; + readonly beta: number | null; + readonly gamma: number | null; } declare var DeviceRotationRate: { @@ -2384,7 +2388,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Retrieves a collection, in source order, of all form objects in the document. */ forms: HTMLCollectionOf; - readonly fullscreenElement: Element; + readonly fullscreenElement: Element | null; readonly fullscreenEnabled: boolean; readonly head: HTMLHeadElement; readonly hidden: boolean; @@ -2399,7 +2403,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven /** * Returns the character encoding used to create the webpage that is loaded into the document object. */ - readonly inputEncoding: string; + readonly inputEncoding: string | null; /** * Gets the date that the page was last modified, if the page supplies one. */ @@ -2744,7 +2748,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Retrieves a collection of all script objects in the document. */ scripts: HTMLCollectionOf; - readonly scrollingElement: Element; + readonly scrollingElement: Element | null; /** * Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document. */ @@ -2758,16 +2762,16 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Sets or gets the color of the links that the user has visited. */ vlinkColor: string; - readonly webkitCurrentFullScreenElement: Element; - readonly webkitFullscreenElement: Element; + readonly webkitCurrentFullScreenElement: Element | null; + readonly webkitFullscreenElement: Element | null; readonly webkitFullscreenEnabled: boolean; readonly webkitIsFullScreen: boolean; - readonly xmlEncoding: string; + readonly xmlEncoding: string | null; xmlStandalone: boolean; /** * Gets or sets the version attribute specified in the declaration of an XML document. */ - xmlVersion: string; + xmlVersion: string | null; adoptNode(source: Node): Node; captureEvents(): void; caretRangeFromPoint(x: number, y: number): Range; @@ -2781,7 +2785,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param name String that sets the attribute object's name. */ createAttribute(name: string): Attr; - createAttributeNS(namespaceURI: string, qualifiedName: string): Attr; + createAttributeNS(namespaceURI: string | null, qualifiedName: string): Attr; createCDATASection(data: string): CDATASection; /** * Creates a comment object with the specified data. @@ -2877,6 +2881,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven createElement(tagName: "x-ms-webview"): MSHTMLWebViewElement; createElement(tagName: "xmp"): HTMLPreElement; createElement(tagName: string): HTMLElement; + createElementNS(namespaceURI: "http://www.w3.org/1999/xhtml", qualifiedName: string): HTMLElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "a"): SVGAElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "circle"): SVGCircleElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "clipPath"): SVGClipPathElement @@ -2939,7 +2944,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "use"): SVGUseElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "view"): SVGViewElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: string): SVGElement - createElementNS(namespaceURI: string, qualifiedName: string): Element; + createElementNS(namespaceURI: string | null, qualifiedName: string): Element; createExpression(expression: string, resolver: XPathNSResolver): XPathExpression; createNSResolver(nodeResolver: Node): XPathNSResolver; /** @@ -3000,12 +3005,12 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param elementId String that specifies the ID value. Case-insensitive. */ getElementById(elementId: string): HTMLElement; - getElementsByClassName(classNames: string): NodeListOf; + getElementsByClassName(classNames: string): HTMLCollectionOf; /** * Gets a collection of objects based on the value of the NAME or ID attribute. * @param elementName Gets a collection of objects based on the value of the NAME or ID attribute. */ - getElementsByName(elementName: string): NodeListOf; + getElementsByName(elementName: string): NodeListOf; /** * Retrieves a collection of objects based on the specified element name. * @param name Specifies the name of an element. @@ -3187,7 +3192,9 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven getElementsByTagName(tagname: "x-ms-webview"): NodeListOf; getElementsByTagName(tagname: "xmp"): NodeListOf; getElementsByTagName(tagname: string): NodeListOf; - getElementsByTagNameNS(namespaceURI: string, localName: string): NodeListOf; + getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf; + getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf; + getElementsByTagNameNS(namespaceURI: string, localName: string): HTMLCollectionOf; /** * Returns an object representing the current selection of the document that is loaded into the object displaying a webpage. */ @@ -3254,8 +3261,6 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param content The text and HTML tags to write. */ writeln(...content: string[]): void; - createElement(tagName: "picture"): HTMLPictureElement; - getElementsByTagName(tagname: "picture"): NodeListOf; addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void; addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; @@ -3372,11 +3377,11 @@ declare var DocumentFragment: { interface DocumentType extends Node, ChildNode { readonly entities: NamedNodeMap; - readonly internalSubset: string; + readonly internalSubset: string | null; readonly name: string; readonly notations: NamedNodeMap; - readonly publicId: string; - readonly systemId: string; + readonly publicId: string | null; + readonly systemId: string | null; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -3467,14 +3472,14 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec ontouchstart: (ev: TouchEvent) => any; onwebkitfullscreenchange: (ev: Event) => any; onwebkitfullscreenerror: (ev: Event) => any; - readonly prefix: string; + readonly prefix: string | null; readonly scrollHeight: number; scrollLeft: number; scrollTop: number; readonly scrollWidth: number; readonly tagName: string; innerHTML: string; - getAttribute(name?: string): string; + getAttribute(name?: string): string | null; getAttributeNS(namespaceURI: string, localName: string): string; getAttributeNode(name: string): Attr; getAttributeNodeNS(namespaceURI: string, localName: string): Attr; @@ -3657,7 +3662,9 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec getElementsByTagName(name: "x-ms-webview"): NodeListOf; getElementsByTagName(name: "xmp"): NodeListOf; getElementsByTagName(name: string): NodeListOf; - getElementsByTagNameNS(namespaceURI: string, localName: string): NodeListOf; + getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf; + getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf; + getElementsByTagNameNS(namespaceURI: string, localName: string): HTMLCollectionOf; hasAttribute(name: string): boolean; hasAttributeNS(namespaceURI: string, localName: string): boolean; msGetRegionContent(): MSRangeCollection; @@ -3682,7 +3689,6 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec webkitRequestFullscreen(): void; getElementsByClassName(classNames: string): NodeListOf; matches(selector: string): boolean; - getElementsByTagName(tagname: "picture"): NodeListOf; addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; @@ -3750,7 +3756,7 @@ interface Event { readonly eventPhase: number; readonly isTrusted: boolean; returnValue: boolean; - readonly srcElement: Element; + readonly srcElement: Element | null; readonly target: EventTarget; readonly timeStamp: number; readonly type: string; @@ -4045,7 +4051,7 @@ interface HTMLAppletElement extends HTMLElement { * Sets or retrieves the shape of the object. */ name: string; - object: string; + object: string | null; /** * Sets or retrieves a message to be displayed while an object is loading. */ @@ -6100,7 +6106,7 @@ interface HTMLMediaElement extends HTMLElement { * Gets or sets a flag to specify whether playback should restart after it completes. */ loop: boolean; - readonly mediaKeys: MediaKeys; + readonly mediaKeys: MediaKeys | null; /** * Specifies the purpose of the audio or video media, such as background audio or alerts. */ @@ -6173,7 +6179,7 @@ interface HTMLMediaElement extends HTMLElement { * The address or URL of the a media resource that is to be considered. */ src: string; - srcObject: MediaStream; + srcObject: MediaStream | null; readonly textTracks: TextTrackList; readonly videoTracks: VideoTrackList; /** @@ -6211,7 +6217,7 @@ interface HTMLMediaElement extends HTMLElement { * Loads and starts playback of a media resource. */ play(): void; - setMediaKeys(mediaKeys: MediaKeys): PromiseLike; + setMediaKeys(mediaKeys: MediaKeys | null): PromiseLike; readonly HAVE_CURRENT_DATA: number; readonly HAVE_ENOUGH_DATA: number; readonly HAVE_FUTURE_DATA: number; @@ -7523,8 +7529,8 @@ declare var HTMLVideoElement: { } interface HashChangeEvent extends Event { - readonly newURL: string; - readonly oldURL: string; + readonly newURL: string | null; + readonly oldURL: string | null; } declare var HashChangeEvent: { @@ -7730,7 +7736,7 @@ declare var IDBTransaction: { } interface IDBVersionChangeEvent extends Event { - readonly newVersion: number; + readonly newVersion: number | null; readonly oldVersion: number; } @@ -7753,7 +7759,7 @@ declare var ImageData: { interface KeyboardEvent extends UIEvent { readonly altKey: boolean; - readonly char: string; + readonly char: string | null; readonly charCode: number; readonly ctrlKey: boolean; readonly key: string; @@ -8096,7 +8102,7 @@ declare var MSMediaKeyError: { } interface MSMediaKeyMessageEvent extends Event { - readonly destinationURL: string; + readonly destinationURL: string | null; readonly message: Uint8Array; } @@ -8106,7 +8112,7 @@ declare var MSMediaKeyMessageEvent: { } interface MSMediaKeyNeededEvent extends Event { - readonly initData: Uint8Array; + readonly initData: Uint8Array | null; } declare var MSMediaKeyNeededEvent: { @@ -8115,7 +8121,7 @@ declare var MSMediaKeyNeededEvent: { } interface MSMediaKeySession extends EventTarget { - readonly error: MSMediaKeyError; + readonly error: MSMediaKeyError | null; readonly keySystem: string; readonly sessionId: string; close(): void; @@ -8285,7 +8291,7 @@ declare var MediaElementAudioSourceNode: { } interface MediaEncryptedEvent extends Event { - readonly initData: ArrayBuffer; + readonly initData: ArrayBuffer | null; readonly initDataType: string; } @@ -8427,7 +8433,7 @@ interface MediaStream extends EventTarget { addTrack(track: MediaStreamTrack): void; clone(): MediaStream; getAudioTracks(): MediaStreamTrack[]; - getTrackById(trackId: string): MediaStreamTrack; + getTrackById(trackId: string): MediaStreamTrack | null; getTracks(): MediaStreamTrack[]; getVideoTracks(): MediaStreamTrack[]; removeTrack(track: MediaStreamTrack): void; @@ -8453,8 +8459,8 @@ declare var MediaStreamAudioSourceNode: { } interface MediaStreamError { - readonly constraintName: string; - readonly message: string; + readonly constraintName: string | null; + readonly message: string | null; readonly name: string; } @@ -8464,7 +8470,7 @@ declare var MediaStreamError: { } interface MediaStreamErrorEvent extends Event { - readonly error: MediaStreamError; + readonly error: MediaStreamError | null; } declare var MediaStreamErrorEvent: { @@ -8640,11 +8646,11 @@ declare var MutationObserver: { interface MutationRecord { readonly addedNodes: NodeList; - readonly attributeName: string; - readonly attributeNamespace: string; - readonly nextSibling: Node; - readonly oldValue: string; - readonly previousSibling: Node; + readonly attributeName: string | null; + readonly attributeNamespace: string | null; + readonly nextSibling: Node | null; + readonly oldValue: string | null; + readonly previousSibling: Node | null; readonly removedNodes: NodeList; readonly target: Node; readonly type: string; @@ -8658,10 +8664,10 @@ declare var MutationRecord: { interface NamedNodeMap { readonly length: number; getNamedItem(name: string): Attr; - getNamedItemNS(namespaceURI: string, localName: string): Attr; + getNamedItemNS(namespaceURI: string | null, localName: string | null): Attr; item(index: number): Attr; removeNamedItem(name: string): Attr; - removeNamedItemNS(namespaceURI: string, localName: string): Attr; + removeNamedItemNS(namespaceURI: string | null, localName: string | null): Attr; setNamedItem(arg: Attr): Attr; setNamedItemNS(arg: Attr): Attr; [index: number]: Attr; @@ -8727,33 +8733,33 @@ declare var Navigator: { interface Node extends EventTarget { readonly attributes: NamedNodeMap; - readonly baseURI: string; + readonly baseURI: string | null; readonly childNodes: NodeList; readonly firstChild: Node; readonly lastChild: Node; - readonly localName: string; - readonly namespaceURI: string; + readonly localName: string | null; + readonly namespaceURI: string | null; readonly nextSibling: Node; readonly nodeName: string; readonly nodeType: number; - nodeValue: string; + nodeValue: string | null; readonly ownerDocument: Document; readonly parentElement: HTMLElement; readonly parentNode: Node; readonly previousSibling: Node; - textContent: string; + textContent: string | null; appendChild(newChild: Node): Node; cloneNode(deep?: boolean): Node; compareDocumentPosition(other: Node): number; contains(child: Node): boolean; hasAttributes(): boolean; hasChildNodes(): boolean; - insertBefore(newChild: Node, refChild?: Node): Node; - isDefaultNamespace(namespaceURI: string): boolean; + insertBefore(newChild: Node, refChild: Node): Node; + isDefaultNamespace(namespaceURI: string | null): boolean; isEqualNode(arg: Node): boolean; isSameNode(other: Node): boolean; - lookupNamespaceURI(prefix: string): string; - lookupPrefix(namespaceURI: string): string; + lookupNamespaceURI(prefix: string | null): string | null; + lookupPrefix(namespaceURI: string | null): string | null; normalize(): void; removeChild(oldChild: Node): Node; replaceChild(newChild: Node, oldChild: Node): Node; @@ -8982,10 +8988,10 @@ interface PerfWidgetExternal { addEventListener(eventType: string, callback: Function): void; getMemoryUsage(): number; getProcessCpuUsage(): number; - getRecentCpuUsage(last: number): any; - getRecentFrames(last: number): any; - getRecentMemoryUsage(last: number): any; - getRecentPaintRequests(last: number): any; + getRecentCpuUsage(last: number | null): any; + getRecentFrames(last: number | null): any; + getRecentMemoryUsage(last: number | null): any; + getRecentPaintRequests(last: number | null): any; removeEventListener(eventType: string, callback: Function): void; repositionWindow(x: number, y: number): void; resizeWindow(width: number, height: number): void; @@ -9292,13 +9298,13 @@ declare var RTCDTMFToneChangeEvent: { } interface RTCDtlsTransport extends RTCStatsProvider { - ondtlsstatechange: (ev: RTCDtlsTransportStateChangedEvent) => any; - onerror: (ev: Event) => any; + ondtlsstatechange: ((ev: RTCDtlsTransportStateChangedEvent) => any) | null; + onerror: ((ev: Event) => any) | null; readonly state: string; readonly transport: RTCIceTransport; getLocalParameters(): RTCDtlsParameters; getRemoteCertificates(): ArrayBuffer[]; - getRemoteParameters(): RTCDtlsParameters; + getRemoteParameters(): RTCDtlsParameters | null; start(remoteParameters: RTCDtlsParameters): void; stop(): void; addEventListener(type: "dtlsstatechange", listener: (ev: RTCDtlsTransportStateChangedEvent) => any, useCapture?: boolean): void; @@ -9348,8 +9354,8 @@ declare var RTCIceCandidatePairChangedEvent: { interface RTCIceGatherer extends RTCStatsProvider { readonly component: string; - onerror: (ev: Event) => any; - onlocalcandidate: (ev: RTCIceGathererEvent) => any; + onerror: ((ev: Event) => any) | null; + onlocalcandidate: ((ev: RTCIceGathererEvent) => any) | null; createAssociatedGatherer(): RTCIceGatherer; getLocalCandidates(): RTCIceCandidate[]; getLocalParameters(): RTCIceParameters; @@ -9374,16 +9380,16 @@ declare var RTCIceGathererEvent: { interface RTCIceTransport extends RTCStatsProvider { readonly component: string; - readonly iceGatherer: RTCIceGatherer; - oncandidatepairchange: (ev: RTCIceCandidatePairChangedEvent) => any; - onicestatechange: (ev: RTCIceTransportStateChangedEvent) => any; + readonly iceGatherer: RTCIceGatherer | null; + oncandidatepairchange: ((ev: RTCIceCandidatePairChangedEvent) => any) | null; + onicestatechange: ((ev: RTCIceTransportStateChangedEvent) => any) | null; readonly role: string; readonly state: string; addRemoteCandidate(remoteCandidate: RTCIceCandidate | RTCIceCandidateComplete): void; createAssociatedTransport(): RTCIceTransport; - getNominatedCandidatePair(): RTCIceCandidatePair; + getNominatedCandidatePair(): RTCIceCandidatePair | null; getRemoteCandidates(): RTCIceCandidate[]; - getRemoteParameters(): RTCIceParameters; + getRemoteParameters(): RTCIceParameters | null; setRemoteCandidates(remoteCandidates: RTCIceCandidate[]): void; start(gatherer: RTCIceGatherer, remoteParameters: RTCIceParameters, role?: string): void; stop(): void; @@ -9407,9 +9413,9 @@ declare var RTCIceTransportStateChangedEvent: { } interface RTCRtpReceiver extends RTCStatsProvider { - onerror: (ev: Event) => any; + onerror: ((ev: Event) => any) | null; readonly rtcpTransport: RTCDtlsTransport; - readonly track: MediaStreamTrack; + readonly track: MediaStreamTrack | null; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; getContributingSources(): RTCRtpContributingSource[]; receive(parameters: RTCRtpParameters): void; @@ -9427,8 +9433,8 @@ declare var RTCRtpReceiver: { } interface RTCRtpSender extends RTCStatsProvider { - onerror: (ev: Event) => any; - onssrcconflict: (ev: RTCSsrcConflictEvent) => any; + onerror: ((ev: Event) => any) | null; + onssrcconflict: ((ev: RTCSsrcConflictEvent) => any) | null; readonly rtcpTransport: RTCDtlsTransport; readonly track: MediaStreamTrack; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; @@ -9448,7 +9454,7 @@ declare var RTCRtpSender: { } interface RTCSrtpSdesTransport extends EventTarget { - onerror: (ev: Event) => any; + onerror: ((ev: Event) => any) | null; readonly transport: RTCIceTransport; addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; @@ -11495,9 +11501,9 @@ interface SubtleCrypto { encrypt(algorithm: string | Algorithm, key: CryptoKey, data: ArrayBufferView): PromiseLike; exportKey(format: string, key: CryptoKey): PromiseLike; generateKey(algorithm: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; - importKey(format: string, keyData: ArrayBufferView, algorithm: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; + importKey(format: string, keyData: ArrayBufferView, algorithm: string | Algorithm | null, extractable: boolean, keyUsages: string[]): PromiseLike; sign(algorithm: string | Algorithm, key: CryptoKey, data: ArrayBufferView): PromiseLike; - unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string | Algorithm, unwrappedKeyAlgorithm: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; + unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string | Algorithm, unwrappedKeyAlgorithm: string | Algorithm | null, extractable: boolean, keyUsages: string[]): PromiseLike; verify(algorithm: string | Algorithm, key: CryptoKey, signature: ArrayBufferView, data: ArrayBufferView): PromiseLike; wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: string | Algorithm): PromiseLike; } @@ -11631,7 +11637,7 @@ declare var TextTrackCueList: { interface TextTrackList extends EventTarget { readonly length: number; - onaddtrack: (ev: TrackEvent) => any; + onaddtrack: ((ev: TrackEvent) => any) | null; item(index: number): TextTrack; addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; @@ -11687,7 +11693,7 @@ declare var TouchEvent: { interface TouchList { readonly length: number; - item(index: number): Touch; + item(index: number): Touch | null; [index: number]: Touch; } @@ -11829,7 +11835,7 @@ interface VideoTrackList extends EventTarget { onchange: (ev: Event) => any; onremovetrack: (ev: TrackEvent) => any; readonly selectedIndex: number; - getTrackById(id: string): VideoTrack; + getTrackById(id: string): VideoTrack | null; item(index: number): VideoTrack; addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; @@ -11882,7 +11888,7 @@ declare var WEBGL_depth_texture: { } interface WaveShaperNode extends AudioNode { - curve: Float32Array; + curve: Float32Array | null; oversample: string; } @@ -11956,12 +11962,12 @@ interface WebGLRenderingContext { readonly drawingBufferHeight: number; readonly drawingBufferWidth: number; activeTexture(texture: number): void; - attachShader(program: WebGLProgram, shader: WebGLShader): void; - bindAttribLocation(program: WebGLProgram, index: number, name: string): void; - bindBuffer(target: number, buffer: WebGLBuffer): void; - bindFramebuffer(target: number, framebuffer: WebGLFramebuffer): void; - bindRenderbuffer(target: number, renderbuffer: WebGLRenderbuffer): void; - bindTexture(target: number, texture: WebGLTexture): void; + attachShader(program: WebGLProgram | null, shader: WebGLShader | null): void; + bindAttribLocation(program: WebGLProgram | null, index: number, name: string): void; + bindBuffer(target: number, buffer: WebGLBuffer | null): void; + bindFramebuffer(target: number, framebuffer: WebGLFramebuffer | null): void; + bindRenderbuffer(target: number, renderbuffer: WebGLRenderbuffer | null): void; + bindTexture(target: number, texture: WebGLTexture | null): void; blendColor(red: number, green: number, blue: number, alpha: number): void; blendEquation(mode: number): void; blendEquationSeparate(modeRGB: number, modeAlpha: number): void; @@ -11975,28 +11981,28 @@ interface WebGLRenderingContext { clearDepth(depth: number): void; clearStencil(s: number): void; colorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void; - compileShader(shader: WebGLShader): void; + compileShader(shader: WebGLShader | null): void; compressedTexImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, data: ArrayBufferView): void; compressedTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, data: ArrayBufferView): void; copyTexImage2D(target: number, level: number, internalformat: number, x: number, y: number, width: number, height: number, border: number): void; copyTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, x: number, y: number, width: number, height: number): void; - createBuffer(): WebGLBuffer; - createFramebuffer(): WebGLFramebuffer; - createProgram(): WebGLProgram; - createRenderbuffer(): WebGLRenderbuffer; - createShader(type: number): WebGLShader; - createTexture(): WebGLTexture; + createBuffer(): WebGLBuffer | null; + createFramebuffer(): WebGLFramebuffer | null; + createProgram(): WebGLProgram | null; + createRenderbuffer(): WebGLRenderbuffer | null; + createShader(type: number): WebGLShader | null; + createTexture(): WebGLTexture | null; cullFace(mode: number): void; - deleteBuffer(buffer: WebGLBuffer): void; - deleteFramebuffer(framebuffer: WebGLFramebuffer): void; - deleteProgram(program: WebGLProgram): void; - deleteRenderbuffer(renderbuffer: WebGLRenderbuffer): void; - deleteShader(shader: WebGLShader): void; - deleteTexture(texture: WebGLTexture): void; + deleteBuffer(buffer: WebGLBuffer | null): void; + deleteFramebuffer(framebuffer: WebGLFramebuffer | null): void; + deleteProgram(program: WebGLProgram | null): void; + deleteRenderbuffer(renderbuffer: WebGLRenderbuffer | null): void; + deleteShader(shader: WebGLShader | null): void; + deleteTexture(texture: WebGLTexture | null): void; depthFunc(func: number): void; depthMask(flag: boolean): void; depthRange(zNear: number, zFar: number): void; - detachShader(program: WebGLProgram, shader: WebGLShader): void; + detachShader(program: WebGLProgram | null, shader: WebGLShader | null): void; disable(cap: number): void; disableVertexAttribArray(index: number): void; drawArrays(mode: number, first: number, count: number): void; @@ -12005,51 +12011,51 @@ interface WebGLRenderingContext { enableVertexAttribArray(index: number): void; finish(): void; flush(): void; - framebufferRenderbuffer(target: number, attachment: number, renderbuffertarget: number, renderbuffer: WebGLRenderbuffer): void; - framebufferTexture2D(target: number, attachment: number, textarget: number, texture: WebGLTexture, level: number): void; + framebufferRenderbuffer(target: number, attachment: number, renderbuffertarget: number, renderbuffer: WebGLRenderbuffer | null): void; + framebufferTexture2D(target: number, attachment: number, textarget: number, texture: WebGLTexture | null, level: number): void; frontFace(mode: number): void; generateMipmap(target: number): void; - getActiveAttrib(program: WebGLProgram, index: number): WebGLActiveInfo; - getActiveUniform(program: WebGLProgram, index: number): WebGLActiveInfo; - getAttachedShaders(program: WebGLProgram): WebGLShader[]; - getAttribLocation(program: WebGLProgram, name: string): number; + getActiveAttrib(program: WebGLProgram | null, index: number): WebGLActiveInfo | null; + getActiveUniform(program: WebGLProgram | null, index: number): WebGLActiveInfo | null; + getAttachedShaders(program: WebGLProgram | null): WebGLShader[] | null; + getAttribLocation(program: WebGLProgram | null, name: string): number; getBufferParameter(target: number, pname: number): any; getContextAttributes(): WebGLContextAttributes; getError(): number; getExtension(name: string): any; getFramebufferAttachmentParameter(target: number, attachment: number, pname: number): any; getParameter(pname: number): any; - getProgramInfoLog(program: WebGLProgram): string; - getProgramParameter(program: WebGLProgram, pname: number): any; + getProgramInfoLog(program: WebGLProgram | null): string | null; + getProgramParameter(program: WebGLProgram | null, pname: number): any; getRenderbufferParameter(target: number, pname: number): any; - getShaderInfoLog(shader: WebGLShader): string; - getShaderParameter(shader: WebGLShader, pname: number): any; - getShaderPrecisionFormat(shadertype: number, precisiontype: number): WebGLShaderPrecisionFormat; - getShaderSource(shader: WebGLShader): string; - getSupportedExtensions(): string[]; + getShaderInfoLog(shader: WebGLShader | null): string | null; + getShaderParameter(shader: WebGLShader | null, pname: number): any; + getShaderPrecisionFormat(shadertype: number, precisiontype: number): WebGLShaderPrecisionFormat | null; + getShaderSource(shader: WebGLShader | null): string | null; + getSupportedExtensions(): string[] | null; getTexParameter(target: number, pname: number): any; - getUniform(program: WebGLProgram, location: WebGLUniformLocation): any; - getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation; + getUniform(program: WebGLProgram | null, location: WebGLUniformLocation | null): any; + getUniformLocation(program: WebGLProgram | null, name: string): WebGLUniformLocation | null; getVertexAttrib(index: number, pname: number): any; getVertexAttribOffset(index: number, pname: number): number; hint(target: number, mode: number): void; - isBuffer(buffer: WebGLBuffer): boolean; + isBuffer(buffer: WebGLBuffer | null): boolean; isContextLost(): boolean; isEnabled(cap: number): boolean; - isFramebuffer(framebuffer: WebGLFramebuffer): boolean; - isProgram(program: WebGLProgram): boolean; - isRenderbuffer(renderbuffer: WebGLRenderbuffer): boolean; - isShader(shader: WebGLShader): boolean; - isTexture(texture: WebGLTexture): boolean; + isFramebuffer(framebuffer: WebGLFramebuffer | null): boolean; + isProgram(program: WebGLProgram | null): boolean; + isRenderbuffer(renderbuffer: WebGLRenderbuffer | null): boolean; + isShader(shader: WebGLShader | null): boolean; + isTexture(texture: WebGLTexture | null): boolean; lineWidth(width: number): void; - linkProgram(program: WebGLProgram): void; + linkProgram(program: WebGLProgram | null): void; pixelStorei(pname: number, param: number): void; polygonOffset(factor: number, units: number): void; - readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void; + readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView | null): void; renderbufferStorage(target: number, internalformat: number, width: number, height: number): void; sampleCoverage(value: number, invert: boolean): void; scissor(x: number, y: number, width: number, height: number): void; - shaderSource(shader: WebGLShader, source: string): void; + shaderSource(shader: WebGLShader | null, source: string): void; stencilFunc(func: number, ref: number, mask: number): void; stencilFuncSeparate(face: number, func: number, ref: number, mask: number): void; stencilMask(mask: number): void; @@ -12068,27 +12074,27 @@ interface WebGLRenderingContext { texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, canvas: HTMLCanvasElement): void; texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, video: HTMLVideoElement): void; texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels: ImageData): void; - uniform1f(location: WebGLUniformLocation, x: number): void; + uniform1f(location: WebGLUniformLocation | null, x: number): void; uniform1fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; - uniform1i(location: WebGLUniformLocation, x: number): void; + uniform1i(location: WebGLUniformLocation | null, x: number): void; uniform1iv(location: WebGLUniformLocation, v: Int32Array | number[]): void; - uniform2f(location: WebGLUniformLocation, x: number, y: number): void; + uniform2f(location: WebGLUniformLocation | null, x: number, y: number): void; uniform2fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; - uniform2i(location: WebGLUniformLocation, x: number, y: number): void; + uniform2i(location: WebGLUniformLocation | null, x: number, y: number): void; uniform2iv(location: WebGLUniformLocation, v: Int32Array | number[]): void; - uniform3f(location: WebGLUniformLocation, x: number, y: number, z: number): void; + uniform3f(location: WebGLUniformLocation | null, x: number, y: number, z: number): void; uniform3fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; - uniform3i(location: WebGLUniformLocation, x: number, y: number, z: number): void; + uniform3i(location: WebGLUniformLocation | null, x: number, y: number, z: number): void; uniform3iv(location: WebGLUniformLocation, v: Int32Array | number[]): void; - uniform4f(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void; + uniform4f(location: WebGLUniformLocation | null, x: number, y: number, z: number, w: number): void; uniform4fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; - uniform4i(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void; + uniform4i(location: WebGLUniformLocation | null, x: number, y: number, z: number, w: number): void; uniform4iv(location: WebGLUniformLocation, v: Int32Array | number[]): void; uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array | number[]): void; uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array | number[]): void; uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array | number[]): void; - useProgram(program: WebGLProgram): void; - validateProgram(program: WebGLProgram): void; + useProgram(program: WebGLProgram | null): void; + validateProgram(program: WebGLProgram | null): void; vertexAttrib1f(indx: number, x: number): void; vertexAttrib1fv(indx: number, values: Float32Array | number[]): void; vertexAttrib2f(indx: number, x: number, y: number): void; @@ -12998,7 +13004,7 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window open(url?: string, target?: string, features?: string, replace?: boolean): Window; postMessage(message: any, targetOrigin: string, transfer?: any[]): void; print(): void; - prompt(message?: string, _default?: string): string; + prompt(message?: string, _default?: string): string | null; releaseEvents(): void; requestAnimationFrame(callback: FrameRequestCallback): number; resizeBy(x?: number, y?: number): void; @@ -13151,7 +13157,7 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { withCredentials: boolean; abort(): void; getAllResponseHeaders(): string; - getResponseHeader(header: string): string; + getResponseHeader(header: string): string | null; msCachingEnabled(): boolean; open(method: string, url: string, async?: boolean, user?: string, password?: string): void; overrideMimeType(mime: string): void; @@ -13675,14 +13681,6 @@ interface ProgressEventInit extends EventInit { total?: number; } -interface HTMLPictureElement extends HTMLElement { -} - -declare var HTMLPictureElement: { - prototype: HTMLPictureElement; - new(): HTMLPictureElement; -} - interface ClipboardEventInit extends EventInit { data?: string; dataType?: string; @@ -13896,7 +13894,7 @@ declare function msWriteProfilerMark(profilerMarkName: string): void; declare function open(url?: string, target?: string, features?: string, replace?: boolean): Window; declare function postMessage(message: any, targetOrigin: string, transfer?: any[]): void; declare function print(): void; -declare function prompt(message?: string, _default?: string): string; +declare function prompt(message?: string, _default?: string): string | null; declare function releaseEvents(): void; declare function requestAnimationFrame(callback: FrameRequestCallback): number; declare function resizeBy(x?: number, y?: number): void; diff --git a/lib/lib.es2015.collection.d.ts b/lib/lib.es2015.collection.d.ts index b1dbcac592d..f014185d9e1 100644 --- a/lib/lib.es2015.collection.d.ts +++ b/lib/lib.es2015.collection.d.ts @@ -20,13 +20,13 @@ interface Map { forEach(callbackfn: (value: V, index: K, map: Map) => void, thisArg?: any): void; get(key: K): V | undefined; has(key: K): boolean; - set(key: K, value?: V): Map; + set(key: K, value?: V): this; readonly size: number; } interface MapConstructor { new (): Map; - new (): Map; + new (entries?: [K, V][]): Map; readonly prototype: Map; } declare var Map: MapConstructor; @@ -36,51 +36,42 @@ interface WeakMap { delete(key: K): boolean; get(key: K): V | undefined; has(key: K): boolean; - set(key: K, value?: V): WeakMap; - + set(key: K, value?: V): this; } interface WeakMapConstructor { new (): WeakMap; - new (): WeakMap; + new (entries?: [K, V][]): WeakMap; readonly prototype: WeakMap; } declare var WeakMap: WeakMapConstructor; interface Set { - add(value: T): Set; + add(value: T): this; clear(): void; delete(value: T): boolean; - entries(): IterableIterator<[T, T]>; forEach(callbackfn: (value: T, index: T, set: Set) => void, thisArg?: any): void; has(value: T): boolean; - keys(): IterableIterator; readonly size: number; - values(): IterableIterator; - [Symbol.iterator]():IterableIterator; - readonly [Symbol.toStringTag]: "Set"; } interface SetConstructor { new (): Set; - new (): Set; - new (iterable: Iterable): Set; + new (values?: T[]): Set; readonly prototype: Set; } declare var Set: SetConstructor; interface WeakSet { - add(value: T): WeakSet; + add(value: T): this; clear(): void; delete(value: T): boolean; has(value: T): boolean; - readonly [Symbol.toStringTag]: "WeakSet"; } interface WeakSetConstructor { new (): WeakSet; - new (): WeakSet; - new (iterable: Iterable): WeakSet; + new (values?: T[]): WeakSet; readonly prototype: WeakSet; } declare var WeakSet: WeakSetConstructor; diff --git a/lib/lib.es2015.core.d.ts b/lib/lib.es2015.core.d.ts index fb6b7b96df5..c7c7afb821b 100644 --- a/lib/lib.es2015.core.d.ts +++ b/lib/lib.es2015.core.d.ts @@ -17,48 +17,48 @@ and limitations under the License. declare type PropertyKey = string | number | symbol; interface Array { - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: T, index: number, obj: Array) => boolean, thisArg?: any): T | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: T) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: T) => boolean, thisArg?: any): number; /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: T, start?: number, end?: number): T[]; + fill(value: T, start?: number, end?: number): this; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): T[]; + copyWithin(target: number, start: number, end?: number): this; } interface ArrayConstructor { @@ -130,7 +130,7 @@ interface Math { log1p(x: number): number; /** - * Returns the result of (e^x - 1) of x (e raised to the power of x, where e is the base of + * Returns the result of (e^x - 1) of x (e raised to the power of x, where e is the base of * the natural logarithms). * @param x A numeric expression. */ @@ -206,14 +206,14 @@ interface Math { interface NumberConstructor { /** * The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1 - * that is representable as a Number value, which is approximately: + * that is representable as a Number value, which is approximately: * 2.2204460492503130808472633361816 x 10‍−‍16. */ readonly EPSILON: number; /** * Returns true if passed value is finite. - * Unlike the global isFininte, Number.isFinite doesn't forcibly convert the parameter to a + * Unlike the global isFininte, Number.isFinite doesn't forcibly convert the parameter to a * number. Only finite values of the type number, result in true. * @param number A numeric value. */ @@ -226,7 +226,7 @@ interface NumberConstructor { isInteger(number: number): boolean; /** - * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a + * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a * number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter * to a number. Only values of the type number, that are also NaN, result in true. * @param number A numeric value. @@ -239,30 +239,30 @@ interface NumberConstructor { */ isSafeInteger(number: number): boolean; - /** - * The value of the largest integer n such that n and n + 1 are both exactly representable as - * a Number value. + /** + * The value of the largest integer n such that n and n + 1 are both exactly representable as + * a Number value. * The value of Number.MIN_SAFE_INTEGER is 9007199254740991 2^53 − 1. */ readonly MAX_SAFE_INTEGER: number; - /** - * The value of the smallest integer n such that n and n − 1 are both exactly representable as - * a Number value. + /** + * The value of the smallest integer n such that n and n − 1 are both exactly representable as + * a Number value. * The value of Number.MIN_SAFE_INTEGER is −9007199254740991 (−(2^53 − 1)). */ readonly MIN_SAFE_INTEGER: number; /** - * Converts a string to a floating-point number. - * @param string A string that contains a floating-point number. + * Converts a string to a floating-point number. + * @param string A string that contains a floating-point number. */ parseFloat(string: string): number; /** * Converts A string to an integer. * @param s A string to convert into a number. - * @param radix A value between 2 and 36 that specifies the base of the number in numString. + * @param radix A value between 2 and 36 that specifies the base of the number in numString. * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. * All other strings are considered decimal. */ @@ -271,12 +271,12 @@ interface NumberConstructor { interface Object { /** - * Determines whether an object has a property with the specified name. + * Determines whether an object has a property with the specified name. * @param v A property name. */ hasOwnProperty(v: PropertyKey): boolean - /** + /** * Determines whether a specified property is enumerable. * @param v A property name. */ @@ -285,7 +285,7 @@ interface Object { interface ObjectConstructor { /** - * Copy the values of all of the enumerable own properties from one or more source objects to a + * Copy the values of all of the enumerable own properties from one or more source objects to a * target object. Returns the target object. * @param target The target object to copy to. * @param source The source object from which to copy properties. @@ -293,7 +293,7 @@ interface ObjectConstructor { assign(target: T, source: U): T & U; /** - * Copy the values of all of the enumerable own properties from one or more source objects to a + * Copy the values of all of the enumerable own properties from one or more source objects to a * target object. Returns the target object. * @param target The target object to copy to. * @param source1 The first source object from which to copy properties. @@ -302,7 +302,7 @@ interface ObjectConstructor { assign(target: T, source1: U, source2: V): T & U & V; /** - * Copy the values of all of the enumerable own properties from one or more source objects to a + * Copy the values of all of the enumerable own properties from one or more source objects to a * target object. Returns the target object. * @param target The target object to copy to. * @param source1 The first source object from which to copy properties. @@ -312,7 +312,7 @@ interface ObjectConstructor { assign(target: T, source1: U, source2: V, source3: W): T & U & V & W; /** - * Copy the values of all of the enumerable own properties from one or more source objects to a + * Copy the values of all of the enumerable own properties from one or more source objects to a * target object. Returns the target object. * @param target The target object to copy to. * @param sources One or more source objects from which to copy properties @@ -340,17 +340,17 @@ interface ObjectConstructor { setPrototypeOf(o: any, proto: any): any; /** - * Gets the own property descriptor of the specified object. - * An own property descriptor is one that is defined directly on the object and is not - * inherited from the object's prototype. + * Gets the own property descriptor of the specified object. + * An own property descriptor is one that is defined directly on the object and is not + * inherited from the object's prototype. * @param o Object that contains the property. * @param p Name of the property. */ getOwnPropertyDescriptor(o: any, propertyKey: PropertyKey): PropertyDescriptor; /** - * Adds a property to an object, or modifies attributes of an existing property. - * @param o Object on which to add or modify the property. This can be a native JavaScript + * Adds a property to an object, or modifies attributes of an existing property. + * @param o Object on which to add or modify the property. This can be a native JavaScript * object (that is, a user-defined object or a built in object) or a DOM object. * @param p The property name. * @param attributes Descriptor for the property. It can be for a data property or an accessor @@ -374,47 +374,60 @@ interface RegExp { */ readonly flags: string; - /** - * Returns a Boolean value indicating the state of the sticky flag (y) used with a regular - * expression. Default is false. Read-only. + /** + * Returns a Boolean value indicating the state of the sticky flag (y) used with a regular + * expression. Default is false. Read-only. */ readonly sticky: boolean; - /** - * Returns a Boolean value indicating the state of the Unicode flag (u) used with a regular - * expression. Default is false. Read-only. + /** + * Returns a Boolean value indicating the state of the Unicode flag (u) used with a regular + * expression. Default is false. Read-only. */ readonly unicode: boolean; } +interface RegExpConstructor { + new (pattern: RegExp, flags?: string): RegExp; + (pattern: RegExp, flags?: string): RegExp; +} + interface String { /** - * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point - * value of the UTF-16 encoded code point starting at the string element at position pos in - * the String resulting from converting this object to a String. - * If there is no element at that position, the result is undefined. + * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point + * value of the UTF-16 encoded code point starting at the string element at position pos in + * the String resulting from converting this object to a String. + * If there is no element at that position, the result is undefined. * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos. */ codePointAt(pos: number): number | undefined; /** - * Returns true if searchString appears as a substring of the result of converting this - * object to a String, at one or more positions that are + * Returns true if searchString appears as a substring of the result of converting this + * object to a String, at one or more positions that are * greater than or equal to position; otherwise, returns false. - * @param searchString search string + * @param searchString search string * @param position If position is undefined, 0 is assumed, so as to search all of the String. */ includes(searchString: string, position?: number): boolean; /** - * Returns true if the sequence of elements of searchString converted to a String is the - * same as the corresponding elements of this object (converted to a String) starting at + * Returns true if the sequence of elements of searchString converted to a String is the + * same as the corresponding elements of this object (converted to a String) starting at * endPosition – length(this). Otherwise returns false. */ endsWith(searchString: string, endPosition?: number): boolean; /** - * Returns the String value result of normalizing the string into the normalization form + * Returns the String value result of normalizing the string into the normalization form + * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms. + * @param form Applicable values: "NFC", "NFD", "NFKC", or "NFKD", If not specified default + * is "NFC" + */ + normalize(form: "NFC" | "NFD" | "NFKC" | "NFKD"): string; + + /** + * Returns the String value result of normalizing the string into the normalization form * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms. * @param form Applicable values: "NFC", "NFD", "NFKC", or "NFKD", If not specified default * is "NFC" @@ -422,15 +435,15 @@ interface String { normalize(form?: string): string; /** - * Returns a String value that is made from count copies appended together. If count is 0, + * Returns a String value that is made from count copies appended together. If count is 0, * T is the empty String is returned. * @param count number of copies to append */ repeat(count: number): string; /** - * Returns true if the sequence of elements of searchString converted to a String is the - * same as the corresponding elements of this object (converted to a String) starting at + * Returns true if the sequence of elements of searchString converted to a String is the + * same as the corresponding elements of this object (converted to a String) starting at * position. Otherwise returns false. */ startsWith(searchString: string, position?: number): boolean; @@ -490,10 +503,10 @@ interface StringConstructor { /** * String.raw is intended for use as a tag function of a Tagged Template String. When called - * as such the first argument will be a well formed template call site object and the rest + * as such the first argument will be a well formed template call site object and the rest * parameter will contain the substitution values. * @param template A well-formed template string call site representation. * @param substitutions A set of substitution values. */ raw(template: TemplateStringsArray, ...substitutions: any[]): string; -} \ No newline at end of file +} diff --git a/lib/lib.es2015.iterable.d.ts b/lib/lib.es2015.iterable.d.ts index ef8b99309af..a62d2635fae 100644 --- a/lib/lib.es2015.iterable.d.ts +++ b/lib/lib.es2015.iterable.d.ts @@ -16,9 +16,17 @@ and limitations under the License. /// /// +interface SymbolConstructor { + /** + * A method that returns the default iterator for an object. Called by the semantics of the + * for-of statement. + */ + readonly iterator: symbol; +} + interface IteratorResult { done: boolean; - value?: T; + value: T; } interface Iterator { @@ -27,11 +35,18 @@ interface Iterator { throw?(e?: any): IteratorResult; } -interface Iterable { } +interface Iterable { + [Symbol.iterator](): Iterator; +} -interface IterableIterator extends Iterator { } +interface IterableIterator extends Iterator { + [Symbol.iterator](): IterableIterator; +} interface Array { + /** Iterator */ + [Symbol.iterator](): IterableIterator; + /** * Returns an array of key, value pairs for every entry in the array */ @@ -64,7 +79,13 @@ interface ArrayConstructor { from(iterable: Iterable): Array; } +interface IArguments { + /** Iterator */ + [Symbol.iterator](): IterableIterator; +} + interface Map { + [Symbol.iterator](): IterableIterator<[K,V]>; entries(): IterableIterator<[K, V]>; keys(): IterableIterator; values(): IterableIterator; @@ -80,6 +101,23 @@ interface WeakMapConstructor { new (iterable: Iterable<[K, V]>): WeakMap; } +interface Set { + [Symbol.iterator](): IterableIterator; + entries(): IterableIterator<[T, T]>; + keys(): IterableIterator; + values(): IterableIterator; +} + +interface SetConstructor { + new (iterable: Iterable): Set; +} + +interface WeakSet { } + +interface WeakSetConstructor { + new (iterable: Iterable): WeakSet; +} + interface Promise { } interface PromiseConstructor { @@ -104,11 +142,17 @@ declare namespace Reflect { function enumerate(target: any): IterableIterator; } +interface String { + /** Iterator */ + [Symbol.iterator](): IterableIterator; +} + /** * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested * number of bytes could not be allocated an exception is raised. */ interface Int8Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -140,6 +184,7 @@ interface Int8ArrayConstructor { * requested number of bytes could not be allocated an exception is raised. */ interface Uint8Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -171,6 +216,7 @@ interface Uint8ArrayConstructor { * If the requested number of bytes could not be allocated an exception is raised. */ interface Uint8ClampedArray { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -205,6 +251,7 @@ interface Uint8ClampedArrayConstructor { * requested number of bytes could not be allocated an exception is raised. */ interface Int16Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -238,6 +285,7 @@ interface Int16ArrayConstructor { * requested number of bytes could not be allocated an exception is raised. */ interface Uint16Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -269,6 +317,7 @@ interface Uint16ArrayConstructor { * requested number of bytes could not be allocated an exception is raised. */ interface Int32Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -300,6 +349,7 @@ interface Int32ArrayConstructor { * requested number of bytes could not be allocated an exception is raised. */ interface Uint32Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -331,6 +381,7 @@ interface Uint32ArrayConstructor { * of bytes could not be allocated an exception is raised. */ interface Float32Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -362,6 +413,7 @@ interface Float32ArrayConstructor { * number of bytes could not be allocated an exception is raised. */ interface Float64Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ diff --git a/lib/lib.es2015.symbol.wellknown.d.ts b/lib/lib.es2015.symbol.wellknown.d.ts index f266301dc23..2d122d1284e 100644 --- a/lib/lib.es2015.symbol.wellknown.d.ts +++ b/lib/lib.es2015.symbol.wellknown.d.ts @@ -29,12 +29,6 @@ interface SymbolConstructor { */ readonly isConcatSpreadable: symbol; - /** - * A method that returns the default iterator for an object. Called by the semantics of the - * for-of statement. - */ - readonly iterator: symbol; - /** * A regular expression method that matches the regular expression against a string. Called * by the String.prototype.match method. @@ -89,9 +83,6 @@ interface Symbol { } interface Array { - /** Iterator */ - [Symbol.iterator](): IterableIterator; - /** * Returns an object whose properties have the value 'true' * when they will be absent when used in a 'with' statement. @@ -132,7 +123,6 @@ interface Date { } interface Map { - [Symbol.iterator]():IterableIterator<[K,V]>; readonly [Symbol.toStringTag]: "Map"; } @@ -140,6 +130,14 @@ interface WeakMap{ readonly [Symbol.toStringTag]: "WeakMap"; } +interface Set { + readonly [Symbol.toStringTag]: "Set"; +} + +interface WeakSet { + readonly [Symbol.toStringTag]: "WeakSet"; +} + interface JSON { readonly [Symbol.toStringTag]: "JSON"; } @@ -159,21 +157,6 @@ interface GeneratorFunction extends Function { readonly [Symbol.toStringTag]: "GeneratorFunction"; } -interface IArguments { - /** Iterator */ - [Symbol.iterator](): IterableIterator; -} - -interface Iterator { } - -interface Iterable { - [Symbol.iterator](): Iterator; -} - -interface IterableIterator extends Iterator { - [Symbol.iterator](): IterableIterator; -} - interface Math { readonly [Symbol.toStringTag]: "Math"; } @@ -239,9 +222,6 @@ interface RegExpConstructor { } interface String { - /** Iterator */ - [Symbol.iterator](): IterableIterator; - /** * Matches a string an object that supports being matched against, and returns an array containing the results of that search. * @param matcher An object that supports being matched against. @@ -295,7 +275,6 @@ interface DataView { * number of bytes could not be allocated an exception is raised. */ interface Int8Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Int8Array"; } @@ -304,7 +283,6 @@ interface Int8Array { * requested number of bytes could not be allocated an exception is raised. */ interface Uint8Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "UInt8Array"; } @@ -313,7 +291,6 @@ interface Uint8Array { * If the requested number of bytes could not be allocated an exception is raised. */ interface Uint8ClampedArray { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Uint8ClampedArray"; } @@ -322,7 +299,6 @@ interface Uint8ClampedArray { * requested number of bytes could not be allocated an exception is raised. */ interface Int16Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Int16Array"; } @@ -331,7 +307,6 @@ interface Int16Array { * requested number of bytes could not be allocated an exception is raised. */ interface Uint16Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Uint16Array"; } @@ -340,7 +315,6 @@ interface Uint16Array { * requested number of bytes could not be allocated an exception is raised. */ interface Int32Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Int32Array"; } @@ -349,7 +323,6 @@ interface Int32Array { * requested number of bytes could not be allocated an exception is raised. */ interface Uint32Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Uint32Array"; } @@ -358,7 +331,6 @@ interface Uint32Array { * of bytes could not be allocated an exception is raised. */ interface Float32Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Float32Array"; } @@ -367,6 +339,5 @@ interface Float32Array { * number of bytes could not be allocated an exception is raised. */ interface Float64Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Float64Array"; } \ No newline at end of file diff --git a/lib/lib.es2017.d.ts b/lib/lib.es2017.d.ts new file mode 100644 index 00000000000..06dc9711df4 --- /dev/null +++ b/lib/lib.es2017.d.ts @@ -0,0 +1,18 @@ +/*! ***************************************************************************** +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. +***************************************************************************** */ + +/// +/// +/// \ No newline at end of file diff --git a/lib/lib.es2017.object.d.ts b/lib/lib.es2017.object.d.ts new file mode 100644 index 00000000000..ac3a16ab370 --- /dev/null +++ b/lib/lib.es2017.object.d.ts @@ -0,0 +1,30 @@ +/*! ***************************************************************************** +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. +***************************************************************************** */ + +/// +interface ObjectConstructor { + /** + * Returns an array of values of the enumerable properties of an object + * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. + */ + values(o: { [s: string]: T }): T[]; + values(o: any): any[]; + /** + * Returns an array of key/values of the enumerable properties of an object + * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object. + */ + entries(o: { [s: string]: T }): [string, T][]; + entries(o: any): [string, any][]; +} \ No newline at end of file diff --git a/lib/lib.es5.d.ts b/lib/lib.es5.d.ts index 8ea19d2b9ea..3a0f73f3cc7 100644 --- a/lib/lib.es5.d.ts +++ b/lib/lib.es5.d.ts @@ -22,7 +22,7 @@ declare const NaN: number; declare const Infinity: number; /** - * Evaluates JavaScript code and executes it. + * Evaluates JavaScript code and executes it. * @param x A String value that contains valid JavaScript code. */ declare function eval(x: string): any; @@ -30,25 +30,25 @@ declare function eval(x: string): any; /** * Converts A string to an integer. * @param s A string to convert into a number. - * @param radix A value between 2 and 36 that specifies the base of the number in numString. + * @param radix A value between 2 and 36 that specifies the base of the number in numString. * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. * All other strings are considered decimal. */ declare function parseInt(s: string, radix?: number): number; /** - * Converts a string to a floating-point number. - * @param string A string that contains a floating-point number. + * Converts a string to a floating-point number. + * @param string A string that contains a floating-point number. */ declare function parseFloat(string: string): number; /** - * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). + * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). * @param number A numeric value. */ declare function isNaN(number: number): boolean; -/** +/** * Determines whether a supplied number is finite. * @param number Any numeric value. */ @@ -66,7 +66,7 @@ declare function decodeURI(encodedURI: string): string; */ declare function decodeURIComponent(encodedURIComponent: string): string; -/** +/** * Encodes a text string as a valid Uniform Resource Identifier (URI) * @param uri A value representing an encoded URI. */ @@ -105,18 +105,18 @@ interface Object { valueOf(): Object; /** - * Determines whether an object has a property with the specified name. + * Determines whether an object has a property with the specified name. * @param v A property name. */ hasOwnProperty(v: string): boolean; /** - * Determines whether an object exists in another object's prototype chain. + * Determines whether an object exists in another object's prototype chain. * @param v Another object whose prototype chain is to be checked. */ isPrototypeOf(v: Object): boolean; - /** + /** * Determines whether a specified property is enumerable. * @param v A property name. */ @@ -131,36 +131,36 @@ interface ObjectConstructor { /** A reference to the prototype for a class of objects. */ readonly prototype: Object; - /** - * Returns the prototype of an object. + /** + * Returns the prototype of an object. * @param o The object that references the prototype. */ getPrototypeOf(o: any): any; /** - * Gets the own property descriptor of the specified object. - * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype. + * Gets the own property descriptor of the specified object. + * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype. * @param o Object that contains the property. * @param p Name of the property. */ getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; - /** - * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly + /** + * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions. * @param o Object that contains the own properties. */ getOwnPropertyNames(o: any): string[]; - /** + /** * Creates an object that has the specified prototype, and that optionally contains specified properties. * @param o Object to use as a prototype. May be null - * @param properties JavaScript object that contains one or more property descriptors. + * @param properties JavaScript object that contains one or more property descriptors. */ create(o: any, properties?: PropertyDescriptorMap): any; /** - * Adds a property to an object, or modifies attributes of an existing property. + * Adds a property to an object, or modifies attributes of an existing property. * @param o Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object. * @param p The property name. * @param attributes Descriptor for the property. It can be for a data property or an accessor property. @@ -168,7 +168,7 @@ interface ObjectConstructor { defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; /** - * Adds one or more properties to an object, and/or modifies attributes of existing properties. + * Adds one or more properties to an object, and/or modifies attributes of existing properties. * @param o Object on which to add or modify the properties. This can be a native JavaScript object or a DOM object. * @param properties JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property. */ @@ -176,7 +176,7 @@ interface ObjectConstructor { /** * Prevents the modification of attributes of existing properties, and prevents the addition of new properties. - * @param o Object on which to lock the attributes. + * @param o Object on which to lock the attributes. */ seal(o: T): T; @@ -188,25 +188,25 @@ interface ObjectConstructor { /** * Prevents the addition of new properties to an object. - * @param o Object to make non-extensible. + * @param o Object to make non-extensible. */ preventExtensions(o: T): T; /** * Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object. - * @param o Object to test. + * @param o Object to test. */ isSealed(o: any): boolean; /** * Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object. - * @param o Object to test. + * @param o Object to test. */ isFrozen(o: any): boolean; /** * Returns a value that indicates whether new properties can be added to an object. - * @param o Object to test. + * @param o Object to test. */ isExtensible(o: any): boolean; @@ -231,7 +231,6 @@ interface Function { * @param thisArg The object to be used as the this object. * @param argArray A set of arguments to be passed to the function. */ - apply(this: (this: T, ...argArray: any[]) => U, thisArg: T, argArray?: any): U; apply(this: Function, thisArg: any, argArray?: any): any; /** @@ -239,16 +238,14 @@ interface Function { * @param thisArg The object to be used as the current object. * @param argArray A list of arguments to be passed to the method. */ - call(this: (this: T, ...argArray: any[]) => U, thisArg: T, ...argArray: any[]): U; call(this: Function, thisArg: any, ...argArray: any[]): any; /** - * For a given function, creates a bound function that has the same body as the original function. + * For a given function, creates a bound function that has the same body as the original function. * The this object of the bound function is associated with the specified object, and has the specified initial parameters. * @param thisArg An object to which the this keyword can refer inside the new function. * @param argArray A list of arguments to be passed to the new function. */ - bind(this: (this: T, ...argArray: any[]) => U, thisArg: T, ...argArray: any[]): (this: void, ...argArray: any[]) => U; bind(this: Function, thisArg: any, ...argArray: any[]): any; prototype: any; @@ -287,7 +284,7 @@ interface String { */ charAt(pos: number): string; - /** + /** * Returns the Unicode value of the character at the specified location. * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned. */ @@ -295,12 +292,12 @@ interface String { /** * Returns a string that contains the concatenation of two or more strings. - * @param strings The strings to append to the end of the string. + * @param strings The strings to append to the end of the string. */ concat(...strings: string[]): string; /** - * Returns the position of the first occurrence of a substring. + * Returns the position of the first occurrence of a substring. * @param searchString The substring to search for in the string * @param position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string. */ @@ -319,15 +316,15 @@ interface String { */ localeCompare(that: string): number; - /** + /** * Matches a string with a regular expression, and returns an array containing the results of that search. * @param regexp A variable name or string literal containing the regular expression pattern and flags. */ match(regexp: string): RegExpMatchArray | null; - /** + /** * Matches a string with a regular expression, and returns an array containing the results of that search. - * @param regexp A regular expression object that contains the regular expression pattern and applicable flags. + * @param regexp A regular expression object that contains the regular expression pattern and applicable flags. */ match(regexp: RegExp): RegExpMatchArray | null; @@ -361,40 +358,40 @@ interface String { /** * Finds the first substring match in a regular expression search. - * @param regexp The regular expression pattern and applicable flags. + * @param regexp The regular expression pattern and applicable flags. */ search(regexp: string): number; /** * Finds the first substring match in a regular expression search. - * @param regexp The regular expression pattern and applicable flags. + * @param regexp The regular expression pattern and applicable flags. */ search(regexp: RegExp): number; /** * Returns a section of a string. - * @param start The index to the beginning of the specified portion of stringObj. - * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end. + * @param start The index to the beginning of the specified portion of stringObj. + * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end. * If this value is not specified, the substring continues to the end of stringObj. */ slice(start?: number, end?: number): string; /** * Split a string into substrings using the specified separator and return them as an array. - * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. + * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. * @param limit A value used to limit the number of elements returned in the array. */ split(separator: string, limit?: number): string[]; /** * Split a string into substrings using the specified separator and return them as an array. - * @param separator A Regular Express that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. + * @param separator A Regular Express that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. * @param limit A value used to limit the number of elements returned in the array. */ split(separator: RegExp, limit?: number): string[]; /** - * Returns the substring at the specified location within a String object. + * Returns the substring at the specified location within a String object. * @param start The zero-based index number indicating the beginning of the substring. * @param end Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end. * If end is omitted, the characters from start through the end of the original string are returned. @@ -440,8 +437,8 @@ interface StringConstructor { fromCharCode(...codes: number[]): string; } -/** - * Allows manipulation and formatting of text strings and determination and location of substrings within strings. +/** + * Allows manipulation and formatting of text strings and determination and location of substrings within strings. */ declare const String: StringConstructor; @@ -465,7 +462,7 @@ interface Number { */ toString(radix?: number): string; - /** + /** * Returns a string representing a number in fixed-point notation. * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. */ @@ -498,21 +495,21 @@ interface NumberConstructor { /** The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324. */ readonly MIN_VALUE: number; - /** + /** * A value that is not a number. * In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function. */ readonly NaN: number; - /** + /** * A value that is less than the largest negative number that can be represented in JavaScript. - * JavaScript displays NEGATIVE_INFINITY values as -infinity. + * JavaScript displays NEGATIVE_INFINITY values as -infinity. */ readonly NEGATIVE_INFINITY: number; /** - * A value greater than the largest number that can be represented in JavaScript. - * JavaScript displays POSITIVE_INFINITY values as infinity. + * A value greater than the largest number that can be represented in JavaScript. + * JavaScript displays POSITIVE_INFINITY values as infinity. */ readonly POSITIVE_INFINITY: number; } @@ -542,23 +539,23 @@ interface Math { /** The square root of 2. */ readonly SQRT2: number; /** - * Returns the absolute value of a number (the value without regard to whether it is positive or negative). + * Returns the absolute value of a number (the value without regard to whether it is positive or negative). * For example, the absolute value of -5 is the same as the absolute value of 5. * @param x A numeric expression for which the absolute value is needed. */ abs(x: number): number; /** - * Returns the arc cosine (or inverse cosine) of a number. + * Returns the arc cosine (or inverse cosine) of a number. * @param x A numeric expression. */ acos(x: number): number; - /** - * Returns the arcsine of a number. + /** + * Returns the arcsine of a number. * @param x A numeric expression. */ asin(x: number): number; /** - * Returns the arctangent of a number. + * Returns the arctangent of a number. * @param x A numeric expression for which the arctangent is needed. */ atan(x: number): number; @@ -569,49 +566,49 @@ interface Math { */ atan2(y: number, x: number): number; /** - * Returns the smallest number greater than or equal to its numeric argument. + * Returns the smallest number greater than or equal to its numeric argument. * @param x A numeric expression. */ ceil(x: number): number; /** - * Returns the cosine of a number. + * Returns the cosine of a number. * @param x A numeric expression that contains an angle measured in radians. */ cos(x: number): number; /** - * Returns e (the base of natural logarithms) raised to a power. + * Returns e (the base of natural logarithms) raised to a power. * @param x A numeric expression representing the power of e. */ exp(x: number): number; /** - * Returns the greatest number less than or equal to its numeric argument. + * Returns the greatest number less than or equal to its numeric argument. * @param x A numeric expression. */ floor(x: number): number; /** - * Returns the natural logarithm (base e) of a number. + * Returns the natural logarithm (base e) of a number. * @param x A numeric expression. */ log(x: number): number; /** - * Returns the larger of a set of supplied numeric expressions. + * Returns the larger of a set of supplied numeric expressions. * @param values Numeric expressions to be evaluated. */ max(...values: number[]): number; /** - * Returns the smaller of a set of supplied numeric expressions. + * Returns the smaller of a set of supplied numeric expressions. * @param values Numeric expressions to be evaluated. */ min(...values: number[]): number; /** - * Returns the value of a base expression taken to a specified power. + * Returns the value of a base expression taken to a specified power. * @param x The base value of the expression. * @param y The exponent value of the expression. */ pow(x: number, y: number): number; /** Returns a pseudorandom number between 0 and 1. */ random(): number; - /** + /** * Returns a supplied numeric expression rounded to the nearest number. * @param x The value to be rounded to the nearest number. */ @@ -687,24 +684,24 @@ interface Date { getUTCMilliseconds(): number; /** Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). */ getTimezoneOffset(): number; - /** + /** * Sets the date and time value in the Date object. - * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT. + * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT. */ setTime(time: number): number; /** - * Sets the milliseconds value in the Date object using local time. + * Sets the milliseconds value in the Date object using local time. * @param ms A numeric value equal to the millisecond value. */ setMilliseconds(ms: number): number; - /** + /** * Sets the milliseconds value in the Date object using Universal Coordinated Time (UTC). - * @param ms A numeric value equal to the millisecond value. + * @param ms A numeric value equal to the millisecond value. */ setUTCMilliseconds(ms: number): number; /** - * Sets the seconds value in the Date object using local time. + * Sets the seconds value in the Date object using local time. * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ @@ -716,16 +713,16 @@ interface Date { */ setUTCSeconds(sec: number, ms?: number): number; /** - * Sets the minutes value in the Date object using local time. - * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. + * Sets the minutes value in the Date object using local time. + * @param min A numeric value equal to the minutes value. + * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ setMinutes(min: number, sec?: number, ms?: number): number; /** * Sets the minutes value in the Date object using Universal Coordinated Time (UTC). - * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. + * @param min A numeric value equal to the minutes value. + * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ setUTCMinutes(min: number, sec?: number, ms?: number): number; @@ -733,7 +730,7 @@ interface Date { * Sets the hour value in the Date object using local time. * @param hours A numeric value equal to the hours value. * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. + * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ setHours(hours: number, min?: number, sec?: number, ms?: number): number; @@ -741,23 +738,23 @@ interface Date { * Sets the hours value in the Date object using Universal Coordinated Time (UTC). * @param hours A numeric value equal to the hours value. * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. + * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ setUTCHours(hours: number, min?: number, sec?: number, ms?: number): number; /** - * Sets the numeric day-of-the-month value of the Date object using local time. + * Sets the numeric day-of-the-month value of the Date object using local time. * @param date A numeric value equal to the day of the month. */ setDate(date: number): number; - /** + /** * Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC). - * @param date A numeric value equal to the day of the month. + * @param date A numeric value equal to the day of the month. */ setUTCDate(date: number): number; - /** - * Sets the month value in the Date object using local time. - * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. + /** + * Sets the month value in the Date object using local time. + * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. * @param date A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used. */ setMonth(month: number, date?: number): number; @@ -802,7 +799,7 @@ interface DateConstructor { */ parse(s: string): number; /** - * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. + * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year. * @param month The month as an number between 0 and 11 (January to December). * @param date The date as an number between 1 and 31. @@ -828,13 +825,13 @@ interface RegExpExecArray extends Array { } interface RegExp { - /** + /** * Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search. * @param string The String object or string literal on which to perform the search. */ exec(string: string): RegExpExecArray | null; - /** + /** * Returns a Boolean value that indicates whether or not a pattern exists in a searched string. * @param string String on which to perform the search. */ @@ -859,7 +856,9 @@ interface RegExp { } interface RegExpConstructor { + new (pattern: RegExp): RegExp; new (pattern: string, flags?: string): RegExp; + (pattern: RegExp): RegExp; (pattern: string, flags?: string): RegExp; readonly prototype: RegExp; @@ -881,6 +880,7 @@ declare const RegExp: RegExpConstructor; interface Error { name: string; message: string; + stack?: string; } interface ErrorConstructor { @@ -961,8 +961,8 @@ interface JSON { /** * Converts a JavaScript Object Notation (JSON) string into an object. * @param text A valid JSON string. - * @param reviver A function that transforms the results. This function is called for each member of the object. - * If a member contains nested objects, the nested objects are transformed before the parent object is. + * @param reviver A function that transforms the results. This function is called for each member of the object. + * If a member contains nested objects, the nested objects are transformed before the parent object is. */ parse(text: string, reviver?: (key: any, value: any) => any): any; /** @@ -1065,22 +1065,22 @@ interface ReadonlyArray { some(callbackfn: (value: T, index: number, array: ReadonlyArray) => boolean, thisArg?: any): boolean; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: T, index: number, array: ReadonlyArray) => void, thisArg?: any): void; /** * Calls a defined callback function on each element of an array, and returns an array that contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: T, index: number, array: ReadonlyArray) => U, thisArg?: any): U[]; /** * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: T, index: number, array: ReadonlyArray) => boolean, thisArg?: any): T[]; + filter(callbackfn: (value: T, index: number, array: ReadonlyArray) => any, thisArg?: any): T[]; /** * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. @@ -1095,13 +1095,13 @@ interface ReadonlyArray { reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray) => U, initialValue: U): U; /** * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T, initialValue?: T): T; /** * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray) => U, initialValue: U): U; @@ -1139,14 +1139,14 @@ interface Array { */ join(separator?: string): string; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): T[]; /** * Removes the first element from an array and returns it. */ shift(): T | undefined; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -1156,7 +1156,7 @@ interface Array { * Sorts an array. * @param compareFn The name of the function used to determine the order of the elements. If omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: T, b: T) => number): T[]; + sort(compareFn?: (a: T, b: T) => number): this; /** * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. * @param start The zero-based location in the array from which to start removing elements. @@ -1200,22 +1200,22 @@ interface Array { some(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; /** * Calls a defined callback function on each element of an array, and returns an array that contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): T[]; + filter(callbackfn: (value: T, index: number, array: T[]) => any, thisArg?: any): T[]; /** * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. @@ -1228,15 +1228,15 @@ interface Array { * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; - /** + /** * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; - /** + /** * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; @@ -1290,10 +1290,10 @@ interface ArrayLike { } /** - * Represents a raw buffer of binary data, which is used to store data for the - * different typed arrays. ArrayBuffers cannot be read from or written to directly, - * but can be passed to a typed array or DataView Object to interpret the raw - * buffer as needed. + * Represents a raw buffer of binary data, which is used to store data for the + * different typed arrays. ArrayBuffers cannot be read from or written to directly, + * but can be passed to a typed array or DataView Object to interpret the raw + * buffer as needed. */ interface ArrayBuffer { /** @@ -1316,7 +1316,7 @@ declare const ArrayBuffer: ArrayBufferConstructor; interface ArrayBufferView { /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ buffer: ArrayBuffer; @@ -1336,124 +1336,124 @@ interface DataView { readonly byteLength: number; readonly byteOffset: number; /** - * Gets the Float32 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Float32 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getFloat32(byteOffset: number, littleEndian?: boolean): number; /** * Gets the Float64 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getFloat64(byteOffset: number, littleEndian?: boolean): number; /** - * Gets the Int8 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Int8 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getInt8(byteOffset: number): number; /** - * Gets the Int16 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Int16 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getInt16(byteOffset: number, littleEndian?: boolean): number; /** - * Gets the Int32 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Int32 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getInt32(byteOffset: number, littleEndian?: boolean): number; /** - * Gets the Uint8 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Uint8 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getUint8(byteOffset: number): number; /** - * Gets the Uint16 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Uint16 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getUint16(byteOffset: number, littleEndian?: boolean): number; /** - * Gets the Uint32 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Uint32 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getUint32(byteOffset: number, littleEndian?: boolean): number; /** - * Stores an Float32 value at the specified byte offset from the start of the view. + * Stores an Float32 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setFloat32(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Float64 value at the specified byte offset from the start of the view. + * Stores an Float64 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setFloat64(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Int8 value at the specified byte offset from the start of the view. + * Stores an Int8 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. */ setInt8(byteOffset: number, value: number): void; /** - * Stores an Int16 value at the specified byte offset from the start of the view. + * Stores an Int16 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setInt16(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Int32 value at the specified byte offset from the start of the view. + * Stores an Int32 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setInt32(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Uint8 value at the specified byte offset from the start of the view. + * Stores an Uint8 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. */ setUint8(byteOffset: number, value: number): void; /** - * Stores an Uint16 value at the specified byte offset from the start of the view. + * Stores an Uint16 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setUint16(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Uint32 value at the specified byte offset from the start of the view. + * Stores an Uint32 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setUint32(byteOffset: number, value: number, littleEndian?: boolean): void; @@ -1465,17 +1465,17 @@ interface DataViewConstructor { declare const DataView: DataViewConstructor; /** - * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested + * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested * number of bytes could not be allocated an exception is raised. */ interface Int8Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -1489,21 +1489,21 @@ interface Int8Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Int8Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -1513,49 +1513,49 @@ interface Int8Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Int8Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): Int8Array; + filter(callbackfn: (value: number, index: number, array: Int8Array) => any, thisArg?: any): Int8Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Int8Array) => void, thisArg?: any): void; @@ -1570,7 +1570,7 @@ interface Int8Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -1578,7 +1578,7 @@ interface Int8Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -1589,65 +1589,65 @@ interface Int8Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Int8Array) => number, thisArg?: any): Int8Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Int8Array; @@ -1665,7 +1665,7 @@ interface Int8Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -1674,31 +1674,31 @@ interface Int8Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Int8Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Int8Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Int8Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -1716,7 +1716,7 @@ interface Int8ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int8Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -1725,7 +1725,7 @@ interface Int8ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Int8Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -1738,17 +1738,17 @@ interface Int8ArrayConstructor { declare const Int8Array: Int8ArrayConstructor; /** - * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the + * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Uint8Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -1762,21 +1762,21 @@ interface Uint8Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Uint8Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -1786,49 +1786,49 @@ interface Uint8Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Uint8Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): Uint8Array; + filter(callbackfn: (value: number, index: number, array: Uint8Array) => any, thisArg?: any): Uint8Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Uint8Array) => void, thisArg?: any): void; @@ -1843,7 +1843,7 @@ interface Uint8Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -1851,7 +1851,7 @@ interface Uint8Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -1862,65 +1862,65 @@ interface Uint8Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Uint8Array) => number, thisArg?: any): Uint8Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Uint8Array; @@ -1938,7 +1938,7 @@ interface Uint8Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -1947,31 +1947,31 @@ interface Uint8Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Uint8Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Uint8Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Uint8Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -1990,7 +1990,7 @@ interface Uint8ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -1999,7 +1999,7 @@ interface Uint8ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Uint8Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -2012,17 +2012,17 @@ interface Uint8ArrayConstructor { declare const Uint8Array: Uint8ArrayConstructor; /** - * A typed array of 8-bit unsigned integer (clamped) values. The contents are initialized to 0. + * A typed array of 8-bit unsigned integer (clamped) values. The contents are initialized to 0. * If the requested number of bytes could not be allocated an exception is raised. */ interface Uint8ClampedArray { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -2036,21 +2036,21 @@ interface Uint8ClampedArray { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Uint8ClampedArray; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -2060,49 +2060,49 @@ interface Uint8ClampedArray { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Uint8ClampedArray; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): Uint8ClampedArray; + filter(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => any, thisArg?: any): Uint8ClampedArray; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => void, thisArg?: any): void; @@ -2117,7 +2117,7 @@ interface Uint8ClampedArray { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -2125,7 +2125,7 @@ interface Uint8ClampedArray { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -2136,65 +2136,65 @@ interface Uint8ClampedArray { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => number, thisArg?: any): Uint8ClampedArray; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Uint8ClampedArray; @@ -2212,7 +2212,7 @@ interface Uint8ClampedArray { */ set(array: Uint8ClampedArray, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -2221,31 +2221,31 @@ interface Uint8ClampedArray { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Uint8ClampedArray; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Uint8ClampedArray view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Uint8ClampedArray; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -2264,7 +2264,7 @@ interface Uint8ClampedArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8ClampedArray; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -2285,17 +2285,17 @@ interface Uint8ClampedArrayConstructor { declare const Uint8ClampedArray: Uint8ClampedArrayConstructor; /** - * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the + * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Int16Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -2309,21 +2309,21 @@ interface Int16Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Int16Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -2333,49 +2333,49 @@ interface Int16Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Int16Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): Int16Array; + filter(callbackfn: (value: number, index: number, array: Int16Array) => any, thisArg?: any): Int16Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Int16Array) => void, thisArg?: any): void; @@ -2390,7 +2390,7 @@ interface Int16Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -2398,7 +2398,7 @@ interface Int16Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -2409,65 +2409,65 @@ interface Int16Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Int16Array) => number, thisArg?: any): Int16Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Int16Array; @@ -2485,7 +2485,7 @@ interface Int16Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -2494,31 +2494,31 @@ interface Int16Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Int16Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Int16Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Int16Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -2537,7 +2537,7 @@ interface Int16ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int16Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -2546,7 +2546,7 @@ interface Int16ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Int16Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -2559,17 +2559,17 @@ interface Int16ArrayConstructor { declare const Int16Array: Int16ArrayConstructor; /** - * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the + * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Uint16Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -2583,21 +2583,21 @@ interface Uint16Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Uint16Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -2607,49 +2607,49 @@ interface Uint16Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Uint16Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): Uint16Array; + filter(callbackfn: (value: number, index: number, array: Uint16Array) => any, thisArg?: any): Uint16Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Uint16Array) => void, thisArg?: any): void; @@ -2664,7 +2664,7 @@ interface Uint16Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -2672,7 +2672,7 @@ interface Uint16Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -2683,65 +2683,65 @@ interface Uint16Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Uint16Array) => number, thisArg?: any): Uint16Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Uint16Array; @@ -2759,7 +2759,7 @@ interface Uint16Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -2768,31 +2768,31 @@ interface Uint16Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Uint16Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Uint16Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Uint16Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -2811,7 +2811,7 @@ interface Uint16ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint16Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -2820,7 +2820,7 @@ interface Uint16ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Uint16Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -2832,17 +2832,17 @@ interface Uint16ArrayConstructor { } declare const Uint16Array: Uint16ArrayConstructor; /** - * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the + * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Int32Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -2856,21 +2856,21 @@ interface Int32Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Int32Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -2880,49 +2880,49 @@ interface Int32Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Int32Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): Int32Array; + filter(callbackfn: (value: number, index: number, array: Int32Array) => any, thisArg?: any): Int32Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Int32Array) => void, thisArg?: any): void; @@ -2937,7 +2937,7 @@ interface Int32Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -2945,7 +2945,7 @@ interface Int32Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -2956,65 +2956,65 @@ interface Int32Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Int32Array) => number, thisArg?: any): Int32Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Int32Array; @@ -3032,7 +3032,7 @@ interface Int32Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -3041,31 +3041,31 @@ interface Int32Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Int32Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Int32Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Int32Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -3084,7 +3084,7 @@ interface Int32ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int32Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -3093,7 +3093,7 @@ interface Int32ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Int32Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -3105,17 +3105,17 @@ interface Int32ArrayConstructor { declare const Int32Array: Int32ArrayConstructor; /** - * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the + * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Uint32Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -3129,21 +3129,21 @@ interface Uint32Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Uint32Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -3153,49 +3153,49 @@ interface Uint32Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Uint32Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): Uint32Array; + filter(callbackfn: (value: number, index: number, array: Uint32Array) => any, thisArg?: any): Uint32Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Uint32Array) => void, thisArg?: any): void; @@ -3210,7 +3210,7 @@ interface Uint32Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -3218,7 +3218,7 @@ interface Uint32Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -3229,65 +3229,65 @@ interface Uint32Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Uint32Array) => number, thisArg?: any): Uint32Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Uint32Array; @@ -3305,7 +3305,7 @@ interface Uint32Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -3314,31 +3314,31 @@ interface Uint32Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Uint32Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Uint32Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Uint32Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -3357,7 +3357,7 @@ interface Uint32ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint32Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -3366,7 +3366,7 @@ interface Uint32ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Uint32Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -3383,12 +3383,12 @@ declare const Uint32Array: Uint32ArrayConstructor; */ interface Float32Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -3402,21 +3402,21 @@ interface Float32Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Float32Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -3426,49 +3426,49 @@ interface Float32Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Float32Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): Float32Array; + filter(callbackfn: (value: number, index: number, array: Float32Array) => any, thisArg?: any): Float32Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Float32Array) => void, thisArg?: any): void; @@ -3483,7 +3483,7 @@ interface Float32Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -3491,7 +3491,7 @@ interface Float32Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -3502,65 +3502,65 @@ interface Float32Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Float32Array) => number, thisArg?: any): Float32Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Float32Array; @@ -3578,7 +3578,7 @@ interface Float32Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -3587,31 +3587,31 @@ interface Float32Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Float32Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Float32Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Float32Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -3630,7 +3630,7 @@ interface Float32ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float32Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -3639,7 +3639,7 @@ interface Float32ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Float32Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -3652,17 +3652,17 @@ interface Float32ArrayConstructor { declare const Float32Array: Float32ArrayConstructor; /** - * A typed array of 64-bit float values. The contents are initialized to 0. If the requested + * A typed array of 64-bit float values. The contents are initialized to 0. If the requested * number of bytes could not be allocated an exception is raised. */ interface Float64Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -3676,21 +3676,21 @@ interface Float64Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Float64Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -3700,49 +3700,49 @@ interface Float64Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Float64Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): Float64Array; + filter(callbackfn: (value: number, index: number, array: Float64Array) => any, thisArg?: any): Float64Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Float64Array) => void, thisArg?: any): void; @@ -3757,7 +3757,7 @@ interface Float64Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -3765,7 +3765,7 @@ interface Float64Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -3776,65 +3776,65 @@ interface Float64Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Float64Array) => number, thisArg?: any): Float64Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Float64Array; @@ -3852,7 +3852,7 @@ interface Float64Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -3861,31 +3861,31 @@ interface Float64Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Float64Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Float64Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Float64Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -3904,7 +3904,7 @@ interface Float64ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float64Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -3913,7 +3913,7 @@ interface Float64ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Float64Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -3925,7 +3925,7 @@ interface Float64ArrayConstructor { declare const Float64Array: Float64ArrayConstructor; ///////////////////////////// -/// ECMAScript Internationalization API +/// ECMAScript Internationalization API ///////////////////////////// declare module Intl { @@ -4068,14 +4068,14 @@ interface String { interface Number { /** - * Converts a number to a string by using the current or specified locale. + * Converts a number to a string by using the current or specified locale. * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleString(locales?: string[], options?: Intl.NumberFormatOptions): string; /** - * Converts a number to a string by using the current or specified locale. + * Converts a number to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ @@ -4084,41 +4084,41 @@ interface Number { interface Date { /** - * Converts a date and time to a string by using the current or specified locale. + * Converts a date and time to a string by using the current or specified locale. * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleString(locales?: string[], options?: Intl.DateTimeFormatOptions): string; /** - * Converts a date to a string by using the current or specified locale. + * Converts a date to a string by using the current or specified locale. * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleDateString(locales?: string[], options?: Intl.DateTimeFormatOptions): string; /** - * Converts a time to a string by using the current or specified locale. + * Converts a time to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleTimeString(locale?: string[], options?: Intl.DateTimeFormatOptions): string; - + /** - * Converts a date and time to a string by using the current or specified locale. + * Converts a date and time to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleString(locale?: string, options?: Intl.DateTimeFormatOptions): string; - + /** - * Converts a date to a string by using the current or specified locale. + * Converts a date to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleDateString(locale?: string, options?: Intl.DateTimeFormatOptions): string; /** - * Converts a time to a string by using the current or specified locale. + * Converts a time to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ diff --git a/lib/lib.es6.d.ts b/lib/lib.es6.d.ts index 202d3d53d82..6ed743d739a 100644 --- a/lib/lib.es6.d.ts +++ b/lib/lib.es6.d.ts @@ -22,7 +22,7 @@ declare const NaN: number; declare const Infinity: number; /** - * Evaluates JavaScript code and executes it. + * Evaluates JavaScript code and executes it. * @param x A String value that contains valid JavaScript code. */ declare function eval(x: string): any; @@ -30,25 +30,25 @@ declare function eval(x: string): any; /** * Converts A string to an integer. * @param s A string to convert into a number. - * @param radix A value between 2 and 36 that specifies the base of the number in numString. + * @param radix A value between 2 and 36 that specifies the base of the number in numString. * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. * All other strings are considered decimal. */ declare function parseInt(s: string, radix?: number): number; /** - * Converts a string to a floating-point number. - * @param string A string that contains a floating-point number. + * Converts a string to a floating-point number. + * @param string A string that contains a floating-point number. */ declare function parseFloat(string: string): number; /** - * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). + * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). * @param number A numeric value. */ declare function isNaN(number: number): boolean; -/** +/** * Determines whether a supplied number is finite. * @param number Any numeric value. */ @@ -66,7 +66,7 @@ declare function decodeURI(encodedURI: string): string; */ declare function decodeURIComponent(encodedURIComponent: string): string; -/** +/** * Encodes a text string as a valid Uniform Resource Identifier (URI) * @param uri A value representing an encoded URI. */ @@ -105,18 +105,18 @@ interface Object { valueOf(): Object; /** - * Determines whether an object has a property with the specified name. + * Determines whether an object has a property with the specified name. * @param v A property name. */ hasOwnProperty(v: string): boolean; /** - * Determines whether an object exists in another object's prototype chain. + * Determines whether an object exists in another object's prototype chain. * @param v Another object whose prototype chain is to be checked. */ isPrototypeOf(v: Object): boolean; - /** + /** * Determines whether a specified property is enumerable. * @param v A property name. */ @@ -131,36 +131,36 @@ interface ObjectConstructor { /** A reference to the prototype for a class of objects. */ readonly prototype: Object; - /** - * Returns the prototype of an object. + /** + * Returns the prototype of an object. * @param o The object that references the prototype. */ getPrototypeOf(o: any): any; /** - * Gets the own property descriptor of the specified object. - * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype. + * Gets the own property descriptor of the specified object. + * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype. * @param o Object that contains the property. * @param p Name of the property. */ getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor; - /** - * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly + /** + * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions. * @param o Object that contains the own properties. */ getOwnPropertyNames(o: any): string[]; - /** + /** * Creates an object that has the specified prototype, and that optionally contains specified properties. * @param o Object to use as a prototype. May be null - * @param properties JavaScript object that contains one or more property descriptors. + * @param properties JavaScript object that contains one or more property descriptors. */ create(o: any, properties?: PropertyDescriptorMap): any; /** - * Adds a property to an object, or modifies attributes of an existing property. + * Adds a property to an object, or modifies attributes of an existing property. * @param o Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object. * @param p The property name. * @param attributes Descriptor for the property. It can be for a data property or an accessor property. @@ -168,7 +168,7 @@ interface ObjectConstructor { defineProperty(o: any, p: string, attributes: PropertyDescriptor): any; /** - * Adds one or more properties to an object, and/or modifies attributes of existing properties. + * Adds one or more properties to an object, and/or modifies attributes of existing properties. * @param o Object on which to add or modify the properties. This can be a native JavaScript object or a DOM object. * @param properties JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property. */ @@ -176,7 +176,7 @@ interface ObjectConstructor { /** * Prevents the modification of attributes of existing properties, and prevents the addition of new properties. - * @param o Object on which to lock the attributes. + * @param o Object on which to lock the attributes. */ seal(o: T): T; @@ -188,25 +188,25 @@ interface ObjectConstructor { /** * Prevents the addition of new properties to an object. - * @param o Object to make non-extensible. + * @param o Object to make non-extensible. */ preventExtensions(o: T): T; /** * Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object. - * @param o Object to test. + * @param o Object to test. */ isSealed(o: any): boolean; /** * Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object. - * @param o Object to test. + * @param o Object to test. */ isFrozen(o: any): boolean; /** * Returns a value that indicates whether new properties can be added to an object. - * @param o Object to test. + * @param o Object to test. */ isExtensible(o: any): boolean; @@ -231,7 +231,6 @@ interface Function { * @param thisArg The object to be used as the this object. * @param argArray A set of arguments to be passed to the function. */ - apply(this: (this: T, ...argArray: any[]) => U, thisArg: T, argArray?: any): U; apply(this: Function, thisArg: any, argArray?: any): any; /** @@ -239,16 +238,14 @@ interface Function { * @param thisArg The object to be used as the current object. * @param argArray A list of arguments to be passed to the method. */ - call(this: (this: T, ...argArray: any[]) => U, thisArg: T, ...argArray: any[]): U; call(this: Function, thisArg: any, ...argArray: any[]): any; /** - * For a given function, creates a bound function that has the same body as the original function. + * For a given function, creates a bound function that has the same body as the original function. * The this object of the bound function is associated with the specified object, and has the specified initial parameters. * @param thisArg An object to which the this keyword can refer inside the new function. * @param argArray A list of arguments to be passed to the new function. */ - bind(this: (this: T, ...argArray: any[]) => U, thisArg: T, ...argArray: any[]): (this: void, ...argArray: any[]) => U; bind(this: Function, thisArg: any, ...argArray: any[]): any; prototype: any; @@ -287,7 +284,7 @@ interface String { */ charAt(pos: number): string; - /** + /** * Returns the Unicode value of the character at the specified location. * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned. */ @@ -295,12 +292,12 @@ interface String { /** * Returns a string that contains the concatenation of two or more strings. - * @param strings The strings to append to the end of the string. + * @param strings The strings to append to the end of the string. */ concat(...strings: string[]): string; /** - * Returns the position of the first occurrence of a substring. + * Returns the position of the first occurrence of a substring. * @param searchString The substring to search for in the string * @param position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string. */ @@ -319,15 +316,15 @@ interface String { */ localeCompare(that: string): number; - /** + /** * Matches a string with a regular expression, and returns an array containing the results of that search. * @param regexp A variable name or string literal containing the regular expression pattern and flags. */ match(regexp: string): RegExpMatchArray | null; - /** + /** * Matches a string with a regular expression, and returns an array containing the results of that search. - * @param regexp A regular expression object that contains the regular expression pattern and applicable flags. + * @param regexp A regular expression object that contains the regular expression pattern and applicable flags. */ match(regexp: RegExp): RegExpMatchArray | null; @@ -361,40 +358,40 @@ interface String { /** * Finds the first substring match in a regular expression search. - * @param regexp The regular expression pattern and applicable flags. + * @param regexp The regular expression pattern and applicable flags. */ search(regexp: string): number; /** * Finds the first substring match in a regular expression search. - * @param regexp The regular expression pattern and applicable flags. + * @param regexp The regular expression pattern and applicable flags. */ search(regexp: RegExp): number; /** * Returns a section of a string. - * @param start The index to the beginning of the specified portion of stringObj. - * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end. + * @param start The index to the beginning of the specified portion of stringObj. + * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end. * If this value is not specified, the substring continues to the end of stringObj. */ slice(start?: number, end?: number): string; /** * Split a string into substrings using the specified separator and return them as an array. - * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. + * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. * @param limit A value used to limit the number of elements returned in the array. */ split(separator: string, limit?: number): string[]; /** * Split a string into substrings using the specified separator and return them as an array. - * @param separator A Regular Express that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. + * @param separator A Regular Express that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. * @param limit A value used to limit the number of elements returned in the array. */ split(separator: RegExp, limit?: number): string[]; /** - * Returns the substring at the specified location within a String object. + * Returns the substring at the specified location within a String object. * @param start The zero-based index number indicating the beginning of the substring. * @param end Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end. * If end is omitted, the characters from start through the end of the original string are returned. @@ -440,8 +437,8 @@ interface StringConstructor { fromCharCode(...codes: number[]): string; } -/** - * Allows manipulation and formatting of text strings and determination and location of substrings within strings. +/** + * Allows manipulation and formatting of text strings and determination and location of substrings within strings. */ declare const String: StringConstructor; @@ -465,7 +462,7 @@ interface Number { */ toString(radix?: number): string; - /** + /** * Returns a string representing a number in fixed-point notation. * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. */ @@ -498,21 +495,21 @@ interface NumberConstructor { /** The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324. */ readonly MIN_VALUE: number; - /** + /** * A value that is not a number. * In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function. */ readonly NaN: number; - /** + /** * A value that is less than the largest negative number that can be represented in JavaScript. - * JavaScript displays NEGATIVE_INFINITY values as -infinity. + * JavaScript displays NEGATIVE_INFINITY values as -infinity. */ readonly NEGATIVE_INFINITY: number; /** - * A value greater than the largest number that can be represented in JavaScript. - * JavaScript displays POSITIVE_INFINITY values as infinity. + * A value greater than the largest number that can be represented in JavaScript. + * JavaScript displays POSITIVE_INFINITY values as infinity. */ readonly POSITIVE_INFINITY: number; } @@ -542,23 +539,23 @@ interface Math { /** The square root of 2. */ readonly SQRT2: number; /** - * Returns the absolute value of a number (the value without regard to whether it is positive or negative). + * Returns the absolute value of a number (the value without regard to whether it is positive or negative). * For example, the absolute value of -5 is the same as the absolute value of 5. * @param x A numeric expression for which the absolute value is needed. */ abs(x: number): number; /** - * Returns the arc cosine (or inverse cosine) of a number. + * Returns the arc cosine (or inverse cosine) of a number. * @param x A numeric expression. */ acos(x: number): number; - /** - * Returns the arcsine of a number. + /** + * Returns the arcsine of a number. * @param x A numeric expression. */ asin(x: number): number; /** - * Returns the arctangent of a number. + * Returns the arctangent of a number. * @param x A numeric expression for which the arctangent is needed. */ atan(x: number): number; @@ -569,49 +566,49 @@ interface Math { */ atan2(y: number, x: number): number; /** - * Returns the smallest number greater than or equal to its numeric argument. + * Returns the smallest number greater than or equal to its numeric argument. * @param x A numeric expression. */ ceil(x: number): number; /** - * Returns the cosine of a number. + * Returns the cosine of a number. * @param x A numeric expression that contains an angle measured in radians. */ cos(x: number): number; /** - * Returns e (the base of natural logarithms) raised to a power. + * Returns e (the base of natural logarithms) raised to a power. * @param x A numeric expression representing the power of e. */ exp(x: number): number; /** - * Returns the greatest number less than or equal to its numeric argument. + * Returns the greatest number less than or equal to its numeric argument. * @param x A numeric expression. */ floor(x: number): number; /** - * Returns the natural logarithm (base e) of a number. + * Returns the natural logarithm (base e) of a number. * @param x A numeric expression. */ log(x: number): number; /** - * Returns the larger of a set of supplied numeric expressions. + * Returns the larger of a set of supplied numeric expressions. * @param values Numeric expressions to be evaluated. */ max(...values: number[]): number; /** - * Returns the smaller of a set of supplied numeric expressions. + * Returns the smaller of a set of supplied numeric expressions. * @param values Numeric expressions to be evaluated. */ min(...values: number[]): number; /** - * Returns the value of a base expression taken to a specified power. + * Returns the value of a base expression taken to a specified power. * @param x The base value of the expression. * @param y The exponent value of the expression. */ pow(x: number, y: number): number; /** Returns a pseudorandom number between 0 and 1. */ random(): number; - /** + /** * Returns a supplied numeric expression rounded to the nearest number. * @param x The value to be rounded to the nearest number. */ @@ -687,24 +684,24 @@ interface Date { getUTCMilliseconds(): number; /** Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). */ getTimezoneOffset(): number; - /** + /** * Sets the date and time value in the Date object. - * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT. + * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT. */ setTime(time: number): number; /** - * Sets the milliseconds value in the Date object using local time. + * Sets the milliseconds value in the Date object using local time. * @param ms A numeric value equal to the millisecond value. */ setMilliseconds(ms: number): number; - /** + /** * Sets the milliseconds value in the Date object using Universal Coordinated Time (UTC). - * @param ms A numeric value equal to the millisecond value. + * @param ms A numeric value equal to the millisecond value. */ setUTCMilliseconds(ms: number): number; /** - * Sets the seconds value in the Date object using local time. + * Sets the seconds value in the Date object using local time. * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ @@ -716,16 +713,16 @@ interface Date { */ setUTCSeconds(sec: number, ms?: number): number; /** - * Sets the minutes value in the Date object using local time. - * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. + * Sets the minutes value in the Date object using local time. + * @param min A numeric value equal to the minutes value. + * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ setMinutes(min: number, sec?: number, ms?: number): number; /** * Sets the minutes value in the Date object using Universal Coordinated Time (UTC). - * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. + * @param min A numeric value equal to the minutes value. + * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ setUTCMinutes(min: number, sec?: number, ms?: number): number; @@ -733,7 +730,7 @@ interface Date { * Sets the hour value in the Date object using local time. * @param hours A numeric value equal to the hours value. * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. + * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ setHours(hours: number, min?: number, sec?: number, ms?: number): number; @@ -741,23 +738,23 @@ interface Date { * Sets the hours value in the Date object using Universal Coordinated Time (UTC). * @param hours A numeric value equal to the hours value. * @param min A numeric value equal to the minutes value. - * @param sec A numeric value equal to the seconds value. + * @param sec A numeric value equal to the seconds value. * @param ms A numeric value equal to the milliseconds value. */ setUTCHours(hours: number, min?: number, sec?: number, ms?: number): number; /** - * Sets the numeric day-of-the-month value of the Date object using local time. + * Sets the numeric day-of-the-month value of the Date object using local time. * @param date A numeric value equal to the day of the month. */ setDate(date: number): number; - /** + /** * Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC). - * @param date A numeric value equal to the day of the month. + * @param date A numeric value equal to the day of the month. */ setUTCDate(date: number): number; - /** - * Sets the month value in the Date object using local time. - * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. + /** + * Sets the month value in the Date object using local time. + * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. * @param date A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used. */ setMonth(month: number, date?: number): number; @@ -802,7 +799,7 @@ interface DateConstructor { */ parse(s: string): number; /** - * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. + * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year. * @param month The month as an number between 0 and 11 (January to December). * @param date The date as an number between 1 and 31. @@ -828,13 +825,13 @@ interface RegExpExecArray extends Array { } interface RegExp { - /** + /** * Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search. * @param string The String object or string literal on which to perform the search. */ exec(string: string): RegExpExecArray | null; - /** + /** * Returns a Boolean value that indicates whether or not a pattern exists in a searched string. * @param string String on which to perform the search. */ @@ -859,7 +856,9 @@ interface RegExp { } interface RegExpConstructor { + new (pattern: RegExp): RegExp; new (pattern: string, flags?: string): RegExp; + (pattern: RegExp): RegExp; (pattern: string, flags?: string): RegExp; readonly prototype: RegExp; @@ -881,6 +880,7 @@ declare const RegExp: RegExpConstructor; interface Error { name: string; message: string; + stack?: string; } interface ErrorConstructor { @@ -961,8 +961,8 @@ interface JSON { /** * Converts a JavaScript Object Notation (JSON) string into an object. * @param text A valid JSON string. - * @param reviver A function that transforms the results. This function is called for each member of the object. - * If a member contains nested objects, the nested objects are transformed before the parent object is. + * @param reviver A function that transforms the results. This function is called for each member of the object. + * If a member contains nested objects, the nested objects are transformed before the parent object is. */ parse(text: string, reviver?: (key: any, value: any) => any): any; /** @@ -1065,22 +1065,22 @@ interface ReadonlyArray { some(callbackfn: (value: T, index: number, array: ReadonlyArray) => boolean, thisArg?: any): boolean; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: T, index: number, array: ReadonlyArray) => void, thisArg?: any): void; /** * Calls a defined callback function on each element of an array, and returns an array that contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: T, index: number, array: ReadonlyArray) => U, thisArg?: any): U[]; /** * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: T, index: number, array: ReadonlyArray) => boolean, thisArg?: any): T[]; + filter(callbackfn: (value: T, index: number, array: ReadonlyArray) => any, thisArg?: any): T[]; /** * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. @@ -1095,13 +1095,13 @@ interface ReadonlyArray { reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray) => U, initialValue: U): U; /** * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: ReadonlyArray) => T, initialValue?: T): T; /** * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: ReadonlyArray) => U, initialValue: U): U; @@ -1139,14 +1139,14 @@ interface Array { */ join(separator?: string): string; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): T[]; /** * Removes the first element from an array and returns it. */ shift(): T | undefined; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -1156,7 +1156,7 @@ interface Array { * Sorts an array. * @param compareFn The name of the function used to determine the order of the elements. If omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: T, b: T) => number): T[]; + sort(compareFn?: (a: T, b: T) => number): this; /** * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. * @param start The zero-based location in the array from which to start removing elements. @@ -1200,22 +1200,22 @@ interface Array { some(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void; /** * Calls a defined callback function on each element of an array, and returns an array that contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[]; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): T[]; + filter(callbackfn: (value: T, index: number, array: T[]) => any, thisArg?: any): T[]; /** * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array. @@ -1228,15 +1228,15 @@ interface Array { * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; - /** + /** * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T; - /** + /** * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U; @@ -1290,10 +1290,10 @@ interface ArrayLike { } /** - * Represents a raw buffer of binary data, which is used to store data for the - * different typed arrays. ArrayBuffers cannot be read from or written to directly, - * but can be passed to a typed array or DataView Object to interpret the raw - * buffer as needed. + * Represents a raw buffer of binary data, which is used to store data for the + * different typed arrays. ArrayBuffers cannot be read from or written to directly, + * but can be passed to a typed array or DataView Object to interpret the raw + * buffer as needed. */ interface ArrayBuffer { /** @@ -1316,7 +1316,7 @@ declare const ArrayBuffer: ArrayBufferConstructor; interface ArrayBufferView { /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ buffer: ArrayBuffer; @@ -1336,124 +1336,124 @@ interface DataView { readonly byteLength: number; readonly byteOffset: number; /** - * Gets the Float32 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Float32 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getFloat32(byteOffset: number, littleEndian?: boolean): number; /** * Gets the Float64 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getFloat64(byteOffset: number, littleEndian?: boolean): number; /** - * Gets the Int8 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Int8 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getInt8(byteOffset: number): number; /** - * Gets the Int16 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Int16 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getInt16(byteOffset: number, littleEndian?: boolean): number; /** - * Gets the Int32 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Int32 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getInt32(byteOffset: number, littleEndian?: boolean): number; /** - * Gets the Uint8 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Uint8 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getUint8(byteOffset: number): number; /** - * Gets the Uint16 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Uint16 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getUint16(byteOffset: number, littleEndian?: boolean): number; /** - * Gets the Uint32 value at the specified byte offset from the start of the view. There is - * no alignment constraint; multi-byte values may be fetched from any offset. + * Gets the Uint32 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. * @param byteOffset The place in the buffer at which the value should be retrieved. */ getUint32(byteOffset: number, littleEndian?: boolean): number; /** - * Stores an Float32 value at the specified byte offset from the start of the view. + * Stores an Float32 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setFloat32(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Float64 value at the specified byte offset from the start of the view. + * Stores an Float64 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setFloat64(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Int8 value at the specified byte offset from the start of the view. + * Stores an Int8 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. */ setInt8(byteOffset: number, value: number): void; /** - * Stores an Int16 value at the specified byte offset from the start of the view. + * Stores an Int16 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setInt16(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Int32 value at the specified byte offset from the start of the view. + * Stores an Int32 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setInt32(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Uint8 value at the specified byte offset from the start of the view. + * Stores an Uint8 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. */ setUint8(byteOffset: number, value: number): void; /** - * Stores an Uint16 value at the specified byte offset from the start of the view. + * Stores an Uint16 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setUint16(byteOffset: number, value: number, littleEndian?: boolean): void; /** - * Stores an Uint32 value at the specified byte offset from the start of the view. + * Stores an Uint32 value at the specified byte offset from the start of the view. * @param byteOffset The place in the buffer at which the value should be set. * @param value The value to set. - * @param littleEndian If false or undefined, a big-endian value should be written, + * @param littleEndian If false or undefined, a big-endian value should be written, * otherwise a little-endian value should be written. */ setUint32(byteOffset: number, value: number, littleEndian?: boolean): void; @@ -1465,17 +1465,17 @@ interface DataViewConstructor { declare const DataView: DataViewConstructor; /** - * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested + * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested * number of bytes could not be allocated an exception is raised. */ interface Int8Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -1489,21 +1489,21 @@ interface Int8Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Int8Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -1513,49 +1513,49 @@ interface Int8Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Int8Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): Int8Array; + filter(callbackfn: (value: number, index: number, array: Int8Array) => any, thisArg?: any): Int8Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Int8Array) => void, thisArg?: any): void; @@ -1570,7 +1570,7 @@ interface Int8Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -1578,7 +1578,7 @@ interface Int8Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -1589,65 +1589,65 @@ interface Int8Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Int8Array) => number, thisArg?: any): Int8Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Int8Array; @@ -1665,7 +1665,7 @@ interface Int8Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -1674,31 +1674,31 @@ interface Int8Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Int8Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Int8Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Int8Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -1716,7 +1716,7 @@ interface Int8ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int8Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -1725,7 +1725,7 @@ interface Int8ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Int8Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -1738,17 +1738,17 @@ interface Int8ArrayConstructor { declare const Int8Array: Int8ArrayConstructor; /** - * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the + * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Uint8Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -1762,21 +1762,21 @@ interface Uint8Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Uint8Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -1786,49 +1786,49 @@ interface Uint8Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Uint8Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): Uint8Array; + filter(callbackfn: (value: number, index: number, array: Uint8Array) => any, thisArg?: any): Uint8Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Uint8Array) => void, thisArg?: any): void; @@ -1843,7 +1843,7 @@ interface Uint8Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -1851,7 +1851,7 @@ interface Uint8Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -1862,65 +1862,65 @@ interface Uint8Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Uint8Array) => number, thisArg?: any): Uint8Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Uint8Array; @@ -1938,7 +1938,7 @@ interface Uint8Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -1947,31 +1947,31 @@ interface Uint8Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Uint8Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Uint8Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Uint8Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -1990,7 +1990,7 @@ interface Uint8ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -1999,7 +1999,7 @@ interface Uint8ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Uint8Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -2012,17 +2012,17 @@ interface Uint8ArrayConstructor { declare const Uint8Array: Uint8ArrayConstructor; /** - * A typed array of 8-bit unsigned integer (clamped) values. The contents are initialized to 0. + * A typed array of 8-bit unsigned integer (clamped) values. The contents are initialized to 0. * If the requested number of bytes could not be allocated an exception is raised. */ interface Uint8ClampedArray { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -2036,21 +2036,21 @@ interface Uint8ClampedArray { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Uint8ClampedArray; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -2060,49 +2060,49 @@ interface Uint8ClampedArray { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Uint8ClampedArray; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): Uint8ClampedArray; + filter(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => any, thisArg?: any): Uint8ClampedArray; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => void, thisArg?: any): void; @@ -2117,7 +2117,7 @@ interface Uint8ClampedArray { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -2125,7 +2125,7 @@ interface Uint8ClampedArray { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -2136,65 +2136,65 @@ interface Uint8ClampedArray { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => number, thisArg?: any): Uint8ClampedArray; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8ClampedArray) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Uint8ClampedArray; @@ -2212,7 +2212,7 @@ interface Uint8ClampedArray { */ set(array: Uint8ClampedArray, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -2221,31 +2221,31 @@ interface Uint8ClampedArray { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Uint8ClampedArray; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Uint8ClampedArray view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Uint8ClampedArray; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -2264,7 +2264,7 @@ interface Uint8ClampedArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8ClampedArray; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -2285,17 +2285,17 @@ interface Uint8ClampedArrayConstructor { declare const Uint8ClampedArray: Uint8ClampedArrayConstructor; /** - * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the + * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Int16Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -2309,21 +2309,21 @@ interface Int16Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Int16Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -2333,49 +2333,49 @@ interface Int16Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Int16Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): Int16Array; + filter(callbackfn: (value: number, index: number, array: Int16Array) => any, thisArg?: any): Int16Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Int16Array) => void, thisArg?: any): void; @@ -2390,7 +2390,7 @@ interface Int16Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -2398,7 +2398,7 @@ interface Int16Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -2409,65 +2409,65 @@ interface Int16Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Int16Array) => number, thisArg?: any): Int16Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Int16Array; @@ -2485,7 +2485,7 @@ interface Int16Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -2494,31 +2494,31 @@ interface Int16Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Int16Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Int16Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Int16Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -2537,7 +2537,7 @@ interface Int16ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int16Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -2546,7 +2546,7 @@ interface Int16ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Int16Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -2559,17 +2559,17 @@ interface Int16ArrayConstructor { declare const Int16Array: Int16ArrayConstructor; /** - * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the + * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Uint16Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -2583,21 +2583,21 @@ interface Uint16Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Uint16Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -2607,49 +2607,49 @@ interface Uint16Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Uint16Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): Uint16Array; + filter(callbackfn: (value: number, index: number, array: Uint16Array) => any, thisArg?: any): Uint16Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Uint16Array) => void, thisArg?: any): void; @@ -2664,7 +2664,7 @@ interface Uint16Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -2672,7 +2672,7 @@ interface Uint16Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -2683,65 +2683,65 @@ interface Uint16Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Uint16Array) => number, thisArg?: any): Uint16Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Uint16Array; @@ -2759,7 +2759,7 @@ interface Uint16Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -2768,31 +2768,31 @@ interface Uint16Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Uint16Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Uint16Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Uint16Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -2811,7 +2811,7 @@ interface Uint16ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint16Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -2820,7 +2820,7 @@ interface Uint16ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Uint16Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -2832,17 +2832,17 @@ interface Uint16ArrayConstructor { } declare const Uint16Array: Uint16ArrayConstructor; /** - * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the + * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Int32Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -2856,21 +2856,21 @@ interface Int32Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Int32Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -2880,49 +2880,49 @@ interface Int32Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Int32Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): Int32Array; + filter(callbackfn: (value: number, index: number, array: Int32Array) => any, thisArg?: any): Int32Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Int32Array) => void, thisArg?: any): void; @@ -2937,7 +2937,7 @@ interface Int32Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -2945,7 +2945,7 @@ interface Int32Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -2956,65 +2956,65 @@ interface Int32Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Int32Array) => number, thisArg?: any): Int32Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Int32Array; @@ -3032,7 +3032,7 @@ interface Int32Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -3041,31 +3041,31 @@ interface Int32Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Int32Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Int32Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Int32Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -3084,7 +3084,7 @@ interface Int32ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int32Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -3093,7 +3093,7 @@ interface Int32ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Int32Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -3105,17 +3105,17 @@ interface Int32ArrayConstructor { declare const Int32Array: Int32ArrayConstructor; /** - * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the + * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the * requested number of bytes could not be allocated an exception is raised. */ interface Uint32Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -3129,21 +3129,21 @@ interface Uint32Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Uint32Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -3153,49 +3153,49 @@ interface Uint32Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Uint32Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): Uint32Array; + filter(callbackfn: (value: number, index: number, array: Uint32Array) => any, thisArg?: any): Uint32Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Uint32Array) => void, thisArg?: any): void; @@ -3210,7 +3210,7 @@ interface Uint32Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -3218,7 +3218,7 @@ interface Uint32Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -3229,65 +3229,65 @@ interface Uint32Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Uint32Array) => number, thisArg?: any): Uint32Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Uint32Array; @@ -3305,7 +3305,7 @@ interface Uint32Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -3314,31 +3314,31 @@ interface Uint32Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Uint32Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Uint32Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Uint32Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -3357,7 +3357,7 @@ interface Uint32ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint32Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -3366,7 +3366,7 @@ interface Uint32ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Uint32Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -3383,12 +3383,12 @@ declare const Uint32Array: Uint32ArrayConstructor; */ interface Float32Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -3402,21 +3402,21 @@ interface Float32Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Float32Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -3426,49 +3426,49 @@ interface Float32Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Float32Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): Float32Array; + filter(callbackfn: (value: number, index: number, array: Float32Array) => any, thisArg?: any): Float32Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Float32Array) => void, thisArg?: any): void; @@ -3483,7 +3483,7 @@ interface Float32Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -3491,7 +3491,7 @@ interface Float32Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -3502,65 +3502,65 @@ interface Float32Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Float32Array) => number, thisArg?: any): Float32Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Float32Array; @@ -3578,7 +3578,7 @@ interface Float32Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -3587,31 +3587,31 @@ interface Float32Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Float32Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Float32Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Float32Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -3630,7 +3630,7 @@ interface Float32ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float32Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -3639,7 +3639,7 @@ interface Float32ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Float32Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -3652,17 +3652,17 @@ interface Float32ArrayConstructor { declare const Float32Array: Float32ArrayConstructor; /** - * A typed array of 64-bit float values. The contents are initialized to 0. If the requested + * A typed array of 64-bit float values. The contents are initialized to 0. If the requested * number of bytes could not be allocated an exception is raised. */ interface Float64Array { /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; /** - * The ArrayBuffer instance referenced by the array. + * The ArrayBuffer instance referenced by the array. */ readonly buffer: ArrayBuffer; @@ -3676,21 +3676,21 @@ interface Float64Array { */ readonly byteOffset: number; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): Float64Array; + copyWithin(target: number, start: number, end?: number): this; /** * Determines whether all the members of an array satisfy the specified test. - * @param callbackfn A function that accepts up to three arguments. The every method calls - * the callbackfn function for each element in array1 until the callbackfn returns false, + * @param callbackfn A function that accepts up to three arguments. The every method calls + * the callbackfn function for each element in array1 until the callbackfn returns false, * or until the end of the array. * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. @@ -3700,49 +3700,49 @@ interface Float64Array { /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: number, start?: number, end?: number): Float64Array; + fill(value: number, start?: number, end?: number): this; /** - * Returns the elements of an array that meet the condition specified in a callback function. - * @param callbackfn A function that accepts up to three arguments. The filter method calls - * the callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * Returns the elements of an array that meet the condition specified in a callback function. + * @param callbackfn A function that accepts up to three arguments. The filter method calls + * the callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ - filter(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): Float64Array; + filter(callbackfn: (value: number, index: number, array: Float64Array) => any, thisArg?: any): Float64Array; - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: number, index: number, obj: Array) => boolean, thisArg?: any): number | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. - * @param callbackfn A function that accepts up to three arguments. forEach calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ forEach(callbackfn: (value: number, index: number, array: Float64Array) => void, thisArg?: any): void; @@ -3757,7 +3757,7 @@ interface Float64Array { /** * Adds all the elements of an array separated by the specified separator string. - * @param separator A string used to separate one element of an array from the next in the + * @param separator A string used to separate one element of an array from the next in the * resulting String. If omitted, the array elements are separated with a comma. */ join(separator?: string): string; @@ -3765,7 +3765,7 @@ interface Float64Array { /** * Returns the index of the last occurrence of a value in an array. * @param searchElement The value to locate in the array. - * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the * search starts at index 0. */ lastIndexOf(searchElement: number, fromIndex?: number): number; @@ -3776,65 +3776,65 @@ interface Float64Array { readonly length: number; /** - * Calls a defined callback function on each element of an array, and returns an array that + * Calls a defined callback function on each element of an array, and returns an array that * contains the results. - * @param callbackfn A function that accepts up to three arguments. The map method calls the - * callbackfn function one time for each element in the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ map(callbackfn: (value: number, index: number, array: Float64Array) => number, thisArg?: any): Float64Array; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue?: number): number; /** - * Calls the specified callback function for all the elements in an array. The return value of - * the callback function is the accumulated result, and is provided as an argument in the next + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next * call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the * callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an argument + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. - * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start - * the accumulation. The first call to the callbackfn function provides this value as an + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an * argument instead of an array value. */ reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue?: number): number; - /** - * Calls the specified callback function for all the elements in an array, in descending order. - * The return value of the callback function is the accumulated result, and is provided as an + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an * argument in the next call to the callback function. * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls - * the callbackfn function one time for each element in the array. - * @param initialValue If initialValue is specified, it is used as the initial value to start + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start * the accumulation. The first call to the callbackfn function provides this value as an argument * instead of an array value. */ reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U; /** - * Reverses the elements in an Array. + * Reverses the elements in an Array. */ reverse(): Float64Array; @@ -3852,7 +3852,7 @@ interface Float64Array { */ set(array: ArrayLike, offset?: number): void; - /** + /** * Returns a section of an array. * @param start The beginning of the specified portion of the array. * @param end The end of the specified portion of the array. @@ -3861,31 +3861,31 @@ interface Float64Array { /** * Determines whether the specified callback function returns true for any element of an array. - * @param callbackfn A function that accepts up to three arguments. The some method calls the - * callbackfn function for each element in array1 until the callbackfn returns true, or until + * @param callbackfn A function that accepts up to three arguments. The some method calls the + * callbackfn function for each element in array1 until the callbackfn returns true, or until * the end of the array. - * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. * If thisArg is omitted, undefined is used as the this value. */ some(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean; /** * Sorts an array. - * @param compareFn The name of the function used to determine the order of the elements. If + * @param compareFn The name of the function used to determine the order of the elements. If * omitted, the elements are sorted in ascending, ASCII character order. */ - sort(compareFn?: (a: number, b: number) => number): Float64Array; + sort(compareFn?: (a: number, b: number) => number): this; /** * Gets a new Float64Array view of the ArrayBuffer store for this array, referencing the elements - * at begin, inclusive, up to end, exclusive. + * at begin, inclusive, up to end, exclusive. * @param begin The index of the beginning of the array. * @param end The index of the end of the array. */ subarray(begin: number, end?: number): Float64Array; /** - * Converts a number to a string by using the current locale. + * Converts a number to a string by using the current locale. */ toLocaleString(): string; @@ -3904,7 +3904,7 @@ interface Float64ArrayConstructor { new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float64Array; /** - * The size in bytes of each element in the array. + * The size in bytes of each element in the array. */ readonly BYTES_PER_ELEMENT: number; @@ -3913,7 +3913,7 @@ interface Float64ArrayConstructor { * @param items A set of elements to include in the new array object. */ of(...items: number[]): Float64Array; - + /** * Creates an array from an array-like or iterable object. * @param arrayLike An array-like or iterable object to convert to an array. @@ -3925,7 +3925,7 @@ interface Float64ArrayConstructor { declare const Float64Array: Float64ArrayConstructor; ///////////////////////////// -/// ECMAScript Internationalization API +/// ECMAScript Internationalization API ///////////////////////////// declare module Intl { @@ -4068,14 +4068,14 @@ interface String { interface Number { /** - * Converts a number to a string by using the current or specified locale. + * Converts a number to a string by using the current or specified locale. * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleString(locales?: string[], options?: Intl.NumberFormatOptions): string; /** - * Converts a number to a string by using the current or specified locale. + * Converts a number to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ @@ -4084,41 +4084,41 @@ interface Number { interface Date { /** - * Converts a date and time to a string by using the current or specified locale. + * Converts a date and time to a string by using the current or specified locale. * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleString(locales?: string[], options?: Intl.DateTimeFormatOptions): string; /** - * Converts a date to a string by using the current or specified locale. + * Converts a date to a string by using the current or specified locale. * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleDateString(locales?: string[], options?: Intl.DateTimeFormatOptions): string; /** - * Converts a time to a string by using the current or specified locale. + * Converts a time to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleTimeString(locale?: string[], options?: Intl.DateTimeFormatOptions): string; - + /** - * Converts a date and time to a string by using the current or specified locale. + * Converts a date and time to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleString(locale?: string, options?: Intl.DateTimeFormatOptions): string; - + /** - * Converts a date to a string by using the current or specified locale. + * Converts a date to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ toLocaleDateString(locale?: string, options?: Intl.DateTimeFormatOptions): string; /** - * Converts a time to a string by using the current or specified locale. + * Converts a time to a string by using the current or specified locale. * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. * @param options An object that contains one or more properties that specify comparison options. */ @@ -4127,48 +4127,48 @@ interface Date { declare type PropertyKey = string | number | symbol; interface Array { - /** - * Returns the value of the first element in the array where predicate is true, and undefined + /** + * Returns the value of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ find(predicate: (value: T, index: number, obj: Array) => boolean, thisArg?: any): T | undefined; - /** - * Returns the index of the first element in the array where predicate is true, and undefined + /** + * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. - * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. - * @param thisArg If provided, it will be used as the this value for each invocation of + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: T) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: T) => boolean, thisArg?: any): number; /** * Returns the this object after filling the section identified by start and end with value * @param value value to fill array section with - * @param start index to start filling the array at. If start is negative, it is treated as - * length+start where length is the length of the array. - * @param end index to stop filling the array at. If end is negative, it is treated as + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as * length+end. */ - fill(value: T, start?: number, end?: number): T[]; + fill(value: T, start?: number, end?: number): this; - /** + /** * Returns the this object after copying a section of the array identified by start and end * to the same array starting at position target - * @param target If target is negative, it is treated as length+target where length is the - * length of the array. - * @param start If start is negative, it is treated as length+start. If end is negative, it + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it * is treated as length+end. - * @param end If not specified, length of the this object is used as its default value. + * @param end If not specified, length of the this object is used as its default value. */ - copyWithin(target: number, start: number, end?: number): T[]; + copyWithin(target: number, start: number, end?: number): this; } interface ArrayConstructor { @@ -4240,7 +4240,7 @@ interface Math { log1p(x: number): number; /** - * Returns the result of (e^x - 1) of x (e raised to the power of x, where e is the base of + * Returns the result of (e^x - 1) of x (e raised to the power of x, where e is the base of * the natural logarithms). * @param x A numeric expression. */ @@ -4316,14 +4316,14 @@ interface Math { interface NumberConstructor { /** * The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1 - * that is representable as a Number value, which is approximately: + * that is representable as a Number value, which is approximately: * 2.2204460492503130808472633361816 x 10‍−‍16. */ readonly EPSILON: number; /** * Returns true if passed value is finite. - * Unlike the global isFininte, Number.isFinite doesn't forcibly convert the parameter to a + * Unlike the global isFininte, Number.isFinite doesn't forcibly convert the parameter to a * number. Only finite values of the type number, result in true. * @param number A numeric value. */ @@ -4336,7 +4336,7 @@ interface NumberConstructor { isInteger(number: number): boolean; /** - * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a + * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a * number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter * to a number. Only values of the type number, that are also NaN, result in true. * @param number A numeric value. @@ -4349,30 +4349,30 @@ interface NumberConstructor { */ isSafeInteger(number: number): boolean; - /** - * The value of the largest integer n such that n and n + 1 are both exactly representable as - * a Number value. + /** + * The value of the largest integer n such that n and n + 1 are both exactly representable as + * a Number value. * The value of Number.MIN_SAFE_INTEGER is 9007199254740991 2^53 − 1. */ readonly MAX_SAFE_INTEGER: number; - /** - * The value of the smallest integer n such that n and n − 1 are both exactly representable as - * a Number value. + /** + * The value of the smallest integer n such that n and n − 1 are both exactly representable as + * a Number value. * The value of Number.MIN_SAFE_INTEGER is −9007199254740991 (−(2^53 − 1)). */ readonly MIN_SAFE_INTEGER: number; /** - * Converts a string to a floating-point number. - * @param string A string that contains a floating-point number. + * Converts a string to a floating-point number. + * @param string A string that contains a floating-point number. */ parseFloat(string: string): number; /** * Converts A string to an integer. * @param s A string to convert into a number. - * @param radix A value between 2 and 36 that specifies the base of the number in numString. + * @param radix A value between 2 and 36 that specifies the base of the number in numString. * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. * All other strings are considered decimal. */ @@ -4381,12 +4381,12 @@ interface NumberConstructor { interface Object { /** - * Determines whether an object has a property with the specified name. + * Determines whether an object has a property with the specified name. * @param v A property name. */ hasOwnProperty(v: PropertyKey): boolean - /** + /** * Determines whether a specified property is enumerable. * @param v A property name. */ @@ -4395,7 +4395,7 @@ interface Object { interface ObjectConstructor { /** - * Copy the values of all of the enumerable own properties from one or more source objects to a + * Copy the values of all of the enumerable own properties from one or more source objects to a * target object. Returns the target object. * @param target The target object to copy to. * @param source The source object from which to copy properties. @@ -4403,7 +4403,7 @@ interface ObjectConstructor { assign(target: T, source: U): T & U; /** - * Copy the values of all of the enumerable own properties from one or more source objects to a + * Copy the values of all of the enumerable own properties from one or more source objects to a * target object. Returns the target object. * @param target The target object to copy to. * @param source1 The first source object from which to copy properties. @@ -4412,7 +4412,7 @@ interface ObjectConstructor { assign(target: T, source1: U, source2: V): T & U & V; /** - * Copy the values of all of the enumerable own properties from one or more source objects to a + * Copy the values of all of the enumerable own properties from one or more source objects to a * target object. Returns the target object. * @param target The target object to copy to. * @param source1 The first source object from which to copy properties. @@ -4422,7 +4422,7 @@ interface ObjectConstructor { assign(target: T, source1: U, source2: V, source3: W): T & U & V & W; /** - * Copy the values of all of the enumerable own properties from one or more source objects to a + * Copy the values of all of the enumerable own properties from one or more source objects to a * target object. Returns the target object. * @param target The target object to copy to. * @param sources One or more source objects from which to copy properties @@ -4450,17 +4450,17 @@ interface ObjectConstructor { setPrototypeOf(o: any, proto: any): any; /** - * Gets the own property descriptor of the specified object. - * An own property descriptor is one that is defined directly on the object and is not - * inherited from the object's prototype. + * Gets the own property descriptor of the specified object. + * An own property descriptor is one that is defined directly on the object and is not + * inherited from the object's prototype. * @param o Object that contains the property. * @param p Name of the property. */ getOwnPropertyDescriptor(o: any, propertyKey: PropertyKey): PropertyDescriptor; /** - * Adds a property to an object, or modifies attributes of an existing property. - * @param o Object on which to add or modify the property. This can be a native JavaScript + * Adds a property to an object, or modifies attributes of an existing property. + * @param o Object on which to add or modify the property. This can be a native JavaScript * object (that is, a user-defined object or a built in object) or a DOM object. * @param p The property name. * @param attributes Descriptor for the property. It can be for a data property or an accessor @@ -4484,47 +4484,60 @@ interface RegExp { */ readonly flags: string; - /** - * Returns a Boolean value indicating the state of the sticky flag (y) used with a regular - * expression. Default is false. Read-only. + /** + * Returns a Boolean value indicating the state of the sticky flag (y) used with a regular + * expression. Default is false. Read-only. */ readonly sticky: boolean; - /** - * Returns a Boolean value indicating the state of the Unicode flag (u) used with a regular - * expression. Default is false. Read-only. + /** + * Returns a Boolean value indicating the state of the Unicode flag (u) used with a regular + * expression. Default is false. Read-only. */ readonly unicode: boolean; } +interface RegExpConstructor { + new (pattern: RegExp, flags?: string): RegExp; + (pattern: RegExp, flags?: string): RegExp; +} + interface String { /** - * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point - * value of the UTF-16 encoded code point starting at the string element at position pos in - * the String resulting from converting this object to a String. - * If there is no element at that position, the result is undefined. + * Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point + * value of the UTF-16 encoded code point starting at the string element at position pos in + * the String resulting from converting this object to a String. + * If there is no element at that position, the result is undefined. * If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos. */ codePointAt(pos: number): number | undefined; /** - * Returns true if searchString appears as a substring of the result of converting this - * object to a String, at one or more positions that are + * Returns true if searchString appears as a substring of the result of converting this + * object to a String, at one or more positions that are * greater than or equal to position; otherwise, returns false. - * @param searchString search string + * @param searchString search string * @param position If position is undefined, 0 is assumed, so as to search all of the String. */ includes(searchString: string, position?: number): boolean; /** - * Returns true if the sequence of elements of searchString converted to a String is the - * same as the corresponding elements of this object (converted to a String) starting at + * Returns true if the sequence of elements of searchString converted to a String is the + * same as the corresponding elements of this object (converted to a String) starting at * endPosition – length(this). Otherwise returns false. */ endsWith(searchString: string, endPosition?: number): boolean; /** - * Returns the String value result of normalizing the string into the normalization form + * Returns the String value result of normalizing the string into the normalization form + * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms. + * @param form Applicable values: "NFC", "NFD", "NFKC", or "NFKD", If not specified default + * is "NFC" + */ + normalize(form: "NFC" | "NFD" | "NFKC" | "NFKD"): string; + + /** + * Returns the String value result of normalizing the string into the normalization form * named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms. * @param form Applicable values: "NFC", "NFD", "NFKC", or "NFKD", If not specified default * is "NFC" @@ -4532,15 +4545,15 @@ interface String { normalize(form?: string): string; /** - * Returns a String value that is made from count copies appended together. If count is 0, + * Returns a String value that is made from count copies appended together. If count is 0, * T is the empty String is returned. * @param count number of copies to append */ repeat(count: number): string; /** - * Returns true if the sequence of elements of searchString converted to a String is the - * same as the corresponding elements of this object (converted to a String) starting at + * Returns true if the sequence of elements of searchString converted to a String is the + * same as the corresponding elements of this object (converted to a String) starting at * position. Otherwise returns false. */ startsWith(searchString: string, position?: number): boolean; @@ -4600,25 +4613,26 @@ interface StringConstructor { /** * String.raw is intended for use as a tag function of a Tagged Template String. When called - * as such the first argument will be a well formed template call site object and the rest + * as such the first argument will be a well formed template call site object and the rest * parameter will contain the substitution values. * @param template A well-formed template string call site representation. * @param substitutions A set of substitution values. */ raw(template: TemplateStringsArray, ...substitutions: any[]): string; -}interface Map { +} +interface Map { clear(): void; delete(key: K): boolean; forEach(callbackfn: (value: V, index: K, map: Map) => void, thisArg?: any): void; get(key: K): V | undefined; has(key: K): boolean; - set(key: K, value?: V): Map; + set(key: K, value?: V): this; readonly size: number; } interface MapConstructor { new (): Map; - new (): Map; + new (entries?: [K, V][]): Map; readonly prototype: Map; } declare var Map: MapConstructor; @@ -4628,51 +4642,42 @@ interface WeakMap { delete(key: K): boolean; get(key: K): V | undefined; has(key: K): boolean; - set(key: K, value?: V): WeakMap; - + set(key: K, value?: V): this; } interface WeakMapConstructor { new (): WeakMap; - new (): WeakMap; + new (entries?: [K, V][]): WeakMap; readonly prototype: WeakMap; } declare var WeakMap: WeakMapConstructor; interface Set { - add(value: T): Set; + add(value: T): this; clear(): void; delete(value: T): boolean; - entries(): IterableIterator<[T, T]>; forEach(callbackfn: (value: T, index: T, set: Set) => void, thisArg?: any): void; has(value: T): boolean; - keys(): IterableIterator; readonly size: number; - values(): IterableIterator; - [Symbol.iterator]():IterableIterator; - readonly [Symbol.toStringTag]: "Set"; } interface SetConstructor { new (): Set; - new (): Set; - new (iterable: Iterable): Set; + new (values?: T[]): Set; readonly prototype: Set; } declare var Set: SetConstructor; interface WeakSet { - add(value: T): WeakSet; + add(value: T): this; clear(): void; delete(value: T): boolean; has(value: T): boolean; - readonly [Symbol.toStringTag]: "WeakSet"; } interface WeakSetConstructor { new (): WeakSet; - new (): WeakSet; - new (iterable: Iterable): WeakSet; + new (values?: T[]): WeakSet; readonly prototype: WeakSet; } declare var WeakSet: WeakSetConstructor; @@ -4690,9 +4695,17 @@ interface GeneratorFunctionConstructor { declare var GeneratorFunction: GeneratorFunctionConstructor; /// +interface SymbolConstructor { + /** + * A method that returns the default iterator for an object. Called by the semantics of the + * for-of statement. + */ + readonly iterator: symbol; +} + interface IteratorResult { done: boolean; - value?: T; + value: T; } interface Iterator { @@ -4701,11 +4714,18 @@ interface Iterator { throw?(e?: any): IteratorResult; } -interface Iterable { } +interface Iterable { + [Symbol.iterator](): Iterator; +} -interface IterableIterator extends Iterator { } +interface IterableIterator extends Iterator { + [Symbol.iterator](): IterableIterator; +} interface Array { + /** Iterator */ + [Symbol.iterator](): IterableIterator; + /** * Returns an array of key, value pairs for every entry in the array */ @@ -4738,7 +4758,13 @@ interface ArrayConstructor { from(iterable: Iterable): Array; } +interface IArguments { + /** Iterator */ + [Symbol.iterator](): IterableIterator; +} + interface Map { + [Symbol.iterator](): IterableIterator<[K,V]>; entries(): IterableIterator<[K, V]>; keys(): IterableIterator; values(): IterableIterator; @@ -4754,6 +4780,23 @@ interface WeakMapConstructor { new (iterable: Iterable<[K, V]>): WeakMap; } +interface Set { + [Symbol.iterator](): IterableIterator; + entries(): IterableIterator<[T, T]>; + keys(): IterableIterator; + values(): IterableIterator; +} + +interface SetConstructor { + new (iterable: Iterable): Set; +} + +interface WeakSet { } + +interface WeakSetConstructor { + new (iterable: Iterable): WeakSet; +} + interface Promise { } interface PromiseConstructor { @@ -4778,11 +4821,17 @@ declare namespace Reflect { function enumerate(target: any): IterableIterator; } +interface String { + /** Iterator */ + [Symbol.iterator](): IterableIterator; +} + /** * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested * number of bytes could not be allocated an exception is raised. */ interface Int8Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -4814,6 +4863,7 @@ interface Int8ArrayConstructor { * requested number of bytes could not be allocated an exception is raised. */ interface Uint8Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -4845,6 +4895,7 @@ interface Uint8ArrayConstructor { * If the requested number of bytes could not be allocated an exception is raised. */ interface Uint8ClampedArray { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -4879,6 +4930,7 @@ interface Uint8ClampedArrayConstructor { * requested number of bytes could not be allocated an exception is raised. */ interface Int16Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -4912,6 +4964,7 @@ interface Int16ArrayConstructor { * requested number of bytes could not be allocated an exception is raised. */ interface Uint16Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -4943,6 +4996,7 @@ interface Uint16ArrayConstructor { * requested number of bytes could not be allocated an exception is raised. */ interface Int32Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -4974,6 +5028,7 @@ interface Int32ArrayConstructor { * requested number of bytes could not be allocated an exception is raised. */ interface Uint32Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -5005,6 +5060,7 @@ interface Uint32ArrayConstructor { * of bytes could not be allocated an exception is raised. */ interface Float32Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -5036,6 +5092,7 @@ interface Float32ArrayConstructor { * number of bytes could not be allocated an exception is raised. */ interface Float64Array { + [Symbol.iterator](): IterableIterator; /** * Returns an array of key, value pairs for every entry in the array */ @@ -5226,12 +5283,6 @@ interface SymbolConstructor { */ readonly isConcatSpreadable: symbol; - /** - * A method that returns the default iterator for an object. Called by the semantics of the - * for-of statement. - */ - readonly iterator: symbol; - /** * A regular expression method that matches the regular expression against a string. Called * by the String.prototype.match method. @@ -5286,9 +5337,6 @@ interface Symbol { } interface Array { - /** Iterator */ - [Symbol.iterator](): IterableIterator; - /** * Returns an object whose properties have the value 'true' * when they will be absent when used in a 'with' statement. @@ -5329,7 +5377,6 @@ interface Date { } interface Map { - [Symbol.iterator]():IterableIterator<[K,V]>; readonly [Symbol.toStringTag]: "Map"; } @@ -5337,6 +5384,14 @@ interface WeakMap{ readonly [Symbol.toStringTag]: "WeakMap"; } +interface Set { + readonly [Symbol.toStringTag]: "Set"; +} + +interface WeakSet { + readonly [Symbol.toStringTag]: "WeakSet"; +} + interface JSON { readonly [Symbol.toStringTag]: "JSON"; } @@ -5356,21 +5411,6 @@ interface GeneratorFunction extends Function { readonly [Symbol.toStringTag]: "GeneratorFunction"; } -interface IArguments { - /** Iterator */ - [Symbol.iterator](): IterableIterator; -} - -interface Iterator { } - -interface Iterable { - [Symbol.iterator](): Iterator; -} - -interface IterableIterator extends Iterator { - [Symbol.iterator](): IterableIterator; -} - interface Math { readonly [Symbol.toStringTag]: "Math"; } @@ -5436,9 +5476,6 @@ interface RegExpConstructor { } interface String { - /** Iterator */ - [Symbol.iterator](): IterableIterator; - /** * Matches a string an object that supports being matched against, and returns an array containing the results of that search. * @param matcher An object that supports being matched against. @@ -5492,7 +5529,6 @@ interface DataView { * number of bytes could not be allocated an exception is raised. */ interface Int8Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Int8Array"; } @@ -5501,7 +5537,6 @@ interface Int8Array { * requested number of bytes could not be allocated an exception is raised. */ interface Uint8Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "UInt8Array"; } @@ -5510,7 +5545,6 @@ interface Uint8Array { * If the requested number of bytes could not be allocated an exception is raised. */ interface Uint8ClampedArray { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Uint8ClampedArray"; } @@ -5519,7 +5553,6 @@ interface Uint8ClampedArray { * requested number of bytes could not be allocated an exception is raised. */ interface Int16Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Int16Array"; } @@ -5528,7 +5561,6 @@ interface Int16Array { * requested number of bytes could not be allocated an exception is raised. */ interface Uint16Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Uint16Array"; } @@ -5537,7 +5569,6 @@ interface Uint16Array { * requested number of bytes could not be allocated an exception is raised. */ interface Int32Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Int32Array"; } @@ -5546,7 +5577,6 @@ interface Int32Array { * requested number of bytes could not be allocated an exception is raised. */ interface Uint32Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Uint32Array"; } @@ -5555,7 +5585,6 @@ interface Uint32Array { * of bytes could not be allocated an exception is raised. */ interface Float32Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Float32Array"; } @@ -5564,9 +5593,9 @@ interface Float32Array { * number of bytes could not be allocated an exception is raised. */ interface Float64Array { - [Symbol.iterator](): IterableIterator; readonly [Symbol.toStringTag]: "Float64Array"; -}///////////////////////////// +} +///////////////////////////// /// IE DOM APIs ///////////////////////////// @@ -6525,7 +6554,7 @@ declare var ApplicationCache: { interface AriaRequestEvent extends Event { readonly attributeName: string; - attributeValue: string; + attributeValue: string | null; } declare var AriaRequestEvent: { @@ -6536,7 +6565,7 @@ declare var AriaRequestEvent: { interface Attr extends Node { readonly name: string; readonly ownerElement: Element; - readonly prefix: string; + readonly prefix: string | null; readonly specified: boolean; value: string; } @@ -6562,7 +6591,7 @@ declare var AudioBuffer: { } interface AudioBufferSourceNode extends AudioNode { - buffer: AudioBuffer; + buffer: AudioBuffer | null; readonly detune: AudioParam; loop: boolean; loopEnd: number; @@ -6698,7 +6727,7 @@ interface AudioTrackList extends EventTarget { onaddtrack: (ev: TrackEvent) => any; onchange: (ev: Event) => any; onremovetrack: (ev: TrackEvent) => any; - getTrackById(id: string): AudioTrack; + getTrackById(id: string): AudioTrack | null; item(index: number): AudioTrack; addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; @@ -6912,343 +6941,343 @@ declare var CSSRuleList: { } interface CSSStyleDeclaration { - alignContent: string; - alignItems: string; - alignSelf: string; - alignmentBaseline: string; - animation: string; - animationDelay: string; - animationDirection: string; - animationDuration: string; - animationFillMode: string; - animationIterationCount: string; - animationName: string; - animationPlayState: string; - animationTimingFunction: string; - backfaceVisibility: string; - background: string; - backgroundAttachment: string; - backgroundClip: string; - backgroundColor: string; - backgroundImage: string; - backgroundOrigin: string; - backgroundPosition: string; - backgroundPositionX: string; - backgroundPositionY: string; - backgroundRepeat: string; - backgroundSize: string; - baselineShift: string; - border: string; - borderBottom: string; - borderBottomColor: string; - borderBottomLeftRadius: string; - borderBottomRightRadius: string; - borderBottomStyle: string; - borderBottomWidth: string; - borderCollapse: string; - borderColor: string; - borderImage: string; - borderImageOutset: string; - borderImageRepeat: string; - borderImageSlice: string; - borderImageSource: string; - borderImageWidth: string; - borderLeft: string; - borderLeftColor: string; - borderLeftStyle: string; - borderLeftWidth: string; - borderRadius: string; - borderRight: string; - borderRightColor: string; - borderRightStyle: string; - borderRightWidth: string; - borderSpacing: string; - borderStyle: string; - borderTop: string; - borderTopColor: string; - borderTopLeftRadius: string; - borderTopRightRadius: string; - borderTopStyle: string; - borderTopWidth: string; - borderWidth: string; - bottom: string; - boxShadow: string; - boxSizing: string; - breakAfter: string; - breakBefore: string; - breakInside: string; - captionSide: string; - clear: string; - clip: string; - clipPath: string; - clipRule: string; - color: string; - colorInterpolationFilters: string; + alignContent: string | null; + alignItems: string | null; + alignSelf: string | null; + alignmentBaseline: string | null; + animation: string | null; + animationDelay: string | null; + animationDirection: string | null; + animationDuration: string | null; + animationFillMode: string | null; + animationIterationCount: string | null; + animationName: string | null; + animationPlayState: string | null; + animationTimingFunction: string | null; + backfaceVisibility: string | null; + background: string | null; + backgroundAttachment: string | null; + backgroundClip: string | null; + backgroundColor: string | null; + backgroundImage: string | null; + backgroundOrigin: string | null; + backgroundPosition: string | null; + backgroundPositionX: string | null; + backgroundPositionY: string | null; + backgroundRepeat: string | null; + backgroundSize: string | null; + baselineShift: string | null; + border: string | null; + borderBottom: string | null; + borderBottomColor: string | null; + borderBottomLeftRadius: string | null; + borderBottomRightRadius: string | null; + borderBottomStyle: string | null; + borderBottomWidth: string | null; + borderCollapse: string | null; + borderColor: string | null; + borderImage: string | null; + borderImageOutset: string | null; + borderImageRepeat: string | null; + borderImageSlice: string | null; + borderImageSource: string | null; + borderImageWidth: string | null; + borderLeft: string | null; + borderLeftColor: string | null; + borderLeftStyle: string | null; + borderLeftWidth: string | null; + borderRadius: string | null; + borderRight: string | null; + borderRightColor: string | null; + borderRightStyle: string | null; + borderRightWidth: string | null; + borderSpacing: string | null; + borderStyle: string | null; + borderTop: string | null; + borderTopColor: string | null; + borderTopLeftRadius: string | null; + borderTopRightRadius: string | null; + borderTopStyle: string | null; + borderTopWidth: string | null; + borderWidth: string | null; + bottom: string | null; + boxShadow: string | null; + boxSizing: string | null; + breakAfter: string | null; + breakBefore: string | null; + breakInside: string | null; + captionSide: string | null; + clear: string | null; + clip: string | null; + clipPath: string | null; + clipRule: string | null; + color: string | null; + colorInterpolationFilters: string | null; columnCount: any; - columnFill: string; + columnFill: string | null; columnGap: any; - columnRule: string; + columnRule: string | null; columnRuleColor: any; - columnRuleStyle: string; + columnRuleStyle: string | null; columnRuleWidth: any; - columnSpan: string; + columnSpan: string | null; columnWidth: any; - columns: string; - content: string; - counterIncrement: string; - counterReset: string; - cssFloat: string; + columns: string | null; + content: string | null; + counterIncrement: string | null; + counterReset: string | null; + cssFloat: string | null; cssText: string; - cursor: string; - direction: string; - display: string; - dominantBaseline: string; - emptyCells: string; - enableBackground: string; - fill: string; - fillOpacity: string; - fillRule: string; - filter: string; - flex: string; - flexBasis: string; - flexDirection: string; - flexFlow: string; - flexGrow: string; - flexShrink: string; - flexWrap: string; - floodColor: string; - floodOpacity: string; - font: string; - fontFamily: string; - fontFeatureSettings: string; - fontSize: string; - fontSizeAdjust: string; - fontStretch: string; - fontStyle: string; - fontVariant: string; - fontWeight: string; - glyphOrientationHorizontal: string; - glyphOrientationVertical: string; - height: string; - imeMode: string; - justifyContent: string; - kerning: string; - left: string; + cursor: string | null; + direction: string | null; + display: string | null; + dominantBaseline: string | null; + emptyCells: string | null; + enableBackground: string | null; + fill: string | null; + fillOpacity: string | null; + fillRule: string | null; + filter: string | null; + flex: string | null; + flexBasis: string | null; + flexDirection: string | null; + flexFlow: string | null; + flexGrow: string | null; + flexShrink: string | null; + flexWrap: string | null; + floodColor: string | null; + floodOpacity: string | null; + font: string | null; + fontFamily: string | null; + fontFeatureSettings: string | null; + fontSize: string | null; + fontSizeAdjust: string | null; + fontStretch: string | null; + fontStyle: string | null; + fontVariant: string | null; + fontWeight: string | null; + glyphOrientationHorizontal: string | null; + glyphOrientationVertical: string | null; + height: string | null; + imeMode: string | null; + justifyContent: string | null; + kerning: string | null; + left: string | null; readonly length: number; - letterSpacing: string; - lightingColor: string; - lineHeight: string; - listStyle: string; - listStyleImage: string; - listStylePosition: string; - listStyleType: string; - margin: string; - marginBottom: string; - marginLeft: string; - marginRight: string; - marginTop: string; - marker: string; - markerEnd: string; - markerMid: string; - markerStart: string; - mask: string; - maxHeight: string; - maxWidth: string; - minHeight: string; - minWidth: string; - msContentZoomChaining: string; - msContentZoomLimit: string; + letterSpacing: string | null; + lightingColor: string | null; + lineHeight: string | null; + listStyle: string | null; + listStyleImage: string | null; + listStylePosition: string | null; + listStyleType: string | null; + margin: string | null; + marginBottom: string | null; + marginLeft: string | null; + marginRight: string | null; + marginTop: string | null; + marker: string | null; + markerEnd: string | null; + markerMid: string | null; + markerStart: string | null; + mask: string | null; + maxHeight: string | null; + maxWidth: string | null; + minHeight: string | null; + minWidth: string | null; + msContentZoomChaining: string | null; + msContentZoomLimit: string | null; msContentZoomLimitMax: any; msContentZoomLimitMin: any; - msContentZoomSnap: string; - msContentZoomSnapPoints: string; - msContentZoomSnapType: string; - msContentZooming: string; - msFlowFrom: string; - msFlowInto: string; - msFontFeatureSettings: string; + msContentZoomSnap: string | null; + msContentZoomSnapPoints: string | null; + msContentZoomSnapType: string | null; + msContentZooming: string | null; + msFlowFrom: string | null; + msFlowInto: string | null; + msFontFeatureSettings: string | null; msGridColumn: any; - msGridColumnAlign: string; + msGridColumnAlign: string | null; msGridColumnSpan: any; - msGridColumns: string; + msGridColumns: string | null; msGridRow: any; - msGridRowAlign: string; + msGridRowAlign: string | null; msGridRowSpan: any; - msGridRows: string; - msHighContrastAdjust: string; - msHyphenateLimitChars: string; + msGridRows: string | null; + msHighContrastAdjust: string | null; + msHyphenateLimitChars: string | null; msHyphenateLimitLines: any; msHyphenateLimitZone: any; - msHyphens: string; - msImeAlign: string; - msOverflowStyle: string; - msScrollChaining: string; - msScrollLimit: string; + msHyphens: string | null; + msImeAlign: string | null; + msOverflowStyle: string | null; + msScrollChaining: string | null; + msScrollLimit: string | null; msScrollLimitXMax: any; msScrollLimitXMin: any; msScrollLimitYMax: any; msScrollLimitYMin: any; - msScrollRails: string; - msScrollSnapPointsX: string; - msScrollSnapPointsY: string; - msScrollSnapType: string; - msScrollSnapX: string; - msScrollSnapY: string; - msScrollTranslation: string; - msTextCombineHorizontal: string; + msScrollRails: string | null; + msScrollSnapPointsX: string | null; + msScrollSnapPointsY: string | null; + msScrollSnapType: string | null; + msScrollSnapX: string | null; + msScrollSnapY: string | null; + msScrollTranslation: string | null; + msTextCombineHorizontal: string | null; msTextSizeAdjust: any; - msTouchAction: string; - msTouchSelect: string; - msUserSelect: string; + msTouchAction: string | null; + msTouchSelect: string | null; + msUserSelect: string | null; msWrapFlow: string; msWrapMargin: any; msWrapThrough: string; - opacity: string; - order: string; - orphans: string; - outline: string; - outlineColor: string; - outlineStyle: string; - outlineWidth: string; - overflow: string; - overflowX: string; - overflowY: string; - padding: string; - paddingBottom: string; - paddingLeft: string; - paddingRight: string; - paddingTop: string; - pageBreakAfter: string; - pageBreakBefore: string; - pageBreakInside: string; + opacity: string | null; + order: string | null; + orphans: string | null; + outline: string | null; + outlineColor: string | null; + outlineStyle: string | null; + outlineWidth: string | null; + overflow: string | null; + overflowX: string | null; + overflowY: string | null; + padding: string | null; + paddingBottom: string | null; + paddingLeft: string | null; + paddingRight: string | null; + paddingTop: string | null; + pageBreakAfter: string | null; + pageBreakBefore: string | null; + pageBreakInside: string | null; readonly parentRule: CSSRule; - perspective: string; - perspectiveOrigin: string; - pointerEvents: string; - position: string; - quotes: string; - right: string; - rubyAlign: string; - rubyOverhang: string; - rubyPosition: string; - stopColor: string; - stopOpacity: string; - stroke: string; - strokeDasharray: string; - strokeDashoffset: string; - strokeLinecap: string; - strokeLinejoin: string; - strokeMiterlimit: string; - strokeOpacity: string; - strokeWidth: string; - tableLayout: string; - textAlign: string; - textAlignLast: string; - textAnchor: string; - textDecoration: string; - textIndent: string; - textJustify: string; - textKashida: string; - textKashidaSpace: string; - textOverflow: string; - textShadow: string; - textTransform: string; - textUnderlinePosition: string; - top: string; - touchAction: string; - transform: string; - transformOrigin: string; - transformStyle: string; - transition: string; - transitionDelay: string; - transitionDuration: string; - transitionProperty: string; - transitionTimingFunction: string; - unicodeBidi: string; - verticalAlign: string; - visibility: string; - webkitAlignContent: string; - webkitAlignItems: string; - webkitAlignSelf: string; - webkitAnimation: string; - webkitAnimationDelay: string; - webkitAnimationDirection: string; - webkitAnimationDuration: string; - webkitAnimationFillMode: string; - webkitAnimationIterationCount: string; - webkitAnimationName: string; - webkitAnimationPlayState: string; - webkitAnimationTimingFunction: string; - webkitAppearance: string; - webkitBackfaceVisibility: string; - webkitBackgroundClip: string; - webkitBackgroundOrigin: string; - webkitBackgroundSize: string; - webkitBorderBottomLeftRadius: string; - webkitBorderBottomRightRadius: string; - webkitBorderImage: string; - webkitBorderRadius: string; - webkitBorderTopLeftRadius: string; - webkitBorderTopRightRadius: string; - webkitBoxAlign: string; - webkitBoxDirection: string; - webkitBoxFlex: string; - webkitBoxOrdinalGroup: string; - webkitBoxOrient: string; - webkitBoxPack: string; - webkitBoxSizing: string; - webkitColumnBreakAfter: string; - webkitColumnBreakBefore: string; - webkitColumnBreakInside: string; + perspective: string | null; + perspectiveOrigin: string | null; + pointerEvents: string | null; + position: string | null; + quotes: string | null; + right: string | null; + rubyAlign: string | null; + rubyOverhang: string | null; + rubyPosition: string | null; + stopColor: string | null; + stopOpacity: string | null; + stroke: string | null; + strokeDasharray: string | null; + strokeDashoffset: string | null; + strokeLinecap: string | null; + strokeLinejoin: string | null; + strokeMiterlimit: string | null; + strokeOpacity: string | null; + strokeWidth: string | null; + tableLayout: string | null; + textAlign: string | null; + textAlignLast: string | null; + textAnchor: string | null; + textDecoration: string | null; + textIndent: string | null; + textJustify: string | null; + textKashida: string | null; + textKashidaSpace: string | null; + textOverflow: string | null; + textShadow: string | null; + textTransform: string | null; + textUnderlinePosition: string | null; + top: string | null; + touchAction: string | null; + transform: string | null; + transformOrigin: string | null; + transformStyle: string | null; + transition: string | null; + transitionDelay: string | null; + transitionDuration: string | null; + transitionProperty: string | null; + transitionTimingFunction: string | null; + unicodeBidi: string | null; + verticalAlign: string | null; + visibility: string | null; + webkitAlignContent: string | null; + webkitAlignItems: string | null; + webkitAlignSelf: string | null; + webkitAnimation: string | null; + webkitAnimationDelay: string | null; + webkitAnimationDirection: string | null; + webkitAnimationDuration: string | null; + webkitAnimationFillMode: string | null; + webkitAnimationIterationCount: string | null; + webkitAnimationName: string | null; + webkitAnimationPlayState: string | null; + webkitAnimationTimingFunction: string | null; + webkitAppearance: string | null; + webkitBackfaceVisibility: string | null; + webkitBackgroundClip: string | null; + webkitBackgroundOrigin: string | null; + webkitBackgroundSize: string | null; + webkitBorderBottomLeftRadius: string | null; + webkitBorderBottomRightRadius: string | null; + webkitBorderImage: string | null; + webkitBorderRadius: string | null; + webkitBorderTopLeftRadius: string | null; + webkitBorderTopRightRadius: string | null; + webkitBoxAlign: string | null; + webkitBoxDirection: string | null; + webkitBoxFlex: string | null; + webkitBoxOrdinalGroup: string | null; + webkitBoxOrient: string | null; + webkitBoxPack: string | null; + webkitBoxSizing: string | null; + webkitColumnBreakAfter: string | null; + webkitColumnBreakBefore: string | null; + webkitColumnBreakInside: string | null; webkitColumnCount: any; webkitColumnGap: any; - webkitColumnRule: string; + webkitColumnRule: string | null; webkitColumnRuleColor: any; - webkitColumnRuleStyle: string; + webkitColumnRuleStyle: string | null; webkitColumnRuleWidth: any; - webkitColumnSpan: string; + webkitColumnSpan: string | null; webkitColumnWidth: any; - webkitColumns: string; - webkitFilter: string; - webkitFlex: string; - webkitFlexBasis: string; - webkitFlexDirection: string; - webkitFlexFlow: string; - webkitFlexGrow: string; - webkitFlexShrink: string; - webkitFlexWrap: string; - webkitJustifyContent: string; - webkitOrder: string; - webkitPerspective: string; - webkitPerspectiveOrigin: string; - webkitTapHighlightColor: string; - webkitTextFillColor: string; + webkitColumns: string | null; + webkitFilter: string | null; + webkitFlex: string | null; + webkitFlexBasis: string | null; + webkitFlexDirection: string | null; + webkitFlexFlow: string | null; + webkitFlexGrow: string | null; + webkitFlexShrink: string | null; + webkitFlexWrap: string | null; + webkitJustifyContent: string | null; + webkitOrder: string | null; + webkitPerspective: string | null; + webkitPerspectiveOrigin: string | null; + webkitTapHighlightColor: string | null; + webkitTextFillColor: string | null; webkitTextSizeAdjust: any; - webkitTransform: string; - webkitTransformOrigin: string; - webkitTransformStyle: string; - webkitTransition: string; - webkitTransitionDelay: string; - webkitTransitionDuration: string; - webkitTransitionProperty: string; - webkitTransitionTimingFunction: string; - webkitUserModify: string; - webkitUserSelect: string; - webkitWritingMode: string; - whiteSpace: string; - widows: string; - width: string; - wordBreak: string; - wordSpacing: string; - wordWrap: string; - writingMode: string; - zIndex: string; - zoom: string; + webkitTransform: string | null; + webkitTransformOrigin: string | null; + webkitTransformStyle: string | null; + webkitTransition: string | null; + webkitTransitionDelay: string | null; + webkitTransitionDuration: string | null; + webkitTransitionProperty: string | null; + webkitTransitionTimingFunction: string | null; + webkitUserModify: string | null; + webkitUserSelect: string | null; + webkitWritingMode: string | null; + whiteSpace: string | null; + widows: string | null; + width: string | null; + wordBreak: string | null; + wordSpacing: string | null; + wordWrap: string | null; + writingMode: string | null; + zIndex: string | null; + zoom: string | null; getPropertyPriority(propertyName: string): string; getPropertyValue(propertyName: string): string; item(index: number): string; removeProperty(propertyName: string): string; - setProperty(propertyName: string, value: string, priority?: string): void; + setProperty(propertyName: string, value: string | null, priority?: string): void; [index: number]: string; } @@ -7340,6 +7369,9 @@ interface CanvasRenderingContext2D extends Object, CanvasPathMethods { strokeStyle: string | CanvasGradient | CanvasPattern; textAlign: string; textBaseline: string; + mozImageSmoothingEnabled: boolean; + webkitImageSmoothingEnabled: boolean; + oImageSmoothingEnabled: boolean; beginPath(): void; clearRect(x: number, y: number, w: number, h: number): void; clip(fillRule?: string): void; @@ -7454,7 +7486,7 @@ declare var CloseEvent: { interface CommandEvent extends Event { readonly commandName: string; - readonly detail: string; + readonly detail: string | null; } declare var CommandEvent: { @@ -7513,7 +7545,7 @@ declare var Console: { } interface ConvolverNode extends AudioNode { - buffer: AudioBuffer; + buffer: AudioBuffer | null; normalize: boolean; } @@ -7524,12 +7556,12 @@ declare var ConvolverNode: { interface Coordinates { readonly accuracy: number; - readonly altitude: number; - readonly altitudeAccuracy: number; - readonly heading: number; + readonly altitude: number | null; + readonly altitudeAccuracy: number | null; + readonly heading: number | null; readonly latitude: number; readonly longitude: number; - readonly speed: number; + readonly speed: number | null; } declare var Coordinates: { @@ -7655,10 +7687,10 @@ declare var DOMException: { } interface DOMImplementation { - createDocument(namespaceURI: string, qualifiedName: string, doctype: DocumentType): Document; - createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType; + createDocument(namespaceURI: string | null, qualifiedName: string | null, doctype: DocumentType): Document; + createDocumentType(qualifiedName: string, publicId: string | null, systemId: string | null): DocumentType; createHTMLDocument(title: string): Document; - hasFeature(feature: string, version: string): boolean; + hasFeature(feature: string | null, version: string | null): boolean; } declare var DOMImplementation: { @@ -7687,7 +7719,7 @@ declare var DOMSettableTokenList: { interface DOMStringList { readonly length: number; contains(str: string): boolean; - item(index: number): string; + item(index: number): string | null; [index: number]: string; } @@ -7749,8 +7781,8 @@ declare var DataTransfer: { interface DataTransferItem { readonly kind: string; readonly type: string; - getAsFile(): File; - getAsString(_callback: FunctionStringCallback): void; + getAsFile(): File | null; + getAsString(_callback: FunctionStringCallback | null): void; } declare var DataTransferItem: { @@ -7760,7 +7792,7 @@ declare var DataTransferItem: { interface DataTransferItemList { readonly length: number; - add(data: File): DataTransferItem; + add(data: File): DataTransferItem | null; clear(): void; item(index: number): DataTransferItem; remove(index: number): void; @@ -7795,9 +7827,9 @@ declare var DelayNode: { } interface DeviceAcceleration { - readonly x: number; - readonly y: number; - readonly z: number; + readonly x: number | null; + readonly y: number | null; + readonly z: number | null; } declare var DeviceAcceleration: { @@ -7815,11 +7847,11 @@ declare var DeviceLightEvent: { } interface DeviceMotionEvent extends Event { - readonly acceleration: DeviceAcceleration; - readonly accelerationIncludingGravity: DeviceAcceleration; - readonly interval: number; - readonly rotationRate: DeviceRotationRate; - initDeviceMotionEvent(type: string, bubbles: boolean, cancelable: boolean, acceleration: DeviceAccelerationDict, accelerationIncludingGravity: DeviceAccelerationDict, rotationRate: DeviceRotationRateDict, interval: number): void; + readonly acceleration: DeviceAcceleration | null; + readonly accelerationIncludingGravity: DeviceAcceleration | null; + readonly interval: number | null; + readonly rotationRate: DeviceRotationRate | null; + initDeviceMotionEvent(type: string, bubbles: boolean, cancelable: boolean, acceleration: DeviceAccelerationDict | null, accelerationIncludingGravity: DeviceAccelerationDict | null, rotationRate: DeviceRotationRateDict | null, interval: number | null): void; } declare var DeviceMotionEvent: { @@ -7829,10 +7861,10 @@ declare var DeviceMotionEvent: { interface DeviceOrientationEvent extends Event { readonly absolute: boolean; - readonly alpha: number; - readonly beta: number; - readonly gamma: number; - initDeviceOrientationEvent(type: string, bubbles: boolean, cancelable: boolean, alpha: number, beta: number, gamma: number, absolute: boolean): void; + readonly alpha: number | null; + readonly beta: number | null; + readonly gamma: number | null; + initDeviceOrientationEvent(type: string, bubbles: boolean, cancelable: boolean, alpha: number | null, beta: number | null, gamma: number | null, absolute: boolean): void; } declare var DeviceOrientationEvent: { @@ -7841,9 +7873,9 @@ declare var DeviceOrientationEvent: { } interface DeviceRotationRate { - readonly alpha: number; - readonly beta: number; - readonly gamma: number; + readonly alpha: number | null; + readonly beta: number | null; + readonly gamma: number | null; } declare var DeviceRotationRate: { @@ -7936,7 +7968,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Retrieves a collection, in source order, of all form objects in the document. */ forms: HTMLCollectionOf; - readonly fullscreenElement: Element; + readonly fullscreenElement: Element | null; readonly fullscreenEnabled: boolean; readonly head: HTMLHeadElement; readonly hidden: boolean; @@ -7951,7 +7983,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven /** * Returns the character encoding used to create the webpage that is loaded into the document object. */ - readonly inputEncoding: string; + readonly inputEncoding: string | null; /** * Gets the date that the page was last modified, if the page supplies one. */ @@ -8296,7 +8328,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Retrieves a collection of all script objects in the document. */ scripts: HTMLCollectionOf; - readonly scrollingElement: Element; + readonly scrollingElement: Element | null; /** * Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document. */ @@ -8310,16 +8342,16 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * Sets or gets the color of the links that the user has visited. */ vlinkColor: string; - readonly webkitCurrentFullScreenElement: Element; - readonly webkitFullscreenElement: Element; + readonly webkitCurrentFullScreenElement: Element | null; + readonly webkitFullscreenElement: Element | null; readonly webkitFullscreenEnabled: boolean; readonly webkitIsFullScreen: boolean; - readonly xmlEncoding: string; + readonly xmlEncoding: string | null; xmlStandalone: boolean; /** * Gets or sets the version attribute specified in the declaration of an XML document. */ - xmlVersion: string; + xmlVersion: string | null; adoptNode(source: Node): Node; captureEvents(): void; caretRangeFromPoint(x: number, y: number): Range; @@ -8333,7 +8365,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param name String that sets the attribute object's name. */ createAttribute(name: string): Attr; - createAttributeNS(namespaceURI: string, qualifiedName: string): Attr; + createAttributeNS(namespaceURI: string | null, qualifiedName: string): Attr; createCDATASection(data: string): CDATASection; /** * Creates a comment object with the specified data. @@ -8429,6 +8461,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven createElement(tagName: "x-ms-webview"): MSHTMLWebViewElement; createElement(tagName: "xmp"): HTMLPreElement; createElement(tagName: string): HTMLElement; + createElementNS(namespaceURI: "http://www.w3.org/1999/xhtml", qualifiedName: string): HTMLElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "a"): SVGAElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "circle"): SVGCircleElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "clipPath"): SVGClipPathElement @@ -8491,7 +8524,7 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "use"): SVGUseElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: "view"): SVGViewElement createElementNS(namespaceURI: "http://www.w3.org/2000/svg", qualifiedName: string): SVGElement - createElementNS(namespaceURI: string, qualifiedName: string): Element; + createElementNS(namespaceURI: string | null, qualifiedName: string): Element; createExpression(expression: string, resolver: XPathNSResolver): XPathExpression; createNSResolver(nodeResolver: Node): XPathNSResolver; /** @@ -8552,12 +8585,12 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param elementId String that specifies the ID value. Case-insensitive. */ getElementById(elementId: string): HTMLElement; - getElementsByClassName(classNames: string): NodeListOf; + getElementsByClassName(classNames: string): HTMLCollectionOf; /** * Gets a collection of objects based on the value of the NAME or ID attribute. * @param elementName Gets a collection of objects based on the value of the NAME or ID attribute. */ - getElementsByName(elementName: string): NodeListOf; + getElementsByName(elementName: string): NodeListOf; /** * Retrieves a collection of objects based on the specified element name. * @param name Specifies the name of an element. @@ -8739,7 +8772,9 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven getElementsByTagName(tagname: "x-ms-webview"): NodeListOf; getElementsByTagName(tagname: "xmp"): NodeListOf; getElementsByTagName(tagname: string): NodeListOf; - getElementsByTagNameNS(namespaceURI: string, localName: string): NodeListOf; + getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf; + getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf; + getElementsByTagNameNS(namespaceURI: string, localName: string): HTMLCollectionOf; /** * Returns an object representing the current selection of the document that is loaded into the object displaying a webpage. */ @@ -8806,8 +8841,6 @@ interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEven * @param content The text and HTML tags to write. */ writeln(...content: string[]): void; - createElement(tagName: "picture"): HTMLPictureElement; - getElementsByTagName(tagname: "picture"): NodeListOf; addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void; addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; @@ -8924,11 +8957,11 @@ declare var DocumentFragment: { interface DocumentType extends Node, ChildNode { readonly entities: NamedNodeMap; - readonly internalSubset: string; + readonly internalSubset: string | null; readonly name: string; readonly notations: NamedNodeMap; - readonly publicId: string; - readonly systemId: string; + readonly publicId: string | null; + readonly systemId: string | null; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; } @@ -9019,14 +9052,14 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec ontouchstart: (ev: TouchEvent) => any; onwebkitfullscreenchange: (ev: Event) => any; onwebkitfullscreenerror: (ev: Event) => any; - readonly prefix: string; + readonly prefix: string | null; readonly scrollHeight: number; scrollLeft: number; scrollTop: number; readonly scrollWidth: number; readonly tagName: string; innerHTML: string; - getAttribute(name?: string): string; + getAttribute(name?: string): string | null; getAttributeNS(namespaceURI: string, localName: string): string; getAttributeNode(name: string): Attr; getAttributeNodeNS(namespaceURI: string, localName: string): Attr; @@ -9209,7 +9242,9 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec getElementsByTagName(name: "x-ms-webview"): NodeListOf; getElementsByTagName(name: "xmp"): NodeListOf; getElementsByTagName(name: string): NodeListOf; - getElementsByTagNameNS(namespaceURI: string, localName: string): NodeListOf; + getElementsByTagNameNS(namespaceURI: "http://www.w3.org/1999/xhtml", localName: string): HTMLCollectionOf; + getElementsByTagNameNS(namespaceURI: "http://www.w3.org/2000/svg", localName: string): HTMLCollectionOf; + getElementsByTagNameNS(namespaceURI: string, localName: string): HTMLCollectionOf; hasAttribute(name: string): boolean; hasAttributeNS(namespaceURI: string, localName: string): boolean; msGetRegionContent(): MSRangeCollection; @@ -9234,7 +9269,6 @@ interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelec webkitRequestFullscreen(): void; getElementsByClassName(classNames: string): NodeListOf; matches(selector: string): boolean; - getElementsByTagName(tagname: "picture"): NodeListOf; addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void; @@ -9302,7 +9336,7 @@ interface Event { readonly eventPhase: number; readonly isTrusted: boolean; returnValue: boolean; - readonly srcElement: Element; + readonly srcElement: Element | null; readonly target: EventTarget; readonly timeStamp: number; readonly type: string; @@ -9597,7 +9631,7 @@ interface HTMLAppletElement extends HTMLElement { * Sets or retrieves the shape of the object. */ name: string; - object: string; + object: string | null; /** * Sets or retrieves a message to be displayed while an object is loading. */ @@ -11652,7 +11686,7 @@ interface HTMLMediaElement extends HTMLElement { * Gets or sets a flag to specify whether playback should restart after it completes. */ loop: boolean; - readonly mediaKeys: MediaKeys; + readonly mediaKeys: MediaKeys | null; /** * Specifies the purpose of the audio or video media, such as background audio or alerts. */ @@ -11725,7 +11759,7 @@ interface HTMLMediaElement extends HTMLElement { * The address or URL of the a media resource that is to be considered. */ src: string; - srcObject: MediaStream; + srcObject: MediaStream | null; readonly textTracks: TextTrackList; readonly videoTracks: VideoTrackList; /** @@ -11763,7 +11797,7 @@ interface HTMLMediaElement extends HTMLElement { * Loads and starts playback of a media resource. */ play(): void; - setMediaKeys(mediaKeys: MediaKeys): PromiseLike; + setMediaKeys(mediaKeys: MediaKeys | null): PromiseLike; readonly HAVE_CURRENT_DATA: number; readonly HAVE_ENOUGH_DATA: number; readonly HAVE_FUTURE_DATA: number; @@ -13075,8 +13109,8 @@ declare var HTMLVideoElement: { } interface HashChangeEvent extends Event { - readonly newURL: string; - readonly oldURL: string; + readonly newURL: string | null; + readonly oldURL: string | null; } declare var HashChangeEvent: { @@ -13282,7 +13316,7 @@ declare var IDBTransaction: { } interface IDBVersionChangeEvent extends Event { - readonly newVersion: number; + readonly newVersion: number | null; readonly oldVersion: number; } @@ -13305,7 +13339,7 @@ declare var ImageData: { interface KeyboardEvent extends UIEvent { readonly altKey: boolean; - readonly char: string; + readonly char: string | null; readonly charCode: number; readonly ctrlKey: boolean; readonly key: string; @@ -13648,7 +13682,7 @@ declare var MSMediaKeyError: { } interface MSMediaKeyMessageEvent extends Event { - readonly destinationURL: string; + readonly destinationURL: string | null; readonly message: Uint8Array; } @@ -13658,7 +13692,7 @@ declare var MSMediaKeyMessageEvent: { } interface MSMediaKeyNeededEvent extends Event { - readonly initData: Uint8Array; + readonly initData: Uint8Array | null; } declare var MSMediaKeyNeededEvent: { @@ -13667,7 +13701,7 @@ declare var MSMediaKeyNeededEvent: { } interface MSMediaKeySession extends EventTarget { - readonly error: MSMediaKeyError; + readonly error: MSMediaKeyError | null; readonly keySystem: string; readonly sessionId: string; close(): void; @@ -13837,7 +13871,7 @@ declare var MediaElementAudioSourceNode: { } interface MediaEncryptedEvent extends Event { - readonly initData: ArrayBuffer; + readonly initData: ArrayBuffer | null; readonly initDataType: string; } @@ -13979,7 +14013,7 @@ interface MediaStream extends EventTarget { addTrack(track: MediaStreamTrack): void; clone(): MediaStream; getAudioTracks(): MediaStreamTrack[]; - getTrackById(trackId: string): MediaStreamTrack; + getTrackById(trackId: string): MediaStreamTrack | null; getTracks(): MediaStreamTrack[]; getVideoTracks(): MediaStreamTrack[]; removeTrack(track: MediaStreamTrack): void; @@ -14005,8 +14039,8 @@ declare var MediaStreamAudioSourceNode: { } interface MediaStreamError { - readonly constraintName: string; - readonly message: string; + readonly constraintName: string | null; + readonly message: string | null; readonly name: string; } @@ -14016,7 +14050,7 @@ declare var MediaStreamError: { } interface MediaStreamErrorEvent extends Event { - readonly error: MediaStreamError; + readonly error: MediaStreamError | null; } declare var MediaStreamErrorEvent: { @@ -14192,11 +14226,11 @@ declare var MutationObserver: { interface MutationRecord { readonly addedNodes: NodeList; - readonly attributeName: string; - readonly attributeNamespace: string; - readonly nextSibling: Node; - readonly oldValue: string; - readonly previousSibling: Node; + readonly attributeName: string | null; + readonly attributeNamespace: string | null; + readonly nextSibling: Node | null; + readonly oldValue: string | null; + readonly previousSibling: Node | null; readonly removedNodes: NodeList; readonly target: Node; readonly type: string; @@ -14210,10 +14244,10 @@ declare var MutationRecord: { interface NamedNodeMap { readonly length: number; getNamedItem(name: string): Attr; - getNamedItemNS(namespaceURI: string, localName: string): Attr; + getNamedItemNS(namespaceURI: string | null, localName: string | null): Attr; item(index: number): Attr; removeNamedItem(name: string): Attr; - removeNamedItemNS(namespaceURI: string, localName: string): Attr; + removeNamedItemNS(namespaceURI: string | null, localName: string | null): Attr; setNamedItem(arg: Attr): Attr; setNamedItemNS(arg: Attr): Attr; [index: number]: Attr; @@ -14279,33 +14313,33 @@ declare var Navigator: { interface Node extends EventTarget { readonly attributes: NamedNodeMap; - readonly baseURI: string; + readonly baseURI: string | null; readonly childNodes: NodeList; readonly firstChild: Node; readonly lastChild: Node; - readonly localName: string; - readonly namespaceURI: string; + readonly localName: string | null; + readonly namespaceURI: string | null; readonly nextSibling: Node; readonly nodeName: string; readonly nodeType: number; - nodeValue: string; + nodeValue: string | null; readonly ownerDocument: Document; readonly parentElement: HTMLElement; readonly parentNode: Node; readonly previousSibling: Node; - textContent: string; + textContent: string | null; appendChild(newChild: Node): Node; cloneNode(deep?: boolean): Node; compareDocumentPosition(other: Node): number; contains(child: Node): boolean; hasAttributes(): boolean; hasChildNodes(): boolean; - insertBefore(newChild: Node, refChild?: Node): Node; - isDefaultNamespace(namespaceURI: string): boolean; + insertBefore(newChild: Node, refChild: Node): Node; + isDefaultNamespace(namespaceURI: string | null): boolean; isEqualNode(arg: Node): boolean; isSameNode(other: Node): boolean; - lookupNamespaceURI(prefix: string): string; - lookupPrefix(namespaceURI: string): string; + lookupNamespaceURI(prefix: string | null): string | null; + lookupPrefix(namespaceURI: string | null): string | null; normalize(): void; removeChild(oldChild: Node): Node; replaceChild(newChild: Node, oldChild: Node): Node; @@ -14534,10 +14568,10 @@ interface PerfWidgetExternal { addEventListener(eventType: string, callback: Function): void; getMemoryUsage(): number; getProcessCpuUsage(): number; - getRecentCpuUsage(last: number): any; - getRecentFrames(last: number): any; - getRecentMemoryUsage(last: number): any; - getRecentPaintRequests(last: number): any; + getRecentCpuUsage(last: number | null): any; + getRecentFrames(last: number | null): any; + getRecentMemoryUsage(last: number | null): any; + getRecentPaintRequests(last: number | null): any; removeEventListener(eventType: string, callback: Function): void; repositionWindow(x: number, y: number): void; resizeWindow(width: number, height: number): void; @@ -14844,13 +14878,13 @@ declare var RTCDTMFToneChangeEvent: { } interface RTCDtlsTransport extends RTCStatsProvider { - ondtlsstatechange: (ev: RTCDtlsTransportStateChangedEvent) => any; - onerror: (ev: Event) => any; + ondtlsstatechange: ((ev: RTCDtlsTransportStateChangedEvent) => any) | null; + onerror: ((ev: Event) => any) | null; readonly state: string; readonly transport: RTCIceTransport; getLocalParameters(): RTCDtlsParameters; getRemoteCertificates(): ArrayBuffer[]; - getRemoteParameters(): RTCDtlsParameters; + getRemoteParameters(): RTCDtlsParameters | null; start(remoteParameters: RTCDtlsParameters): void; stop(): void; addEventListener(type: "dtlsstatechange", listener: (ev: RTCDtlsTransportStateChangedEvent) => any, useCapture?: boolean): void; @@ -14900,8 +14934,8 @@ declare var RTCIceCandidatePairChangedEvent: { interface RTCIceGatherer extends RTCStatsProvider { readonly component: string; - onerror: (ev: Event) => any; - onlocalcandidate: (ev: RTCIceGathererEvent) => any; + onerror: ((ev: Event) => any) | null; + onlocalcandidate: ((ev: RTCIceGathererEvent) => any) | null; createAssociatedGatherer(): RTCIceGatherer; getLocalCandidates(): RTCIceCandidate[]; getLocalParameters(): RTCIceParameters; @@ -14926,16 +14960,16 @@ declare var RTCIceGathererEvent: { interface RTCIceTransport extends RTCStatsProvider { readonly component: string; - readonly iceGatherer: RTCIceGatherer; - oncandidatepairchange: (ev: RTCIceCandidatePairChangedEvent) => any; - onicestatechange: (ev: RTCIceTransportStateChangedEvent) => any; + readonly iceGatherer: RTCIceGatherer | null; + oncandidatepairchange: ((ev: RTCIceCandidatePairChangedEvent) => any) | null; + onicestatechange: ((ev: RTCIceTransportStateChangedEvent) => any) | null; readonly role: string; readonly state: string; addRemoteCandidate(remoteCandidate: RTCIceCandidate | RTCIceCandidateComplete): void; createAssociatedTransport(): RTCIceTransport; - getNominatedCandidatePair(): RTCIceCandidatePair; + getNominatedCandidatePair(): RTCIceCandidatePair | null; getRemoteCandidates(): RTCIceCandidate[]; - getRemoteParameters(): RTCIceParameters; + getRemoteParameters(): RTCIceParameters | null; setRemoteCandidates(remoteCandidates: RTCIceCandidate[]): void; start(gatherer: RTCIceGatherer, remoteParameters: RTCIceParameters, role?: string): void; stop(): void; @@ -14959,9 +14993,9 @@ declare var RTCIceTransportStateChangedEvent: { } interface RTCRtpReceiver extends RTCStatsProvider { - onerror: (ev: Event) => any; + onerror: ((ev: Event) => any) | null; readonly rtcpTransport: RTCDtlsTransport; - readonly track: MediaStreamTrack; + readonly track: MediaStreamTrack | null; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; getContributingSources(): RTCRtpContributingSource[]; receive(parameters: RTCRtpParameters): void; @@ -14979,8 +15013,8 @@ declare var RTCRtpReceiver: { } interface RTCRtpSender extends RTCStatsProvider { - onerror: (ev: Event) => any; - onssrcconflict: (ev: RTCSsrcConflictEvent) => any; + onerror: ((ev: Event) => any) | null; + onssrcconflict: ((ev: RTCSsrcConflictEvent) => any) | null; readonly rtcpTransport: RTCDtlsTransport; readonly track: MediaStreamTrack; readonly transport: RTCDtlsTransport | RTCSrtpSdesTransport; @@ -15000,7 +15034,7 @@ declare var RTCRtpSender: { } interface RTCSrtpSdesTransport extends EventTarget { - onerror: (ev: Event) => any; + onerror: ((ev: Event) => any) | null; readonly transport: RTCIceTransport; addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; @@ -17047,9 +17081,9 @@ interface SubtleCrypto { encrypt(algorithm: string | Algorithm, key: CryptoKey, data: ArrayBufferView): PromiseLike; exportKey(format: string, key: CryptoKey): PromiseLike; generateKey(algorithm: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; - importKey(format: string, keyData: ArrayBufferView, algorithm: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; + importKey(format: string, keyData: ArrayBufferView, algorithm: string | Algorithm | null, extractable: boolean, keyUsages: string[]): PromiseLike; sign(algorithm: string | Algorithm, key: CryptoKey, data: ArrayBufferView): PromiseLike; - unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string | Algorithm, unwrappedKeyAlgorithm: string | Algorithm, extractable: boolean, keyUsages: string[]): PromiseLike; + unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string | Algorithm, unwrappedKeyAlgorithm: string | Algorithm | null, extractable: boolean, keyUsages: string[]): PromiseLike; verify(algorithm: string | Algorithm, key: CryptoKey, signature: ArrayBufferView, data: ArrayBufferView): PromiseLike; wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: string | Algorithm): PromiseLike; } @@ -17183,7 +17217,7 @@ declare var TextTrackCueList: { interface TextTrackList extends EventTarget { readonly length: number; - onaddtrack: (ev: TrackEvent) => any; + onaddtrack: ((ev: TrackEvent) => any) | null; item(index: number): TextTrack; addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; @@ -17239,7 +17273,7 @@ declare var TouchEvent: { interface TouchList { readonly length: number; - item(index: number): Touch; + item(index: number): Touch | null; [index: number]: Touch; } @@ -17381,7 +17415,7 @@ interface VideoTrackList extends EventTarget { onchange: (ev: Event) => any; onremovetrack: (ev: TrackEvent) => any; readonly selectedIndex: number; - getTrackById(id: string): VideoTrack; + getTrackById(id: string): VideoTrack | null; item(index: number): VideoTrack; addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void; addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void; @@ -17434,7 +17468,7 @@ declare var WEBGL_depth_texture: { } interface WaveShaperNode extends AudioNode { - curve: Float32Array; + curve: Float32Array | null; oversample: string; } @@ -17508,12 +17542,12 @@ interface WebGLRenderingContext { readonly drawingBufferHeight: number; readonly drawingBufferWidth: number; activeTexture(texture: number): void; - attachShader(program: WebGLProgram, shader: WebGLShader): void; - bindAttribLocation(program: WebGLProgram, index: number, name: string): void; - bindBuffer(target: number, buffer: WebGLBuffer): void; - bindFramebuffer(target: number, framebuffer: WebGLFramebuffer): void; - bindRenderbuffer(target: number, renderbuffer: WebGLRenderbuffer): void; - bindTexture(target: number, texture: WebGLTexture): void; + attachShader(program: WebGLProgram | null, shader: WebGLShader | null): void; + bindAttribLocation(program: WebGLProgram | null, index: number, name: string): void; + bindBuffer(target: number, buffer: WebGLBuffer | null): void; + bindFramebuffer(target: number, framebuffer: WebGLFramebuffer | null): void; + bindRenderbuffer(target: number, renderbuffer: WebGLRenderbuffer | null): void; + bindTexture(target: number, texture: WebGLTexture | null): void; blendColor(red: number, green: number, blue: number, alpha: number): void; blendEquation(mode: number): void; blendEquationSeparate(modeRGB: number, modeAlpha: number): void; @@ -17527,28 +17561,28 @@ interface WebGLRenderingContext { clearDepth(depth: number): void; clearStencil(s: number): void; colorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void; - compileShader(shader: WebGLShader): void; + compileShader(shader: WebGLShader | null): void; compressedTexImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, data: ArrayBufferView): void; compressedTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, data: ArrayBufferView): void; copyTexImage2D(target: number, level: number, internalformat: number, x: number, y: number, width: number, height: number, border: number): void; copyTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, x: number, y: number, width: number, height: number): void; - createBuffer(): WebGLBuffer; - createFramebuffer(): WebGLFramebuffer; - createProgram(): WebGLProgram; - createRenderbuffer(): WebGLRenderbuffer; - createShader(type: number): WebGLShader; - createTexture(): WebGLTexture; + createBuffer(): WebGLBuffer | null; + createFramebuffer(): WebGLFramebuffer | null; + createProgram(): WebGLProgram | null; + createRenderbuffer(): WebGLRenderbuffer | null; + createShader(type: number): WebGLShader | null; + createTexture(): WebGLTexture | null; cullFace(mode: number): void; - deleteBuffer(buffer: WebGLBuffer): void; - deleteFramebuffer(framebuffer: WebGLFramebuffer): void; - deleteProgram(program: WebGLProgram): void; - deleteRenderbuffer(renderbuffer: WebGLRenderbuffer): void; - deleteShader(shader: WebGLShader): void; - deleteTexture(texture: WebGLTexture): void; + deleteBuffer(buffer: WebGLBuffer | null): void; + deleteFramebuffer(framebuffer: WebGLFramebuffer | null): void; + deleteProgram(program: WebGLProgram | null): void; + deleteRenderbuffer(renderbuffer: WebGLRenderbuffer | null): void; + deleteShader(shader: WebGLShader | null): void; + deleteTexture(texture: WebGLTexture | null): void; depthFunc(func: number): void; depthMask(flag: boolean): void; depthRange(zNear: number, zFar: number): void; - detachShader(program: WebGLProgram, shader: WebGLShader): void; + detachShader(program: WebGLProgram | null, shader: WebGLShader | null): void; disable(cap: number): void; disableVertexAttribArray(index: number): void; drawArrays(mode: number, first: number, count: number): void; @@ -17557,51 +17591,51 @@ interface WebGLRenderingContext { enableVertexAttribArray(index: number): void; finish(): void; flush(): void; - framebufferRenderbuffer(target: number, attachment: number, renderbuffertarget: number, renderbuffer: WebGLRenderbuffer): void; - framebufferTexture2D(target: number, attachment: number, textarget: number, texture: WebGLTexture, level: number): void; + framebufferRenderbuffer(target: number, attachment: number, renderbuffertarget: number, renderbuffer: WebGLRenderbuffer | null): void; + framebufferTexture2D(target: number, attachment: number, textarget: number, texture: WebGLTexture | null, level: number): void; frontFace(mode: number): void; generateMipmap(target: number): void; - getActiveAttrib(program: WebGLProgram, index: number): WebGLActiveInfo; - getActiveUniform(program: WebGLProgram, index: number): WebGLActiveInfo; - getAttachedShaders(program: WebGLProgram): WebGLShader[]; - getAttribLocation(program: WebGLProgram, name: string): number; + getActiveAttrib(program: WebGLProgram | null, index: number): WebGLActiveInfo | null; + getActiveUniform(program: WebGLProgram | null, index: number): WebGLActiveInfo | null; + getAttachedShaders(program: WebGLProgram | null): WebGLShader[] | null; + getAttribLocation(program: WebGLProgram | null, name: string): number; getBufferParameter(target: number, pname: number): any; getContextAttributes(): WebGLContextAttributes; getError(): number; getExtension(name: string): any; getFramebufferAttachmentParameter(target: number, attachment: number, pname: number): any; getParameter(pname: number): any; - getProgramInfoLog(program: WebGLProgram): string; - getProgramParameter(program: WebGLProgram, pname: number): any; + getProgramInfoLog(program: WebGLProgram | null): string | null; + getProgramParameter(program: WebGLProgram | null, pname: number): any; getRenderbufferParameter(target: number, pname: number): any; - getShaderInfoLog(shader: WebGLShader): string; - getShaderParameter(shader: WebGLShader, pname: number): any; - getShaderPrecisionFormat(shadertype: number, precisiontype: number): WebGLShaderPrecisionFormat; - getShaderSource(shader: WebGLShader): string; - getSupportedExtensions(): string[]; + getShaderInfoLog(shader: WebGLShader | null): string | null; + getShaderParameter(shader: WebGLShader | null, pname: number): any; + getShaderPrecisionFormat(shadertype: number, precisiontype: number): WebGLShaderPrecisionFormat | null; + getShaderSource(shader: WebGLShader | null): string | null; + getSupportedExtensions(): string[] | null; getTexParameter(target: number, pname: number): any; - getUniform(program: WebGLProgram, location: WebGLUniformLocation): any; - getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation; + getUniform(program: WebGLProgram | null, location: WebGLUniformLocation | null): any; + getUniformLocation(program: WebGLProgram | null, name: string): WebGLUniformLocation | null; getVertexAttrib(index: number, pname: number): any; getVertexAttribOffset(index: number, pname: number): number; hint(target: number, mode: number): void; - isBuffer(buffer: WebGLBuffer): boolean; + isBuffer(buffer: WebGLBuffer | null): boolean; isContextLost(): boolean; isEnabled(cap: number): boolean; - isFramebuffer(framebuffer: WebGLFramebuffer): boolean; - isProgram(program: WebGLProgram): boolean; - isRenderbuffer(renderbuffer: WebGLRenderbuffer): boolean; - isShader(shader: WebGLShader): boolean; - isTexture(texture: WebGLTexture): boolean; + isFramebuffer(framebuffer: WebGLFramebuffer | null): boolean; + isProgram(program: WebGLProgram | null): boolean; + isRenderbuffer(renderbuffer: WebGLRenderbuffer | null): boolean; + isShader(shader: WebGLShader | null): boolean; + isTexture(texture: WebGLTexture | null): boolean; lineWidth(width: number): void; - linkProgram(program: WebGLProgram): void; + linkProgram(program: WebGLProgram | null): void; pixelStorei(pname: number, param: number): void; polygonOffset(factor: number, units: number): void; - readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void; + readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView | null): void; renderbufferStorage(target: number, internalformat: number, width: number, height: number): void; sampleCoverage(value: number, invert: boolean): void; scissor(x: number, y: number, width: number, height: number): void; - shaderSource(shader: WebGLShader, source: string): void; + shaderSource(shader: WebGLShader | null, source: string): void; stencilFunc(func: number, ref: number, mask: number): void; stencilFuncSeparate(face: number, func: number, ref: number, mask: number): void; stencilMask(mask: number): void; @@ -17620,27 +17654,27 @@ interface WebGLRenderingContext { texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, canvas: HTMLCanvasElement): void; texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, video: HTMLVideoElement): void; texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels: ImageData): void; - uniform1f(location: WebGLUniformLocation, x: number): void; + uniform1f(location: WebGLUniformLocation | null, x: number): void; uniform1fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; - uniform1i(location: WebGLUniformLocation, x: number): void; + uniform1i(location: WebGLUniformLocation | null, x: number): void; uniform1iv(location: WebGLUniformLocation, v: Int32Array | number[]): void; - uniform2f(location: WebGLUniformLocation, x: number, y: number): void; + uniform2f(location: WebGLUniformLocation | null, x: number, y: number): void; uniform2fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; - uniform2i(location: WebGLUniformLocation, x: number, y: number): void; + uniform2i(location: WebGLUniformLocation | null, x: number, y: number): void; uniform2iv(location: WebGLUniformLocation, v: Int32Array | number[]): void; - uniform3f(location: WebGLUniformLocation, x: number, y: number, z: number): void; + uniform3f(location: WebGLUniformLocation | null, x: number, y: number, z: number): void; uniform3fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; - uniform3i(location: WebGLUniformLocation, x: number, y: number, z: number): void; + uniform3i(location: WebGLUniformLocation | null, x: number, y: number, z: number): void; uniform3iv(location: WebGLUniformLocation, v: Int32Array | number[]): void; - uniform4f(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void; + uniform4f(location: WebGLUniformLocation | null, x: number, y: number, z: number, w: number): void; uniform4fv(location: WebGLUniformLocation, v: Float32Array | number[]): void; - uniform4i(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void; + uniform4i(location: WebGLUniformLocation | null, x: number, y: number, z: number, w: number): void; uniform4iv(location: WebGLUniformLocation, v: Int32Array | number[]): void; uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array | number[]): void; uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array | number[]): void; uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: Float32Array | number[]): void; - useProgram(program: WebGLProgram): void; - validateProgram(program: WebGLProgram): void; + useProgram(program: WebGLProgram | null): void; + validateProgram(program: WebGLProgram | null): void; vertexAttrib1f(indx: number, x: number): void; vertexAttrib1fv(indx: number, values: Float32Array | number[]): void; vertexAttrib2f(indx: number, x: number, y: number): void; @@ -18550,7 +18584,7 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window open(url?: string, target?: string, features?: string, replace?: boolean): Window; postMessage(message: any, targetOrigin: string, transfer?: any[]): void; print(): void; - prompt(message?: string, _default?: string): string; + prompt(message?: string, _default?: string): string | null; releaseEvents(): void; requestAnimationFrame(callback: FrameRequestCallback): number; resizeBy(x?: number, y?: number): void; @@ -18703,7 +18737,7 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { withCredentials: boolean; abort(): void; getAllResponseHeaders(): string; - getResponseHeader(header: string): string; + getResponseHeader(header: string): string | null; msCachingEnabled(): boolean; open(method: string, url: string, async?: boolean, user?: string, password?: string): void; overrideMimeType(mime: string): void; @@ -19227,14 +19261,6 @@ interface ProgressEventInit extends EventInit { total?: number; } -interface HTMLPictureElement extends HTMLElement { -} - -declare var HTMLPictureElement: { - prototype: HTMLPictureElement; - new(): HTMLPictureElement; -} - interface ClipboardEventInit extends EventInit { data?: string; dataType?: string; @@ -19448,7 +19474,7 @@ declare function msWriteProfilerMark(profilerMarkName: string): void; declare function open(url?: string, target?: string, features?: string, replace?: boolean): Window; declare function postMessage(message: any, targetOrigin: string, transfer?: any[]): void; declare function print(): void; -declare function prompt(message?: string, _default?: string): string; +declare function prompt(message?: string, _default?: string): string | null; declare function releaseEvents(): void; declare function requestAnimationFrame(callback: FrameRequestCallback): number; declare function resizeBy(x?: number, y?: number): void; @@ -19896,3 +19922,16 @@ interface VBArrayConstructor { } declare var VBArray: VBArrayConstructor; +/// + +interface DOMTokenList { + [Symbol.iterator](): IterableIterator; +} + +interface NodeList { + [Symbol.iterator](): IterableIterator +} + +interface NodeListOf { + [Symbol.iterator](): IterableIterator +} diff --git a/lib/lib.scripthost.d.ts b/lib/lib.scripthost.d.ts new file mode 100644 index 00000000000..d4c6131fd93 --- /dev/null +++ b/lib/lib.scripthost.d.ts @@ -0,0 +1,294 @@ +/*! ***************************************************************************** +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. +***************************************************************************** */ + +/// + + +///////////////////////////// +/// Windows Script Host APIS +///////////////////////////// + + +interface ActiveXObject { + new (s: string): any; +} +declare var ActiveXObject: ActiveXObject; + +interface ITextWriter { + Write(s: string): void; + WriteLine(s: string): void; + Close(): void; +} + +interface TextStreamBase { + /** + * The column number of the current character position in an input stream. + */ + Column: number; + + /** + * The current line number in an input stream. + */ + Line: number; + + /** + * Closes a text stream. + * It is not necessary to close standard streams; they close automatically when the process ends. If + * you close a standard stream, be aware that any other pointers to that standard stream become invalid. + */ + Close(): void; +} + +interface TextStreamWriter extends TextStreamBase { + /** + * Sends a string to an output stream. + */ + Write(s: string): void; + + /** + * Sends a specified number of blank lines (newline characters) to an output stream. + */ + WriteBlankLines(intLines: number): void; + + /** + * Sends a string followed by a newline character to an output stream. + */ + WriteLine(s: string): void; +} + +interface TextStreamReader extends TextStreamBase { + /** + * Returns a specified number of characters from an input stream, starting at the current pointer position. + * Does not return until the ENTER key is pressed. + * Can only be used on a stream in reading mode; causes an error in writing or appending mode. + */ + Read(characters: number): string; + + /** + * Returns all characters from an input stream. + * Can only be used on a stream in reading mode; causes an error in writing or appending mode. + */ + ReadAll(): string; + + /** + * Returns an entire line from an input stream. + * Although this method extracts the newline character, it does not add it to the returned string. + * Can only be used on a stream in reading mode; causes an error in writing or appending mode. + */ + ReadLine(): string; + + /** + * Skips a specified number of characters when reading from an input text stream. + * Can only be used on a stream in reading mode; causes an error in writing or appending mode. + * @param characters Positive number of characters to skip forward. (Backward skipping is not supported.) + */ + Skip(characters: number): void; + + /** + * Skips the next line when reading from an input text stream. + * Can only be used on a stream in reading mode, not writing or appending mode. + */ + SkipLine(): void; + + /** + * Indicates whether the stream pointer position is at the end of a line. + */ + AtEndOfLine: boolean; + + /** + * Indicates whether the stream pointer position is at the end of a stream. + */ + AtEndOfStream: boolean; +} + +declare var WScript: { + /** + * Outputs text to either a message box (under WScript.exe) or the command console window followed by + * a newline (under CScript.exe). + */ + Echo(s: any): void; + + /** + * Exposes the write-only error output stream for the current script. + * Can be accessed only while using CScript.exe. + */ + StdErr: TextStreamWriter; + + /** + * Exposes the write-only output stream for the current script. + * Can be accessed only while using CScript.exe. + */ + StdOut: TextStreamWriter; + Arguments: { length: number; Item(n: number): string; }; + + /** + * The full path of the currently running script. + */ + ScriptFullName: string; + + /** + * Forces the script to stop immediately, with an optional exit code. + */ + Quit(exitCode?: number): number; + + /** + * The Windows Script Host build version number. + */ + BuildVersion: number; + + /** + * Fully qualified path of the host executable. + */ + FullName: string; + + /** + * Gets/sets the script mode - interactive(true) or batch(false). + */ + Interactive: boolean; + + /** + * The name of the host executable (WScript.exe or CScript.exe). + */ + Name: string; + + /** + * Path of the directory containing the host executable. + */ + Path: string; + + /** + * The filename of the currently running script. + */ + ScriptName: string; + + /** + * Exposes the read-only input stream for the current script. + * Can be accessed only while using CScript.exe. + */ + StdIn: TextStreamReader; + + /** + * Windows Script Host version + */ + Version: string; + + /** + * Connects a COM object's event sources to functions named with a given prefix, in the form prefix_event. + */ + ConnectObject(objEventSource: any, strPrefix: string): void; + + /** + * Creates a COM object. + * @param strProgiID + * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events. + */ + CreateObject(strProgID: string, strPrefix?: string): any; + + /** + * Disconnects a COM object from its event sources. + */ + DisconnectObject(obj: any): void; + + /** + * Retrieves an existing object with the specified ProgID from memory, or creates a new one from a file. + * @param strPathname Fully qualified path to the file containing the object persisted to disk. + * For objects in memory, pass a zero-length string. + * @param strProgID + * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events. + */ + GetObject(strPathname: string, strProgID?: string, strPrefix?: string): any; + + /** + * Suspends script execution for a specified length of time, then continues execution. + * @param intTime Interval (in milliseconds) to suspend script execution. + */ + Sleep(intTime: number): void; +}; + +/** + * Allows enumerating over a COM collection, which may not have indexed item access. + */ +interface Enumerator { + /** + * Returns true if the current item is the last one in the collection, or the collection is empty, + * or the current item is undefined. + */ + atEnd(): boolean; + + /** + * Returns the current item in the collection + */ + item(): T; + + /** + * Resets the current item in the collection to the first item. If there are no items in the collection, + * the current item is set to undefined. + */ + moveFirst(): void; + + /** + * Moves the current item to the next item in the collection. If the enumerator is at the end of + * the collection or the collection is empty, the current item is set to undefined. + */ + moveNext(): void; +} + +interface EnumeratorConstructor { + new (collection: any): Enumerator; + new (collection: any): Enumerator; +} + +declare var Enumerator: EnumeratorConstructor; + +/** + * Enables reading from a COM safe array, which might have an alternate lower bound, or multiple dimensions. + */ +interface VBArray { + /** + * Returns the number of dimensions (1-based). + */ + dimensions(): number; + + /** + * Takes an index for each dimension in the array, and returns the item at the corresponding location. + */ + getItem(dimension1Index: number, ...dimensionNIndexes: number[]): T; + + /** + * Returns the smallest available index for a given dimension. + * @param dimension 1-based dimension (defaults to 1) + */ + lbound(dimension?: number): number; + + /** + * Returns the largest available index for a given dimension. + * @param dimension 1-based dimension (defaults to 1) + */ + ubound(dimension?: number): number; + + /** + * Returns a Javascript array with all the elements in the VBArray. If there are multiple dimensions, + * each successive dimension is appended to the end of the array. + * Example: [[1,2,3],[4,5,6]] becomes [1,2,3,4,5,6] + */ + toArray(): T[]; +} + +interface VBArrayConstructor { + new (safeArray: any): VBArray; + new (safeArray: any): VBArray; +} + +declare var VBArray: VBArrayConstructor; diff --git a/lib/lib.webworker.d.ts b/lib/lib.webworker.d.ts index 9c54643a2ce..cf5ce7e81d8 100644 --- a/lib/lib.webworker.d.ts +++ b/lib/lib.webworker.d.ts @@ -24,6 +24,16 @@ interface EventInit { cancelable?: boolean; } +interface IDBIndexParameters { + multiEntry?: boolean; + unique?: boolean; +} + +interface IDBObjectStoreParameters { + autoIncrement?: boolean; + keyPath?: IDBKeyPath; +} + interface EventListener { (evt: Event): void; } @@ -100,12 +110,12 @@ declare var Console: { interface Coordinates { readonly accuracy: number; - readonly altitude: number; - readonly altitudeAccuracy: number; - readonly heading: number; + readonly altitude: number | null; + readonly altitudeAccuracy: number | null; + readonly heading: number | null; readonly latitude: number; readonly longitude: number; - readonly speed: number; + readonly speed: number | null; } declare var Coordinates: { @@ -192,7 +202,7 @@ declare var DOMException: { interface DOMStringList { readonly length: number; contains(str: string): boolean; - item(index: number): string; + item(index: number): string | null; [index: number]: string; } @@ -475,7 +485,7 @@ declare var IDBTransaction: { } interface IDBVersionChangeEvent extends Event { - readonly newVersion: number; + readonly newVersion: number | null; readonly oldVersion: number; } @@ -728,7 +738,7 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget { withCredentials: boolean; abort(): void; getAllResponseHeaders(): string; - getResponseHeader(header: string): string; + getResponseHeader(header: string): string | null; msCachingEnabled(): boolean; open(method: string, url: string, async?: boolean, user?: string, password?: string): void; overrideMimeType(mime: string): void; @@ -1007,4 +1017,5 @@ declare var console: Console; declare function addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void; declare function addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void; declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void; +type IDBKeyPath = string; type IDBValidKey = number | string | Date | IDBArrayKey; \ No newline at end of file diff --git a/lib/tsc.js b/lib/tsc.js index 9e14712261a..8dba7a921dc 100644 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -119,11 +119,11 @@ var ts; return undefined; } ts.forEach = forEach; - function contains(array, value) { + function contains(array, value, areEqual) { if (array) { for (var _i = 0, array_1 = array; _i < array_1.length; _i++) { var v = array_1[_i]; - if (v === value) { + if (areEqual ? areEqual(v, value) : v === value) { return true; } } @@ -189,13 +189,13 @@ var ts; return array1.concat(array2); } ts.concatenate = concatenate; - function deduplicate(array) { + function deduplicate(array, areEqual) { var result; if (array) { result = []; for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { var item = array_5[_i]; - if (!contains(result, item)) { + if (!contains(result, item, areEqual)) { result.push(item); } } @@ -982,72 +982,7 @@ var ts; var _path = require("path"); var _os = require("os"); var _crypto = require("crypto"); - function createPollingWatchedFileSet(interval, chunkSize) { - if (interval === void 0) { interval = 2500; } - if (chunkSize === void 0) { chunkSize = 30; } - var watchedFiles = []; - var nextFileToCheck = 0; - var watchTimer; - function getModifiedTime(fileName) { - return _fs.statSync(fileName).mtime; - } - function poll(checkedIndex) { - var watchedFile = watchedFiles[checkedIndex]; - if (!watchedFile) { - return; - } - _fs.stat(watchedFile.fileName, function (err, stats) { - if (err) { - watchedFile.callback(watchedFile.fileName); - } - else if (watchedFile.mtime.getTime() !== stats.mtime.getTime()) { - watchedFile.mtime = getModifiedTime(watchedFile.fileName); - watchedFile.callback(watchedFile.fileName, watchedFile.mtime.getTime() === 0); - } - }); - } - function startWatchTimer() { - watchTimer = setInterval(function () { - var count = 0; - var nextToCheck = nextFileToCheck; - var firstCheck = -1; - while ((count < chunkSize) && (nextToCheck !== firstCheck)) { - poll(nextToCheck); - if (firstCheck < 0) { - firstCheck = nextToCheck; - } - nextToCheck++; - if (nextToCheck === watchedFiles.length) { - nextToCheck = 0; - } - count++; - } - nextFileToCheck = nextToCheck; - }, interval); - } - function addFile(fileName, callback) { - var file = { - fileName: fileName, - callback: callback, - mtime: getModifiedTime(fileName) - }; - watchedFiles.push(file); - if (watchedFiles.length === 1) { - startWatchTimer(); - } - return file; - } - function removeFile(file) { - watchedFiles = ts.copyListRemovingItem(file, watchedFiles); - } - return { - getModifiedTime: getModifiedTime, - poll: poll, - startWatchTimer: startWatchTimer, - addFile: addFile, - removeFile: removeFile - }; - } + var useNonPollingWatchers = process.env["TSC_NONPOLLING_WATCHER"]; function createWatchedFileSet() { var dirWatchers = {}; var fileWatcherCallbacks = {}; @@ -1114,7 +1049,6 @@ var ts; } } } - var pollingWatchedFileSet = createPollingWatchedFileSet(); var watchedFileSet = createWatchedFileSet(); function isNode4OrLater() { return parseInt(process.version.charAt(1)) >= 4; @@ -1222,11 +1156,24 @@ var ts; readFile: readFile, writeFile: writeFile, watchFile: function (fileName, callback) { - var watchSet = isNode4OrLater() ? watchedFileSet : pollingWatchedFileSet; - var watchedFile = watchSet.addFile(fileName, callback); - return { - close: function () { return watchSet.removeFile(watchedFile); } - }; + if (useNonPollingWatchers) { + var watchedFile_1 = watchedFileSet.addFile(fileName, callback); + return { + close: function () { return watchedFileSet.removeFile(watchedFile_1); } + }; + } + else { + _fs.watchFile(fileName, { persistent: true, interval: 250 }, fileChanged); + return { + close: function () { return _fs.unwatchFile(fileName, fileChanged); } + }; + } + function fileChanged(curr, prev) { + if (+curr.mtime <= +prev.mtime) { + return; + } + callback(fileName); + } }, watchDirectory: function (directoryName, callback, recursive) { var options; @@ -1281,10 +1228,14 @@ var ts; }, exit: function (exitCode) { process.exit(exitCode); + }, + realpath: function (path) { + return _fs.realpathSync(path); } }; } function getChakraSystem() { + var realpath = ChakraHost.realpath && (function (path) { return ChakraHost.realpath(path); }); return { newLine: ChakraHost.newLine || "\r\n", args: ChakraHost.args, @@ -1306,18 +1257,19 @@ var ts; getExecutingFilePath: function () { return ChakraHost.executingFile; }, getCurrentDirectory: function () { return ChakraHost.currentDirectory; }, readDirectory: ChakraHost.readDirectory, - exit: ChakraHost.quit + exit: ChakraHost.quit, + realpath: realpath }; } - if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { + if (typeof ChakraHost !== "undefined") { + return getChakraSystem(); + } + else if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { return getWScriptSystem(); } else if (typeof process !== "undefined" && process.nextTick && !process.browser && typeof require !== "undefined") { return getNodeSystem(); } - else if (typeof ChakraHost !== "undefined") { - return getChakraSystem(); - } else { return undefined; } @@ -1405,7 +1357,6 @@ var ts; A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: ts.DiagnosticCategory.Error, key: "A_return_statement_can_only_be_used_within_a_function_body_1108", message: "A 'return' statement can only be used within a function body." }, Expression_expected: { code: 1109, category: ts.DiagnosticCategory.Error, key: "Expression_expected_1109", message: "Expression expected." }, Type_expected: { code: 1110, category: ts.DiagnosticCategory.Error, key: "Type_expected_1110", message: "Type expected." }, - A_class_member_cannot_be_declared_optional: { code: 1112, category: ts.DiagnosticCategory.Error, key: "A_class_member_cannot_be_declared_optional_1112", message: "A class member cannot be declared optional." }, A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: ts.DiagnosticCategory.Error, key: "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113", message: "A 'default' clause cannot appear more than once in a 'switch' statement." }, Duplicate_label_0: { code: 1114, category: ts.DiagnosticCategory.Error, key: "Duplicate_label_0_1114", message: "Duplicate label '{0}'" }, A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: ts.DiagnosticCategory.Error, key: "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115", message: "A 'continue' statement can only jump to a label of an enclosing iteration statement." }, @@ -1529,6 +1480,9 @@ var ts; A_type_literal_property_cannot_have_an_initializer: { code: 1247, category: ts.DiagnosticCategory.Error, key: "A_type_literal_property_cannot_have_an_initializer_1247", message: "A type literal property cannot have an initializer." }, A_class_member_cannot_have_the_0_keyword: { code: 1248, category: ts.DiagnosticCategory.Error, key: "A_class_member_cannot_have_the_0_keyword_1248", message: "A class member cannot have the '{0}' keyword." }, A_decorator_can_only_decorate_a_method_implementation_not_an_overload: { code: 1249, category: ts.DiagnosticCategory.Error, key: "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249", message: "A decorator can only decorate a method implementation, not an overload." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5: { code: 1250, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode: { code: 1251, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode: { code: 1252, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Modules are automatically in strict mode." }, with_statements_are_not_allowed_in_an_async_function_block: { code: 1300, category: ts.DiagnosticCategory.Error, key: "with_statements_are_not_allowed_in_an_async_function_block_1300", message: "'with' statements are not allowed in an async function block." }, await_expression_is_only_allowed_within_an_async_function: { code: 1308, category: ts.DiagnosticCategory.Error, key: "await_expression_is_only_allowed_within_an_async_function_1308", message: "'await' expression is only allowed within an async function." }, Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1311, category: ts.DiagnosticCategory.Error, key: "Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher_1311", message: "Async functions are only available when targeting ECMAScript 6 and higher." }, @@ -1758,7 +1712,10 @@ var ts; A_module_cannot_have_multiple_default_exports: { code: 2528, category: ts.DiagnosticCategory.Error, key: "A_module_cannot_have_multiple_default_exports_2528", message: "A module cannot have multiple default exports." }, Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions: { code: 2529, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529", message: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions." }, Property_0_is_incompatible_with_index_signature: { code: 2530, category: ts.DiagnosticCategory.Error, key: "Property_0_is_incompatible_with_index_signature_2530", message: "Property '{0}' is incompatible with index signature." }, - Object_is_possibly_null_or_undefined: { code: 2531, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_or_undefined_2531", message: "Object is possibly 'null' or 'undefined'." }, + Object_is_possibly_null: { code: 2531, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_2531", message: "Object is possibly 'null'." }, + Object_is_possibly_undefined: { code: 2532, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_undefined_2532", message: "Object is possibly 'undefined'." }, + Object_is_possibly_null_or_undefined: { code: 2533, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_or_undefined_2533", message: "Object is possibly 'null' or 'undefined'." }, + A_function_returning_never_cannot_have_a_reachable_end_point: { code: 2534, category: ts.DiagnosticCategory.Error, key: "A_function_returning_never_cannot_have_a_reachable_end_point_2534", message: "A function returning 'never' cannot have a reachable end point." }, JSX_element_attributes_type_0_may_not_be_a_union_type: { code: 2600, category: ts.DiagnosticCategory.Error, key: "JSX_element_attributes_type_0_may_not_be_a_union_type_2600", message: "JSX element attributes type '{0}' may not be a union type." }, The_return_type_of_a_JSX_element_constructor_must_return_an_object_type: { code: 2601, category: ts.DiagnosticCategory.Error, key: "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601", message: "The return type of a JSX element constructor must return an object type." }, JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist: { code: 2602, category: ts.DiagnosticCategory.Error, key: "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602", message: "JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist." }, @@ -1778,11 +1735,10 @@ var ts; Type_0_provides_no_match_for_the_signature_1: { code: 2658, category: ts.DiagnosticCategory.Error, key: "Type_0_provides_no_match_for_the_signature_1_2658", message: "Type '{0}' provides no match for the signature '{1}'" }, super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher: { code: 2659, category: ts.DiagnosticCategory.Error, key: "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659", message: "'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher." }, super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions: { code: 2660, category: ts.DiagnosticCategory.Error, key: "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660", message: "'super' can only be referenced in members of derived classes or object literal expressions." }, - Cannot_re_export_name_that_is_not_defined_in_the_module: { code: 2661, category: ts.DiagnosticCategory.Error, key: "Cannot_re_export_name_that_is_not_defined_in_the_module_2661", message: "Cannot re-export name that is not defined in the module." }, + Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module: { code: 2661, category: ts.DiagnosticCategory.Error, key: "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661", message: "Cannot export '{0}'. Only local declarations can be exported from a module." }, Cannot_find_name_0_Did_you_mean_the_static_member_1_0: { code: 2662, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662", message: "Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?" }, Cannot_find_name_0_Did_you_mean_the_instance_member_this_0: { code: 2663, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663", message: "Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?" }, Invalid_module_name_in_augmentation_module_0_cannot_be_found: { code: 2664, category: ts.DiagnosticCategory.Error, key: "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664", message: "Invalid module name in augmentation, module '{0}' cannot be found." }, - Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope: { code: 2665, category: ts.DiagnosticCategory.Error, key: "Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope_2665", message: "Module augmentation cannot introduce new names in the top level scope." }, Exports_and_export_assignments_are_not_permitted_in_module_augmentations: { code: 2666, category: ts.DiagnosticCategory.Error, key: "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666", message: "Exports and export assignments are not permitted in module augmentations." }, Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module: { code: 2667, category: ts.DiagnosticCategory.Error, key: "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667", message: "Imports are not permitted in module augmentations. Consider moving them to the enclosing external module." }, export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible: { code: 2668, category: ts.DiagnosticCategory.Error, key: "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668", message: "'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible." }, @@ -1799,7 +1755,7 @@ var ts; A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void: { code: 2679, category: ts.DiagnosticCategory.Error, key: "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679", message: "A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'." }, A_this_parameter_must_be_the_first_parameter: { code: 2680, category: ts.DiagnosticCategory.Error, key: "A_this_parameter_must_be_the_first_parameter_2680", message: "A 'this' parameter must be the first parameter." }, A_constructor_cannot_have_a_this_parameter: { code: 2681, category: ts.DiagnosticCategory.Error, key: "A_constructor_cannot_have_a_this_parameter_2681", message: "A constructor cannot have a 'this' parameter." }, - A_setter_cannot_have_a_this_parameter: { code: 2682, category: ts.DiagnosticCategory.Error, key: "A_setter_cannot_have_a_this_parameter_2682", message: "A setter cannot have a 'this' parameter." }, + get_and_set_accessor_must_have_the_same_this_type: { code: 2682, category: ts.DiagnosticCategory.Error, key: "get_and_set_accessor_must_have_the_same_this_type_2682", message: "'get' and 'set' accessor must have the same 'this' type." }, this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation: { code: 2683, category: ts.DiagnosticCategory.Error, key: "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683", message: "'this' implicitly has type 'any' because it does not have a type annotation." }, The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1: { code: 2684, category: ts.DiagnosticCategory.Error, key: "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684", message: "The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'." }, The_this_types_of_each_signature_are_incompatible: { code: 2685, category: ts.DiagnosticCategory.Error, key: "The_this_types_of_each_signature_are_incompatible_2685", message: "The 'this' types of each signature are incompatible." }, @@ -1896,6 +1852,8 @@ var ts; Option_paths_cannot_be_used_without_specifying_baseUrl_option: { code: 5060, category: ts.DiagnosticCategory.Error, key: "Option_paths_cannot_be_used_without_specifying_baseUrl_option_5060", message: "Option 'paths' cannot be used without specifying '--baseUrl' option." }, Pattern_0_can_have_at_most_one_Asterisk_character: { code: 5061, category: ts.DiagnosticCategory.Error, key: "Pattern_0_can_have_at_most_one_Asterisk_character_5061", message: "Pattern '{0}' can have at most one '*' character" }, Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character: { code: 5062, category: ts.DiagnosticCategory.Error, key: "Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character_5062", message: "Substitution '{0}' in pattern '{1}' in can have at most one '*' character" }, + Substututions_for_pattern_0_should_be_an_array: { code: 5063, category: ts.DiagnosticCategory.Error, key: "Substututions_for_pattern_0_should_be_an_array_5063", message: "Substututions for pattern '{0}' should be an array." }, + Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2: { code: 5064, category: ts.DiagnosticCategory.Error, key: "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064", message: "Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'." }, Concatenate_and_emit_output_to_single_file: { code: 6001, category: ts.DiagnosticCategory.Message, key: "Concatenate_and_emit_output_to_single_file_6001", message: "Concatenate and emit output to single file." }, Generates_corresponding_d_ts_file: { code: 6002, category: ts.DiagnosticCategory.Message, key: "Generates_corresponding_d_ts_file_6002", message: "Generates corresponding '.d.ts' file." }, Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: ts.DiagnosticCategory.Message, key: "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", message: "Specify the location where debugger should locate map files instead of generated locations." }, @@ -2006,6 +1964,8 @@ var ts; Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder: { code: 6126, category: ts.DiagnosticCategory.Message, key: "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126", message: "Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder." }, Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1: { code: 6127, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127", message: "======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========" }, Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set: { code: 6128, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128", message: "======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========" }, + The_config_file_0_found_doesn_t_contain_any_source_files: { code: 6129, category: ts.DiagnosticCategory.Error, key: "The_config_file_0_found_doesn_t_contain_any_source_files_6129", message: "The config file '{0}' found doesn't contain any source files." }, + Resolving_real_path_for_0_result_1: { code: 6130, category: ts.DiagnosticCategory.Message, key: "Resolving_real_path_for_0_result_1_6130", message: "Resolving real path for '{0}', result '{1}'" }, Variable_0_implicitly_has_an_1_type: { code: 7005, category: ts.DiagnosticCategory.Error, key: "Variable_0_implicitly_has_an_1_type_7005", message: "Variable '{0}' implicitly has an '{1}' type." }, Parameter_0_implicitly_has_an_1_type: { code: 7006, category: ts.DiagnosticCategory.Error, key: "Parameter_0_implicitly_has_an_1_type_7006", message: "Parameter '{0}' implicitly has an '{1}' type." }, Member_0_implicitly_has_an_1_type: { code: 7008, category: ts.DiagnosticCategory.Error, key: "Member_0_implicitly_has_an_1_type_7008", message: "Member '{0}' implicitly has an '{1}' type." }, @@ -2090,7 +2050,7 @@ var ts; "false": 84, "finally": 85, "for": 86, - "from": 135, + "from": 136, "function": 87, "get": 123, "if": 88, @@ -2103,30 +2063,31 @@ var ts; "let": 108, "module": 125, "namespace": 126, + "never": 127, "new": 92, "null": 93, - "number": 129, + "number": 130, "package": 109, "private": 110, "protected": 111, "public": 112, - "readonly": 127, - "require": 128, - "global": 136, + "readonly": 128, + "require": 129, + "global": 137, "return": 94, - "set": 130, + "set": 131, "static": 113, - "string": 131, + "string": 132, "super": 95, "switch": 96, - "symbol": 132, + "symbol": 133, "this": 97, "throw": 98, "true": 99, "try": 100, - "type": 133, + "type": 134, "typeof": 101, - "undefined": 134, + "undefined": 135, "var": 102, "void": 103, "while": 104, @@ -2134,7 +2095,7 @@ var ts; "yield": 114, "async": 118, "await": 119, - "of": 137, + "of": 138, "{": 15, "}": 16, "(": 17, @@ -3397,7 +3358,7 @@ var ts; break; } } - return token = 243; + return token = 244; } function scanJsxIdentifier() { if (tokenIsIdentifierOrKeyword(token)) { @@ -3587,6 +3548,24 @@ var ts; return node.end - node.pos; } ts.getFullWidth = getFullWidth; + function mapIsEqualTo(map1, map2) { + if (!map1 || !map2) { + return map1 === map2; + } + return containsAll(map1, map2) && containsAll(map2, map1); + } + ts.mapIsEqualTo = mapIsEqualTo; + function containsAll(map, other) { + for (var key in map) { + if (!ts.hasProperty(map, key)) { + continue; + } + if (!ts.hasProperty(other, key) || map[key] !== other[key]) { + return false; + } + } + return true; + } function arrayIsEqualTo(array1, array2, equaler) { if (!array1 || !array2) { return array1 === array2; @@ -3666,7 +3645,7 @@ var ts; } } function getSourceFileOfNode(node) { - while (node && node.kind !== 255) { + while (node && node.kind !== 256) { node = node.parent; } return node; @@ -3674,11 +3653,11 @@ var ts; ts.getSourceFileOfNode = getSourceFileOfNode; function isStatementWithLocals(node) { switch (node.kind) { - case 198: - case 226: - case 205: + case 199: + case 227: case 206: case 207: + case 208: return true; } return false; @@ -3782,13 +3761,13 @@ var ts; } ts.isBlockOrCatchScoped = isBlockOrCatchScoped; function isAmbientModule(node) { - return node && node.kind === 224 && + return node && node.kind === 225 && (node.name.kind === 9 || isGlobalScopeAugmentation(node)); } ts.isAmbientModule = isAmbientModule; function isBlockScopedContainerTopLevel(node) { - return node.kind === 255 || - node.kind === 224 || + return node.kind === 256 || + node.kind === 225 || isFunctionLike(node) || isFunctionBlock(node); } @@ -3802,9 +3781,9 @@ var ts; return false; } switch (node.parent.kind) { - case 255: + case 256: return ts.isExternalModule(node.parent); - case 225: + case 226: return isAmbientModule(node.parent.parent) && !ts.isExternalModule(node.parent.parent.parent); } return false; @@ -3817,15 +3796,15 @@ var ts; return current; } switch (current.kind) { - case 255: - case 226: - case 251: - case 224: - case 205: + case 256: + case 227: + case 252: + case 225: case 206: case 207: + case 208: return current; - case 198: + case 199: if (!isFunctionLike(current.parent)) { return current; } @@ -3836,9 +3815,9 @@ var ts; ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer; function isCatchClauseVariableDeclaration(declaration) { return declaration && - declaration.kind === 217 && + declaration.kind === 218 && declaration.parent && - declaration.parent.kind === 251; + declaration.parent.kind === 252; } ts.isCatchClauseVariableDeclaration = isCatchClauseVariableDeclaration; function declarationNameToString(name) { @@ -3873,7 +3852,7 @@ var ts; ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition; function getErrorSpanForArrowFunction(sourceFile, node) { var pos = ts.skipTrivia(sourceFile.text, node.pos); - if (node.body && node.body.kind === 198) { + if (node.body && node.body.kind === 199) { var startLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.pos).line; var endLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.end).line; if (startLine < endLine) { @@ -3885,29 +3864,29 @@ var ts; function getErrorSpanForNode(sourceFile, node) { var errorNode = node; switch (node.kind) { - case 255: + case 256: var pos_1 = ts.skipTrivia(sourceFile.text, 0, false); if (pos_1 === sourceFile.text.length) { return ts.createTextSpan(0, 0); } return getSpanOfTokenAtPosition(sourceFile, pos_1); - case 217: - case 168: - case 220: - case 191: + case 218: + case 169: case 221: - case 224: - case 223: - case 254: - case 219: - case 178: - case 146: - case 148: - case 149: + case 192: case 222: + case 225: + case 224: + case 255: + case 220: + case 179: + case 147: + case 149: + case 150: + case 223: errorNode = node.name; break; - case 179: + case 180: return getErrorSpanForArrowFunction(sourceFile, node); } if (errorNode === undefined) { @@ -3928,11 +3907,11 @@ var ts; } ts.isDeclarationFile = isDeclarationFile; function isConstEnumDeclaration(node) { - return node.kind === 223 && isConst(node); + return node.kind === 224 && isConst(node); } ts.isConstEnumDeclaration = isConstEnumDeclaration; function walkUpBindingElementsAndPatterns(node) { - while (node && (node.kind === 168 || isBindingPattern(node))) { + while (node && (node.kind === 169 || isBindingPattern(node))) { node = node.parent; } return node; @@ -3940,14 +3919,14 @@ var ts; function getCombinedNodeFlags(node) { node = walkUpBindingElementsAndPatterns(node); var flags = node.flags; - if (node.kind === 217) { + if (node.kind === 218) { node = node.parent; } - if (node && node.kind === 218) { + if (node && node.kind === 219) { flags |= node.flags; node = node.parent; } - if (node && node.kind === 199) { + if (node && node.kind === 200) { flags |= node.flags; } return flags; @@ -3962,11 +3941,11 @@ var ts; } ts.isLet = isLet; function isSuperCallExpression(n) { - return n.kind === 173 && n.expression.kind === 95; + return n.kind === 174 && n.expression.kind === 95; } ts.isSuperCallExpression = isSuperCallExpression; function isPrologueDirective(node) { - return node.kind === 201 && node.expression.kind === 9; + return node.kind === 202 && node.expression.kind === 9; } ts.isPrologueDirective = isPrologueDirective; function getLeadingCommentRangesOfNode(node, sourceFileOfNode) { @@ -3982,7 +3961,7 @@ var ts; } ts.getJsDocComments = getJsDocComments; function getJsDocCommentsFromText(node, text) { - var commentRanges = (node.kind === 141 || node.kind === 140) ? + var commentRanges = (node.kind === 142 || node.kind === 141) ? ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) : getLeadingCommentRangesOfNodeFromText(node, text); return ts.filter(commentRanges, isJsDocComment); @@ -3997,68 +3976,69 @@ var ts; ts.fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*/; ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*/; function isTypeNode(node) { - if (153 <= node.kind && node.kind <= 165) { + if (154 <= node.kind && node.kind <= 166) { return true; } switch (node.kind) { case 117: - case 129: - case 131: - case 120: + case 130: case 132: - case 134: + case 120: + case 133: + case 135: + case 127: return true; case 103: - return node.parent.kind !== 182; - case 193: + return node.parent.kind !== 183; + case 194: return !isExpressionWithTypeArgumentsInClassExtendsClause(node); case 69: - if (node.parent.kind === 138 && node.parent.right === node) { + if (node.parent.kind === 139 && node.parent.right === node) { node = node.parent; } - else if (node.parent.kind === 171 && node.parent.name === node) { + else if (node.parent.kind === 172 && node.parent.name === node) { node = node.parent; } - ts.Debug.assert(node.kind === 69 || node.kind === 138 || node.kind === 171, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'."); - case 138: - case 171: + ts.Debug.assert(node.kind === 69 || node.kind === 139 || node.kind === 172, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'."); + case 139: + case 172: case 97: var parent_1 = node.parent; - if (parent_1.kind === 157) { + if (parent_1.kind === 158) { return false; } - if (153 <= parent_1.kind && parent_1.kind <= 165) { + if (154 <= parent_1.kind && parent_1.kind <= 166) { return true; } switch (parent_1.kind) { - case 193: + case 194: return !isExpressionWithTypeArgumentsInClassExtendsClause(parent_1); - case 140: - return node === parent_1.constraint; - case 144: - case 143: case 141: - case 217: + return node === parent_1.constraint; + case 145: + case 144: + case 142: + case 218: return node === parent_1.type; - case 219: - case 178: + case 220: case 179: + case 180: + case 148: case 147: case 146: - case 145: - case 148: case 149: - return node === parent_1.type; case 150: + return node === parent_1.type; case 151: case 152: + case 153: return node === parent_1.type; - case 176: + case 177: return node === parent_1.type; - case 173: case 174: - return parent_1.typeArguments && ts.indexOf(parent_1.typeArguments, node) >= 0; case 175: + return parent_1.typeArguments && ts.indexOf(parent_1.typeArguments, node) >= 0; + case 176: return false; } } @@ -4069,23 +4049,23 @@ var ts; return traverse(body); function traverse(node) { switch (node.kind) { - case 210: + case 211: return visitor(node); - case 226: - case 198: - case 202: + case 227: + case 199: case 203: case 204: case 205: case 206: case 207: - case 211: + case 208: case 212: - case 248: - case 249: case 213: - case 215: - case 251: + case 249: + case 250: + case 214: + case 216: + case 252: return ts.forEachChild(node, traverse); } } @@ -4095,23 +4075,23 @@ var ts; return traverse(body); function traverse(node) { switch (node.kind) { - case 189: + case 190: visitor(node); var operand = node.expression; if (operand) { traverse(operand); } - case 223: - case 221: case 224: case 222: - case 220: - case 191: + case 225: + case 223: + case 221: + case 192: return; default: if (isFunctionLike(node)) { var name_5 = node.name; - if (name_5 && name_5.kind === 139) { + if (name_5 && name_5.kind === 140) { traverse(name_5.expression); return; } @@ -4126,14 +4106,14 @@ var ts; function isVariableLike(node) { if (node) { switch (node.kind) { - case 168: - case 254: - case 141: - case 252: - case 144: - case 143: + case 169: + case 255: + case 142: case 253: - case 217: + case 145: + case 144: + case 254: + case 218: return true; } } @@ -4141,11 +4121,11 @@ var ts; } ts.isVariableLike = isVariableLike; function isAccessor(node) { - return node && (node.kind === 148 || node.kind === 149); + return node && (node.kind === 149 || node.kind === 150); } ts.isAccessor = isAccessor; function isClassLike(node) { - return node && (node.kind === 220 || node.kind === 191); + return node && (node.kind === 221 || node.kind === 192); } ts.isClassLike = isClassLike; function isFunctionLike(node) { @@ -4154,32 +4134,32 @@ var ts; ts.isFunctionLike = isFunctionLike; function isFunctionLikeKind(kind) { switch (kind) { - case 147: - case 178: - case 219: - case 179: - case 146: - case 145: case 148: + case 179: + case 220: + case 180: + case 147: + case 146: case 149: case 150: case 151: case 152: - case 155: + case 153: case 156: + case 157: return true; } } ts.isFunctionLikeKind = isFunctionLikeKind; function introducesArgumentsExoticObject(node) { switch (node.kind) { - case 146: - case 145: case 147: + case 146: case 148: case 149: - case 219: - case 178: + case 150: + case 220: + case 179: return true; } return false; @@ -4187,24 +4167,24 @@ var ts; ts.introducesArgumentsExoticObject = introducesArgumentsExoticObject; function isIterationStatement(node, lookInLabeledStatements) { switch (node.kind) { - case 205: case 206: case 207: - case 203: + case 208: case 204: + case 205: return true; - case 213: + case 214: return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements); } return false; } ts.isIterationStatement = isIterationStatement; function isFunctionBlock(node) { - return node && node.kind === 198 && isFunctionLike(node.parent); + return node && node.kind === 199 && isFunctionLike(node.parent); } ts.isFunctionBlock = isFunctionBlock; function isObjectLiteralMethod(node) { - return node && node.kind === 146 && node.parent.kind === 170; + return node && node.kind === 147 && node.parent.kind === 171; } ts.isObjectLiteralMethod = isObjectLiteralMethod; function isIdentifierTypePredicate(predicate) { @@ -4224,6 +4204,15 @@ var ts; } } ts.getContainingFunction = getContainingFunction; + function getContainingFunctionOrModule(node) { + while (true) { + node = node.parent; + if (isFunctionLike(node) || node.kind === 225 || node.kind === 256) { + return node; + } + } + } + ts.getContainingFunctionOrModule = getContainingFunctionOrModule; function getContainingClass(node) { while (true) { node = node.parent; @@ -4240,39 +4229,39 @@ var ts; return undefined; } switch (node.kind) { - case 139: + case 140: if (isClassLike(node.parent.parent)) { return node; } node = node.parent; break; - case 142: - if (node.parent.kind === 141 && isClassElement(node.parent.parent)) { + case 143: + if (node.parent.kind === 142 && isClassElement(node.parent.parent)) { node = node.parent.parent; } else if (isClassElement(node.parent)) { node = node.parent; } break; - case 179: + case 180: if (!includeArrowFunctions) { continue; } - case 219: - case 178: - case 224: - case 144: - case 143: - case 146: + case 220: + case 179: + case 225: case 145: + case 144: case 147: + case 146: case 148: case 149: case 150: case 151: case 152: - case 223: - case 255: + case 153: + case 224: + case 256: return node; } } @@ -4285,25 +4274,25 @@ var ts; return node; } switch (node.kind) { - case 139: + case 140: node = node.parent; break; - case 219: - case 178: + case 220: case 179: + case 180: if (!stopOnFunctions) { continue; } - case 144: - case 143: - case 146: case 145: + case 144: case 147: + case 146: case 148: case 149: + case 150: return node; - case 142: - if (node.parent.kind === 141 && isClassElement(node.parent.parent)) { + case 143: + if (node.parent.kind === 142 && isClassElement(node.parent.parent)) { node = node.parent.parent; } else if (isClassElement(node.parent)) { @@ -4315,20 +4304,20 @@ var ts; } ts.getSuperContainer = getSuperContainer; function isSuperPropertyOrElementAccess(node) { - return (node.kind === 171 - || node.kind === 172) + return (node.kind === 172 + || node.kind === 173) && node.expression.kind === 95; } ts.isSuperPropertyOrElementAccess = isSuperPropertyOrElementAccess; function getEntityNameFromTypeNode(node) { if (node) { switch (node.kind) { - case 154: + case 155: return node.typeName; - case 193: + case 194: return node.expression; case 69: - case 138: + case 139: return node; } } @@ -4336,7 +4325,7 @@ var ts; } ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode; function getInvokedExpression(node) { - if (node.kind === 175) { + if (node.kind === 176) { return node.tag; } return node.expression; @@ -4344,21 +4333,21 @@ var ts; ts.getInvokedExpression = getInvokedExpression; function nodeCanBeDecorated(node) { switch (node.kind) { - case 220: + case 221: return true; - case 144: - return node.parent.kind === 220; - case 148: + case 145: + return node.parent.kind === 221; case 149: - case 146: + case 150: + case 147: return node.body !== undefined - && node.parent.kind === 220; - case 141: + && node.parent.kind === 221; + case 142: return node.parent.body !== undefined - && (node.parent.kind === 147 - || node.parent.kind === 146 - || node.parent.kind === 149) - && node.parent.parent.kind === 220; + && (node.parent.kind === 148 + || node.parent.kind === 147 + || node.parent.kind === 150) + && node.parent.parent.kind === 221; } return false; } @@ -4369,18 +4358,18 @@ var ts; } ts.nodeIsDecorated = nodeIsDecorated; function isPropertyAccessExpression(node) { - return node.kind === 171; + return node.kind === 172; } ts.isPropertyAccessExpression = isPropertyAccessExpression; function isElementAccessExpression(node) { - return node.kind === 172; + return node.kind === 173; } ts.isElementAccessExpression = isElementAccessExpression; function isJSXTagName(node) { var parent = node.parent; - if (parent.kind === 242 || - parent.kind === 241 || - parent.kind === 244) { + if (parent.kind === 243 || + parent.kind === 242 || + parent.kind === 245) { return parent.tagName === node; } return false; @@ -4388,48 +4377,49 @@ var ts; ts.isJSXTagName = isJSXTagName; function isExpression(node) { switch (node.kind) { + case 97: case 95: case 93: case 99: case 84: case 10: - case 169: case 170: case 171: case 172: case 173: case 174: case 175: - case 194: case 176: case 195: case 177: + case 196: case 178: - case 191: case 179: - case 182: + case 192: case 180: + case 183: case 181: - case 184: + case 182: case 185: case 186: case 187: - case 190: case 188: - case 11: - case 192: - case 240: - case 241: + case 191: case 189: - case 183: + case 11: + case 193: + case 241: + case 242: + case 190: + case 184: return true; - case 138: - while (node.parent.kind === 138) { + case 139: + while (node.parent.kind === 139) { node = node.parent; } - return node.parent.kind === 157 || isJSXTagName(node); + return node.parent.kind === 158 || isJSXTagName(node); case 69: - if (node.parent.kind === 157 || isJSXTagName(node)) { + if (node.parent.kind === 158 || isJSXTagName(node)) { return true; } case 8: @@ -4437,47 +4427,47 @@ var ts; case 97: var parent_2 = node.parent; switch (parent_2.kind) { - case 217: - case 141: + case 218: + case 142: + case 145: case 144: - case 143: - case 254: - case 252: - case 168: + case 255: + case 253: + case 169: return parent_2.initializer === node; - case 201: case 202: case 203: case 204: - case 210: + case 205: case 211: case 212: - case 248: - case 214: - case 212: + case 213: + case 249: + case 215: + case 213: return parent_2.expression === node; - case 205: + case 206: var forStatement = parent_2; - return (forStatement.initializer === node && forStatement.initializer.kind !== 218) || + return (forStatement.initializer === node && forStatement.initializer.kind !== 219) || forStatement.condition === node || forStatement.incrementor === node; - case 206: case 207: + case 208: var forInStatement = parent_2; - return (forInStatement.initializer === node && forInStatement.initializer.kind !== 218) || + return (forInStatement.initializer === node && forInStatement.initializer.kind !== 219) || forInStatement.expression === node; - case 176: - case 194: + case 177: + case 195: return node === parent_2.expression; - case 196: + case 197: return node === parent_2.expression; - case 139: + case 140: return node === parent_2.expression; - case 142: + case 143: + case 248: case 247: - case 246: return true; - case 193: + case 194: return parent_2.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent_2); default: if (isExpression(parent_2)) { @@ -4499,7 +4489,7 @@ var ts; } ts.isInstantiatedModule = isInstantiatedModule; function isExternalModuleImportEqualsDeclaration(node) { - return node.kind === 228 && node.moduleReference.kind === 239; + return node.kind === 229 && node.moduleReference.kind === 240; } ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration; function getExternalModuleImportEqualsDeclarationExpression(node) { @@ -4508,7 +4498,7 @@ var ts; } ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression; function isInternalModuleImportEqualsDeclaration(node) { - return node.kind === 228 && node.moduleReference.kind !== 239; + return node.kind === 229 && node.moduleReference.kind !== 240; } ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration; function isSourceFileJavaScript(file) { @@ -4520,22 +4510,26 @@ var ts; } ts.isInJavaScriptFile = isInJavaScriptFile; function isRequireCall(expression, checkArgumentIsStringLiteral) { - var isRequire = expression.kind === 173 && + var isRequire = expression.kind === 174 && expression.expression.kind === 69 && expression.expression.text === "require" && expression.arguments.length === 1; return isRequire && (!checkArgumentIsStringLiteral || expression.arguments[0].kind === 9); } ts.isRequireCall = isRequireCall; + function isSingleOrDoubleQuote(charCode) { + return charCode === 39 || charCode === 34; + } + ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; function getSpecialPropertyAssignmentKind(expression) { if (!isInJavaScriptFile(expression)) { return 0; } - if (expression.kind !== 186) { + if (expression.kind !== 187) { return 0; } var expr = expression; - if (expr.operatorToken.kind !== 56 || expr.left.kind !== 171) { + if (expr.operatorToken.kind !== 56 || expr.left.kind !== 172) { return 0; } var lhs = expr.left; @@ -4551,29 +4545,35 @@ var ts; else if (lhs.expression.kind === 97) { return 4; } - else if (lhs.expression.kind === 171) { + else if (lhs.expression.kind === 172) { var innerPropertyAccess = lhs.expression; - if (innerPropertyAccess.expression.kind === 69 && innerPropertyAccess.name.text === "prototype") { - return 3; + if (innerPropertyAccess.expression.kind === 69) { + var innerPropertyAccessIdentifier = innerPropertyAccess.expression; + if (innerPropertyAccessIdentifier.text === "module" && innerPropertyAccess.name.text === "exports") { + return 1; + } + if (innerPropertyAccess.name.text === "prototype") { + return 3; + } } } return 0; } ts.getSpecialPropertyAssignmentKind = getSpecialPropertyAssignmentKind; function getExternalModuleName(node) { - if (node.kind === 229) { + if (node.kind === 230) { return node.moduleSpecifier; } - if (node.kind === 228) { + if (node.kind === 229) { var reference = node.moduleReference; - if (reference.kind === 239) { + if (reference.kind === 240) { return reference.expression; } } - if (node.kind === 235) { + if (node.kind === 236) { return node.moduleSpecifier; } - if (node.kind === 224 && node.name.kind === 9) { + if (node.kind === 225 && node.name.kind === 9) { return node.name; } } @@ -4581,13 +4581,13 @@ var ts; function hasQuestionToken(node) { if (node) { switch (node.kind) { - case 141: + case 142: + case 147: case 146: - case 145: + case 254: case 253: - case 252: + case 145: case 144: - case 143: return node.questionToken !== undefined; } } @@ -4595,9 +4595,9 @@ var ts; } ts.hasQuestionToken = hasQuestionToken; function isJSDocConstructSignature(node) { - return node.kind === 268 && + return node.kind === 269 && node.parameters.length > 0 && - node.parameters[0].type.kind === 270; + node.parameters[0].type.kind === 271; } ts.isJSDocConstructSignature = isJSDocConstructSignature; function getJSDocTag(node, kind, checkParentVariableStatement) { @@ -4620,22 +4620,22 @@ var ts; return node.jsDocComment; } if (checkParentVariableStatement) { - var isInitializerOfVariableDeclarationInStatement = node.parent.kind === 217 && + var isInitializerOfVariableDeclarationInStatement = node.parent.kind === 218 && node.parent.initializer === node && - node.parent.parent.parent.kind === 199; + node.parent.parent.parent.kind === 200; var variableStatementNode = isInitializerOfVariableDeclarationInStatement ? node.parent.parent.parent : undefined; if (variableStatementNode) { return variableStatementNode.jsDocComment; } var parent_3 = node.parent; var isSourceOfAssignmentExpressionStatement = parent_3 && parent_3.parent && - parent_3.kind === 186 && + parent_3.kind === 187 && parent_3.operatorToken.kind === 56 && - parent_3.parent.kind === 201; + parent_3.parent.kind === 202; if (isSourceOfAssignmentExpressionStatement) { return parent_3.parent.jsDocComment; } - var isPropertyAssignmentExpression = parent_3 && parent_3.kind === 252; + var isPropertyAssignmentExpression = parent_3 && parent_3.kind === 253; if (isPropertyAssignmentExpression) { return parent_3.jsDocComment; } @@ -4643,15 +4643,15 @@ var ts; return undefined; } function getJSDocTypeTag(node) { - return getJSDocTag(node, 276, false); + return getJSDocTag(node, 277, false); } ts.getJSDocTypeTag = getJSDocTypeTag; function getJSDocReturnTag(node) { - return getJSDocTag(node, 275, true); + return getJSDocTag(node, 276, true); } ts.getJSDocReturnTag = getJSDocReturnTag; function getJSDocTemplateTag(node) { - return getJSDocTag(node, 277, false); + return getJSDocTag(node, 278, false); } ts.getJSDocTemplateTag = getJSDocTemplateTag; function getCorrespondingJSDocParameterTag(parameter) { @@ -4661,7 +4661,7 @@ var ts; if (jsDocComment) { for (var _i = 0, _a = jsDocComment.tags; _i < _a.length; _i++) { var tag = _a[_i]; - if (tag.kind === 274) { + if (tag.kind === 275) { var parameterTag = tag; var name_6 = parameterTag.preParameterName || parameterTag.postParameterName; if (name_6.text === parameterName) { @@ -4678,22 +4678,27 @@ var ts; return isRestParameter(ts.lastOrUndefined(s.parameters)); } ts.hasRestParameter = hasRestParameter; + function hasDeclaredRestParameter(s) { + return isDeclaredRestParam(ts.lastOrUndefined(s.parameters)); + } + ts.hasDeclaredRestParameter = hasDeclaredRestParameter; function isRestParameter(node) { - if (node) { - if (node.flags & 134217728) { - if (node.type && node.type.kind === 269) { - return true; - } - var paramTag = getCorrespondingJSDocParameterTag(node); - if (paramTag && paramTag.typeExpression) { - return paramTag.typeExpression.type.kind === 269; - } + if (node && (node.flags & 134217728)) { + if (node.type && node.type.kind === 270) { + return true; + } + var paramTag = getCorrespondingJSDocParameterTag(node); + if (paramTag && paramTag.typeExpression) { + return paramTag.typeExpression.type.kind === 270; } - return node.dotDotDotToken !== undefined; } - return false; + return isDeclaredRestParam(node); } ts.isRestParameter = isRestParameter; + function isDeclaredRestParam(node) { + return node && node.dotDotDotToken !== undefined; + } + ts.isDeclaredRestParam = isDeclaredRestParam; function isLiteralKind(kind) { return 8 <= kind && kind <= 11; } @@ -4707,9 +4712,31 @@ var ts; } ts.isTemplateLiteralKind = isTemplateLiteralKind; function isBindingPattern(node) { - return !!node && (node.kind === 167 || node.kind === 166); + return !!node && (node.kind === 168 || node.kind === 167); } ts.isBindingPattern = isBindingPattern; + function isAssignmentTarget(node) { + while (node.parent.kind === 178) { + node = node.parent; + } + while (true) { + var parent_4 = node.parent; + if (parent_4.kind === 170 || parent_4.kind === 191) { + node = parent_4; + continue; + } + if (parent_4.kind === 253 || parent_4.kind === 254) { + node = parent_4.parent; + continue; + } + return parent_4.kind === 187 && + parent_4.operatorToken.kind === 56 && + parent_4.left === node || + (parent_4.kind === 207 || parent_4.kind === 208) && + parent_4.initializer === node; + } + } + ts.isAssignmentTarget = isAssignmentTarget; function isNodeDescendentOf(node, ancestor) { while (node) { if (node === ancestor) @@ -4721,7 +4748,7 @@ var ts; ts.isNodeDescendentOf = isNodeDescendentOf; function isInAmbientContext(node) { while (node) { - if (node.flags & 2 || (node.kind === 255 && node.isDeclarationFile)) { + if (node.flags & 2 || (node.kind === 256 && node.isDeclarationFile)) { return true; } node = node.parent; @@ -4731,34 +4758,34 @@ var ts; ts.isInAmbientContext = isInAmbientContext; function isDeclaration(node) { switch (node.kind) { - case 179: - case 168: - case 220: - case 191: - case 147: - case 223: - case 254: - case 237: - case 219: - case 178: - case 148: - case 230: - case 228: - case 233: + case 180: + case 169: case 221: - case 146: - case 145: + case 192: + case 148: case 224: - case 231: - case 141: - case 252: - case 144: - case 143: + case 255: + case 238: + case 220: + case 179: case 149: - case 253: + case 231: + case 229: + case 234: case 222: - case 140: - case 217: + case 147: + case 146: + case 225: + case 232: + case 142: + case 253: + case 145: + case 144: + case 150: + case 254: + case 223: + case 141: + case 218: return true; } return false; @@ -4766,25 +4793,25 @@ var ts; ts.isDeclaration = isDeclaration; function isStatement(n) { switch (n.kind) { - case 209: - case 208: - case 216: - case 203: - case 201: - case 200: - case 206: - case 207: - case 205: - case 202: - case 213: case 210: - case 212: - case 214: - case 215: - case 199: + case 209: + case 217: case 204: + case 202: + case 201: + case 207: + case 208: + case 206: + case 203: + case 214: case 211: - case 234: + case 213: + case 215: + case 216: + case 200: + case 205: + case 212: + case 235: return true; default: return false; @@ -4793,13 +4820,13 @@ var ts; ts.isStatement = isStatement; function isClassElement(n) { switch (n.kind) { - case 147: - case 144: - case 146: case 148: - case 149: case 145: - case 152: + case 147: + case 149: + case 150: + case 146: + case 153: return true; default: return false; @@ -4811,7 +4838,7 @@ var ts; return false; } var parent = name.parent; - if (parent.kind === 233 || parent.kind === 237) { + if (parent.kind === 234 || parent.kind === 238) { if (parent.propertyName) { return true; } @@ -4822,44 +4849,50 @@ var ts; return false; } ts.isDeclarationName = isDeclarationName; + function isLiteralComputedPropertyDeclarationName(node) { + return (node.kind === 9 || node.kind === 8) && + node.parent.kind === 140 && + isDeclaration(node.parent.parent); + } + ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName; function isIdentifierName(node) { var parent = node.parent; switch (parent.kind) { - case 144: - case 143: - case 146: case 145: - case 148: + case 144: + case 147: + case 146: case 149: - case 254: - case 252: - case 171: + case 150: + case 255: + case 253: + case 172: return parent.name === node; - case 138: + case 139: if (parent.right === node) { - while (parent.kind === 138) { + while (parent.kind === 139) { parent = parent.parent; } - return parent.kind === 157; + return parent.kind === 158; } return false; - case 168: - case 233: + case 169: + case 234: return parent.propertyName === node; - case 237: + case 238: return true; } return false; } ts.isIdentifierName = isIdentifierName; function isAliasSymbolDeclaration(node) { - return node.kind === 228 || - node.kind === 227 || - node.kind === 230 && !!node.name || - node.kind === 231 || - node.kind === 233 || - node.kind === 237 || - node.kind === 234 && node.expression.kind === 69; + return node.kind === 229 || + node.kind === 228 || + node.kind === 231 && !!node.name || + node.kind === 232 || + node.kind === 234 || + node.kind === 238 || + node.kind === 235 && node.expression.kind === 69; } ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration; function getClassExtendsHeritageClauseElement(node) { @@ -4941,7 +4974,7 @@ var ts; } ts.getFileReferenceFromReferencePath = getFileReferenceFromReferencePath; function isKeyword(token) { - return 70 <= token && token <= 137; + return 70 <= token && token <= 138; } ts.isKeyword = isKeyword; function isTrivia(token) { @@ -4961,7 +4994,7 @@ var ts; } ts.hasDynamicName = hasDynamicName; function isDynamicName(name) { - return name.kind === 139 && + return name.kind === 140 && !isStringOrNumericLiteral(name.expression.kind) && !isWellKnownSymbolSyntactically(name.expression); } @@ -4974,12 +5007,15 @@ var ts; if (name.kind === 69 || name.kind === 9 || name.kind === 8) { return name.text; } - if (name.kind === 139) { + if (name.kind === 140) { var nameExpression = name.expression; if (isWellKnownSymbolSyntactically(nameExpression)) { var rightHandSideName = nameExpression.name.text; return getPropertyNameForKnownSymbolName(rightHandSideName); } + else if (nameExpression.kind === 9 || nameExpression.kind === 8) { + return nameExpression.text; + } } return undefined; } @@ -5003,7 +5039,7 @@ var ts; case 112: case 110: case 111: - case 127: + case 128: case 113: return true; } @@ -5012,18 +5048,18 @@ var ts; ts.isModifierKind = isModifierKind; function isParameterDeclaration(node) { var root = getRootDeclaration(node); - return root.kind === 141; + return root.kind === 142; } ts.isParameterDeclaration = isParameterDeclaration; function getRootDeclaration(node) { - while (node.kind === 168) { + while (node.kind === 169) { node = node.parent.parent; } return node; } ts.getRootDeclaration = getRootDeclaration; function nodeStartsNewLexicalEnvironment(n) { - return isFunctionLike(n) || n.kind === 224 || n.kind === 255; + return isFunctionLike(n) || n.kind === 225 || n.kind === 256; } ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment; function cloneNode(node, location, flags, parent) { @@ -5056,7 +5092,7 @@ var ts; } ts.cloneEntityName = cloneEntityName; function isQualifiedName(node) { - return node.kind === 138; + return node.kind === 139; } ts.isQualifiedName = isQualifiedName; function nodeIsSynthesized(node) { @@ -5389,14 +5425,19 @@ var ts; ts.getLineOfLocalPositionFromLineMap = getLineOfLocalPositionFromLineMap; function getFirstConstructorWithBody(node) { return ts.forEach(node.members, function (member) { - if (member.kind === 147 && nodeIsPresent(member.body)) { + if (member.kind === 148 && nodeIsPresent(member.body)) { return member; } }); } ts.getFirstConstructorWithBody = getFirstConstructorWithBody; function getSetAccessorTypeAnnotationNode(accessor) { - return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type; + if (accessor && accessor.parameters.length > 0) { + var hasThis = accessor.parameters.length === 2 && + accessor.parameters[0].name.kind === 69 && + accessor.parameters[0].name.originalKeywordKind === 97; + return accessor.parameters[hasThis ? 1 : 0].type; + } } ts.getSetAccessorTypeAnnotationNode = getSetAccessorTypeAnnotationNode; function getAllAccessorDeclarations(declarations, accessor) { @@ -5406,10 +5447,10 @@ var ts; var setAccessor; if (hasDynamicName(accessor)) { firstAccessor = accessor; - if (accessor.kind === 148) { + if (accessor.kind === 149) { getAccessor = accessor; } - else if (accessor.kind === 149) { + else if (accessor.kind === 150) { setAccessor = accessor; } else { @@ -5418,7 +5459,7 @@ var ts; } else { ts.forEach(declarations, function (member) { - if ((member.kind === 148 || member.kind === 149) + if ((member.kind === 149 || member.kind === 150) && (member.flags & 32) === (accessor.flags & 32)) { var memberName = getPropertyNameForPropertyNameNode(member.name); var accessorName = getPropertyNameForPropertyNameNode(accessor.name); @@ -5429,10 +5470,10 @@ var ts; else if (!secondAccessor) { secondAccessor = member; } - if (member.kind === 148 && !getAccessor) { + if (member.kind === 149 && !getAccessor) { getAccessor = member; } - if (member.kind === 149 && !setAccessor) { + if (member.kind === 150 && !setAccessor) { setAccessor = member; } } @@ -5591,7 +5632,7 @@ var ts; case 74: return 2048; case 77: return 512; case 118: return 256; - case 127: return 64; + case 128: return 64; } return 0; } @@ -5599,25 +5640,25 @@ var ts; function isLeftHandSideExpression(expr) { if (expr) { switch (expr.kind) { - case 171: case 172: - case 174: case 173: - case 195: - case 240: - case 241: case 175: - case 169: - case 177: + case 174: + case 196: + case 241: + case 242: + case 176: case 170: - case 191: case 178: + case 171: + case 192: + case 179: case 69: case 10: case 8: case 9: case 11: - case 188: + case 189: case 84: case 93: case 97: @@ -5634,7 +5675,7 @@ var ts; } ts.isAssignmentOperator = isAssignmentOperator; function isExpressionWithTypeArgumentsInClassExtendsClause(node) { - return node.kind === 193 && + return node.kind === 194 && node.parent.token === 83 && isClassLike(node.parent.parent); } @@ -5655,16 +5696,16 @@ var ts; } } function isRightSideOfQualifiedNameOrPropertyAccess(node) { - return (node.parent.kind === 138 && node.parent.right === node) || - (node.parent.kind === 171 && node.parent.name === node); + return (node.parent.kind === 139 && node.parent.right === node) || + (node.parent.kind === 172 && node.parent.name === node); } ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess; function isEmptyObjectLiteralOrArrayLiteral(expression) { var kind = expression.kind; - if (kind === 170) { + if (kind === 171) { return expression.properties.length === 0; } - if (kind === 169) { + if (kind === 170) { return expression.elements.length === 0; } return false; @@ -5912,9 +5953,9 @@ var ts; } ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions; function getTypeParameterOwner(d) { - if (d && d.kind === 140) { + if (d && d.kind === 141) { for (var current = d; current; current = current.parent) { - if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 221) { + if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 222) { return current; } } @@ -5922,7 +5963,7 @@ var ts; } ts.getTypeParameterOwner = getTypeParameterOwner; function isParameterPropertyDeclaration(node) { - return node.flags & 28 && node.parent.kind === 147 && ts.isClassLike(node.parent.parent); + return node.flags & 92 && node.parent.kind === 148 && ts.isClassLike(node.parent.parent); } ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration; function startsWith(str, prefix) { @@ -5941,7 +5982,7 @@ var ts; var NodeConstructor; var SourceFileConstructor; function createNode(kind, pos, end) { - if (kind === 255) { + if (kind === 256) { return new (SourceFileConstructor || (SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor()))(kind, pos, end); } else { @@ -5977,26 +6018,26 @@ var ts; var visitNodes = cbNodeArray ? visitNodeArray : visitEachNode; var cbNodes = cbNodeArray || cbNode; switch (node.kind) { - case 138: + case 139: return visitNode(cbNode, node.left) || visitNode(cbNode, node.right); - case 140: + case 141: return visitNode(cbNode, node.name) || visitNode(cbNode, node.constraint) || visitNode(cbNode, node.expression); - case 253: + case 254: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.equalsToken) || visitNode(cbNode, node.objectAssignmentInitializer); - case 141: + case 142: + case 145: case 144: - case 143: - case 252: - case 217: - case 168: + case 253: + case 218: + case 169: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.propertyName) || @@ -6005,24 +6046,24 @@ var ts; visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.type) || visitNode(cbNode, node.initializer); - case 155: case 156: - case 150: + case 157: case 151: case 152: + case 153: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNodes(cbNodes, node.typeParameters) || visitNodes(cbNodes, node.parameters) || visitNode(cbNode, node.type); - case 146: - case 145: case 147: + case 146: case 148: case 149: - case 178: - case 219: + case 150: case 179: + case 220: + case 180: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.asteriskToken) || @@ -6033,162 +6074,155 @@ var ts; visitNode(cbNode, node.type) || visitNode(cbNode, node.equalsGreaterThanToken) || visitNode(cbNode, node.body); - case 154: + case 155: return visitNode(cbNode, node.typeName) || visitNodes(cbNodes, node.typeArguments); - case 153: + case 154: return visitNode(cbNode, node.parameterName) || visitNode(cbNode, node.type); - case 157: - return visitNode(cbNode, node.exprName); case 158: - return visitNodes(cbNodes, node.members); + return visitNode(cbNode, node.exprName); case 159: - return visitNode(cbNode, node.elementType); + return visitNodes(cbNodes, node.members); case 160: - return visitNodes(cbNodes, node.elementTypes); + return visitNode(cbNode, node.elementType); case 161: + return visitNodes(cbNodes, node.elementTypes); case 162: - return visitNodes(cbNodes, node.types); case 163: + return visitNodes(cbNodes, node.types); + case 164: return visitNode(cbNode, node.type); - case 166: case 167: - return visitNodes(cbNodes, node.elements); - case 169: + case 168: return visitNodes(cbNodes, node.elements); case 170: - return visitNodes(cbNodes, node.properties); + return visitNodes(cbNodes, node.elements); case 171: + return visitNodes(cbNodes, node.properties); + case 172: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.dotToken) || visitNode(cbNode, node.name); - case 172: + case 173: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.argumentExpression); - case 173: case 174: + case 175: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.typeArguments) || visitNodes(cbNodes, node.arguments); - case 175: + case 176: return visitNode(cbNode, node.tag) || visitNode(cbNode, node.template); - case 176: + case 177: return visitNode(cbNode, node.type) || visitNode(cbNode, node.expression); - case 177: - return visitNode(cbNode, node.expression); - case 180: + case 178: return visitNode(cbNode, node.expression); case 181: return visitNode(cbNode, node.expression); case 182: return visitNode(cbNode, node.expression); - case 184: - return visitNode(cbNode, node.operand); - case 189: - return visitNode(cbNode, node.asteriskToken) || - visitNode(cbNode, node.expression); case 183: return visitNode(cbNode, node.expression); case 185: return visitNode(cbNode, node.operand); + case 190: + return visitNode(cbNode, node.asteriskToken) || + visitNode(cbNode, node.expression); + case 184: + return visitNode(cbNode, node.expression); case 186: + return visitNode(cbNode, node.operand); + case 187: return visitNode(cbNode, node.left) || visitNode(cbNode, node.operatorToken) || visitNode(cbNode, node.right); - case 194: + case 195: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.type); - case 195: + case 196: return visitNode(cbNode, node.expression); - case 187: + case 188: return visitNode(cbNode, node.condition) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.whenTrue) || visitNode(cbNode, node.colonToken) || visitNode(cbNode, node.whenFalse); - case 190: + case 191: return visitNode(cbNode, node.expression); - case 198: - case 225: + case 199: + case 226: return visitNodes(cbNodes, node.statements); - case 255: + case 256: return visitNodes(cbNodes, node.statements) || visitNode(cbNode, node.endOfFileToken); - case 199: + case 200: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.declarationList); - case 218: + case 219: return visitNodes(cbNodes, node.declarations); - case 201: - return visitNode(cbNode, node.expression); case 202: + return visitNode(cbNode, node.expression); + case 203: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.thenStatement) || visitNode(cbNode, node.elseStatement); - case 203: + case 204: return visitNode(cbNode, node.statement) || visitNode(cbNode, node.expression); - case 204: - return visitNode(cbNode, node.expression) || - visitNode(cbNode, node.statement); case 205: - return visitNode(cbNode, node.initializer) || - visitNode(cbNode, node.condition) || - visitNode(cbNode, node.incrementor) || + return visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); case 206: return visitNode(cbNode, node.initializer) || - visitNode(cbNode, node.expression) || + visitNode(cbNode, node.condition) || + visitNode(cbNode, node.incrementor) || visitNode(cbNode, node.statement); case 207: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); case 208: - case 209: - return visitNode(cbNode, node.label); - case 210: - return visitNode(cbNode, node.expression); - case 211: - return visitNode(cbNode, node.expression) || + return visitNode(cbNode, node.initializer) || + visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); + case 209: + case 210: + return visitNode(cbNode, node.label); + case 211: + return visitNode(cbNode, node.expression); case 212: + return visitNode(cbNode, node.expression) || + visitNode(cbNode, node.statement); + case 213: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.caseBlock); - case 226: + case 227: return visitNodes(cbNodes, node.clauses); - case 248: + case 249: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.statements); - case 249: + case 250: return visitNodes(cbNodes, node.statements); - case 213: + case 214: return visitNode(cbNode, node.label) || visitNode(cbNode, node.statement); - case 214: - return visitNode(cbNode, node.expression); case 215: + return visitNode(cbNode, node.expression); + case 216: return visitNode(cbNode, node.tryBlock) || visitNode(cbNode, node.catchClause) || visitNode(cbNode, node.finallyBlock); - case 251: + case 252: return visitNode(cbNode, node.variableDeclaration) || visitNode(cbNode, node.block); - case 142: + case 143: return visitNode(cbNode, node.expression); - case 220: - case 191: - return visitNodes(cbNodes, node.decorators) || - visitNodes(cbNodes, node.modifiers) || - visitNode(cbNode, node.name) || - visitNodes(cbNodes, node.typeParameters) || - visitNodes(cbNodes, node.heritageClauses) || - visitNodes(cbNodes, node.members); case 221: + case 192: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || @@ -6200,127 +6234,134 @@ var ts; visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeParameters) || - visitNode(cbNode, node.type); + visitNodes(cbNodes, node.heritageClauses) || + visitNodes(cbNodes, node.members); case 223: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || - visitNodes(cbNodes, node.members); - case 254: - return visitNode(cbNode, node.name) || - visitNode(cbNode, node.initializer); + visitNodes(cbNodes, node.typeParameters) || + visitNode(cbNode, node.type); case 224: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.name) || + visitNodes(cbNodes, node.members); + case 255: + return visitNode(cbNode, node.name) || + visitNode(cbNode, node.initializer); + case 225: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.body); - case 228: + case 229: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.moduleReference); - case 229: + case 230: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.importClause) || visitNode(cbNode, node.moduleSpecifier); - case 230: + case 231: return visitNode(cbNode, node.name) || visitNode(cbNode, node.namedBindings); - case 227: - return visitNode(cbNode, node.name); - case 231: + case 228: return visitNode(cbNode, node.name); case 232: - case 236: + return visitNode(cbNode, node.name); + case 233: + case 237: return visitNodes(cbNodes, node.elements); - case 235: + case 236: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.exportClause) || visitNode(cbNode, node.moduleSpecifier); - case 233: - case 237: + case 234: + case 238: return visitNode(cbNode, node.propertyName) || visitNode(cbNode, node.name); - case 234: + case 235: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.expression); - case 188: + case 189: return visitNode(cbNode, node.head) || visitNodes(cbNodes, node.templateSpans); - case 196: + case 197: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal); - case 139: + case 140: return visitNode(cbNode, node.expression); - case 250: + case 251: return visitNodes(cbNodes, node.types); - case 193: + case 194: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.typeArguments); - case 239: - return visitNode(cbNode, node.expression); - case 238: - return visitNodes(cbNodes, node.decorators); case 240: + return visitNode(cbNode, node.expression); + case 239: + return visitNodes(cbNodes, node.decorators); + case 241: return visitNode(cbNode, node.openingElement) || visitNodes(cbNodes, node.children) || visitNode(cbNode, node.closingElement); - case 241: case 242: + case 243: return visitNode(cbNode, node.tagName) || visitNodes(cbNodes, node.attributes); - case 245: + case 246: return visitNode(cbNode, node.name) || visitNode(cbNode, node.initializer); - case 246: - return visitNode(cbNode, node.expression); case 247: return visitNode(cbNode, node.expression); - case 244: + case 248: + return visitNode(cbNode, node.expression); + case 245: return visitNode(cbNode, node.tagName); - case 256: + case 257: return visitNode(cbNode, node.type); - case 260: - return visitNodes(cbNodes, node.types); case 261: return visitNodes(cbNodes, node.types); - case 259: + case 262: + return visitNodes(cbNodes, node.types); + case 260: return visitNode(cbNode, node.elementType); + case 264: + return visitNode(cbNode, node.type); case 263: return visitNode(cbNode, node.type); - case 262: - return visitNode(cbNode, node.type); - case 264: + case 265: return visitNodes(cbNodes, node.members); - case 266: + case 267: return visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeArguments); - case 267: - return visitNode(cbNode, node.type); case 268: + return visitNode(cbNode, node.type); + case 269: return visitNodes(cbNodes, node.parameters) || visitNode(cbNode, node.type); - case 269: - return visitNode(cbNode, node.type); case 270: return visitNode(cbNode, node.type); case 271: return visitNode(cbNode, node.type); - case 265: + case 272: + return visitNode(cbNode, node.type); + case 266: return visitNode(cbNode, node.name) || visitNode(cbNode, node.type); - case 272: + case 273: return visitNodes(cbNodes, node.tags); - case 274: + case 275: return visitNode(cbNode, node.preParameterName) || visitNode(cbNode, node.typeExpression) || visitNode(cbNode, node.postParameterName); - case 275: - return visitNode(cbNode, node.typeExpression); case 276: return visitNode(cbNode, node.typeExpression); case 277: + return visitNode(cbNode, node.typeExpression); + case 278: return visitNodes(cbNodes, node.typeParameters); } } @@ -6452,7 +6493,7 @@ var ts; } Parser.fixupParentReferences = fixupParentReferences; function createSourceFile(fileName, languageVersion, scriptKind) { - var sourceFile = new SourceFileConstructor(255, 0, sourceText.length); + var sourceFile = new SourceFileConstructor(256, 0, sourceText.length); nodeCount++; sourceFile.text = sourceText; sourceFile.bindDiagnostics = []; @@ -6744,7 +6785,7 @@ var ts; return token === 9 || token === 8 || ts.tokenIsIdentifierOrKeyword(token); } function parseComputedPropertyName() { - var node = createNode(139); + var node = createNode(140); parseExpected(19); node.expression = allowInAnd(parseExpression); parseExpected(20); @@ -7043,14 +7084,14 @@ var ts; function isReusableClassMember(node) { if (node) { switch (node.kind) { - case 147: - case 152: case 148: + case 153: case 149: - case 144: - case 197: + case 150: + case 145: + case 198: return true; - case 146: + case 147: var methodDeclaration = node; var nameIsConstructor = methodDeclaration.name.kind === 69 && methodDeclaration.name.originalKeywordKind === 121; @@ -7062,8 +7103,8 @@ var ts; function isReusableSwitchClause(node) { if (node) { switch (node.kind) { - case 248: case 249: + case 250: return true; } } @@ -7072,65 +7113,65 @@ var ts; function isReusableStatement(node) { if (node) { switch (node.kind) { - case 219: + case 220: + case 200: case 199: - case 198: + case 203: case 202: - case 201: - case 214: + case 215: + case 211: + case 213: case 210: - case 212: case 209: + case 207: case 208: case 206: - case 207: case 205: - case 204: - case 211: - case 200: - case 215: - case 213: - case 203: + case 212: + case 201: case 216: + case 214: + case 204: + case 217: + case 230: case 229: - case 228: + case 236: case 235: - case 234: - case 224: - case 220: + case 225: case 221: - case 223: case 222: + case 224: + case 223: return true; } } return false; } function isReusableEnumMember(node) { - return node.kind === 254; + return node.kind === 255; } function isReusableTypeMember(node) { if (node) { switch (node.kind) { - case 151: - case 145: case 152: - case 143: - case 150: + case 146: + case 153: + case 144: + case 151: return true; } } return false; } function isReusableVariableDeclaration(node) { - if (node.kind !== 217) { + if (node.kind !== 218) { return false; } var variableDeclarator = node; return variableDeclarator.initializer === undefined; } function isReusableParameter(node) { - if (node.kind !== 141) { + if (node.kind !== 142) { return false; } var parameter = node; @@ -7230,7 +7271,7 @@ var ts; function parseEntityName(allowReservedWords, diagnosticMessage) { var entity = parseIdentifier(diagnosticMessage); while (parseOptional(21)) { - var node = createNode(138, entity.pos); + var node = createNode(139, entity.pos); node.left = entity; node.right = parseRightSideOfDot(allowReservedWords); entity = finishNode(node); @@ -7247,7 +7288,7 @@ var ts; return allowIdentifierNames ? parseIdentifierName() : parseIdentifier(); } function parseTemplateExpression() { - var template = createNode(188); + var template = createNode(189); template.head = parseTemplateLiteralFragment(); ts.Debug.assert(template.head.kind === 12, "Template head has wrong token kind"); var templateSpans = []; @@ -7260,7 +7301,7 @@ var ts; return finishNode(template); } function parseTemplateSpan() { - var span = createNode(196); + var span = createNode(197); span.expression = allowInAnd(parseExpression); var literal; if (token === 16) { @@ -7274,7 +7315,7 @@ var ts; return finishNode(span); } function parseStringLiteralTypeNode() { - return parseLiteralLikeNode(165, true); + return parseLiteralLikeNode(166, true); } function parseLiteralNode(internName) { return parseLiteralLikeNode(token, internName); @@ -7304,7 +7345,7 @@ var ts; } function parseTypeReference() { var typeName = parseEntityName(false, ts.Diagnostics.Type_expected); - var node = createNode(154, typeName.pos); + var node = createNode(155, typeName.pos); node.typeName = typeName; if (!scanner.hasPrecedingLineBreak() && token === 25) { node.typeArguments = parseBracketedList(18, parseType, 25, 27); @@ -7313,24 +7354,24 @@ var ts; } function parseThisTypePredicate(lhs) { nextToken(); - var node = createNode(153, lhs.pos); + var node = createNode(154, lhs.pos); node.parameterName = lhs; node.type = parseType(); return finishNode(node); } function parseThisTypeNode() { - var node = createNode(164); + var node = createNode(165); nextToken(); return finishNode(node); } function parseTypeQuery() { - var node = createNode(157); + var node = createNode(158); parseExpected(101); node.exprName = parseEntityName(true); return finishNode(node); } function parseTypeParameter() { - var node = createNode(140); + var node = createNode(141); node.name = parseIdentifier(); if (parseOptional(83)) { if (isStartOfType() || !isStartOfExpression()) { @@ -7363,7 +7404,7 @@ var ts; } } function parseParameter() { - var node = createNode(141); + var node = createNode(142); if (token === 97) { node.name = createIdentifier(true, undefined); node.type = parseParameterType(); @@ -7423,7 +7464,7 @@ var ts; } function parseSignatureMember(kind) { var node = createNode(kind); - if (kind === 151) { + if (kind === 152) { parseExpected(92); } fillSignature(54, false, false, false, node); @@ -7463,7 +7504,7 @@ var ts; return token === 54 || token === 24 || token === 20; } function parseIndexSignatureDeclaration(fullStart, decorators, modifiers) { - var node = createNode(152, fullStart); + var node = createNode(153, fullStart); node.decorators = decorators; setModifiers(node, modifiers); node.parameters = parseBracketedList(16, parseParameter, 19, 20); @@ -7475,7 +7516,7 @@ var ts; var name = parsePropertyName(); var questionToken = parseOptionalToken(53); if (token === 17 || token === 25) { - var method = createNode(145, fullStart); + var method = createNode(146, fullStart); setModifiers(method, modifiers); method.name = name; method.questionToken = questionToken; @@ -7484,7 +7525,7 @@ var ts; return finishNode(method); } else { - var property = createNode(143, fullStart); + var property = createNode(144, fullStart); setModifiers(property, modifiers); property.name = name; property.questionToken = questionToken; @@ -7523,10 +7564,10 @@ var ts; } function parseTypeMember() { if (token === 17 || token === 25) { - return parseSignatureMember(150); + return parseSignatureMember(151); } if (token === 92 && lookAhead(isStartOfConstructSignature)) { - return parseSignatureMember(151); + return parseSignatureMember(152); } var fullStart = getNodePos(); var modifiers = parseModifiers(); @@ -7540,7 +7581,7 @@ var ts; return token === 17 || token === 25; } function parseTypeLiteral() { - var node = createNode(158); + var node = createNode(159); node.members = parseObjectTypeMembers(); return finishNode(node); } @@ -7556,12 +7597,12 @@ var ts; return members; } function parseTupleType() { - var node = createNode(160); + var node = createNode(161); node.elementTypes = parseBracketedList(19, parseType, 19, 20); return finishNode(node); } function parseParenthesizedType() { - var node = createNode(163); + var node = createNode(164); parseExpected(17); node.type = parseType(); parseExpected(18); @@ -7569,7 +7610,7 @@ var ts; } function parseFunctionOrConstructorType(kind) { var node = createNode(kind); - if (kind === 156) { + if (kind === 157) { parseExpected(92); } fillSignature(34, false, false, false, node); @@ -7582,11 +7623,12 @@ var ts; function parseNonArrayType() { switch (token) { case 117: - case 131: - case 129: - case 120: case 132: - case 134: + case 130: + case 120: + case 133: + case 135: + case 127: var node = tryParse(parseKeywordAndNoDot); return node || parseTypeReference(); case 9: @@ -7618,15 +7660,16 @@ var ts; function isStartOfType() { switch (token) { case 117: - case 131: - case 129: - case 120: case 132: + case 130: + case 120: + case 133: case 103: - case 134: + case 135: case 93: case 97: case 101: + case 127: case 15: case 19: case 25: @@ -7647,7 +7690,7 @@ var ts; var type = parseNonArrayType(); while (!scanner.hasPrecedingLineBreak() && parseOptional(19)) { parseExpected(20); - var node = createNode(159, type.pos); + var node = createNode(160, type.pos); node.elementType = type; type = finishNode(node); } @@ -7669,10 +7712,10 @@ var ts; return type; } function parseIntersectionTypeOrHigher() { - return parseUnionOrIntersectionType(162, parseArrayTypeOrHigher, 46); + return parseUnionOrIntersectionType(163, parseArrayTypeOrHigher, 46); } function parseUnionTypeOrHigher() { - return parseUnionOrIntersectionType(161, parseIntersectionTypeOrHigher, 47); + return parseUnionOrIntersectionType(162, parseIntersectionTypeOrHigher, 47); } function isStartOfFunctionType() { if (token === 25) { @@ -7718,7 +7761,7 @@ var ts; var typePredicateVariable = isIdentifier() && tryParse(parseTypePredicatePrefix); var type = parseType(); if (typePredicateVariable) { - var node = createNode(153, typePredicateVariable.pos); + var node = createNode(154, typePredicateVariable.pos); node.parameterName = typePredicateVariable; node.type = type; return finishNode(node); @@ -7739,10 +7782,10 @@ var ts; } function parseTypeWorker() { if (isStartOfFunctionType()) { - return parseFunctionOrConstructorType(155); + return parseFunctionOrConstructorType(156); } if (token === 92) { - return parseFunctionOrConstructorType(156); + return parseFunctionOrConstructorType(157); } return parseUnionTypeOrHigher(); } @@ -7834,7 +7877,7 @@ var ts; if (isYieldExpression()) { return parseYieldExpression(); } - var arrowExpression = tryParseParenthesizedArrowFunctionExpression(); + var arrowExpression = tryParseParenthesizedArrowFunctionExpression() || tryParseAsyncSimpleArrowFunctionExpression(); if (arrowExpression) { return arrowExpression; } @@ -7861,7 +7904,7 @@ var ts; return !scanner.hasPrecedingLineBreak() && isIdentifier(); } function parseYieldExpression() { - var node = createNode(189); + var node = createNode(190); nextToken(); if (!scanner.hasPrecedingLineBreak() && (token === 37 || isStartOfExpression())) { @@ -7873,17 +7916,24 @@ var ts; return finishNode(node); } } - function parseSimpleArrowFunctionExpression(identifier) { + function parseSimpleArrowFunctionExpression(identifier, asyncModifier) { ts.Debug.assert(token === 34, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); - var node = createNode(179, identifier.pos); - var parameter = createNode(141, identifier.pos); + var node; + if (asyncModifier) { + node = createNode(180, asyncModifier.pos); + setModifiers(node, asyncModifier); + } + else { + node = createNode(180, identifier.pos); + } + var parameter = createNode(142, identifier.pos); parameter.name = identifier; finishNode(parameter); node.parameters = [parameter]; node.parameters.pos = parameter.pos; node.parameters.end = parameter.end; node.equalsGreaterThanToken = parseExpectedToken(34, false, ts.Diagnostics._0_expected, "=>"); - node.body = parseArrowFunctionExpressionBody(false); + node.body = parseArrowFunctionExpressionBody(!!asyncModifier); return finishNode(node); } function tryParseParenthesizedArrowFunctionExpression() { @@ -7986,8 +8036,32 @@ var ts; function parsePossibleParenthesizedArrowFunctionExpressionHead() { return parseParenthesizedArrowFunctionExpressionHead(false); } + function tryParseAsyncSimpleArrowFunctionExpression() { + if (token === 118) { + var isUnParenthesizedAsyncArrowFunction = lookAhead(isUnParenthesizedAsyncArrowFunctionWorker); + if (isUnParenthesizedAsyncArrowFunction === 1) { + var asyncModifier = parseModifiersForArrowFunction(); + var expr = parseBinaryExpressionOrHigher(0); + return parseSimpleArrowFunctionExpression(expr, asyncModifier); + } + } + return undefined; + } + function isUnParenthesizedAsyncArrowFunctionWorker() { + if (token === 118) { + nextToken(); + if (scanner.hasPrecedingLineBreak() || token === 34) { + return 0; + } + var expr = parseBinaryExpressionOrHigher(0); + if (!scanner.hasPrecedingLineBreak() && expr.kind === 69 && token === 34) { + return 1; + } + } + return 0; + } function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) { - var node = createNode(179); + var node = createNode(180); setModifiers(node, parseModifiersForArrowFunction()); var isAsync = !!(node.flags & 256); fillSignature(54, false, isAsync, !allowAmbiguity, node); @@ -8019,7 +8093,7 @@ var ts; if (!questionToken) { return leftOperand; } - var node = createNode(187, leftOperand.pos); + var node = createNode(188, leftOperand.pos); node.condition = leftOperand; node.questionToken = questionToken; node.whenTrue = doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher); @@ -8032,7 +8106,7 @@ var ts; return parseBinaryExpressionRest(precedence, leftOperand); } function isInOrOfKeyword(t) { - return t === 90 || t === 137; + return t === 90 || t === 138; } function parseBinaryExpressionRest(precedence, leftOperand) { while (true) { @@ -8110,43 +8184,43 @@ var ts; return -1; } function makeBinaryExpression(left, operatorToken, right) { - var node = createNode(186, left.pos); + var node = createNode(187, left.pos); node.left = left; node.operatorToken = operatorToken; node.right = right; return finishNode(node); } function makeAsExpression(left, right) { - var node = createNode(194, left.pos); + var node = createNode(195, left.pos); node.expression = left; node.type = right; return finishNode(node); } function parsePrefixUnaryExpression() { - var node = createNode(184); + var node = createNode(185); node.operator = token; nextToken(); node.operand = parseSimpleUnaryExpression(); return finishNode(node); } function parseDeleteExpression() { - var node = createNode(180); - nextToken(); - node.expression = parseSimpleUnaryExpression(); - return finishNode(node); - } - function parseTypeOfExpression() { var node = createNode(181); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } - function parseVoidExpression() { + function parseTypeOfExpression() { var node = createNode(182); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } + function parseVoidExpression() { + var node = createNode(183); + nextToken(); + node.expression = parseSimpleUnaryExpression(); + return finishNode(node); + } function isAwaitExpression() { if (token === 119) { if (inAwaitContext()) { @@ -8157,7 +8231,7 @@ var ts; return false; } function parseAwaitExpression() { - var node = createNode(183); + var node = createNode(184); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); @@ -8176,7 +8250,7 @@ var ts; var simpleUnaryExpression = parseSimpleUnaryExpression(); if (token === 38) { var start = ts.skipTrivia(sourceText, simpleUnaryExpression.pos); - if (simpleUnaryExpression.kind === 176) { + if (simpleUnaryExpression.kind === 177) { 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 { @@ -8224,7 +8298,7 @@ var ts; } function parseIncrementExpression() { if (token === 41 || token === 42) { - var node = createNode(184); + var node = createNode(185); node.operator = token; nextToken(); node.operand = parseLeftHandSideExpressionOrHigher(); @@ -8236,7 +8310,7 @@ var ts; var expression = parseLeftHandSideExpressionOrHigher(); ts.Debug.assert(ts.isLeftHandSideExpression(expression)); if ((token === 41 || token === 42) && !scanner.hasPrecedingLineBreak()) { - var node = createNode(185, expression.pos); + var node = createNode(186, expression.pos); node.operand = expression; node.operator = token; nextToken(); @@ -8259,7 +8333,7 @@ var ts; if (token === 17 || token === 21 || token === 19) { return expression; } - var node = createNode(171, expression.pos); + var node = createNode(172, expression.pos); node.expression = expression; node.dotToken = parseExpectedToken(21, false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); node.name = parseRightSideOfDot(true); @@ -8278,8 +8352,8 @@ var ts; function parseJsxElementOrSelfClosingElement(inExpressionContext) { var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext); var result; - if (opening.kind === 242) { - var node = createNode(240, opening.pos); + if (opening.kind === 243) { + var node = createNode(241, opening.pos); node.openingElement = opening; node.children = parseJsxChildren(node.openingElement.tagName); node.closingElement = parseJsxClosingElement(inExpressionContext); @@ -8289,14 +8363,14 @@ var ts; result = finishNode(node); } else { - ts.Debug.assert(opening.kind === 241); + ts.Debug.assert(opening.kind === 242); result = opening; } if (inExpressionContext && token === 25) { var invalidElement = tryParse(function () { return parseJsxElementOrSelfClosingElement(true); }); if (invalidElement) { parseErrorAtCurrentToken(ts.Diagnostics.JSX_expressions_must_have_one_parent_element); - var badNode = createNode(186, result.pos); + var badNode = createNode(187, result.pos); badNode.end = invalidElement.end; badNode.left = result; badNode.right = invalidElement; @@ -8308,13 +8382,13 @@ var ts; return result; } function parseJsxText() { - var node = createNode(243, scanner.getStartPos()); + var node = createNode(244, scanner.getStartPos()); token = scanner.scanJsxToken(); return finishNode(node); } function parseJsxChild() { switch (token) { - case 243: + case 244: return parseJsxText(); case 15: return parseJsxExpression(false); @@ -8350,7 +8424,7 @@ var ts; var attributes = parseList(13, parseJsxAttribute); var node; if (token === 27) { - node = createNode(242, fullStart); + node = createNode(243, fullStart); scanJsxText(); } else { @@ -8362,7 +8436,7 @@ var ts; parseExpected(27, undefined, false); scanJsxText(); } - node = createNode(241, fullStart); + node = createNode(242, fullStart); } node.tagName = tagName; node.attributes = attributes; @@ -8373,7 +8447,7 @@ var ts; var elementName = parseIdentifierName(); while (parseOptional(21)) { scanJsxIdentifier(); - var node = createNode(138, elementName.pos); + var node = createNode(139, elementName.pos); node.left = elementName; node.right = parseIdentifierName(); elementName = finishNode(node); @@ -8381,7 +8455,7 @@ var ts; return elementName; } function parseJsxExpression(inExpressionContext) { - var node = createNode(247); + var node = createNode(248); parseExpected(15); if (token !== 16) { node.expression = parseAssignmentExpressionOrHigher(); @@ -8400,7 +8474,7 @@ var ts; return parseJsxSpreadAttribute(); } scanJsxIdentifier(); - var node = createNode(245); + var node = createNode(246); node.name = parseIdentifierName(); if (parseOptional(56)) { switch (token) { @@ -8415,7 +8489,7 @@ var ts; return finishNode(node); } function parseJsxSpreadAttribute() { - var node = createNode(246); + var node = createNode(247); parseExpected(15); parseExpected(22); node.expression = parseExpression(); @@ -8423,7 +8497,7 @@ var ts; return finishNode(node); } function parseJsxClosingElement(inExpressionContext) { - var node = createNode(244); + var node = createNode(245); parseExpected(26); node.tagName = parseJsxElementName(); if (inExpressionContext) { @@ -8436,7 +8510,7 @@ var ts; return finishNode(node); } function parseTypeAssertion() { - var node = createNode(176); + var node = createNode(177); parseExpected(25); node.type = parseType(); parseExpected(27); @@ -8447,7 +8521,7 @@ var ts; while (true) { var dotToken = parseOptionalToken(21); if (dotToken) { - var propertyAccess = createNode(171, expression.pos); + var propertyAccess = createNode(172, expression.pos); propertyAccess.expression = expression; propertyAccess.dotToken = dotToken; propertyAccess.name = parseRightSideOfDot(true); @@ -8456,13 +8530,13 @@ var ts; } if (token === 49 && !scanner.hasPrecedingLineBreak()) { nextToken(); - var nonNullExpression = createNode(195, expression.pos); + var nonNullExpression = createNode(196, expression.pos); nonNullExpression.expression = expression; expression = finishNode(nonNullExpression); continue; } if (!inDecoratorContext() && parseOptional(19)) { - var indexedAccess = createNode(172, expression.pos); + var indexedAccess = createNode(173, expression.pos); indexedAccess.expression = expression; if (token !== 20) { indexedAccess.argumentExpression = allowInAnd(parseExpression); @@ -8476,7 +8550,7 @@ var ts; continue; } if (token === 11 || token === 12) { - var tagExpression = createNode(175, expression.pos); + var tagExpression = createNode(176, expression.pos); tagExpression.tag = expression; tagExpression.template = token === 11 ? parseLiteralNode() @@ -8495,7 +8569,7 @@ var ts; if (!typeArguments) { return expression; } - var callExpr = createNode(173, expression.pos); + var callExpr = createNode(174, expression.pos); callExpr.expression = expression; callExpr.typeArguments = typeArguments; callExpr.arguments = parseArgumentList(); @@ -8503,7 +8577,7 @@ var ts; continue; } else if (token === 17) { - var callExpr = createNode(173, expression.pos); + var callExpr = createNode(174, expression.pos); callExpr.expression = expression; callExpr.arguments = parseArgumentList(); expression = finishNode(callExpr); @@ -8598,28 +8672,28 @@ var ts; return parseIdentifier(ts.Diagnostics.Expression_expected); } function parseParenthesizedExpression() { - var node = createNode(177); + var node = createNode(178); parseExpected(17); node.expression = allowInAnd(parseExpression); parseExpected(18); return finishNode(node); } function parseSpreadElement() { - var node = createNode(190); + var node = createNode(191); parseExpected(22); node.expression = parseAssignmentExpressionOrHigher(); return finishNode(node); } function parseArgumentOrArrayLiteralElement() { return token === 22 ? parseSpreadElement() : - token === 24 ? createNode(192) : + token === 24 ? createNode(193) : parseAssignmentExpressionOrHigher(); } function parseArgumentExpression() { return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement); } function parseArrayLiteralExpression() { - var node = createNode(169); + var node = createNode(170); parseExpected(19); if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; @@ -8630,10 +8704,10 @@ var ts; } function tryParseAccessorDeclaration(fullStart, decorators, modifiers) { if (parseContextualModifier(123)) { - return addJSDocComment(parseAccessorDeclaration(148, fullStart, decorators, modifiers)); + return addJSDocComment(parseAccessorDeclaration(149, fullStart, decorators, modifiers)); } - else if (parseContextualModifier(130)) { - return parseAccessorDeclaration(149, fullStart, decorators, modifiers); + else if (parseContextualModifier(131)) { + return parseAccessorDeclaration(150, fullStart, decorators, modifiers); } return undefined; } @@ -8654,7 +8728,7 @@ var ts; } var isShorthandPropertyAssignment = tokenIsIdentifier && (token === 24 || token === 16 || token === 56); if (isShorthandPropertyAssignment) { - var shorthandDeclaration = createNode(253, fullStart); + var shorthandDeclaration = createNode(254, fullStart); shorthandDeclaration.name = propertyName; shorthandDeclaration.questionToken = questionToken; var equalsToken = parseOptionalToken(56); @@ -8665,7 +8739,7 @@ var ts; return addJSDocComment(finishNode(shorthandDeclaration)); } else { - var propertyAssignment = createNode(252, fullStart); + var propertyAssignment = createNode(253, fullStart); propertyAssignment.modifiers = modifiers; propertyAssignment.name = propertyName; propertyAssignment.questionToken = questionToken; @@ -8675,7 +8749,7 @@ var ts; } } function parseObjectLiteralExpression() { - var node = createNode(170); + var node = createNode(171); parseExpected(15); if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; @@ -8689,7 +8763,7 @@ var ts; if (saveDecoratorContext) { setDecoratorContext(false); } - var node = createNode(178); + var node = createNode(179); setModifiers(node, parseModifiers()); parseExpected(87); node.asteriskToken = parseOptionalToken(37); @@ -8711,7 +8785,7 @@ var ts; return isIdentifier() ? parseIdentifier() : undefined; } function parseNewExpression() { - var node = createNode(174); + var node = createNode(175); parseExpected(92); node.expression = parseMemberExpressionOrHigher(); node.typeArguments = tryParse(parseTypeArgumentsInExpression); @@ -8721,7 +8795,7 @@ var ts; return finishNode(node); } function parseBlock(ignoreMissingOpenBrace, diagnosticMessage) { - var node = createNode(198); + var node = createNode(199); if (parseExpected(15, diagnosticMessage) || ignoreMissingOpenBrace) { node.statements = parseList(1, parseStatement); parseExpected(16); @@ -8749,12 +8823,12 @@ var ts; return block; } function parseEmptyStatement() { - var node = createNode(200); + var node = createNode(201); parseExpected(23); return finishNode(node); } function parseIfStatement() { - var node = createNode(202); + var node = createNode(203); parseExpected(88); parseExpected(17); node.expression = allowInAnd(parseExpression); @@ -8764,7 +8838,7 @@ var ts; return finishNode(node); } function parseDoStatement() { - var node = createNode(203); + var node = createNode(204); parseExpected(79); node.statement = parseStatement(); parseExpected(104); @@ -8775,7 +8849,7 @@ var ts; return finishNode(node); } function parseWhileStatement() { - var node = createNode(204); + var node = createNode(205); parseExpected(104); parseExpected(17); node.expression = allowInAnd(parseExpression); @@ -8798,21 +8872,21 @@ var ts; } var forOrForInOrForOfStatement; if (parseOptional(90)) { - var forInStatement = createNode(206, pos); + var forInStatement = createNode(207, pos); forInStatement.initializer = initializer; forInStatement.expression = allowInAnd(parseExpression); parseExpected(18); forOrForInOrForOfStatement = forInStatement; } - else if (parseOptional(137)) { - var forOfStatement = createNode(207, pos); + else if (parseOptional(138)) { + var forOfStatement = createNode(208, pos); forOfStatement.initializer = initializer; forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher); parseExpected(18); forOrForInOrForOfStatement = forOfStatement; } else { - var forStatement = createNode(205, pos); + var forStatement = createNode(206, pos); forStatement.initializer = initializer; parseExpected(23); if (token !== 23 && token !== 18) { @@ -8830,7 +8904,7 @@ var ts; } function parseBreakOrContinueStatement(kind) { var node = createNode(kind); - parseExpected(kind === 209 ? 70 : 75); + parseExpected(kind === 210 ? 70 : 75); if (!canParseSemicolon()) { node.label = parseIdentifier(); } @@ -8838,7 +8912,7 @@ var ts; return finishNode(node); } function parseReturnStatement() { - var node = createNode(210); + var node = createNode(211); parseExpected(94); if (!canParseSemicolon()) { node.expression = allowInAnd(parseExpression); @@ -8847,7 +8921,7 @@ var ts; return finishNode(node); } function parseWithStatement() { - var node = createNode(211); + var node = createNode(212); parseExpected(105); parseExpected(17); node.expression = allowInAnd(parseExpression); @@ -8856,7 +8930,7 @@ var ts; return finishNode(node); } function parseCaseClause() { - var node = createNode(248); + var node = createNode(249); parseExpected(71); node.expression = allowInAnd(parseExpression); parseExpected(54); @@ -8864,7 +8938,7 @@ var ts; return finishNode(node); } function parseDefaultClause() { - var node = createNode(249); + var node = createNode(250); parseExpected(77); parseExpected(54); node.statements = parseList(3, parseStatement); @@ -8874,12 +8948,12 @@ var ts; return token === 71 ? parseCaseClause() : parseDefaultClause(); } function parseSwitchStatement() { - var node = createNode(212); + var node = createNode(213); parseExpected(96); parseExpected(17); node.expression = allowInAnd(parseExpression); parseExpected(18); - var caseBlock = createNode(226, scanner.getStartPos()); + var caseBlock = createNode(227, scanner.getStartPos()); parseExpected(15); caseBlock.clauses = parseList(2, parseCaseOrDefaultClause); parseExpected(16); @@ -8887,14 +8961,14 @@ var ts; return finishNode(node); } function parseThrowStatement() { - var node = createNode(214); + var node = createNode(215); parseExpected(98); node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression); parseSemicolon(); return finishNode(node); } function parseTryStatement() { - var node = createNode(215); + var node = createNode(216); parseExpected(100); node.tryBlock = parseBlock(false); node.catchClause = token === 72 ? parseCatchClause() : undefined; @@ -8905,7 +8979,7 @@ var ts; return finishNode(node); } function parseCatchClause() { - var result = createNode(251); + var result = createNode(252); parseExpected(72); if (parseExpected(17)) { result.variableDeclaration = parseVariableDeclaration(); @@ -8915,7 +8989,7 @@ var ts; return finishNode(result); } function parseDebuggerStatement() { - var node = createNode(216); + var node = createNode(217); parseExpected(76); parseSemicolon(); return finishNode(node); @@ -8924,13 +8998,13 @@ var ts; var fullStart = scanner.getStartPos(); var expression = allowInAnd(parseExpression); if (expression.kind === 69 && parseOptional(54)) { - var labeledStatement = createNode(213, fullStart); + var labeledStatement = createNode(214, fullStart); labeledStatement.label = expression; labeledStatement.statement = parseStatement(); return addJSDocComment(finishNode(labeledStatement)); } else { - var expressionStatement = createNode(201, fullStart); + var expressionStatement = createNode(202, fullStart); expressionStatement.expression = expression; parseSemicolon(); return addJSDocComment(finishNode(expressionStatement)); @@ -8959,7 +9033,7 @@ var ts; case 81: return true; case 107: - case 133: + case 134: return nextTokenIsIdentifierOnSameLine(); case 125: case 126: @@ -8970,13 +9044,13 @@ var ts; case 110: case 111: case 112: - case 127: + case 128: nextToken(); if (scanner.hasPrecedingLineBreak()) { return false; } continue; - case 136: + case 137: nextToken(); return token === 15 || token === 69 || token === 82; case 89: @@ -9036,14 +9110,14 @@ var ts; case 107: case 125: case 126: - case 133: - case 136: + case 134: + case 137: return true; case 112: case 110: case 111: case 113: - case 127: + case 128: return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); default: return isStartOfExpression(); @@ -9082,9 +9156,9 @@ var ts; case 86: return parseForOrForInOrForOfStatement(); case 75: - return parseBreakOrContinueStatement(208); - case 70: return parseBreakOrContinueStatement(209); + case 70: + return parseBreakOrContinueStatement(210); case 94: return parseReturnStatement(); case 105: @@ -9103,7 +9177,7 @@ var ts; return parseDeclaration(); case 118: case 107: - case 133: + case 134: case 125: case 126: case 122: @@ -9116,8 +9190,8 @@ var ts; case 112: case 115: case 113: - case 127: - case 136: + case 128: + case 137: if (isStartOfDeclaration()) { return parseDeclaration(); } @@ -9140,11 +9214,11 @@ var ts; return parseClassDeclaration(fullStart, decorators, modifiers); case 107: return parseInterfaceDeclaration(fullStart, decorators, modifiers); - case 133: + case 134: return parseTypeAliasDeclaration(fullStart, decorators, modifiers); case 81: return parseEnumDeclaration(fullStart, decorators, modifiers); - case 136: + case 137: case 125: case 126: return parseModuleDeclaration(fullStart, decorators, modifiers); @@ -9163,7 +9237,7 @@ var ts; } default: if (decorators || modifiers) { - var node = createMissingNode(238, true, ts.Diagnostics.Declaration_expected); + var node = createMissingNode(239, true, ts.Diagnostics.Declaration_expected); node.pos = fullStart; node.decorators = decorators; setModifiers(node, modifiers); @@ -9184,16 +9258,16 @@ var ts; } function parseArrayBindingElement() { if (token === 24) { - return createNode(192); + return createNode(193); } - var node = createNode(168); + var node = createNode(169); node.dotDotDotToken = parseOptionalToken(22); node.name = parseIdentifierOrPattern(); node.initializer = parseBindingElementInitializer(false); return finishNode(node); } function parseObjectBindingElement() { - var node = createNode(168); + var node = createNode(169); var tokenIsIdentifier = isIdentifier(); var propertyName = parsePropertyName(); if (tokenIsIdentifier && token !== 54) { @@ -9208,14 +9282,14 @@ var ts; return finishNode(node); } function parseObjectBindingPattern() { - var node = createNode(166); + var node = createNode(167); parseExpected(15); node.elements = parseDelimitedList(9, parseObjectBindingElement); parseExpected(16); return finishNode(node); } function parseArrayBindingPattern() { - var node = createNode(167); + var node = createNode(168); parseExpected(19); node.elements = parseDelimitedList(10, parseArrayBindingElement); parseExpected(20); @@ -9234,7 +9308,7 @@ var ts; return parseIdentifier(); } function parseVariableDeclaration() { - var node = createNode(217); + var node = createNode(218); node.name = parseIdentifierOrPattern(); node.type = parseTypeAnnotation(); if (!isInOrOfKeyword(token)) { @@ -9243,7 +9317,7 @@ var ts; return finishNode(node); } function parseVariableDeclarationList(inForStatementInitializer) { - var node = createNode(218); + var node = createNode(219); switch (token) { case 102: break; @@ -9257,7 +9331,7 @@ var ts; ts.Debug.fail(); } nextToken(); - if (token === 137 && lookAhead(canFollowContextualOfKeyword)) { + if (token === 138 && lookAhead(canFollowContextualOfKeyword)) { node.declarations = createMissingList(); } else { @@ -9272,7 +9346,7 @@ var ts; return nextTokenIsIdentifier() && nextToken() === 18; } function parseVariableStatement(fullStart, decorators, modifiers) { - var node = createNode(199, fullStart); + var node = createNode(200, fullStart); node.decorators = decorators; setModifiers(node, modifiers); node.declarationList = parseVariableDeclarationList(false); @@ -9280,7 +9354,7 @@ var ts; return addJSDocComment(finishNode(node)); } function parseFunctionDeclaration(fullStart, decorators, modifiers) { - var node = createNode(219, fullStart); + var node = createNode(220, fullStart); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(87); @@ -9293,7 +9367,7 @@ var ts; return addJSDocComment(finishNode(node)); } function parseConstructorDeclaration(pos, decorators, modifiers) { - var node = createNode(147, pos); + var node = createNode(148, pos); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(121); @@ -9302,7 +9376,7 @@ var ts; return addJSDocComment(finishNode(node)); } function parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, diagnosticMessage) { - var method = createNode(146, fullStart); + var method = createNode(147, fullStart); method.decorators = decorators; setModifiers(method, modifiers); method.asteriskToken = asteriskToken; @@ -9315,7 +9389,7 @@ var ts; return addJSDocComment(finishNode(method)); } function parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken) { - var property = createNode(144, fullStart); + var property = createNode(145, fullStart); property.decorators = decorators; setModifiers(property, modifiers); property.name = name; @@ -9356,7 +9430,7 @@ var ts; case 110: case 111: case 113: - case 127: + case 128: return true; default: return false; @@ -9385,7 +9459,7 @@ var ts; return true; } if (idToken !== undefined) { - if (!ts.isKeyword(idToken) || idToken === 130 || idToken === 123) { + if (!ts.isKeyword(idToken) || idToken === 131 || idToken === 123) { return true; } switch (token) { @@ -9412,7 +9486,7 @@ var ts; decorators = []; decorators.pos = decoratorStart; } - var decorator = createNode(142, decoratorStart); + var decorator = createNode(143, decoratorStart); decorator.expression = doInDecoratorContext(parseLeftHandSideExpressionOrHigher); decorators.push(finishNode(decorator)); } @@ -9468,7 +9542,7 @@ var ts; } function parseClassElement() { if (token === 23) { - var result = createNode(197); + var result = createNode(198); nextToken(); return finishNode(result); } @@ -9499,10 +9573,10 @@ var ts; ts.Debug.fail("Should not have attempted to parse class member declaration."); } function parseClassExpression() { - return parseClassDeclarationOrExpression(scanner.getStartPos(), undefined, undefined, 191); + return parseClassDeclarationOrExpression(scanner.getStartPos(), undefined, undefined, 192); } function parseClassDeclaration(fullStart, decorators, modifiers) { - return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 220); + return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 221); } function parseClassDeclarationOrExpression(fullStart, decorators, modifiers, kind) { var node = createNode(kind, fullStart); @@ -9537,7 +9611,7 @@ var ts; } function parseHeritageClause() { if (token === 83 || token === 106) { - var node = createNode(250); + var node = createNode(251); node.token = token; nextToken(); node.types = parseDelimitedList(7, parseExpressionWithTypeArguments); @@ -9546,7 +9620,7 @@ var ts; return undefined; } function parseExpressionWithTypeArguments() { - var node = createNode(193); + var node = createNode(194); node.expression = parseLeftHandSideExpressionOrHigher(); if (token === 25) { node.typeArguments = parseBracketedList(18, parseType, 25, 27); @@ -9560,7 +9634,7 @@ var ts; return parseList(5, parseClassElement); } function parseInterfaceDeclaration(fullStart, decorators, modifiers) { - var node = createNode(221, fullStart); + var node = createNode(222, fullStart); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(107); @@ -9571,10 +9645,10 @@ var ts; return finishNode(node); } function parseTypeAliasDeclaration(fullStart, decorators, modifiers) { - var node = createNode(222, fullStart); + var node = createNode(223, fullStart); node.decorators = decorators; setModifiers(node, modifiers); - parseExpected(133); + parseExpected(134); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); parseExpected(56); @@ -9583,13 +9657,13 @@ var ts; return finishNode(node); } function parseEnumMember() { - var node = createNode(254, scanner.getStartPos()); + var node = createNode(255, scanner.getStartPos()); node.name = parsePropertyName(); node.initializer = allowInAnd(parseNonParameterInitializer); return finishNode(node); } function parseEnumDeclaration(fullStart, decorators, modifiers) { - var node = createNode(223, fullStart); + var node = createNode(224, fullStart); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(81); @@ -9604,7 +9678,7 @@ var ts; return finishNode(node); } function parseModuleBlock() { - var node = createNode(225, scanner.getStartPos()); + var node = createNode(226, scanner.getStartPos()); if (parseExpected(15)) { node.statements = parseList(1, parseStatement); parseExpected(16); @@ -9615,7 +9689,7 @@ var ts; return finishNode(node); } function parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags) { - var node = createNode(224, fullStart); + var node = createNode(225, fullStart); var namespaceFlag = flags & 4096; node.decorators = decorators; setModifiers(node, modifiers); @@ -9627,10 +9701,10 @@ var ts; return finishNode(node); } function parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers) { - var node = createNode(224, fullStart); + var node = createNode(225, fullStart); node.decorators = decorators; setModifiers(node, modifiers); - if (token === 136) { + if (token === 137) { node.name = parseIdentifier(); node.flags |= 131072; } @@ -9642,7 +9716,7 @@ var ts; } function parseModuleDeclaration(fullStart, decorators, modifiers) { var flags = modifiers ? modifiers.flags : 0; - if (token === 136) { + if (token === 137) { return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers); } else if (parseOptional(126)) { @@ -9657,7 +9731,7 @@ var ts; return parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags); } function isExternalModuleReference() { - return token === 128 && + return token === 129 && lookAhead(nextTokenIsOpenParen); } function nextTokenIsOpenParen() { @@ -9667,7 +9741,7 @@ var ts; return nextToken() === 39; } function parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers) { - var exportDeclaration = createNode(227, fullStart); + var exportDeclaration = createNode(228, fullStart); exportDeclaration.decorators = decorators; exportDeclaration.modifiers = modifiers; parseExpected(116); @@ -9682,8 +9756,8 @@ var ts; var identifier; if (isIdentifier()) { identifier = parseIdentifier(); - if (token !== 24 && token !== 135) { - var importEqualsDeclaration = createNode(228, fullStart); + if (token !== 24 && token !== 136) { + var importEqualsDeclaration = createNode(229, fullStart); importEqualsDeclaration.decorators = decorators; setModifiers(importEqualsDeclaration, modifiers); importEqualsDeclaration.name = identifier; @@ -9693,27 +9767,27 @@ var ts; return finishNode(importEqualsDeclaration); } } - var importDeclaration = createNode(229, fullStart); + var importDeclaration = createNode(230, fullStart); importDeclaration.decorators = decorators; setModifiers(importDeclaration, modifiers); if (identifier || token === 37 || token === 15) { importDeclaration.importClause = parseImportClause(identifier, afterImportPos); - parseExpected(135); + parseExpected(136); } importDeclaration.moduleSpecifier = parseModuleSpecifier(); parseSemicolon(); return finishNode(importDeclaration); } function parseImportClause(identifier, fullStart) { - var importClause = createNode(230, fullStart); + var importClause = createNode(231, fullStart); if (identifier) { importClause.name = identifier; } if (!importClause.name || parseOptional(24)) { - importClause.namedBindings = token === 37 ? parseNamespaceImport() : parseNamedImportsOrExports(232); + importClause.namedBindings = token === 37 ? parseNamespaceImport() : parseNamedImportsOrExports(233); } return finishNode(importClause); } @@ -9723,8 +9797,8 @@ var ts; : parseEntityName(false); } function parseExternalModuleReference() { - var node = createNode(239); - parseExpected(128); + var node = createNode(240); + parseExpected(129); parseExpected(17); node.expression = parseModuleSpecifier(); parseExpected(18); @@ -9741,7 +9815,7 @@ var ts; } } function parseNamespaceImport() { - var namespaceImport = createNode(231); + var namespaceImport = createNode(232); parseExpected(37); parseExpected(116); namespaceImport.name = parseIdentifier(); @@ -9749,14 +9823,14 @@ var ts; } function parseNamedImportsOrExports(kind) { var node = createNode(kind); - node.elements = parseBracketedList(21, kind === 232 ? parseImportSpecifier : parseExportSpecifier, 15, 16); + node.elements = parseBracketedList(21, kind === 233 ? parseImportSpecifier : parseExportSpecifier, 15, 16); return finishNode(node); } function parseExportSpecifier() { - return parseImportOrExportSpecifier(237); + return parseImportOrExportSpecifier(238); } function parseImportSpecifier() { - return parseImportOrExportSpecifier(233); + return parseImportOrExportSpecifier(234); } function parseImportOrExportSpecifier(kind) { var node = createNode(kind); @@ -9775,23 +9849,23 @@ var ts; else { node.name = identifierName; } - if (kind === 233 && checkIdentifierIsKeyword) { + if (kind === 234 && checkIdentifierIsKeyword) { parseErrorAtPosition(checkIdentifierStart, checkIdentifierEnd - checkIdentifierStart, ts.Diagnostics.Identifier_expected); } return finishNode(node); } function parseExportDeclaration(fullStart, decorators, modifiers) { - var node = createNode(235, fullStart); + var node = createNode(236, fullStart); node.decorators = decorators; setModifiers(node, modifiers); if (parseOptional(37)) { - parseExpected(135); + parseExpected(136); node.moduleSpecifier = parseModuleSpecifier(); } else { - node.exportClause = parseNamedImportsOrExports(236); - if (token === 135 || (token === 9 && !scanner.hasPrecedingLineBreak())) { - parseExpected(135); + node.exportClause = parseNamedImportsOrExports(237); + if (token === 136 || (token === 9 && !scanner.hasPrecedingLineBreak())) { + parseExpected(136); node.moduleSpecifier = parseModuleSpecifier(); } } @@ -9799,7 +9873,7 @@ var ts; return finishNode(node); } function parseExportAssignment(fullStart, decorators, modifiers) { - var node = createNode(234, fullStart); + var node = createNode(235, fullStart); node.decorators = decorators; setModifiers(node, modifiers); if (parseOptional(56)) { @@ -9878,10 +9952,10 @@ var ts; function setExternalModuleIndicator(sourceFile) { sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, function (node) { return node.flags & 1 - || node.kind === 228 && node.moduleReference.kind === 239 - || node.kind === 229 - || node.kind === 234 + || node.kind === 229 && node.moduleReference.kind === 240 + || node.kind === 230 || node.kind === 235 + || node.kind === 236 ? node : undefined; }); @@ -9916,7 +9990,7 @@ var ts; } JSDocParser.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests; function parseJSDocTypeExpression() { - var result = createNode(256, scanner.getTokenPos()); + var result = createNode(257, scanner.getTokenPos()); parseExpected(15); result.type = parseJSDocTopLevelType(); parseExpected(16); @@ -9927,12 +10001,12 @@ var ts; function parseJSDocTopLevelType() { var type = parseJSDocType(); if (token === 47) { - var unionType = createNode(260, type.pos); + var unionType = createNode(261, type.pos); unionType.types = parseJSDocTypeList(type); type = finishNode(unionType); } if (token === 56) { - var optionalType = createNode(267, type.pos); + var optionalType = createNode(268, type.pos); nextToken(); optionalType.type = type; type = finishNode(optionalType); @@ -9943,20 +10017,20 @@ var ts; var type = parseBasicTypeExpression(); while (true) { if (token === 19) { - var arrayType = createNode(259, type.pos); + var arrayType = createNode(260, type.pos); arrayType.elementType = type; nextToken(); parseExpected(20); type = finishNode(arrayType); } else if (token === 53) { - var nullableType = createNode(262, type.pos); + var nullableType = createNode(263, type.pos); nullableType.type = type; nextToken(); type = finishNode(nullableType); } else if (token === 49) { - var nonNullableType = createNode(263, type.pos); + var nonNullableType = createNode(264, type.pos); nonNullableType.type = type; nextToken(); type = finishNode(nonNullableType); @@ -9990,37 +10064,37 @@ var ts; case 97: return parseJSDocThisType(); case 117: - case 131: - case 129: - case 120: case 132: + case 130: + case 120: + case 133: case 103: return parseTokenNode(); } return parseJSDocTypeReference(); } function parseJSDocThisType() { - var result = createNode(271); + var result = createNode(272); nextToken(); parseExpected(54); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocConstructorType() { - var result = createNode(270); + var result = createNode(271); nextToken(); parseExpected(54); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocVariadicType() { - var result = createNode(269); + var result = createNode(270); nextToken(); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocFunctionType() { - var result = createNode(268); + var result = createNode(269); nextToken(); parseExpected(17); result.parameters = parseDelimitedList(22, parseJSDocParameter); @@ -10033,7 +10107,7 @@ var ts; return finishNode(result); } function parseJSDocParameter() { - var parameter = createNode(141); + var parameter = createNode(142); parameter.type = parseJSDocType(); if (parseOptional(56)) { parameter.questionToken = createNode(56); @@ -10041,7 +10115,7 @@ var ts; return finishNode(parameter); } function parseJSDocTypeReference() { - var result = createNode(266); + var result = createNode(267); result.name = parseSimplePropertyName(); if (token === 25) { result.typeArguments = parseTypeArguments(); @@ -10075,13 +10149,13 @@ var ts; } } function parseQualifiedName(left) { - var result = createNode(138, left.pos); + var result = createNode(139, left.pos); result.left = left; result.right = parseIdentifierName(); return finishNode(result); } function parseJSDocRecordType() { - var result = createNode(264); + var result = createNode(265); nextToken(); result.members = parseDelimitedList(24, parseJSDocRecordMember); checkForTrailingComma(result.members); @@ -10089,7 +10163,7 @@ var ts; return finishNode(result); } function parseJSDocRecordMember() { - var result = createNode(265); + var result = createNode(266); result.name = parseSimplePropertyName(); if (token === 54) { nextToken(); @@ -10098,13 +10172,13 @@ var ts; return finishNode(result); } function parseJSDocNonNullableType() { - var result = createNode(263); + var result = createNode(264); nextToken(); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocTupleType() { - var result = createNode(261); + var result = createNode(262); nextToken(); result.types = parseDelimitedList(25, parseJSDocType); checkForTrailingComma(result.types); @@ -10118,7 +10192,7 @@ var ts; } } function parseJSDocUnionType() { - var result = createNode(260); + var result = createNode(261); nextToken(); result.types = parseJSDocTypeList(parseJSDocType()); parseExpected(18); @@ -10136,7 +10210,7 @@ var ts; return types; } function parseJSDocAllType() { - var result = createNode(257); + var result = createNode(258); nextToken(); return finishNode(result); } @@ -10149,11 +10223,11 @@ var ts; token === 27 || token === 56 || token === 47) { - var result = createNode(258, pos); + var result = createNode(259, pos); return finishNode(result); } else { - var result = createNode(262, pos); + var result = createNode(263, pos); result.type = parseJSDocType(); return finishNode(result); } @@ -10233,7 +10307,7 @@ var ts; if (!tags) { return undefined; } - var result = createNode(272, start); + var result = createNode(273, start); result.tags = tags; return finishNode(result, end); } @@ -10247,7 +10321,7 @@ var ts; var atToken = createNode(55, scanner.getTokenPos()); atToken.end = scanner.getTextPos(); nextJSDocToken(); - var tagName = parseJSDocIdentifier(); + var tagName = parseJSDocIdentifierName(); if (!tagName) { return; } @@ -10271,7 +10345,7 @@ var ts; return undefined; } function handleUnknownTag(atToken, tagName) { - var result = createNode(273, atToken.pos); + var result = createNode(274, atToken.pos); result.atToken = atToken; result.tagName = tagName; return finishNode(result); @@ -10299,15 +10373,15 @@ var ts; var name; var isBracketed; if (parseOptionalToken(19)) { - name = parseJSDocIdentifier(); + name = parseJSDocIdentifierName(); isBracketed = true; if (parseOptionalToken(56)) { parseExpression(); } parseExpected(20); } - else if (token === 69) { - name = parseJSDocIdentifier(); + else if (ts.tokenIsIdentifierOrKeyword(token)) { + name = parseJSDocIdentifierName(); } if (!name) { parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); @@ -10323,7 +10397,7 @@ var ts; if (!typeExpression) { typeExpression = tryParseTypeExpression(); } - var result = createNode(274, atToken.pos); + var result = createNode(275, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.preParameterName = preName; @@ -10333,16 +10407,6 @@ var ts; return finishNode(result); } function handleReturnTag(atToken, tagName) { - if (ts.forEach(tags, function (t) { return t.kind === 275; })) { - parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); - } - var result = createNode(275, atToken.pos); - result.atToken = atToken; - result.tagName = tagName; - result.typeExpression = tryParseTypeExpression(); - return finishNode(result); - } - function handleTypeTag(atToken, tagName) { if (ts.forEach(tags, function (t) { return t.kind === 276; })) { parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); } @@ -10352,19 +10416,29 @@ var ts; result.typeExpression = tryParseTypeExpression(); return finishNode(result); } - function handleTemplateTag(atToken, tagName) { + function handleTypeTag(atToken, tagName) { if (ts.forEach(tags, function (t) { return t.kind === 277; })) { parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); } + var result = createNode(277, atToken.pos); + result.atToken = atToken; + result.tagName = tagName; + result.typeExpression = tryParseTypeExpression(); + return finishNode(result); + } + function handleTemplateTag(atToken, tagName) { + if (ts.forEach(tags, function (t) { return t.kind === 278; })) { + parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); + } var typeParameters = []; typeParameters.pos = scanner.getStartPos(); while (true) { - var name_8 = parseJSDocIdentifier(); + var name_8 = parseJSDocIdentifierName(); if (!name_8) { parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); return undefined; } - var typeParameter = createNode(140, name_8.pos); + var typeParameter = createNode(141, name_8.pos); typeParameter.name = name_8; finishNode(typeParameter); typeParameters.push(typeParameter); @@ -10375,7 +10449,7 @@ var ts; break; } } - var result = createNode(277, atToken.pos); + var result = createNode(278, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.typeParameters = typeParameters; @@ -10386,8 +10460,11 @@ var ts; function nextJSDocToken() { return token = scanner.scanJSDocToken(); } - function parseJSDocIdentifier() { - if (token !== 69) { + function parseJSDocIdentifierName() { + return createJSDocIdentifier(ts.tokenIsIdentifierOrKeyword(token)); + } + function createJSDocIdentifier(isIdentifier) { + if (!isIdentifier) { parseErrorAtCurrentToken(ts.Diagnostics.Identifier_expected); return undefined; } @@ -10688,24 +10765,17 @@ var ts; var ts; (function (ts) { ts.bindTime = 0; - function or(state1, state2) { - return (state1 | state2) & 2 - ? 2 - : (state1 & state2) & 8 - ? 8 - : 4; - } function getModuleInstanceState(node) { - if (node.kind === 221 || node.kind === 222) { + if (node.kind === 222 || node.kind === 223) { return 0; } else if (ts.isConstEnumDeclaration(node)) { return 2; } - else if ((node.kind === 229 || node.kind === 228) && !(node.flags & 1)) { + else if ((node.kind === 230 || node.kind === 229) && !(node.flags & 1)) { return 0; } - else if (node.kind === 225) { + else if (node.kind === 226) { var state_1 = 0; ts.forEachChild(node, function (n) { switch (getModuleInstanceState(n)) { @@ -10721,7 +10791,7 @@ var ts; }); return state_1; } - else if (node.kind === 224) { + else if (node.kind === 225) { return getModuleInstanceState(node.body); } else { @@ -10739,16 +10809,20 @@ var ts; function createBinder() { var file; var options; + var languageVersion; var parent; var container; var blockScopeContainer; var lastContainer; var seenThisKeyword; var hasExplicitReturn; - var currentReachabilityState; - var labelStack; - var labelIndexMap; - var implicitLabels; + var currentFlow; + var currentBreakTarget; + var currentContinueTarget; + var currentTrueTarget; + var currentFalseTarget; + var preSwitchCaseFlow; + var activeLabels; var hasClassExtends; var hasAsyncFunctions; var hasDecorators; @@ -10758,11 +10832,15 @@ var ts; var symbolCount = 0; var Symbol; var classifiableNames; + var unreachableFlow = { flags: 1 }; + var reportedUnreachableFlow = { flags: 1 }; function bindSourceFile(f, opts) { file = f; options = opts; + languageVersion = ts.getEmitScriptTarget(options); inStrictMode = !!file.externalModuleIndicator; classifiableNames = {}; + symbolCount = 0; Symbol = ts.objectAllocator.getSymbolConstructor(); if (!file.locals) { bind(file); @@ -10771,15 +10849,19 @@ var ts; } file = undefined; options = undefined; + languageVersion = undefined; parent = undefined; container = undefined; blockScopeContainer = undefined; lastContainer = undefined; seenThisKeyword = false; hasExplicitReturn = false; - labelStack = undefined; - labelIndexMap = undefined; - implicitLabels = undefined; + currentFlow = undefined; + currentBreakTarget = undefined; + currentContinueTarget = undefined; + currentTrueTarget = undefined; + currentFalseTarget = undefined; + activeLabels = undefined; hasClassExtends = false; hasAsyncFunctions = false; hasDecorators = false; @@ -10807,7 +10889,7 @@ var ts; if (symbolFlags & 107455) { var valueDeclaration = symbol.valueDeclaration; if (!valueDeclaration || - (valueDeclaration.kind !== node.kind && valueDeclaration.kind === 224)) { + (valueDeclaration.kind !== node.kind && valueDeclaration.kind === 225)) { symbol.valueDeclaration = node; } } @@ -10817,7 +10899,7 @@ var ts; if (ts.isAmbientModule(node)) { return ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + node.name.text + "\""; } - if (node.name.kind === 139) { + if (node.name.kind === 140) { var nameExpression = node.name.expression; if (ts.isStringOrNumericLiteral(nameExpression.kind)) { return nameExpression.text; @@ -10828,21 +10910,21 @@ var ts; return node.name.text; } switch (node.kind) { - case 147: + case 148: return "__constructor"; - case 155: - case 150: - return "__call"; case 156: case 151: - return "__new"; + return "__call"; + case 157: case 152: + return "__new"; + case 153: return "__index"; - case 235: + case 236: return "__export"; - case 234: + case 235: return node.isExportEquals ? "export=" : "default"; - case 186: + case 187: switch (ts.getSpecialPropertyAssignmentKind(node)) { case 2: return "export="; @@ -10854,13 +10936,13 @@ var ts; } ts.Debug.fail("Unknown binary declaration kind"); break; - case 219: case 220: + case 221: return node.flags & 512 ? "default" : undefined; - case 268: + case 269: return ts.isJSDocConstructSignature(node) ? "__new" : "__call"; - case 141: - ts.Debug.assert(node.parent.kind === 268); + case 142: + ts.Debug.assert(node.parent.kind === 269); var functionType = node.parent; var index = ts.indexOf(functionType.parameters, node); return "p" + index; @@ -10910,7 +10992,7 @@ var ts; function declareModuleMember(node, symbolFlags, symbolExcludes) { var hasExportModifier = ts.getCombinedNodeFlags(node) & 1; if (symbolFlags & 8388608) { - if (node.kind === 237 || (node.kind === 228 && hasExportModifier)) { + if (node.kind === 238 || (node.kind === 229 && hasExportModifier)) { return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); } else { @@ -10949,43 +11031,45 @@ var ts; blockScopeContainer = node; blockScopeContainer.locals = undefined; } - var savedReachabilityState; - var savedLabelStack; - var savedLabels; - var savedImplicitLabels; var savedHasExplicitReturn; + var savedCurrentFlow; + var savedBreakTarget; + var savedContinueTarget; + var savedActiveLabels; var kind = node.kind; var flags = node.flags; flags &= ~98304; flags &= ~3932160; - if (kind === 221) { + if (kind === 222) { seenThisKeyword = false; } - var saveState = kind === 255 || kind === 225 || ts.isFunctionLikeKind(kind); + var saveState = kind === 256 || kind === 226 || ts.isFunctionLikeKind(kind); if (saveState) { - savedReachabilityState = currentReachabilityState; - savedLabelStack = labelStack; - savedLabels = labelIndexMap; - savedImplicitLabels = implicitLabels; savedHasExplicitReturn = hasExplicitReturn; - currentReachabilityState = 2; + savedCurrentFlow = currentFlow; + savedBreakTarget = currentBreakTarget; + savedContinueTarget = currentContinueTarget; + savedActiveLabels = activeLabels; hasExplicitReturn = false; - labelStack = labelIndexMap = implicitLabels = undefined; + currentFlow = { flags: 2 }; + currentBreakTarget = undefined; + currentContinueTarget = undefined; + activeLabels = undefined; } if (ts.isInJavaScriptFile(node) && node.jsDocComment) { bind(node.jsDocComment); } bindReachableStatement(node); - if (currentReachabilityState === 2 && ts.isFunctionLikeKind(kind) && ts.nodeIsPresent(node.body)) { + if (!(currentFlow.flags & 1) && ts.isFunctionLikeKind(kind) && ts.nodeIsPresent(node.body)) { flags |= 32768; if (hasExplicitReturn) { flags |= 65536; } } - if (kind === 221) { + if (kind === 222) { flags = seenThisKeyword ? flags | 16384 : flags & ~16384; } - if (kind === 255) { + if (kind === 256) { if (hasClassExtends) { flags |= 262144; } @@ -11005,10 +11089,10 @@ var ts; node.flags = flags; if (saveState) { hasExplicitReturn = savedHasExplicitReturn; - currentReachabilityState = savedReachabilityState; - labelStack = savedLabelStack; - labelIndexMap = savedLabels; - implicitLabels = savedImplicitLabels; + currentFlow = savedCurrentFlow; + currentBreakTarget = savedBreakTarget; + currentContinueTarget = savedContinueTarget; + activeLabels = savedActiveLabels; } container = saveContainer; parent = saveParent; @@ -11020,190 +11104,562 @@ var ts; return; } switch (node.kind) { - case 204: + case 205: bindWhileStatement(node); break; - case 203: + case 204: bindDoStatement(node); break; - case 205: + case 206: bindForStatement(node); break; - case 206: case 207: + case 208: bindForInOrForOfStatement(node); break; - case 202: + case 203: bindIfStatement(node); break; - case 210: - case 214: + case 211: + case 215: bindReturnOrThrow(node); break; + case 210: case 209: - case 208: bindBreakOrContinueStatement(node); break; - case 215: + case 216: bindTryStatement(node); break; - case 212: + case 213: bindSwitchStatement(node); break; - case 226: + case 227: bindCaseBlock(node); break; - case 213: + case 214: bindLabeledStatement(node); break; + case 185: + bindPrefixUnaryExpressionFlow(node); + break; + case 187: + bindBinaryExpressionFlow(node); + break; + case 181: + bindDeleteExpressionFlow(node); + break; + case 188: + bindConditionalExpressionFlow(node); + break; + case 218: + bindVariableDeclarationFlow(node); + break; default: ts.forEachChild(node, bind); break; } } - function bindWhileStatement(n) { - var preWhileState = n.expression.kind === 84 ? 4 : currentReachabilityState; - var postWhileState = n.expression.kind === 99 ? 4 : currentReachabilityState; - bind(n.expression); - currentReachabilityState = preWhileState; - var postWhileLabel = pushImplicitLabel(); - bind(n.statement); - popImplicitLabel(postWhileLabel, postWhileState); + function isNarrowableReference(expr) { + return expr.kind === 69 || + expr.kind === 97 || + expr.kind === 172 && isNarrowableReference(expr.expression); } - function bindDoStatement(n) { - var preDoState = currentReachabilityState; - var postDoLabel = pushImplicitLabel(); - bind(n.statement); - var postDoState = n.expression.kind === 99 ? 4 : preDoState; - popImplicitLabel(postDoLabel, postDoState); - bind(n.expression); - } - function bindForStatement(n) { - var preForState = currentReachabilityState; - var postForLabel = pushImplicitLabel(); - bind(n.initializer); - bind(n.condition); - bind(n.incrementor); - bind(n.statement); - var isInfiniteLoop = (!n.condition || n.condition.kind === 99); - var postForState = isInfiniteLoop ? 4 : preForState; - popImplicitLabel(postForLabel, postForState); - } - function bindForInOrForOfStatement(n) { - var preStatementState = currentReachabilityState; - var postStatementLabel = pushImplicitLabel(); - bind(n.initializer); - bind(n.expression); - bind(n.statement); - popImplicitLabel(postStatementLabel, preStatementState); - } - function bindIfStatement(n) { - var ifTrueState = n.expression.kind === 84 ? 4 : currentReachabilityState; - var ifFalseState = n.expression.kind === 99 ? 4 : currentReachabilityState; - currentReachabilityState = ifTrueState; - bind(n.expression); - bind(n.thenStatement); - if (n.elseStatement) { - var preElseState = currentReachabilityState; - currentReachabilityState = ifFalseState; - bind(n.elseStatement); - currentReachabilityState = or(currentReachabilityState, preElseState); + function isNarrowingExpression(expr) { + switch (expr.kind) { + case 69: + case 97: + case 172: + return isNarrowableReference(expr); + case 174: + return true; + case 178: + return isNarrowingExpression(expr.expression); + case 187: + return isNarrowingBinaryExpression(expr); + case 185: + return expr.operator === 49 && isNarrowingExpression(expr.operand); } - else { - currentReachabilityState = or(currentReachabilityState, ifFalseState); + return false; + } + function isNarrowingBinaryExpression(expr) { + switch (expr.operatorToken.kind) { + case 56: + return isNarrowableReference(expr.left); + case 30: + case 31: + case 32: + case 33: + if (isNarrowingExpression(expr.left) && (expr.right.kind === 93 || expr.right.kind === 69)) { + return true; + } + if (expr.left.kind === 182 && isNarrowingExpression(expr.left.expression) && expr.right.kind === 9) { + return true; + } + return false; + case 91: + return isNarrowingExpression(expr.left); + case 24: + return isNarrowingExpression(expr.right); + } + return false; + } + function createBranchLabel() { + return { + flags: 4, + antecedents: undefined + }; + } + function createLoopLabel() { + return { + flags: 8, + antecedents: undefined + }; + } + function setFlowNodeReferenced(flow) { + flow.flags |= flow.flags & 128 ? 256 : 128; + } + function addAntecedent(label, antecedent) { + if (!(antecedent.flags & 1) && !ts.contains(label.antecedents, antecedent)) { + (label.antecedents || (label.antecedents = [])).push(antecedent); + setFlowNodeReferenced(antecedent); } } - function bindReturnOrThrow(n) { - bind(n.expression); - if (n.kind === 210) { - hasExplicitReturn = true; + function createFlowCondition(flags, antecedent, expression) { + if (antecedent.flags & 1) { + return antecedent; } - currentReachabilityState = 4; - } - function bindBreakOrContinueStatement(n) { - bind(n.label); - var isValidJump = jumpToLabel(n.label, n.kind === 209 ? currentReachabilityState : 4); - if (isValidJump) { - currentReachabilityState = 4; + if (!expression) { + return flags & 32 ? antecedent : unreachableFlow; } + if (expression.kind === 99 && flags & 64 || + expression.kind === 84 && flags & 32) { + return unreachableFlow; + } + if (!isNarrowingExpression(expression)) { + return antecedent; + } + setFlowNodeReferenced(antecedent); + return { + flags: flags, + antecedent: antecedent, + expression: expression + }; } - function bindTryStatement(n) { - var preTryState = currentReachabilityState; - bind(n.tryBlock); - var postTryState = currentReachabilityState; - currentReachabilityState = preTryState; - bind(n.catchClause); - var postCatchState = currentReachabilityState; - currentReachabilityState = preTryState; - bind(n.finallyBlock); - currentReachabilityState = n.catchClause ? or(postTryState, postCatchState) : postTryState; + function createFlowAssignment(antecedent, node) { + setFlowNodeReferenced(antecedent); + return { + flags: 16, + antecedent: antecedent, + node: node + }; } - function bindSwitchStatement(n) { - var preSwitchState = currentReachabilityState; - var postSwitchLabel = pushImplicitLabel(); - bind(n.expression); - bind(n.caseBlock); - var hasDefault = ts.forEach(n.caseBlock.clauses, function (c) { return c.kind === 249; }); - var postSwitchState = hasDefault && currentReachabilityState !== 2 ? 4 : preSwitchState; - popImplicitLabel(postSwitchLabel, postSwitchState); + function finishFlowLabel(flow) { + var antecedents = flow.antecedents; + if (!antecedents) { + return unreachableFlow; + } + if (antecedents.length === 1) { + return antecedents[0]; + } + return flow; } - function bindCaseBlock(n) { - var startState = currentReachabilityState; - for (var i = 0; i < n.clauses.length; i++) { - var clause = n.clauses[i]; - currentReachabilityState = startState; - bind(clause); - if (clause.statements.length && - i !== n.clauses.length - 1 && - currentReachabilityState === 2 && - options.noFallthroughCasesInSwitch) { - errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); + function isStatementCondition(node) { + var parent = node.parent; + switch (parent.kind) { + case 203: + case 205: + case 204: + return parent.expression === node; + case 206: + case 188: + return parent.condition === node; + } + return false; + } + function isLogicalExpression(node) { + while (true) { + if (node.kind === 178) { + node = node.expression; + } + else if (node.kind === 185 && node.operator === 49) { + node = node.operand; + } + else { + return node.kind === 187 && (node.operatorToken.kind === 51 || + node.operatorToken.kind === 52); } } } - function bindLabeledStatement(n) { - bind(n.label); - var ok = pushNamedLabel(n.label); - bind(n.statement); - if (ok) { - popNamedLabel(n.label, currentReachabilityState); + function isTopLevelLogicalExpression(node) { + while (node.parent.kind === 178 || + node.parent.kind === 185 && + node.parent.operator === 49) { + node = node.parent; + } + return !isStatementCondition(node) && !isLogicalExpression(node.parent); + } + function bindCondition(node, trueTarget, falseTarget) { + var saveTrueTarget = currentTrueTarget; + var saveFalseTarget = currentFalseTarget; + currentTrueTarget = trueTarget; + currentFalseTarget = falseTarget; + bind(node); + currentTrueTarget = saveTrueTarget; + currentFalseTarget = saveFalseTarget; + if (!node || !isLogicalExpression(node)) { + addAntecedent(trueTarget, createFlowCondition(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 preConditionLabel = createBranchLabel(); + var postDoLabel = createBranchLabel(); + addAntecedent(preDoLabel, currentFlow); + currentFlow = preDoLabel; + bindIterativeStatement(node.statement, postDoLabel, preConditionLabel); + addAntecedent(preConditionLabel, currentFlow); + currentFlow = finishFlowLabel(preConditionLabel); + bindCondition(node.expression, preDoLabel, postDoLabel); + currentFlow = finishFlowLabel(postDoLabel); + } + function bindForStatement(node) { + var preLoopLabel = 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; + bind(node.expression); + addAntecedent(postLoopLabel, currentFlow); + bind(node.initializer); + if (node.initializer.kind !== 219) { + 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 === 211) { + hasExplicitReturn = true; + } + currentFlow = unreachableFlow; + } + function findActiveLabel(name) { + if (activeLabels) { + for (var _i = 0, activeLabels_1 = activeLabels; _i < activeLabels_1.length; _i++) { + var label = activeLabels_1[_i]; + if (label.name === name) { + return label; + } + } + } + return undefined; + } + function bindbreakOrContinueFlow(node, breakTarget, continueTarget) { + var flowLabel = node.kind === 210 ? breakTarget : continueTarget; + if (flowLabel) { + addAntecedent(flowLabel, currentFlow); + currentFlow = unreachableFlow; + } + } + function bindBreakOrContinueStatement(node) { + bind(node.label); + if (node.label) { + var activeLabel = findActiveLabel(node.label.text); + if (activeLabel) { + activeLabel.referenced = true; + bindbreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget); + } + } + else { + bindbreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget); + } + } + function bindTryStatement(node) { + var postFinallyLabel = createBranchLabel(); + var preTryFlow = currentFlow; + bind(node.tryBlock); + addAntecedent(postFinallyLabel, currentFlow); + if (node.catchClause) { + currentFlow = preTryFlow; + bind(node.catchClause); + addAntecedent(postFinallyLabel, currentFlow); + } + if (node.finallyBlock) { + currentFlow = preTryFlow; + bind(node.finallyBlock); + } + currentFlow = finishFlowLabel(postFinallyLabel); + } + function bindSwitchStatement(node) { + var postSwitchLabel = 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 === 250; }); + if (!hasDefault) { + addAntecedent(postSwitchLabel, preSwitchCaseFlow); + } + currentBreakTarget = saveBreakTarget; + preSwitchCaseFlow = savePreSwitchCaseFlow; + currentFlow = finishFlowLabel(postSwitchLabel); + } + function bindCaseBlock(node) { + var clauses = node.clauses; + for (var i = 0; i < clauses.length; i++) { + var clause = clauses[i]; + if (clause.statements.length) { + if (currentFlow.flags & 1) { + currentFlow = preSwitchCaseFlow; + } + else { + var preCaseLabel = createBranchLabel(); + addAntecedent(preCaseLabel, preSwitchCaseFlow); + addAntecedent(preCaseLabel, currentFlow); + currentFlow = finishFlowLabel(preCaseLabel); + } + bind(clause); + if (!(currentFlow.flags & 1) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); + } + } + else { + bind(clause); + } + } + } + function pushActiveLabel(name, breakTarget, continueTarget) { + var activeLabel = { + name: name, + breakTarget: breakTarget, + continueTarget: continueTarget, + referenced: false + }; + (activeLabels || (activeLabels = [])).push(activeLabel); + return activeLabel; + } + function popActiveLabel() { + activeLabels.pop(); + } + function bindLabeledStatement(node) { + var preStatementLabel = createLoopLabel(); + var postStatementLabel = createBranchLabel(); + bind(node.label); + addAntecedent(preStatementLabel, currentFlow); + var activeLabel = pushActiveLabel(node.label.text, postStatementLabel, preStatementLabel); + bind(node.statement); + popActiveLabel(); + if (!activeLabel.referenced && !options.allowUnusedLabels) { + file.bindDiagnostics.push(ts.createDiagnosticForNode(node.label, ts.Diagnostics.Unused_label)); + } + addAntecedent(postStatementLabel, currentFlow); + currentFlow = finishFlowLabel(postStatementLabel); + } + function bindDestructuringTargetFlow(node) { + if (node.kind === 187 && node.operatorToken.kind === 56) { + bindAssignmentTargetFlow(node.left); + } + else { + bindAssignmentTargetFlow(node); + } + } + function bindAssignmentTargetFlow(node) { + if (isNarrowableReference(node)) { + currentFlow = createFlowAssignment(currentFlow, node); + } + else if (node.kind === 170) { + for (var _i = 0, _a = node.elements; _i < _a.length; _i++) { + var e = _a[_i]; + if (e.kind === 191) { + bindAssignmentTargetFlow(e.expression); + } + else { + bindDestructuringTargetFlow(e); + } + } + } + else if (node.kind === 171) { + for (var _b = 0, _c = node.properties; _b < _c.length; _b++) { + var p = _c[_b]; + if (p.kind === 253) { + bindDestructuringTargetFlow(p.initializer); + } + else if (p.kind === 254) { + bindAssignmentTargetFlow(p.name); + } + } + } + } + function bindLogicalExpression(node, trueTarget, falseTarget) { + var preRightLabel = createBranchLabel(); + if (node.operatorToken.kind === 51) { + bindCondition(node.left, preRightLabel, falseTarget); + } + else { + bindCondition(node.left, trueTarget, preRightLabel); + } + currentFlow = finishFlowLabel(preRightLabel); + bind(node.operatorToken); + bindCondition(node.right, trueTarget, falseTarget); + } + function bindPrefixUnaryExpressionFlow(node) { + if (node.operator === 49) { + var saveTrueTarget = currentTrueTarget; + currentTrueTarget = currentFalseTarget; + currentFalseTarget = saveTrueTarget; + ts.forEachChild(node, bind); + currentFalseTarget = currentTrueTarget; + currentTrueTarget = saveTrueTarget; + } + else { + ts.forEachChild(node, bind); + } + } + function bindBinaryExpressionFlow(node) { + var operator = node.operatorToken.kind; + if (operator === 51 || operator === 52) { + if (isTopLevelLogicalExpression(node)) { + var postExpressionLabel = createBranchLabel(); + bindLogicalExpression(node, postExpressionLabel, postExpressionLabel); + currentFlow = finishFlowLabel(postExpressionLabel); + } + else { + bindLogicalExpression(node, currentTrueTarget, currentFalseTarget); + } + } + else { + ts.forEachChild(node, bind); + if (operator === 56 && !ts.isAssignmentTarget(node)) { + bindAssignmentTargetFlow(node.left); + } + } + } + function bindDeleteExpressionFlow(node) { + ts.forEachChild(node, bind); + if (node.expression.kind === 172) { + 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.whenTrue); + addAntecedent(postExpressionLabel, currentFlow); + currentFlow = finishFlowLabel(falseLabel); + bind(node.whenFalse); + addAntecedent(postExpressionLabel, currentFlow); + currentFlow = finishFlowLabel(postExpressionLabel); + } + function bindInitializedVariableFlow(node) { + var name = node.name; + if (ts.isBindingPattern(name)) { + for (var _i = 0, _a = name.elements; _i < _a.length; _i++) { + var child = _a[_i]; + bindInitializedVariableFlow(child); + } + } + else { + currentFlow = createFlowAssignment(currentFlow, node); + } + } + function bindVariableDeclarationFlow(node) { + ts.forEachChild(node, bind); + if (node.initializer || node.parent.parent.kind === 207 || node.parent.parent.kind === 208) { + bindInitializedVariableFlow(node); } } function getContainerFlags(node) { switch (node.kind) { - case 191: - case 220: + case 192: case 221: - case 223: - case 170: - case 158: - case 264: + case 222: + case 224: + case 171: + case 159: + case 265: return 1; - case 150: case 151: case 152: - case 146: - case 145: - case 219: + case 153: case 147: + case 146: + case 220: case 148: case 149: - case 155: - case 268: + case 150: case 156: - case 178: + case 269: + case 157: case 179: - case 224: - case 255: - case 222: + case 180: + case 225: + case 256: + case 223: return 5; - case 251: - case 205: + case 252: case 206: case 207: - case 226: + case 208: + case 227: return 2; - case 198: + case 199: return ts.isFunctionLike(node.parent) ? 0 : 2; } return 0; @@ -11219,35 +11675,35 @@ var ts; } function declareSymbolAndAddToSymbolTableWorker(node, symbolFlags, symbolExcludes) { switch (container.kind) { - case 224: + case 225: return declareModuleMember(node, symbolFlags, symbolExcludes); - case 255: + case 256: return declareSourceFileMember(node, symbolFlags, symbolExcludes); - case 191: - case 220: - return declareClassMember(node, symbolFlags, symbolExcludes); - case 223: - return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); - case 158: - case 170: + case 192: case 221: - case 264: + return declareClassMember(node, symbolFlags, symbolExcludes); + case 224: + return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); + case 159: + case 171: + case 222: + case 265: return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes); - case 155: case 156: - case 150: + case 157: case 151: case 152: - case 146: - case 145: + case 153: case 147: + case 146: case 148: case 149: - case 219: - case 178: + case 150: + case 220: case 179: - case 268: - case 222: + case 180: + case 269: + case 223: return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes); } } @@ -11262,11 +11718,11 @@ var ts; : declareSymbol(file.locals, undefined, node, symbolFlags, symbolExcludes); } function hasExportDeclarations(node) { - var body = node.kind === 255 ? node : node.body; - if (body.kind === 255 || body.kind === 225) { + var body = node.kind === 256 ? node : node.body; + if (body.kind === 256 || body.kind === 226) { for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { var stat = _a[_i]; - if (stat.kind === 235 || stat.kind === 234) { + if (stat.kind === 236 || stat.kind === 235) { return true; } } @@ -11333,7 +11789,7 @@ var ts; continue; } var identifier = prop.name; - var currentKind = prop.kind === 252 || prop.kind === 253 || prop.kind === 146 + var currentKind = prop.kind === 253 || prop.kind === 254 || prop.kind === 147 ? 1 : 2; var existingKind = seen[identifier.text]; @@ -11355,10 +11811,10 @@ var ts; } function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) { switch (blockScopeContainer.kind) { - case 224: + case 225: declareModuleMember(node, symbolFlags, symbolExcludes); break; - case 255: + case 256: if (ts.isExternalModule(container)) { declareModuleMember(node, symbolFlags, symbolExcludes); break; @@ -11378,7 +11834,8 @@ var ts; if (inStrictMode && node.originalKeywordKind >= 106 && node.originalKeywordKind <= 114 && - !ts.isIdentifierName(node)) { + !ts.isIdentifierName(node) && + !ts.isInAmbientContext(node)) { if (!file.parseDiagnostics.length) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node))); } @@ -11436,6 +11893,25 @@ var ts; 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 !== 256 && + blockScopeContainer.kind !== 225 && + !ts.isFunctionLike(blockScopeContainer)) { + var errorSpan = ts.getErrorSpanForNode(file, node); + file.bindDiagnostics.push(ts.createFileDiagnostic(file, errorSpan.start, errorSpan.length, getStrictModeBlockScopeFunctionDeclarationMessage(node))); + } + } + } function checkStrictModeNumericLiteral(node) { if (inStrictMode && node.isOctalLiteral) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode)); @@ -11480,17 +11956,17 @@ var ts; } function updateStrictMode(node) { switch (node.kind) { - case 255: - case 225: + case 256: + case 226: updateStrictModeStatementList(node.statements); return; - case 198: + case 199: if (ts.isFunctionLike(node.parent)) { updateStrictModeStatementList(node.statements); } return; - case 220: - case 191: + case 221: + case 192: inStrictMode = true; return; } @@ -11514,8 +11990,17 @@ var ts; function bindWorker(node) { switch (node.kind) { case 69: + case 97: + if (currentFlow && (ts.isExpression(node) || parent.kind === 254)) { + node.flowNode = currentFlow; + } return checkStrictModeIdentifier(node); - case 186: + case 172: + if (currentFlow && isNarrowableReference(node)) { + node.flowNode = currentFlow; + } + break; + case 187: if (ts.isInJavaScriptFile(node)) { var specialKind = ts.getSpecialPropertyAssignmentKind(node); switch (specialKind) { @@ -11538,99 +12023,99 @@ var ts; } } return checkStrictModeBinaryExpression(node); - case 251: + case 252: return checkStrictModeCatchClause(node); - case 180: + case 181: return checkStrictModeDeleteExpression(node); case 8: return checkStrictModeNumericLiteral(node); - case 185: + case 186: return checkStrictModePostfixUnaryExpression(node); - case 184: + case 185: return checkStrictModePrefixUnaryExpression(node); - case 211: + case 212: return checkStrictModeWithStatement(node); - case 164: + case 165: seenThisKeyword = true; return; - case 153: + case 154: return checkTypePredicate(node); - case 140: - return declareSymbolAndAddToSymbolTable(node, 262144, 530912); case 141: + return declareSymbolAndAddToSymbolTable(node, 262144, 530912); + case 142: return bindParameter(node); - case 217: - case 168: + case 218: + case 169: return bindVariableDeclarationOrBindingElement(node); + case 145: case 144: - case 143: - case 265: + case 266: return bindPropertyOrMethodOrAccessor(node, 4 | (node.questionToken ? 536870912 : 0), 107455); - case 252: case 253: - return bindPropertyOrMethodOrAccessor(node, 4, 107455); case 254: + return bindPropertyOrMethodOrAccessor(node, 4, 107455); + case 255: return bindPropertyOrMethodOrAccessor(node, 8, 107455); - case 246: + case 247: hasJsxSpreadAttribute = true; return; - case 150: case 151: case 152: + case 153: return declareSymbolAndAddToSymbolTable(node, 131072, 0); - case 146: - case 145: - return bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 536870912 : 0), ts.isObjectLiteralMethod(node) ? 107455 : 99263); - case 219: - return bindFunctionDeclaration(node); case 147: - return declareSymbolAndAddToSymbolTable(node, 16384, 0); + case 146: + return bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 536870912 : 0), ts.isObjectLiteralMethod(node) ? 107455 : 99263); + case 220: + return bindFunctionDeclaration(node); case 148: - return bindPropertyOrMethodOrAccessor(node, 32768, 41919); + return declareSymbolAndAddToSymbolTable(node, 16384, 0); case 149: + return bindPropertyOrMethodOrAccessor(node, 32768, 41919); + case 150: return bindPropertyOrMethodOrAccessor(node, 65536, 74687); - case 155: case 156: - case 268: + case 157: + case 269: return bindFunctionOrConstructorType(node); - case 158: - case 264: + case 159: + case 265: return bindAnonymousDeclaration(node, 2048, "__type"); - case 170: + case 171: return bindObjectLiteralExpression(node); - case 178: case 179: + case 180: return bindFunctionExpression(node); - case 173: + case 174: if (ts.isInJavaScriptFile(node)) { bindCallExpression(node); } break; - case 191: - case 220: - return bindClassLikeDeclaration(node); + case 192: case 221: - return bindBlockScopedDeclaration(node, 64, 792960); + return bindClassLikeDeclaration(node); case 222: - return bindBlockScopedDeclaration(node, 524288, 793056); + return bindBlockScopedDeclaration(node, 64, 792960); case 223: - return bindEnumDeclaration(node); + return bindBlockScopedDeclaration(node, 524288, 793056); case 224: + return bindEnumDeclaration(node); + case 225: return bindModuleDeclaration(node); - case 228: - case 231: - case 233: - case 237: - return declareSymbolAndAddToSymbolTable(node, 8388608, 8388608); - case 227: - return bindGlobalModuleExportDeclaration(node); - case 230: - return bindImportClause(node); - case 235: - return bindExportDeclaration(node); + case 229: + case 232: case 234: + case 238: + return declareSymbolAndAddToSymbolTable(node, 8388608, 8388608); + case 228: + return bindGlobalModuleExportDeclaration(node); + case 231: + return bindImportClause(node); + case 236: + return bindExportDeclaration(node); + case 235: return bindExportAssignment(node); - case 255: + case 256: return bindSourceFileIfExternalModule(); } } @@ -11639,7 +12124,7 @@ var ts; if (parameterName && parameterName.kind === 69) { checkStrictModeIdentifier(parameterName); } - if (parameterName && parameterName.kind === 164) { + if (parameterName && parameterName.kind === 165) { seenThisKeyword = true; } bind(type); @@ -11654,11 +12139,11 @@ var ts; bindAnonymousDeclaration(file, 512, "\"" + ts.removeFileExtension(file.fileName) + "\""); } function bindExportAssignment(node) { - var boundExpression = node.kind === 234 ? node.expression : node.right; + var boundExpression = node.kind === 235 ? node.expression : node.right; if (!container.symbol || !container.symbol.exports) { bindAnonymousDeclaration(node, 8388608, getDeclarationName(node)); } - else if (boundExpression.kind === 69 && node.kind === 234) { + else if (boundExpression.kind === 69 && node.kind === 235) { declareSymbol(container.symbol.exports, container.symbol, node, 8388608, 107455 | 8388608); } else { @@ -11669,17 +12154,17 @@ var ts; if (node.modifiers && node.modifiers.length) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Modifiers_cannot_appear_here)); } - if (node.parent.kind !== 255) { + if (node.parent.kind !== 256) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_at_top_level)); return; } else { - var parent_4 = node.parent; - if (!ts.isExternalModule(parent_4)) { + var parent_5 = node.parent; + if (!ts.isExternalModule(parent_5)) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_module_files)); return; } - if (!parent_4.isDeclarationFile) { + if (!parent_5.isDeclarationFile) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_declaration_files)); return; } @@ -11715,7 +12200,7 @@ var ts; declareSymbol(file.symbol.exports, file.symbol, node, 4 | 7340032 | 512, 0); } function bindThisPropertyAssignment(node) { - if (container.kind === 178 || container.kind === 219) { + if (container.kind === 179 || container.kind === 220) { container.symbol.members = container.symbol.members || {}; declareSymbol(container.symbol.members, container.symbol, node, 4, 107455 & ~4); } @@ -11750,7 +12235,7 @@ var ts; hasDecorators = true; } } - if (node.kind === 220) { + if (node.kind === 221) { bindBlockScopedDeclaration(node, 32, 899519); } else { @@ -11820,7 +12305,13 @@ var ts; } } checkStrictModeFunctionName(node); - return declareSymbolAndAddToSymbolTable(node, 16, 106927); + if (inStrictMode) { + checkStrictModeFunctionDeclaration(node); + return bindBlockScopedDeclaration(node, 16, 106927); + } + else { + return declareSymbolAndAddToSymbolTable(node, 16, 106927); + } } function bindFunctionExpression(node) { if (!ts.isDeclarationFile(file) && !ts.isInAmbientContext(node)) { @@ -11845,94 +12336,32 @@ var ts; ? bindAnonymousDeclaration(node, symbolFlags, "__computed") : declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes); } - function pushNamedLabel(name) { - initializeReachabilityStateIfNecessary(); - if (ts.hasProperty(labelIndexMap, name.text)) { - return false; - } - labelIndexMap[name.text] = labelStack.push(1) - 1; - return true; - } - function pushImplicitLabel() { - initializeReachabilityStateIfNecessary(); - var index = labelStack.push(1) - 1; - implicitLabels.push(index); - return index; - } - function popNamedLabel(label, outerState) { - var index = labelIndexMap[label.text]; - ts.Debug.assert(index !== undefined); - ts.Debug.assert(labelStack.length == index + 1); - labelIndexMap[label.text] = undefined; - setCurrentStateAtLabel(labelStack.pop(), outerState, label); - } - function popImplicitLabel(implicitLabelIndex, outerState) { - if (labelStack.length !== implicitLabelIndex + 1) { - ts.Debug.assert(false, "Label stack: " + labelStack.length + ", index:" + implicitLabelIndex); - } - var i = implicitLabels.pop(); - if (implicitLabelIndex !== i) { - ts.Debug.assert(false, "i: " + i + ", index: " + implicitLabelIndex); - } - setCurrentStateAtLabel(labelStack.pop(), outerState, undefined); - } - function setCurrentStateAtLabel(innerMergedState, outerState, label) { - if (innerMergedState === 1) { - if (label && !options.allowUnusedLabels) { - file.bindDiagnostics.push(ts.createDiagnosticForNode(label, ts.Diagnostics.Unused_label)); - } - currentReachabilityState = outerState; - } - else { - currentReachabilityState = or(innerMergedState, outerState); - } - } - function jumpToLabel(label, outerState) { - initializeReachabilityStateIfNecessary(); - var index = label ? labelIndexMap[label.text] : ts.lastOrUndefined(implicitLabels); - if (index === undefined) { - return false; - } - var stateAtLabel = labelStack[index]; - labelStack[index] = stateAtLabel === 1 ? outerState : or(stateAtLabel, outerState); - return true; + function shouldReportErrorOnModuleDeclaration(node) { + var instanceState = getModuleInstanceState(node); + return instanceState === 1 || (instanceState === 2 && options.preserveConstEnums); } function checkUnreachable(node) { - switch (currentReachabilityState) { - case 4: - var reportError = (ts.isStatement(node) && node.kind !== 200) || - node.kind === 220 || - (node.kind === 224 && shouldReportErrorOnModuleDeclaration(node)) || - (node.kind === 223 && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums)); - if (reportError) { - currentReachabilityState = 8; - var reportUnreachableCode = !options.allowUnreachableCode && - !ts.isInAmbientContext(node) && - (node.kind !== 199 || - ts.getCombinedNodeFlags(node.declarationList) & 3072 || - ts.forEach(node.declarationList.declarations, function (d) { return d.initializer; })); - if (reportUnreachableCode) { - errorOnFirstToken(node, ts.Diagnostics.Unreachable_code_detected); - } + if (!(currentFlow.flags & 1)) { + return false; + } + if (currentFlow === unreachableFlow) { + var reportError = (ts.isStatement(node) && node.kind !== 201) || + node.kind === 221 || + (node.kind === 225 && shouldReportErrorOnModuleDeclaration(node)) || + (node.kind === 224 && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums)); + if (reportError) { + currentFlow = reportedUnreachableFlow; + var reportUnreachableCode = !options.allowUnreachableCode && + !ts.isInAmbientContext(node) && + (node.kind !== 200 || + ts.getCombinedNodeFlags(node.declarationList) & 3072 || + ts.forEach(node.declarationList.declarations, function (d) { return d.initializer; })); + if (reportUnreachableCode) { + errorOnFirstToken(node, ts.Diagnostics.Unreachable_code_detected); } - case 8: - return true; - default: - return false; + } } - function shouldReportErrorOnModuleDeclaration(node) { - var instanceState = getModuleInstanceState(node); - return instanceState === 1 || (instanceState === 2 && options.preserveConstEnums); - } - } - function initializeReachabilityStateIfNecessary() { - if (labelIndexMap) { - return; - } - currentReachabilityState = 2; - labelIndexMap = {}; - labelStack = []; - implicitLabels = []; + return true; } } })(ts || (ts = {})); @@ -11941,6 +12370,7 @@ var ts; var nextSymbolId = 1; var nextNodeId = 1; var nextMergeId = 1; + var nextFlowId = 1; function getNodeId(node) { if (!node.id) { node.id = nextNodeId; @@ -11995,11 +12425,13 @@ var ts; getIndexTypeOfType: getIndexTypeOfType, getBaseTypes: getBaseTypes, getReturnTypeOfSignature: getReturnTypeOfSignature, + getNonNullableType: getNonNullableType, getSymbolsInScope: getSymbolsInScope, getSymbolAtLocation: getSymbolAtLocation, getShorthandAssignmentValueSymbol: getShorthandAssignmentValueSymbol, getExportSpecifierLocalTargetSymbol: getExportSpecifierLocalTargetSymbol, getTypeAtLocation: getTypeOfNode, + getPropertySymbolOfDestructuringAssignment: getPropertySymbolOfDestructuringAssignment, typeToString: typeToString, getSymbolDisplayBuilder: getSymbolDisplayBuilder, symbolToString: symbolToString, @@ -12032,8 +12464,8 @@ var ts; var nullType = createIntrinsicType(64 | nullableWideningFlags, "null"); var emptyArrayElementType = createIntrinsicType(32 | 2097152, "undefined"); var unknownType = createIntrinsicType(1, "unknown"); + var neverType = createIntrinsicType(134217728, "never"); var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); - var emptyUnionType = emptyObjectType; var emptyGenericType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); emptyGenericType.instantiations = {}; var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); @@ -12073,6 +12505,9 @@ var ts; var getGlobalThenableType; var jsxElementClassType; var deferredNodes; + var flowLoopStart = 0; + var flowLoopCount = 0; + var visitedFlowCount = 0; var tupleTypes = {}; var unionTypes = {}; var intersectionTypes = {}; @@ -12083,30 +12518,39 @@ var ts; var mergedSymbols = []; var symbolLinks = []; var nodeLinks = []; + var flowLoopCaches = []; + var flowLoopNodes = []; + var flowLoopKeys = []; + var flowLoopTypes = []; + var visitedFlowNodes = []; + var visitedFlowTypes = []; var potentialThisCollisions = []; var awaitedTypeStack = []; var diagnostics = ts.createDiagnosticCollection(); - var primitiveTypeInfo = { - "string": { - type: stringType, - flags: 258 - }, - "number": { - type: numberType, - flags: 132 - }, - "boolean": { - type: booleanType, - flags: 8 - }, - "symbol": { - type: esSymbolType, - flags: 16777216 - }, - "undefined": { - type: undefinedType, - flags: 2097152 - } + var typeofEQFacts = { + "string": 1, + "number": 2, + "boolean": 4, + "symbol": 8, + "undefined": 16384, + "object": 16, + "function": 32 + }; + var typeofNEFacts = { + "string": 128, + "number": 256, + "boolean": 512, + "symbol": 1024, + "undefined": 131072, + "object": 2048, + "function": 4096 + }; + var typeofTypesByName = { + "string": stringType, + "number": numberType, + "boolean": booleanType, + "symbol": esSymbolType, + "undefined": undefinedType }; var jsxElementType; var jsxTypes = {}; @@ -12210,7 +12654,7 @@ var ts; target.flags |= source.flags; if (source.valueDeclaration && (!target.valueDeclaration || - (target.valueDeclaration.kind === 224 && source.valueDeclaration.kind !== 224))) { + (target.valueDeclaration.kind === 225 && source.valueDeclaration.kind !== 225))) { target.valueDeclaration = source.valueDeclaration; } ts.forEach(source.declarations, function (node) { @@ -12274,7 +12718,10 @@ var ts; mergeSymbolTable(globals, moduleAugmentation.symbol.exports); } else { - var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found); + var moduleNotFoundError = !ts.isInAmbientContext(moduleName.parent.parent) + ? ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found + : undefined; + var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, moduleNotFoundError); if (!mainModule) { return; } @@ -12314,7 +12761,7 @@ var ts; return nodeLinks[nodeId] || (nodeLinks[nodeId] = {}); } function isGlobalSourceFile(node) { - return node.kind === 255 && !ts.isExternalOrCommonJsModule(node); + return node.kind === 256 && !ts.isExternalOrCommonJsModule(node); } function getSymbol(symbols, name, meaning) { if (meaning && ts.hasProperty(symbols, name)) { @@ -12352,21 +12799,29 @@ var ts; return ts.indexOf(sourceFiles, declarationFile) <= ts.indexOf(sourceFiles, useFile); } if (declaration.pos <= usage.pos) { - return declaration.kind !== 217 || + return declaration.kind !== 218 || !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage); } return isUsedInFunctionOrNonStaticProperty(declaration, usage); function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) { var container = ts.getEnclosingBlockScopeContainer(declaration); - if (declaration.parent.parent.kind === 199 || - declaration.parent.parent.kind === 205) { - return isSameScopeDescendentOf(usage, declaration, container); + switch (declaration.parent.parent.kind) { + case 200: + case 206: + case 208: + if (isSameScopeDescendentOf(usage, declaration, container)) { + return true; + } + break; } - else if (declaration.parent.parent.kind === 207 || - declaration.parent.parent.kind === 206) { - var expression = declaration.parent.parent.expression; - return isSameScopeDescendentOf(usage, expression, container); + switch (declaration.parent.parent.kind) { + case 207: + case 208: + if (isSameScopeDescendentOf(usage, declaration.parent.parent.expression, container)) { + return true; + } } + return false; } function isUsedInFunctionOrNonStaticProperty(declaration, usage) { var container = ts.getEnclosingBlockScopeContainer(declaration); @@ -12379,7 +12834,7 @@ var ts; return true; } var initializerOfNonStaticProperty = current.parent && - current.parent.kind === 144 && + current.parent.kind === 145 && (current.parent.flags & 32) === 0 && current.parent.initializer === current; if (initializerOfNonStaticProperty) { @@ -12401,18 +12856,18 @@ var ts; if (result = getSymbol(location.locals, name, meaning)) { var useResult = true; if (ts.isFunctionLike(location) && lastLocation && lastLocation !== location.body) { - if (meaning & result.flags & 793056 && lastLocation.kind !== 272) { + if (meaning & result.flags & 793056 && lastLocation.kind !== 273) { useResult = result.flags & 262144 ? lastLocation === location.type || - lastLocation.kind === 141 || - lastLocation.kind === 140 + lastLocation.kind === 142 || + lastLocation.kind === 141 : false; } if (meaning & 107455 && result.flags & 1) { useResult = - lastLocation.kind === 141 || + lastLocation.kind === 142 || (lastLocation === location.type && - result.valueDeclaration.kind === 141); + result.valueDeclaration.kind === 142); } } if (useResult) { @@ -12424,12 +12879,12 @@ var ts; } } switch (location.kind) { - case 255: + case 256: if (!ts.isExternalOrCommonJsModule(location)) break; - case 224: + case 225: var moduleExports = getSymbolOfNode(location).exports; - if (location.kind === 255 || ts.isAmbientModule(location)) { + if (location.kind === 256 || ts.isAmbientModule(location)) { if (result = moduleExports["default"]) { var localSymbol = ts.getLocalSymbolForExportDefault(result); if (localSymbol && (result.flags & meaning) && localSymbol.name === name) { @@ -12439,7 +12894,7 @@ var ts; } if (ts.hasProperty(moduleExports, name) && moduleExports[name].flags === 8388608 && - ts.getDeclarationOfKind(moduleExports[name], 237)) { + ts.getDeclarationOfKind(moduleExports[name], 238)) { break; } } @@ -12447,13 +12902,13 @@ var ts; break loop; } break; - case 223: + case 224: if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8)) { break loop; } break; + case 145: case 144: - case 143: if (ts.isClassLike(location.parent) && !(location.flags & 32)) { var ctor = findConstructorDeclaration(location.parent); if (ctor && ctor.locals) { @@ -12463,9 +12918,9 @@ var ts; } } break; - case 220: - case 191: case 221: + case 192: + case 222: if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & 793056)) { if (lastLocation && lastLocation.flags & 32) { error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters); @@ -12473,7 +12928,7 @@ var ts; } break loop; } - if (location.kind === 191 && meaning & 32) { + if (location.kind === 192 && meaning & 32) { var className = location.name; if (className && name === className.text) { result = location.symbol; @@ -12481,28 +12936,28 @@ var ts; } } break; - case 139: + case 140: grandparent = location.parent.parent; - if (ts.isClassLike(grandparent) || grandparent.kind === 221) { + if (ts.isClassLike(grandparent) || grandparent.kind === 222) { if (result = getSymbol(getSymbolOfNode(grandparent).members, name, meaning & 793056)) { error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type); return undefined; } } break; - case 146: - case 145: case 147: + case 146: case 148: case 149: - case 219: - case 179: + case 150: + case 220: + case 180: if (meaning & 3 && name === "arguments") { result = argumentsSymbol; break loop; } break; - case 178: + case 179: if (meaning & 3 && name === "arguments") { result = argumentsSymbol; break loop; @@ -12515,8 +12970,8 @@ var ts; } } break; - case 142: - if (location.parent && location.parent.kind === 141) { + case 143: + if (location.parent && location.parent.kind === 142) { location = location.parent; } if (location.parent && ts.isClassElement(location.parent)) { @@ -12586,7 +13041,7 @@ var ts; ts.Debug.assert((result.flags & 2) !== 0); var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) ? d : undefined; }); ts.Debug.assert(declaration !== undefined, "Block-scoped variable declaration is undefined"); - if (!isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 217), errorLocation)) { + if (!isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 218), errorLocation)) { error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(declaration.name)); } } @@ -12603,10 +13058,10 @@ var ts; } function getAnyImportSyntax(node) { if (ts.isAliasSymbolDeclaration(node)) { - if (node.kind === 228) { + if (node.kind === 229) { return node; } - while (node && node.kind !== 229) { + while (node && node.kind !== 230) { node = node.parent; } return node; @@ -12616,7 +13071,7 @@ var ts; return ts.forEach(symbol.declarations, function (d) { return ts.isAliasSymbolDeclaration(d) ? d : undefined; }); } function getTargetOfImportEqualsDeclaration(node) { - if (node.moduleReference.kind === 239) { + if (node.moduleReference.kind === 240) { return resolveExternalModuleSymbol(resolveExternalModuleName(node, ts.getExternalModuleImportEqualsDeclarationExpression(node))); } return getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, node); @@ -12684,6 +13139,7 @@ var ts; else { symbolFromVariable = getPropertyOfVariable(targetSymbol, name_9.text); } + symbolFromVariable = resolveSymbol(symbolFromVariable); var symbolFromModule = getExportOfModule(targetSymbol, name_9.text); var symbol = symbolFromModule && symbolFromVariable ? combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) : @@ -12711,19 +13167,19 @@ var ts; } function getTargetOfAliasDeclaration(node) { switch (node.kind) { - case 228: + case 229: return getTargetOfImportEqualsDeclaration(node); - case 230: - return getTargetOfImportClause(node); case 231: + return getTargetOfImportClause(node); + case 232: return getTargetOfNamespaceImport(node); - case 233: - return getTargetOfImportSpecifier(node); - case 237: - return getTargetOfExportSpecifier(node); case 234: + return getTargetOfImportSpecifier(node); + case 238: + return getTargetOfExportSpecifier(node); + case 235: return getTargetOfExportAssignment(node); - case 227: + case 228: return getTargetOfGlobalModuleExportDeclaration(node); } } @@ -12753,8 +13209,8 @@ var ts; var symbol = getSymbolOfNode(node); var target = resolveAlias(symbol); if (target) { - var markAlias = (target === unknownSymbol && compilerOptions.isolatedModules) || - (target !== unknownSymbol && (target.flags & 107455) && !isConstEnumOrConstEnumOnlyModule(target)); + var markAlias = target === unknownSymbol || + ((target.flags & 107455) && !isConstEnumOrConstEnumOnlyModule(target)); if (markAlias) { markAliasSymbolAsReferenced(symbol); } @@ -12765,10 +13221,10 @@ var ts; if (!links.referenced) { links.referenced = true; var node = getDeclarationOfAliasSymbol(symbol); - if (node.kind === 234) { + if (node.kind === 235) { checkExpressionCached(node.expression); } - else if (node.kind === 237) { + else if (node.kind === 238) { checkExpressionCached(node.propertyName || node.name); } else if (ts.isInternalModuleImportEqualsDeclaration(node)) { @@ -12778,17 +13234,17 @@ var ts; } function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, importDeclaration) { if (!importDeclaration) { - importDeclaration = ts.getAncestor(entityName, 228); + importDeclaration = ts.getAncestor(entityName, 229); ts.Debug.assert(importDeclaration !== undefined); } if (entityName.kind === 69 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { entityName = entityName.parent; } - if (entityName.kind === 69 || entityName.parent.kind === 138) { + if (entityName.kind === 69 || entityName.parent.kind === 139) { return resolveEntityName(entityName, 1536); } else { - ts.Debug.assert(entityName.parent.kind === 228); + ts.Debug.assert(entityName.parent.kind === 229); return resolveEntityName(entityName, 107455 | 793056 | 1536); } } @@ -12807,9 +13263,9 @@ var ts; return undefined; } } - else if (name.kind === 138 || name.kind === 171) { - var left = name.kind === 138 ? name.left : name.expression; - var right = name.kind === 138 ? name.right : name.name; + else if (name.kind === 139 || name.kind === 172) { + var left = name.kind === 139 ? name.left : name.expression; + var right = name.kind === 139 ? name.right : name.name; var namespace = resolveEntityName(left, 1536, ignoreErrors); if (!namespace || namespace === unknownSymbol || ts.nodeIsMissing(right)) { return undefined; @@ -12972,7 +13428,7 @@ var ts; var members = node.members; for (var _i = 0, members_1 = members; _i < members_1.length; _i++) { var member = members_1[_i]; - if (member.kind === 147 && ts.nodeIsPresent(member.body)) { + if (member.kind === 148 && ts.nodeIsPresent(member.body)) { return member; } } @@ -13038,11 +13494,11 @@ var ts; } } switch (location_1.kind) { - case 255: + case 256: if (!ts.isExternalOrCommonJsModule(location_1)) { break; } - case 224: + case 225: if (result = callback(getSymbolOfNode(location_1).exports)) { return result; } @@ -13075,7 +13531,7 @@ var ts; return ts.forEachValue(symbols, function (symbolFromSymbolTable) { if (symbolFromSymbolTable.flags & 8388608 && symbolFromSymbolTable.name !== "export=" - && !ts.getDeclarationOfKind(symbolFromSymbolTable, 237)) { + && !ts.getDeclarationOfKind(symbolFromSymbolTable, 238)) { if (!useOnlyExternalAliasing || ts.forEach(symbolFromSymbolTable.declarations, ts.isExternalModuleImportEqualsDeclaration)) { var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable); @@ -13106,7 +13562,7 @@ var ts; if (symbolFromSymbolTable === symbol) { return true; } - symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608 && !ts.getDeclarationOfKind(symbolFromSymbolTable, 237)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable; + symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608 && !ts.getDeclarationOfKind(symbolFromSymbolTable, 238)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable; if (symbolFromSymbolTable.flags & meaning) { qualify = true; return true; @@ -13120,10 +13576,10 @@ var ts; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; switch (declaration.kind) { - case 144: - case 146: - case 148: + case 145: + case 147: case 149: + case 150: continue; default: return false; @@ -13179,7 +13635,7 @@ var ts; } } function hasExternalModuleSymbol(declaration) { - return ts.isAmbientModule(declaration) || (declaration.kind === 255 && ts.isExternalOrCommonJsModule(declaration)); + return ts.isAmbientModule(declaration) || (declaration.kind === 256 && ts.isExternalOrCommonJsModule(declaration)); } function hasVisibleDeclarations(symbol) { var aliasesToMakeVisible; @@ -13211,11 +13667,11 @@ var ts; } function isEntityNameVisible(entityName, enclosingDeclaration) { var meaning; - if (entityName.parent.kind === 157 || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { + if (entityName.parent.kind === 158 || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { meaning = 107455 | 1048576; } - else if (entityName.kind === 138 || entityName.kind === 171 || - entityName.parent.kind === 228) { + else if (entityName.kind === 139 || entityName.kind === 172 || + entityName.parent.kind === 229) { meaning = 1536; } else { @@ -13282,10 +13738,10 @@ var ts; function getTypeAliasForTypeLiteral(type) { if (type.symbol && type.symbol.flags & 2048) { var node = type.symbol.declarations[0].parent; - while (node.kind === 163) { + while (node.kind === 164) { node = node.parent; } - if (node.kind === 222) { + if (node.kind === 223) { return getSymbolOfNode(node); } } @@ -13293,7 +13749,7 @@ var ts; } function isTopLevelInExternalModuleAugmentation(node) { return node && node.parent && - node.parent.kind === 225 && + node.parent.kind === 226 && ts.isExternalModuleAugmentation(node.parent.parent); } function getSymbolDisplayBuilder() { @@ -13304,10 +13760,10 @@ var ts; return ts.declarationNameToString(declaration.name); } switch (declaration.kind) { - case 191: + case 192: return "(Anonymous class)"; - case 178: case 179: + case 180: return "(Anonymous function)"; } } @@ -13316,6 +13772,25 @@ var ts; function appendSymbolNameOnly(symbol, writer) { writer.writeSymbol(getNameOfSymbol(symbol), symbol); } + function appendPropertyOrElementAccessForSymbol(symbol, writer) { + var symbolName = getNameOfSymbol(symbol); + var firstChar = symbolName.charCodeAt(0); + var needsElementAccess = !ts.isIdentifierStart(firstChar, languageVersion); + if (needsElementAccess) { + writePunctuation(writer, 19); + if (ts.isSingleOrDoubleQuote(firstChar)) { + writer.writeStringLiteral(symbolName); + } + else { + writer.writeSymbol(symbolName, symbol); + } + writePunctuation(writer, 20); + } + else { + writePunctuation(writer, 21); + writer.writeSymbol(symbolName, symbol); + } + } function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags, typeFlags) { var parentSymbol; function appendParentTypeArgumentsAndSymbolName(symbol) { @@ -13328,10 +13803,12 @@ var ts; buildTypeParameterDisplayFromSymbol(parentSymbol, writer, enclosingDeclaration); } } - writePunctuation(writer, 21); + appendPropertyOrElementAccessForSymbol(symbol, writer); + } + else { + appendSymbolNameOnly(symbol, writer); } parentSymbol = symbol; - appendSymbolNameOnly(symbol, writer); } writer.trackSymbol(symbol, enclosingDeclaration, meaning); function walkSymbol(symbol, meaning) { @@ -13371,7 +13848,7 @@ var ts; var inObjectTypeLiteral = false; return writeType(type, globalFlags); function writeType(type, flags) { - if (type.flags & 16777343) { + if (type.flags & 150995071) { writer.writeKeyword(!(globalFlags & 16) && isTypeAny(type) ? "any" : type.intrinsicName); @@ -13426,7 +13903,7 @@ var ts; } if (pos < end) { writePunctuation(writer, 25); - writeType(typeArguments[pos], 0); + writeType(typeArguments[pos], 256); pos++; while (pos < end) { writePunctuation(writer, 24); @@ -13451,12 +13928,12 @@ var ts; var length_1 = outerTypeParameters.length; while (i < length_1) { var start = i; - var parent_5 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); + var parent_6 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); do { i++; - } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_5); + } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_6); if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) { - writeSymbolTypeReference(parent_5, typeArguments, start, i, flags); + writeSymbolTypeReference(parent_6, typeArguments, start, i, flags); writePunctuation(writer, 21); } } @@ -13483,10 +13960,10 @@ var ts; var symbol = type.symbol; if (symbol) { if (symbol.flags & (32 | 384 | 512)) { - writeTypeofSymbol(type, flags); + writeTypeOfSymbol(type, flags); } else if (shouldWriteTypeOfFunctionSymbol()) { - writeTypeofSymbol(type, flags); + writeTypeOfSymbol(type, flags); } else if (ts.contains(symbolStack, symbol)) { var typeAlias = getTypeAliasForTypeLiteral(type); @@ -13515,7 +13992,7 @@ var ts; var isNonLocalFunctionSymbol = !!(symbol.flags & 16) && (symbol.parent || ts.forEach(symbol.declarations, function (declaration) { - return declaration.parent.kind === 255 || declaration.parent.kind === 225; + return declaration.parent.kind === 256 || declaration.parent.kind === 226; })); if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { return !!(flags & 2) || @@ -13523,7 +14000,7 @@ var ts; } } } - function writeTypeofSymbol(type, typeFormatFlags) { + function writeTypeOfSymbol(type, typeFormatFlags) { writeKeyword(writer, 101); writeSpace(writer); buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455, 0, typeFormatFlags); @@ -13531,7 +14008,7 @@ var ts; function writeIndexSignature(info, keyword) { if (info) { if (info.isReadonly) { - writeKeyword(writer, 127); + writeKeyword(writer, 128); writeSpace(writer); } writePunctuation(writer, 19); @@ -13549,7 +14026,7 @@ var ts; } function writePropertyWithModifiers(prop) { if (isReadonlySymbol(prop)) { - writeKeyword(writer, 127); + writeKeyword(writer, 128); writeSpace(writer); } buildSymbolDisplay(prop, writer); @@ -13557,6 +14034,17 @@ var ts; writePunctuation(writer, 53); } } + function shouldAddParenthesisAroundFunctionType(callSignature, flags) { + if (flags & 64) { + return true; + } + else if (flags & 256) { + var typeParameters = callSignature.target && (flags & 32) ? + callSignature.target.typeParameters : callSignature.typeParameters; + return typeParameters && typeParameters.length !== 0; + } + return false; + } function writeLiteralType(type, flags) { var resolved = resolveStructuredTypeMembers(type); if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) { @@ -13566,11 +14054,12 @@ var ts; return; } if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { - if (flags & 64) { + var parenthesizeSignature = shouldAddParenthesisAroundFunctionType(resolved.callSignatures[0], flags); + if (parenthesizeSignature) { writePunctuation(writer, 17); } buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, undefined, symbolStack); - if (flags & 64) { + if (parenthesizeSignature) { writePunctuation(writer, 18); } return; @@ -13605,8 +14094,8 @@ var ts; writePunctuation(writer, 23); writer.writeLine(); } - writeIndexSignature(resolved.stringIndexInfo, 131); - writeIndexSignature(resolved.numberIndexInfo, 129); + writeIndexSignature(resolved.stringIndexInfo, 132); + writeIndexSignature(resolved.numberIndexInfo, 130); for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) { var p = _e[_d]; var t = getTypeOfSymbol(p); @@ -13669,12 +14158,12 @@ var ts; buildTypeDisplay(getTypeOfSymbol(p), writer, enclosingDeclaration, flags, symbolStack); } function buildBindingPatternDisplay(bindingPattern, writer, enclosingDeclaration, flags, symbolStack) { - if (bindingPattern.kind === 166) { + if (bindingPattern.kind === 167) { writePunctuation(writer, 15); buildDisplayForCommaSeparatedList(bindingPattern.elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); }); writePunctuation(writer, 16); } - else if (bindingPattern.kind === 167) { + else if (bindingPattern.kind === 168) { writePunctuation(writer, 19); var elements = bindingPattern.elements; buildDisplayForCommaSeparatedList(elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); }); @@ -13685,10 +14174,10 @@ var ts; } } function buildBindingElementDisplay(bindingElement, writer, enclosingDeclaration, flags, symbolStack) { - if (bindingElement.kind === 192) { + if (bindingElement.kind === 193) { return; } - ts.Debug.assert(bindingElement.kind === 168); + ts.Debug.assert(bindingElement.kind === 169); if (bindingElement.propertyName) { writer.writeSymbol(ts.getTextOfNode(bindingElement.propertyName), bindingElement.symbol); writePunctuation(writer, 54); @@ -13723,12 +14212,14 @@ var ts; function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration, flags, symbolStack) { if (typeParameters && typeParameters.length) { writePunctuation(writer, 25); + var flags_1 = 256; for (var i = 0; i < typeParameters.length; i++) { if (i > 0) { writePunctuation(writer, 24); writeSpace(writer); + flags_1 = 0; } - buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, 0); + buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, flags_1); } writePunctuation(writer, 27); } @@ -13817,63 +14308,63 @@ var ts; return false; function determineIfDeclarationIsVisible() { switch (node.kind) { - case 168: + case 169: return isDeclarationVisible(node.parent.parent); - case 217: + case 218: if (ts.isBindingPattern(node.name) && !node.name.elements.length) { return false; } - case 224: - case 220: + case 225: case 221: case 222: - case 219: case 223: - case 228: + case 220: + case 224: + case 229: if (ts.isExternalModuleAugmentation(node)) { return true; } - var parent_6 = getDeclarationContainer(node); + var parent_7 = getDeclarationContainer(node); if (!(ts.getCombinedNodeFlags(node) & 1) && - !(node.kind !== 228 && parent_6.kind !== 255 && ts.isInAmbientContext(parent_6))) { - return isGlobalSourceFile(parent_6); + !(node.kind !== 229 && parent_7.kind !== 256 && ts.isInAmbientContext(parent_7))) { + return isGlobalSourceFile(parent_7); } - return isDeclarationVisible(parent_6); - case 144: - case 143: - case 148: - case 149: - case 146: + return isDeclarationVisible(parent_7); case 145: + case 144: + case 149: + case 150: + case 147: + case 146: if (node.flags & (8 | 16)) { return false; } - case 147: - case 151: - case 150: + case 148: case 152: - case 141: - case 225: - case 155: + case 151: + case 153: + case 142: + case 226: case 156: - case 158: - case 154: + case 157: case 159: + case 155: case 160: case 161: case 162: case 163: + case 164: return isDeclarationVisible(node.parent); - case 230: case 231: - case 233: - return false; - case 140: - case 255: - return true; + case 232: case 234: return false; + case 141: + case 256: + return true; + case 235: + return false; default: return false; } @@ -13881,10 +14372,10 @@ var ts; } function collectLinkedAliases(node) { var exportSymbol; - if (node.parent && node.parent.kind === 234) { + if (node.parent && node.parent.kind === 235) { exportSymbol = resolveName(node.parent, node.text, 107455 | 793056 | 1536 | 8388608, ts.Diagnostics.Cannot_find_name_0, node); } - else if (node.parent.kind === 237) { + else if (node.parent.kind === 238) { var exportSpecifier = node.parent; exportSymbol = exportSpecifier.parent.parent.moduleSpecifier ? getExternalModuleMember(exportSpecifier.parent.parent, exportSpecifier) : @@ -13905,7 +14396,7 @@ var ts; if (ts.isInternalModuleImportEqualsDeclaration(declaration)) { var internalModuleReference = declaration.moduleReference; var firstIdentifier = getFirstIdentifier(internalModuleReference); - var importSymbol = resolveName(declaration, firstIdentifier.text, 107455 | 793056 | 1536, ts.Diagnostics.Cannot_find_name_0, firstIdentifier); + var importSymbol = resolveName(declaration, firstIdentifier.text, 107455 | 793056 | 1536, undefined, undefined); if (importSymbol) { buildVisibleNodeList(importSymbol.declarations); } @@ -13963,12 +14454,12 @@ var ts; node = ts.getRootDeclaration(node); while (node) { switch (node.kind) { - case 217: case 218: + case 219: + case 234: case 233: case 232: case 231: - case 230: node = node.parent; break; default: @@ -13998,7 +14489,7 @@ var ts; case 9: case 8: return name.text; - case 139: + case 140: if (ts.isStringOrNumericLiteral(name.expression.kind)) { return name.expression.text; } @@ -14006,7 +14497,7 @@ var ts; return undefined; } function isComputedNonLiteralName(name) { - return name.kind === 139 && !ts.isStringOrNumericLiteral(name.expression.kind); + return name.kind === 140 && !ts.isStringOrNumericLiteral(name.expression.kind); } function getTypeForBindingElement(declaration) { var pattern = declaration.parent; @@ -14021,7 +14512,7 @@ var ts; return parentType; } var type; - if (pattern.kind === 166) { + if (pattern.kind === 167) { var name_10 = declaration.propertyName || declaration.name; if (isComputedNonLiteralName(name_10)) { return anyType; @@ -14060,7 +14551,7 @@ var ts; } } if (strictNullChecks && declaration.initializer && !(getNullableKind(checkExpressionCached(declaration.initializer)) & 32)) { - type = removeNullableKind(type, 32); + type = getTypeWithFacts(type, 131072); } return type; } @@ -14075,15 +14566,15 @@ var ts; if (typeTag && typeTag.typeExpression) { return typeTag.typeExpression.type; } - if (declaration.kind === 217 && - declaration.parent.kind === 218 && - declaration.parent.parent.kind === 199) { + if (declaration.kind === 218 && + declaration.parent.kind === 219 && + declaration.parent.parent.kind === 200) { var annotation = ts.getJSDocTypeTag(declaration.parent.parent); if (annotation && annotation.typeExpression) { return annotation.typeExpression.type; } } - else if (declaration.kind === 141) { + else if (declaration.kind === 142) { var paramTag = ts.getCorrespondingJSDocParameterTag(declaration); if (paramTag && paramTag.typeExpression) { return paramTag.typeExpression.type; @@ -14091,6 +14582,9 @@ var ts; } return undefined; } + function addOptionality(type, optional) { + return strictNullChecks && optional ? addNullableKind(type, 32) : type; + } function getTypeForVariableLikeDeclaration(declaration) { if (declaration.flags & 134217728) { var type = getTypeForVariableLikeDeclarationFromJSDocComment(declaration); @@ -14098,38 +14592,42 @@ var ts; return type; } } - if (declaration.parent.parent.kind === 206) { + if (declaration.parent.parent.kind === 207) { return stringType; } - if (declaration.parent.parent.kind === 207) { + if (declaration.parent.parent.kind === 208) { return checkRightHandSideOfForOf(declaration.parent.parent.expression) || anyType; } if (ts.isBindingPattern(declaration.parent)) { return getTypeForBindingElement(declaration); } if (declaration.type) { - var type = getTypeFromTypeNode(declaration.type); - return strictNullChecks && declaration.questionToken ? addNullableKind(type, 32) : type; + return addOptionality(getTypeFromTypeNode(declaration.type), !!declaration.questionToken); } - if (declaration.kind === 141) { + if (declaration.kind === 142) { var func = declaration.parent; - if (func.kind === 149 && !ts.hasDynamicName(func)) { - var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 148); + if (func.kind === 150 && !ts.hasDynamicName(func)) { + var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 149); if (getter) { - return getReturnTypeOfSignature(getSignatureFromDeclaration(getter)); + var signature = getSignatureFromDeclaration(getter); + var thisParameter = getAccessorThisParameter(func); + if (thisParameter && declaration === thisParameter) { + return signature.thisType; + } + return getReturnTypeOfSignature(signature); } } var type = declaration.symbol.name === "this" ? getContextuallyTypedThisType(func) : getContextuallyTypedParameterType(declaration); if (type) { - return strictNullChecks && declaration.questionToken ? addNullableKind(type, 32) : type; + return addOptionality(type, !!declaration.questionToken); } } if (declaration.initializer) { - return checkExpressionCached(declaration.initializer); + return addOptionality(checkExpressionCached(declaration.initializer), !!declaration.questionToken); } - if (declaration.kind === 253) { + if (declaration.kind === 254) { return checkIdentifier(declaration.name); } if (ts.isBindingPattern(declaration.name)) { @@ -14146,7 +14644,7 @@ var ts; if (ts.isBindingPattern(element.name)) { return getTypeFromBindingPattern(element.name, includePatternInType); } - if (compilerOptions.noImplicitAny) { + if (compilerOptions.noImplicitAny && !declarationBelongsToPrivateAmbientMember(element)) { reportImplicitAnyError(element, anyType); } return anyType; @@ -14181,7 +14679,7 @@ var ts; if (elements.length === 0 || elements[elements.length - 1].dotDotDotToken) { return languageVersion >= 2 ? createIterableType(anyType) : anyArrayType; } - var elementTypes = ts.map(elements, function (e) { return e.kind === 192 ? anyType : getTypeFromBindingElement(e, includePatternInType); }); + var elementTypes = ts.map(elements, function (e) { return e.kind === 193 ? anyType : getTypeFromBindingElement(e, includePatternInType); }); if (includePatternInType) { var result = createNewTupleType(elementTypes); result.pattern = pattern; @@ -14190,7 +14688,7 @@ var ts; return createTupleType(elementTypes); } function getTypeFromBindingPattern(pattern, includePatternInType) { - return pattern.kind === 166 + return pattern.kind === 167 ? getTypeFromObjectBindingPattern(pattern, includePatternInType) : getTypeFromArrayBindingPattern(pattern, includePatternInType); } @@ -14200,20 +14698,24 @@ var ts; if (reportErrors) { reportErrorsFromWidening(declaration, type); } - if (declaration.kind === 252) { + if (declaration.kind === 253) { return type; } return getWidenedType(type); } type = declaration.dotDotDotToken ? anyArrayType : anyType; if (reportErrors && compilerOptions.noImplicitAny) { - var root = ts.getRootDeclaration(declaration); - if (!isPrivateWithinAmbient(root) && !(root.kind === 141 && isPrivateWithinAmbient(root.parent))) { + if (!declarationBelongsToPrivateAmbientMember(declaration)) { reportImplicitAnyError(declaration, type); } } return type; } + function declarationBelongsToPrivateAmbientMember(declaration) { + var root = ts.getRootDeclaration(declaration); + var memberDeclaration = root.kind === 142 ? root.parent : root; + return isPrivateWithinAmbient(memberDeclaration); + } function getTypeOfVariableOrParameterOrProperty(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { @@ -14221,17 +14723,17 @@ var ts; return links.type = getTypeOfPrototypeProperty(symbol); } var declaration = symbol.valueDeclaration; - if (declaration.parent.kind === 251) { + if (declaration.parent.kind === 252) { return links.type = anyType; } - if (declaration.kind === 234) { + if (declaration.kind === 235) { return links.type = checkExpression(declaration.expression); } - if (declaration.kind === 186) { + if (declaration.kind === 187) { return links.type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); } - if (declaration.kind === 171) { - if (declaration.parent.kind === 186) { + if (declaration.kind === 172) { + if (declaration.parent.kind === 187) { return links.type = checkExpressionCached(declaration.parent.right); } } @@ -14257,7 +14759,7 @@ var ts; } function getAnnotatedAccessorType(accessor) { if (accessor) { - if (accessor.kind === 148) { + if (accessor.kind === 149) { return accessor.type && getTypeFromTypeNode(accessor.type); } else { @@ -14267,11 +14769,20 @@ var ts; } return undefined; } + function getAnnotatedAccessorThisType(accessor) { + if (accessor) { + var parameter = getAccessorThisParameter(accessor); + if (parameter && parameter.type) { + return getTypeFromTypeNode(accessor.parameters[0].type); + } + } + return undefined; + } function getTypeOfAccessors(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - var getter = ts.getDeclarationOfKind(symbol, 148); - var setter = ts.getDeclarationOfKind(symbol, 149); + var getter = ts.getDeclarationOfKind(symbol, 149); + var setter = ts.getDeclarationOfKind(symbol, 150); if (getter && getter.flags & 134217728) { var jsDocType = getTypeForVariableLikeDeclarationFromJSDocComment(getter); if (jsDocType) { @@ -14306,7 +14817,7 @@ var ts; if (!popTypeResolution()) { type = anyType; if (compilerOptions.noImplicitAny) { - var getter_1 = ts.getDeclarationOfKind(symbol, 148); + var getter_1 = ts.getDeclarationOfKind(symbol, 149); 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)); } } @@ -14317,7 +14828,9 @@ var ts; function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - links.type = createObjectType(65536, symbol); + var type = createObjectType(65536, symbol); + links.type = strictNullChecks && symbol.flags & 536870912 ? + addNullableKind(type, 32) : type; } return links.type; } @@ -14395,9 +14908,9 @@ var ts; if (!node) { return typeParameters; } - if (node.kind === 220 || node.kind === 191 || - node.kind === 219 || node.kind === 178 || - node.kind === 146 || node.kind === 179) { + if (node.kind === 221 || node.kind === 192 || + node.kind === 220 || node.kind === 179 || + node.kind === 147 || node.kind === 180) { var declarations = node.typeParameters; if (declarations) { return appendTypeParameters(appendOuterTypeParameters(typeParameters, node), declarations); @@ -14406,15 +14919,15 @@ var ts; } } function getOuterTypeParametersOfClassOrInterface(symbol) { - var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 221); + var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 222); return appendOuterTypeParameters(undefined, declaration); } function getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) { var result; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var node = _a[_i]; - if (node.kind === 221 || node.kind === 220 || - node.kind === 191 || node.kind === 222) { + if (node.kind === 222 || node.kind === 221 || + node.kind === 192 || node.kind === 223) { var declaration = node; if (declaration.typeParameters) { result = appendTypeParameters(result, declaration.typeParameters); @@ -14537,7 +15050,7 @@ var ts; type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray; for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 221 && ts.getInterfaceBaseTypeNodes(declaration)) { + if (declaration.kind === 222 && ts.getInterfaceBaseTypeNodes(declaration)) { for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) { var node = _c[_b]; var baseType = getTypeFromTypeNode(node); @@ -14566,7 +15079,7 @@ var ts; function isIndependentInterface(symbol) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 221) { + if (declaration.kind === 222) { if (declaration.flags & 16384) { return false; } @@ -14615,7 +15128,7 @@ var ts; if (!pushTypeResolution(symbol, 2)) { return unknownType; } - var declaration = ts.getDeclarationOfKind(symbol, 222); + var declaration = ts.getDeclarationOfKind(symbol, 223); var type = getTypeFromTypeNode(declaration.type); if (popTypeResolution()) { links.typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); @@ -14646,7 +15159,7 @@ var ts; if (!links.declaredType) { var type = createType(512); type.symbol = symbol; - if (!ts.getDeclarationOfKind(symbol, 140).constraint) { + if (!ts.getDeclarationOfKind(symbol, 141).constraint) { type.constraint = noConstraintType; } links.declaredType = type; @@ -14693,18 +15206,19 @@ var ts; function isIndependentType(node) { switch (node.kind) { case 117: - case 131: - case 129: - case 120: case 132: + case 130: + case 120: + case 133: case 103: - case 134: + case 135: case 93: - case 165: + case 127: + case 166: return true; - case 159: + case 160: return isIndependentType(node.elementType); - case 154: + case 155: return isIndependentTypeReference(node); } return false; @@ -14713,7 +15227,7 @@ var ts; return node.type && isIndependentType(node.type) || !node.type && !node.initializer; } function isIndependentFunctionLikeDeclaration(node) { - if (node.kind !== 147 && (!node.type || !isIndependentType(node.type))) { + if (node.kind !== 148 && (!node.type || !isIndependentType(node.type))) { return false; } for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) { @@ -14729,12 +15243,12 @@ var ts; var declaration = symbol.declarations[0]; if (declaration) { switch (declaration.kind) { - case 144: - case 143: - return isIndependentVariableLikeDeclaration(declaration); - case 146: case 145: + case 144: + return isIndependentVariableLikeDeclaration(declaration); case 147: + case 146: + case 148: return isIndependentFunctionLikeDeclaration(declaration); } } @@ -15221,7 +15735,9 @@ var ts; propTypes.push(getTypeOfSymbol(prop)); } } - return getUnionType(propTypes); + if (propTypes.length) { + return getUnionType(propTypes); + } } return undefined; } @@ -15255,7 +15771,7 @@ var ts; } function isOptionalParameter(node) { if (node.flags & 134217728) { - if (node.type && node.type.kind === 267) { + if (node.type && node.type.kind === 268) { return true; } var paramTag = ts.getCorrespondingJSDocParameterTag(node); @@ -15264,7 +15780,7 @@ var ts; return true; } if (paramTag.typeExpression) { - return paramTag.typeExpression.type.kind === 267; + return paramTag.typeExpression.type.kind === 268; } } } @@ -15300,20 +15816,12 @@ var ts; function getSignatureFromDeclaration(declaration) { var links = getNodeLinks(declaration); if (!links.resolvedSignature) { - var classType = declaration.kind === 147 ? - getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol)) - : undefined; - var typeParameters = classType ? classType.localTypeParameters : - declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : - getTypeParametersFromJSDocTemplate(declaration); var parameters = []; var hasStringLiterals = false; var minArgumentCount = -1; var thisType = undefined; var hasThisParameter = void 0; var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); - var returnType = undefined; - var typePredicate = undefined; for (var i = isJSConstructSignature ? 1 : 0, n = declaration.parameters.length; i < n; i++) { var param = declaration.parameters[i]; var paramSymbol = param.symbol; @@ -15328,7 +15836,7 @@ var ts; else { parameters.push(paramSymbol); } - if (param.type && param.type.kind === 165) { + if (param.type && param.type.kind === 166) { hasStringLiterals = true; } if (param.initializer || param.questionToken || param.dotDotDotToken) { @@ -15340,41 +15848,57 @@ var ts; minArgumentCount = -1; } } + if ((declaration.kind === 149 || declaration.kind === 150) && + !ts.hasDynamicName(declaration) && + (!hasThisParameter || thisType === unknownType)) { + var otherKind = declaration.kind === 149 ? 150 : 149; + var setter = ts.getDeclarationOfKind(declaration.symbol, otherKind); + thisType = getAnnotatedAccessorThisType(setter); + } if (minArgumentCount < 0) { minArgumentCount = declaration.parameters.length - (hasThisParameter ? 1 : 0); } if (isJSConstructSignature) { minArgumentCount--; - returnType = getTypeFromTypeNode(declaration.parameters[0].type); - } - else if (classType) { - returnType = classType; - } - else if (declaration.type) { - returnType = getTypeFromTypeNode(declaration.type); - if (declaration.type.kind === 153) { - typePredicate = createTypePredicateFromTypePredicateNode(declaration.type); - } - } - else { - if (declaration.flags & 134217728) { - var type = getReturnTypeFromJSDocComment(declaration); - if (type && type !== unknownType) { - returnType = type; - } - } - if (declaration.kind === 148 && !ts.hasDynamicName(declaration)) { - var setter = ts.getDeclarationOfKind(declaration.symbol, 149); - returnType = getAnnotatedAccessorType(setter); - } - if (!returnType && ts.nodeIsMissing(declaration.body)) { - returnType = anyType; - } } + var classType = declaration.kind === 148 ? + getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol)) + : undefined; + var typeParameters = classType ? classType.localTypeParameters : + declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : + getTypeParametersFromJSDocTemplate(declaration); + var returnType = getSignatureReturnTypeFromDeclaration(declaration, minArgumentCount, isJSConstructSignature, classType); + var typePredicate = declaration.type && declaration.type.kind === 154 ? + createTypePredicateFromTypePredicateNode(declaration.type) : + undefined; links.resolvedSignature = createSignature(declaration, typeParameters, thisType, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); } return links.resolvedSignature; } + function getSignatureReturnTypeFromDeclaration(declaration, minArgumentCount, isJSConstructSignature, classType) { + if (isJSConstructSignature) { + return getTypeFromTypeNode(declaration.parameters[0].type); + } + else if (classType) { + return classType; + } + else if (declaration.type) { + return getTypeFromTypeNode(declaration.type); + } + if (declaration.flags & 134217728) { + var type = getReturnTypeFromJSDocComment(declaration); + if (type && type !== unknownType) { + return type; + } + } + if (declaration.kind === 149 && !ts.hasDynamicName(declaration)) { + var setter = ts.getDeclarationOfKind(declaration.symbol, 150); + return getAnnotatedAccessorType(setter); + } + if (ts.nodeIsMissing(declaration.body)) { + return anyType; + } + } function getSignaturesOfSymbol(symbol) { if (!symbol) return emptyArray; @@ -15382,20 +15906,20 @@ var ts; for (var i = 0, len = symbol.declarations.length; i < len; i++) { var node = symbol.declarations[i]; switch (node.kind) { - case 155: case 156: - case 219: - case 146: - case 145: + case 157: + case 220: case 147: - case 150: + case 146: + case 148: case 151: case 152: - case 148: + case 153: case 149: - case 178: + case 150: case 179: - case 268: + case 180: + case 269: if (i > 0 && node.body) { var previous = symbol.declarations[i - 1]; if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) { @@ -15464,18 +15988,13 @@ var ts; if (!signature.typeParameters) return signature; if (!signature.erasedSignatureCache) { - if (signature.target) { - signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper); - } - else { - signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true); - } + signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true); } return signature.erasedSignatureCache; } function getOrCreateTypeFromSignature(signature) { if (!signature.isolatedSignatureType) { - var isConstructor = signature.declaration.kind === 147 || signature.declaration.kind === 151; + var isConstructor = signature.declaration.kind === 148 || signature.declaration.kind === 152; var type = createObjectType(65536 | 262144); type.members = emptySymbols; type.properties = emptyArray; @@ -15489,7 +16008,7 @@ var ts; return symbol.members["__index"]; } function getIndexDeclarationOfSymbol(symbol, kind) { - var syntaxKind = kind === 1 ? 129 : 131; + var syntaxKind = kind === 1 ? 130 : 132; var indexSymbol = getIndexSymbol(symbol); if (indexSymbol) { for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) { @@ -15516,7 +16035,7 @@ var ts; return undefined; } function getConstraintDeclaration(type) { - return ts.getDeclarationOfKind(type.symbol, 140).constraint; + return ts.getDeclarationOfKind(type.symbol, 141).constraint; } function hasConstraintReferenceTo(type, target) { var checked; @@ -15549,7 +16068,7 @@ var ts; return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint; } function getParentSymbolOfTypeParameter(typeParameter) { - return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 140).parent); + return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 141).parent); } function getTypeListId(types) { if (types) { @@ -15637,11 +16156,11 @@ var ts; } function getTypeReferenceName(node) { switch (node.kind) { - case 154: + case 155: return node.typeName; - case 266: + case 267: return node.name; - case 193: + case 194: if (ts.isSupportedExpressionWithTypeArguments(node)) { return node.expression; } @@ -15664,7 +16183,7 @@ var ts; if (symbol.flags & 524288) { return getTypeFromTypeAliasReference(node, symbol); } - if (symbol.flags & 107455 && node.kind === 266) { + if (symbol.flags & 107455 && node.kind === 267) { return getTypeOfSymbol(symbol); } return getTypeFromNonGenericTypeReference(node, symbol); @@ -15674,7 +16193,7 @@ var ts; if (!links.resolvedType) { var symbol = void 0; var type = void 0; - if (node.kind === 266) { + if (node.kind === 267) { var typeReferenceName = getTypeReferenceName(node); symbol = resolveTypeReferenceName(node, typeReferenceName); type = getTypeReferenceType(node, symbol); @@ -15682,7 +16201,7 @@ var ts; links.resolvedType = type; } else { - var typeNameOrExpression = node.kind === 154 ? node.typeName : + var typeNameOrExpression = node.kind === 155 ? node.typeName : ts.isSupportedExpressionWithTypeArguments(node) ? node.expression : undefined; symbol = typeNameOrExpression && resolveEntityName(typeNameOrExpression, 793056) || unknownSymbol; @@ -15709,9 +16228,9 @@ var ts; for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) { var declaration = declarations_3[_i]; switch (declaration.kind) { - case 220: case 221: - case 223: + case 222: + case 224: return declaration; } } @@ -15802,7 +16321,7 @@ var ts; if (type.flags & 64) typeSet.containsNull = true; } - else if (!ts.contains(typeSet, type)) { + else if (type !== neverType && !ts.contains(typeSet, type)) { typeSet.push(type); } } @@ -15831,7 +16350,10 @@ var ts; } function getUnionType(types, noSubtypeReduction) { if (types.length === 0) { - return emptyUnionType; + return neverType; + } + if (types.length === 1) { + return types[0]; } var typeSet = []; addTypesToSet(typeSet, types, 16384); @@ -15848,7 +16370,9 @@ var ts; removeSubtypes(typeSet); } if (typeSet.length === 0) { - return typeSet.containsNull ? nullType : undefinedType; + return typeSet.containsNull ? nullType : + typeSet.containsUndefined ? undefinedType : + neverType; } else if (typeSet.length === 1) { return typeSet[0]; @@ -15921,7 +16445,7 @@ var ts; function getTypeFromStringLiteralTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { - links.resolvedType = getStringLiteralTypeForText(node.text); + links.resolvedType = getStringLiteralTypeForText(ts.unescapeIdentifier(node.text)); } return links.resolvedType; } @@ -15944,9 +16468,9 @@ var ts; function getThisType(node) { var container = ts.getThisContainer(node, false); var parent = container && container.parent; - if (parent && (ts.isClassLike(parent) || parent.kind === 221)) { + if (parent && (ts.isClassLike(parent) || parent.kind === 222)) { if (!(container.flags & 32) && - (container.kind !== 147 || ts.isNodeDescendentOf(node, container.body))) { + (container.kind !== 148 || ts.isNodeDescendentOf(node, container.body))) { return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType; } } @@ -15963,66 +16487,69 @@ var ts; function getTypeFromTypeNode(node) { switch (node.kind) { case 117: - case 257: case 258: + case 259: return anyType; - case 131: + case 132: return stringType; - case 129: + case 130: return numberType; case 120: return booleanType; - case 132: + case 133: return esSymbolType; case 103: return voidType; - case 134: + case 135: return undefinedType; case 93: return nullType; - case 164: - return getTypeFromThisTypeNode(node); + case 127: + return neverType; case 165: + case 97: + return getTypeFromThisTypeNode(node); + case 166: return getTypeFromStringLiteralTypeNode(node); - case 154: - case 266: - return getTypeFromTypeReference(node); - case 153: - return booleanType; - case 193: - return getTypeFromTypeReference(node); - case 157: - return getTypeFromTypeQueryNode(node); - case 159: - case 259: - return getTypeFromArrayTypeNode(node); - case 160: - return getTypeFromTupleTypeNode(node); - case 161: - case 260: - return getTypeFromUnionTypeNode(node); - case 162: - return getTypeFromIntersectionTypeNode(node); - case 163: - case 262: - case 263: - case 270: - case 271: - case 267: - return getTypeFromTypeNode(node.type); case 155: - case 156: + case 267: + return getTypeFromTypeReference(node); + case 154: + return booleanType; + case 194: + return getTypeFromTypeReference(node); case 158: - case 268: + return getTypeFromTypeQueryNode(node); + case 160: + case 260: + return getTypeFromArrayTypeNode(node); + case 161: + return getTypeFromTupleTypeNode(node); + case 162: + case 261: + return getTypeFromUnionTypeNode(node); + case 163: + return getTypeFromIntersectionTypeNode(node); + case 164: + case 263: case 264: + case 271: + case 272: + case 268: + return getTypeFromTypeNode(node.type); + case 156: + case 157: + case 159: + case 269: + case 265: return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); case 69: - case 138: + case 139: var symbol = getSymbolAtLocation(node); return symbol && getDeclaredTypeOfSymbol(symbol); - case 261: + case 262: return getTypeFromJSDocTupleType(node); - case 269: + case 270: return getTypeFromJSDocVariadicType(node); default: return unknownType; @@ -16170,41 +16697,41 @@ var ts; var node = symbol.declarations[0].parent; while (node) { switch (node.kind) { - case 155: case 156: - case 219: - case 146: - case 145: + case 157: + case 220: case 147: - case 150: + case 146: + case 148: case 151: case 152: - case 148: + case 153: case 149: - case 178: + case 150: case 179: - case 220: - case 191: + case 180: case 221: + case 192: case 222: + case 223: var declaration = node; if (declaration.typeParameters) { for (var _i = 0, _a = declaration.typeParameters; _i < _a.length; _i++) { var d = _a[_i]; - if (ts.contains(mappedTypes, getDeclaredTypeOfTypeParameter(d.symbol))) { + if (ts.contains(mappedTypes, getDeclaredTypeOfTypeParameter(getSymbolOfNode(d)))) { return true; } } } - if (ts.isClassLike(node) || node.kind === 221) { + if (ts.isClassLike(node) || node.kind === 222) { var thisType = getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType; if (thisType && ts.contains(mappedTypes, thisType)) { return true; } } break; - case 224: - case 255: + case 225: + case 256: return false; } node = node.parent; @@ -16241,36 +16768,39 @@ var ts; return info && createIndexInfo(instantiateType(info.type, mapper), info.isReadonly, info.declaration); } function isContextSensitive(node) { - ts.Debug.assert(node.kind !== 146 || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 147 || ts.isObjectLiteralMethod(node)); switch (node.kind) { - case 178: case 179: + case 180: return isContextSensitiveFunctionLikeDeclaration(node); - case 170: + case 171: return ts.forEach(node.properties, isContextSensitive); - case 169: + case 170: return ts.forEach(node.elements, isContextSensitive); - case 187: + case 188: return isContextSensitive(node.whenTrue) || isContextSensitive(node.whenFalse); - case 186: + case 187: return node.operatorToken.kind === 52 && (isContextSensitive(node.left) || isContextSensitive(node.right)); - case 252: + case 253: return isContextSensitive(node.initializer); + case 147: case 146: - case 145: return isContextSensitiveFunctionLikeDeclaration(node); - case 177: + case 178: return isContextSensitive(node.expression); } return false; } function isContextSensitiveFunctionLikeDeclaration(node) { var areAllParametersUntyped = !ts.forEach(node.parameters, function (p) { return p.type; }); - var isNullaryArrow = node.kind === 179 && !node.parameters.length; + var isNullaryArrow = node.kind === 180 && !node.parameters.length; return !node.typeParameters && areAllParametersUntyped && !isNullaryArrow; } + function isContextSensitiveFunctionOrObjectLiteralMethod(func) { + return (isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) && isContextSensitiveFunctionLikeDeclaration(func); + } function getTypeWithoutSignatures(type) { if (type.flags & 80896) { var resolved = resolveStructuredTypeMembers(type); @@ -16479,33 +17009,35 @@ var ts; if (relation === identityRelation) { return isIdenticalTo(source, target); } - if (isTypeAny(target)) - return -1; - if (source.flags & 32) { - if (!strictNullChecks || target.flags & (32 | 16) || source === emptyArrayElementType) + if (!(target.flags & 134217728)) { + if (target.flags & 1) return -1; - } - if (source.flags & 64) { - if (!strictNullChecks || target.flags & 64) - return -1; - } - if (source.flags & 128 && target === numberType) - return -1; - if (source.flags & 128 && target.flags & 128) { - if (result = enumRelatedTo(source, target, reportErrors)) { - return result; + if (source.flags & 32) { + if (!strictNullChecks || target.flags & (32 | 16) || source === emptyArrayElementType) + return -1; } - } - if (source.flags & 256 && target === stringType) - return -1; - if (relation === assignableRelation || relation === comparableRelation) { - if (isTypeAny(source)) + if (source.flags & 64) { + if (!strictNullChecks || target.flags & 64) + return -1; + } + if (source.flags & 128 && target === numberType) return -1; - if (source === numberType && target.flags & 128) + if (source.flags & 128 && target.flags & 128) { + if (result = enumRelatedTo(source, target, reportErrors)) { + return result; + } + } + if (source.flags & 256 && target === stringType) return -1; - } - if (source.flags & 8 && target.flags & 8) { - return -1; + if (relation === assignableRelation || relation === comparableRelation) { + if (source.flags & (1 | 134217728)) + return -1; + if (source === numberType && target.flags & 128) + return -1; + } + if (source.flags & 8 && target.flags & 8) { + return -1; + } } if (source.flags & 1048576) { if (hasExcessProperties(source, target, reportErrors)) { @@ -16553,6 +17085,7 @@ var ts; if (!constraint || constraint.flags & 1) { constraint = emptyObjectType; } + constraint = getTypeWithThisArgument(constraint, source); var reportConstraintErrors = reportErrors && constraint !== emptyObjectType; if (result = isRelatedTo(constraint, target, reportConstraintErrors)) { errorInfo = saveErrorInfo; @@ -16603,7 +17136,7 @@ var ts; if (type.flags & 80896) { var resolved = resolveStructuredTypeMembers(type); if ((relation === assignableRelation || relation === comparableRelation) && - (type === globalObjectType || resolved.properties.length === 0) || + (type === globalObjectType || isEmptyObjectType(resolved)) || resolved.stringIndexInfo || resolved.numberIndexInfo || getPropertyOfType(type, name)) { return true; } @@ -16618,6 +17151,13 @@ var ts; } return false; } + function isEmptyObjectType(t) { + return t.properties.length === 0 && + t.callSignatures.length === 0 && + t.constructSignatures.length === 0 && + !t.stringIndexInfo && + !t.numberIndexInfo; + } function hasExcessProperties(source, target, reportErrors) { if (!(target.flags & 67108864) && maybeTypeOfKind(target, 80896)) { for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) { @@ -17246,10 +17786,6 @@ var ts; } return flags & 96; } - function getNullableTypeOfKind(kind) { - return kind & 64 ? kind & 32 ? - getUnionType([nullType, undefinedType]) : nullType : undefinedType; - } function addNullableKind(type, kind) { if ((getNullableKind(type) & kind) !== kind) { var types = [type]; @@ -17263,32 +17799,8 @@ var ts; } return type; } - function removeNullableKind(type, kind) { - if (type.flags & 16384 && getNullableKind(type) & kind) { - var firstType = void 0; - var types = void 0; - for (var _i = 0, _a = type.types; _i < _a.length; _i++) { - var t = _a[_i]; - if (!(t.flags & kind)) { - if (!firstType) { - firstType = t; - } - else { - if (!types) { - types = [firstType]; - } - types.push(t); - } - } - } - if (firstType) { - type = types ? getUnionType(types) : firstType; - } - } - return type; - } function getNonNullableType(type) { - return strictNullChecks ? removeNullableKind(type, 96) : type; + return strictNullChecks ? getTypeWithFacts(type, 524288) : type; } function isObjectLiteralType(type) { return type.symbol && (type.symbol.flags & (4096 | 2048)) !== 0 && @@ -17397,25 +17909,25 @@ var ts; var typeAsString = typeToString(getWidenedType(type)); var diagnostic; switch (declaration.kind) { + case 145: case 144: - case 143: diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type; break; - case 141: + case 142: diagnostic = declaration.dotDotDotToken ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type; break; - case 168: + case 169: diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type; break; - case 219: + case 220: + case 147: case 146: - case 145: - case 148: case 149: - case 178: + case 150: case 179: + case 180: if (!declaration.name) { error(declaration, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString); return; @@ -17702,18 +18214,7 @@ var ts; } return context.inferredTypes; } - function createTransientIdentifier(symbol, location) { - var result = ts.createNode(69); - result.text = symbol.name; - result.resolvedSymbol = symbol; - result.parent = location; - result.id = -1; - return result; - } function getResolvedSymbol(node) { - if (node.id === -1) { - return node.resolvedSymbol; - } var links = getNodeLinks(node); if (!links.resolvedSymbol) { links.resolvedSymbol = !ts.nodeIsMissing(node) && resolveName(node, node.text, 107455 | 1048576, ts.Diagnostics.Cannot_find_name_0, node) || unknownSymbol; @@ -17723,10 +18224,10 @@ var ts; function isInTypeQuery(node) { while (node) { switch (node.kind) { - case 157: + case 158: return true; case 69: - case 138: + case 139: node = node.parent; continue; default: @@ -17735,7 +18236,7 @@ var ts; } ts.Debug.fail("should not get here"); } - function getAssignmentKey(node) { + function getFlowCacheKey(node) { if (node.kind === 69) { var symbol = getResolvedSymbol(node); return symbol !== unknownSymbol ? "" + getSymbolId(symbol) : undefined; @@ -17743,116 +18244,12 @@ var ts; if (node.kind === 97) { return "0"; } - if (node.kind === 171) { - var key = getAssignmentKey(node.expression); + if (node.kind === 172) { + var key = getFlowCacheKey(node.expression); return key && key + "." + node.name.text; } return undefined; } - function hasInitializer(node) { - return !!(node.initializer || ts.isBindingPattern(node.parent) && hasInitializer(node.parent.parent)); - } - function getAssignmentMap(node) { - var assignmentMap = {}; - visit(node); - return assignmentMap; - function visitReference(node) { - if (isAssignmentTarget(node) || isCompoundAssignmentTarget(node)) { - var key = getAssignmentKey(node); - if (key) { - assignmentMap[key] = true; - } - } - ts.forEachChild(node, visit); - } - function visitVariableDeclaration(node) { - if (!ts.isBindingPattern(node.name) && hasInitializer(node)) { - assignmentMap[getSymbolId(getSymbolOfNode(node))] = true; - } - ts.forEachChild(node, visit); - } - function visit(node) { - switch (node.kind) { - case 69: - case 171: - visitReference(node); - break; - case 217: - case 168: - visitVariableDeclaration(node); - break; - case 186: - case 166: - case 167: - case 169: - case 170: - case 172: - case 173: - case 174: - case 176: - case 194: - case 195: - case 177: - case 184: - case 180: - case 183: - case 181: - case 182: - case 185: - case 189: - case 187: - case 190: - case 198: - case 199: - case 201: - case 202: - case 203: - case 204: - case 205: - case 206: - case 207: - case 210: - case 211: - case 212: - case 226: - case 248: - case 249: - case 213: - case 214: - case 215: - case 251: - case 240: - case 241: - case 245: - case 246: - case 242: - case 247: - ts.forEachChild(node, visit); - break; - } - } - } - function isReferenceAssignedWithin(reference, node) { - if (reference.kind !== 97) { - var key = getAssignmentKey(reference); - if (key) { - var links = getNodeLinks(node); - return (links.assignmentMap || (links.assignmentMap = getAssignmentMap(node)))[key]; - } - } - return false; - } - function isAnyPartOfReferenceAssignedWithin(reference, node) { - while (true) { - if (isReferenceAssignedWithin(reference, node)) { - return true; - } - if (reference.kind !== 171) { - return false; - } - reference = reference.expression; - } - } function isNullOrUndefinedLiteral(node) { return node.kind === 93 || node.kind === 69 && getResolvedSymbol(node) === undefinedSymbol; @@ -17862,7 +18259,7 @@ var ts; case 69: case 97: return node; - case 171: + case 172: return getLeftmostIdentifierOrThis(node.expression); } return undefined; @@ -17874,95 +18271,359 @@ var ts; return getResolvedSymbol(source) === getResolvedSymbol(target); case 97: return true; - case 171: + case 172: return source.name.text === target.name.text && isMatchingReference(source.expression, target.expression); } } return false; } - function getNarrowedTypeOfReference(type, reference) { - if (!(type.flags & (1 | 80896 | 16384 | 512))) { - return type; - } - var leftmostNode = getLeftmostIdentifierOrThis(reference); - if (!leftmostNode) { - return type; - } - var top; - if (leftmostNode.kind === 69) { - var leftmostSymbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(leftmostNode)); - if (!leftmostSymbol) { - return type; + function containsMatchingReference(source, target) { + while (source.kind === 172) { + source = source.expression; + if (isMatchingReference(source, target)) { + return true; } - var declaration = leftmostSymbol.valueDeclaration; - if (!declaration || declaration.kind !== 217 && declaration.kind !== 141 && declaration.kind !== 168) { - return type; - } - top = getDeclarationContainer(declaration); } - var originalType = type; - var nodeStack = []; - var node = reference; - loop: while (node.parent) { - var child = node; - node = node.parent; - switch (node.kind) { - case 202: - case 187: - case 186: - nodeStack.push({ node: node, child: child }); - break; - case 255: - case 224: - break loop; - default: - if (node === top || ts.isFunctionLikeKind(node.kind)) { - break loop; + return false; + } + 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 === 172 && + 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 & 16384)) { + 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 && declaredType.flags & 16384) { + var reducedTypes = ts.filter(declaredType.types, function (t) { return typeMaybeAssignableTo(assignedType, t); }); + if (reducedTypes.length) { + return reducedTypes.length === 1 ? reducedTypes[0] : getUnionType(reducedTypes); + } + } + return declaredType; + } + function getTypeFacts(type) { + var flags = type.flags; + if (flags & 258) { + return strictNullChecks ? 4079361 : 4194049; + } + if (flags & 132) { + return strictNullChecks ? 4079234 : 4193922; + } + if (flags & 8) { + return strictNullChecks ? 4078980 : 4193668; + } + if (flags & 80896) { + var resolved = resolveStructuredTypeMembers(type); + return resolved.callSignatures.length || resolved.constructSignatures.length || isTypeSubtypeOf(type, globalFunctionType) ? + strictNullChecks ? 1970144 : 4181984 : + strictNullChecks ? 1972176 : 4184016; + } + if (flags & (16 | 32)) { + return 2457472; + } + if (flags & 64) { + return 2340752; + } + if (flags & 16777216) { + return strictNullChecks ? 1981320 : 4193160; + } + if (flags & 512) { + var constraint = getConstraintOfTypeParameter(type); + return constraint ? getTypeFacts(constraint) : 4194303; + } + if (flags & 32768) { + return ts.reduceLeft(type.types, function (flags, type) { return flags |= getTypeFacts(type); }, 0); + } + return 4194303; + } + function getTypeWithFacts(type, include) { + if (!(type.flags & 16384)) { + return getTypeFacts(type) & include ? type : neverType; + } + var firstType; + var types; + for (var _i = 0, _a = type.types; _i < _a.length; _i++) { + var t = _a[_i]; + if (getTypeFacts(t) & include) { + if (!firstType) { + firstType = t; + } + else { + if (!types) { + types = [firstType]; } - break; + types.push(t); + } } } - var nodes; - while (nodes = nodeStack.pop()) { - var node_1 = nodes.node, child = nodes.child; - switch (node_1.kind) { - case 202: - if (child !== node_1.expression) { - type = narrowType(type, node_1.expression, child === node_1.thenStatement); - } - break; - case 187: - if (child !== node_1.condition) { - type = narrowType(type, node_1.condition, child === node_1.whenTrue); - } - break; - case 186: - if (child === node_1.right) { - if (node_1.operatorToken.kind === 51) { - type = narrowType(type, node_1.left, true); - } - else if (node_1.operatorToken.kind === 52) { - type = narrowType(type, node_1.left, false); - } - } - break; - default: - ts.Debug.fail("Unreachable!"); - } - if (type !== originalType && isAnyPartOfReferenceAssignedWithin(reference, node_1)) { - type = originalType; - } - } - if (type === emptyUnionType) { - type = originalType; + return firstType ? types ? getUnionType(types, true) : firstType : neverType; + } + function getTypeWithDefault(type, defaultExpression) { + if (defaultExpression) { + var defaultType = checkExpression(defaultExpression); + return getUnionType([getTypeWithFacts(type, 131072), defaultType]); } return type; + } + function getTypeOfDestructuredProperty(type, name) { + var text = 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) || + unknownType; + } + function getTypeOfDestructuredSpreadElement(type) { + return createArrayType(checkIteratedTypeOrElementType(type, undefined, false) || unknownType); + } + function getAssignedTypeOfBinaryExpression(node) { + return node.parent.kind === 170 || node.parent.kind === 253 ? + getTypeWithDefault(getAssignedType(node), node.right) : + checkExpression(node.right); + } + function getAssignedTypeOfArrayLiteralElement(node, element) { + return getTypeOfDestructuredArrayElement(getAssignedType(node), ts.indexOf(node.elements, element)); + } + function getAssignedTypeOfSpreadElement(node) { + return getTypeOfDestructuredSpreadElement(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 207: + return stringType; + case 208: + return checkRightHandSideOfForOf(parent.expression) || unknownType; + case 187: + return getAssignedTypeOfBinaryExpression(parent); + case 181: + return undefinedType; + case 170: + return getAssignedTypeOfArrayLiteralElement(parent, node); + case 191: + return getAssignedTypeOfSpreadElement(parent); + case 253: + return getAssignedTypeOfPropertyAssignment(parent); + case 254: + return getAssignedTypeOfShorthandPropertyAssignment(parent); + } + return unknownType; + } + function getInitialTypeOfBindingElement(node) { + var pattern = node.parent; + var parentType = getInitialType(pattern.parent); + var type = pattern.kind === 167 ? + getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) : + !node.dotDotDotToken ? + getTypeOfDestructuredArrayElement(parentType, ts.indexOf(pattern.elements, node)) : + getTypeOfDestructuredSpreadElement(parentType); + return getTypeWithDefault(type, node.initializer); + } + function getTypeOfInitializer(node) { + var links = getNodeLinks(node); + return links.resolvedType || checkExpression(node); + } + function getInitialTypeOfVariableDeclaration(node) { + if (node.initializer) { + return getTypeOfInitializer(node.initializer); + } + if (node.parent.parent.kind === 207) { + return stringType; + } + if (node.parent.parent.kind === 208) { + return checkRightHandSideOfForOf(node.parent.parent.expression) || unknownType; + } + return unknownType; + } + function getInitialType(node) { + return node.kind === 218 ? + getInitialTypeOfVariableDeclaration(node) : + getInitialTypeOfBindingElement(node); + } + function getFlowTypeOfReference(reference, declaredType, assumeInitialized) { + var key; + if (!reference.flowNode || assumeInitialized && !(declaredType.flags & 97793)) { + return declaredType; + } + var initialType = assumeInitialized ? declaredType : addNullableKind(declaredType, 32); + var visitedFlowStart = visitedFlowCount; + var result = getTypeAtFlowNode(reference.flowNode); + visitedFlowCount = visitedFlowStart; + if (reference.parent.kind === 196 && getTypeWithFacts(result, 524288) === neverType) { + return declaredType; + } + return result; + function getTypeAtFlowNode(flow) { + while (true) { + if (flow.flags & 256) { + for (var i = visitedFlowStart; i < visitedFlowCount; i++) { + if (visitedFlowNodes[i] === flow) { + return visitedFlowTypes[i]; + } + } + } + var type = void 0; + if (flow.flags & 16) { + type = getTypeAtFlowAssignment(flow); + if (!type) { + flow = flow.antecedent; + continue; + } + } + else if (flow.flags & 96) { + type = getTypeAtFlowCondition(flow); + } + else if (flow.flags & 12) { + if (flow.antecedents.length === 1) { + flow = flow.antecedents[0]; + continue; + } + type = flow.flags & 4 ? + getTypeAtFlowBranchLabel(flow) : + getTypeAtFlowLoopLabel(flow); + } + else if (flow.flags & 1) { + type = declaredType; + } + else { + type = initialType; + } + if (flow.flags & 256) { + visitedFlowNodes[visitedFlowCount] = flow; + visitedFlowTypes[visitedFlowCount] = type; + visitedFlowCount++; + } + return type; + } + } + function getTypeAtFlowAssignment(flow) { + var node = flow.node; + if ((node.kind === 218 || node.kind === 169) && + reference.kind === 69 && + getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(reference)) === getSymbolOfNode(node)) { + return declaredType.flags & 16384 ? + getAssignmentReducedType(declaredType, getInitialType(node)) : + declaredType; + } + if (isMatchingReference(reference, node)) { + return declaredType.flags & 16384 ? + getAssignmentReducedType(declaredType, getAssignedType(node)) : + declaredType; + } + if (containsMatchingReference(reference, node)) { + return declaredType; + } + return undefined; + } + function getTypeAtFlowCondition(flow) { + var type = getTypeAtFlowNode(flow.antecedent); + if (type !== neverType) { + var assumeTrue = (flow.flags & 32) !== 0; + type = narrowType(type, flow.expression, assumeTrue); + if (type === neverType) { + type = narrowType(declaredType, flow.expression, assumeTrue); + } + } + return type; + } + function getTypeAtFlowBranchLabel(flow) { + var antecedentTypes = []; + for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { + var antecedent = _a[_i]; + var type = getTypeAtFlowNode(antecedent); + if (type === declaredType && declaredType === initialType) { + return type; + } + if (!ts.contains(antecedentTypes, type)) { + antecedentTypes.push(type); + } + } + return getUnionType(antecedentTypes); + } + function getTypeAtFlowLoopLabel(flow) { + var id = getFlowNodeId(flow); + var cache = flowLoopCaches[id] || (flowLoopCaches[id] = {}); + if (!key) { + key = getFlowCacheKey(reference); + } + if (cache[key]) { + return cache[key]; + } + for (var i = flowLoopStart; i < flowLoopCount; i++) { + if (flowLoopNodes[i] === flow && flowLoopKeys[i] === key) { + return getUnionType(flowLoopTypes[i]); + } + } + var antecedentTypes = []; + 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 type = getTypeAtFlowNode(antecedent); + flowLoopCount--; + if (cache[key]) { + return cache[key]; + } + if (!ts.contains(antecedentTypes, type)) { + antecedentTypes.push(type); + } + if (type === declaredType) { + break; + } + } + return cache[key] = getUnionType(antecedentTypes); + } function narrowTypeByTruthiness(type, expr, assumeTrue) { - return strictNullChecks && assumeTrue && isMatchingReference(expr, reference) ? getNonNullableType(type) : type; + return isMatchingReference(reference, expr) ? getTypeWithFacts(type, assumeTrue ? 1048576 : 2097152) : type; } function narrowTypeByBinaryExpression(type, expr, assumeTrue) { switch (expr.operatorToken.kind) { + case 56: + return narrowTypeByTruthiness(type, expr.left, assumeTrue); case 30: case 31: case 32: @@ -17970,16 +18631,14 @@ var ts; if (isNullOrUndefinedLiteral(expr.right)) { return narrowTypeByNullCheck(type, expr, assumeTrue); } - if (expr.left.kind === 181 && expr.right.kind === 9) { + if (expr.left.kind === 182 && expr.right.kind === 9) { return narrowTypeByTypeof(type, expr, assumeTrue); } break; - case 51: - return narrowTypeByAnd(type, expr, assumeTrue); - case 52: - return narrowTypeByOr(type, expr, assumeTrue); case 91: return narrowTypeByInstanceof(type, expr, assumeTrue); + case 24: + return narrowType(type, expr.right, assumeTrue); } return type; } @@ -17988,75 +18647,49 @@ var ts; if (operator === 31 || operator === 33) { assumeTrue = !assumeTrue; } - if (!strictNullChecks || !isMatchingReference(expr.left, reference)) { + if (!strictNullChecks || !isMatchingReference(reference, expr.left)) { return type; } var doubleEquals = operator === 30 || operator === 31; - var exprNullableKind = doubleEquals ? 96 : - expr.right.kind === 93 ? 64 : 32; - if (assumeTrue) { - var nullableKind = getNullableKind(type) & exprNullableKind; - return nullableKind ? getNullableTypeOfKind(nullableKind) : type; - } - return removeNullableKind(type, exprNullableKind); + var facts = doubleEquals ? + assumeTrue ? 65536 : 524288 : + expr.right.kind === 93 ? + assumeTrue ? 32768 : 262144 : + assumeTrue ? 16384 : 131072; + return getTypeWithFacts(type, facts); } function narrowTypeByTypeof(type, expr, assumeTrue) { var left = expr.left; var right = expr.right; - if (!isMatchingReference(left.expression, reference)) { + if (!isMatchingReference(reference, left.expression)) { + if (containsMatchingReference(reference, left.expression)) { + return declaredType; + } return type; } if (expr.operatorToken.kind === 31 || expr.operatorToken.kind === 33) { assumeTrue = !assumeTrue; } - var typeInfo = primitiveTypeInfo[right.text]; - if (typeInfo && typeInfo.type === undefinedType) { - return type; - } - var flags; - if (typeInfo) { - flags = typeInfo.flags; - } - else { - assumeTrue = !assumeTrue; - flags = 132 | 258 | 16777216 | 8; - } - if (!(type.flags & 16384)) { - if (assumeTrue && typeInfo && isTypeSubtypeOf(typeInfo.type, type)) { - return typeInfo.type; + if (assumeTrue && !(type.flags & 16384)) { + var targetType = ts.getProperty(typeofTypesByName, right.text); + if (targetType && isTypeSubtypeOf(targetType, type)) { + return targetType; } - return filterUnion(type) ? type : emptyUnionType; - } - return getUnionType(ts.filter(type.types, filterUnion), true); - function filterUnion(type) { - return assumeTrue === !!(type.flags & flags); - } - } - function narrowTypeByAnd(type, expr, assumeTrue) { - if (assumeTrue) { - return narrowType(narrowType(type, expr.left, true), expr.right, true); - } - else { - return getUnionType([ - narrowType(type, expr.left, false), - narrowType(type, expr.right, false) - ]); - } - } - function narrowTypeByOr(type, expr, assumeTrue) { - if (assumeTrue) { - return getUnionType([ - narrowType(type, expr.left, true), - narrowType(type, expr.right, true) - ]); - } - else { - return narrowType(narrowType(type, expr.left, false), expr.right, false); } + var facts = assumeTrue ? + ts.getProperty(typeofEQFacts, right.text) || 64 : + ts.getProperty(typeofNEFacts, right.text) || 8192; + return getTypeWithFacts(type, facts); } function narrowTypeByInstanceof(type, expr, assumeTrue) { - if (isTypeAny(type) || !isMatchingReference(expr.left, reference)) { + if (!isMatchingReference(reference, expr.left)) { + if (containsMatchingReference(reference, expr.left)) { + return declaredType; + } + return type; + } + if (isTypeAny(type)) { return type; } var rightType = checkExpression(expr.right); @@ -18088,27 +18721,25 @@ var ts; } return type; } - function getNarrowedType(originalType, narrowedTypeCandidate, assumeTrue) { + function getNarrowedType(type, candidate, assumeTrue) { if (!assumeTrue) { - if (originalType.flags & 16384) { - return getUnionType(ts.filter(originalType.types, function (t) { return !isTypeSubtypeOf(t, narrowedTypeCandidate); })); - } - return originalType; + return type.flags & 16384 ? + getUnionType(ts.filter(type.types, function (t) { return !isTypeSubtypeOf(t, candidate); })) : + type; } - if (originalType.flags & 16384) { - var assignableConstituents = ts.filter(originalType.types, function (t) { return isTypeAssignableTo(t, narrowedTypeCandidate); }); + if (type.flags & 16384) { + var assignableConstituents = ts.filter(type.types, function (t) { return isTypeAssignableTo(t, candidate); }); if (assignableConstituents.length) { return getUnionType(assignableConstituents); } } - var targetType = originalType.flags & 512 ? getApparentType(originalType) : originalType; - if (isTypeAssignableTo(narrowedTypeCandidate, targetType)) { - return narrowedTypeCandidate; - } - return originalType; + var targetType = type.flags & 512 ? getApparentType(type) : type; + return isTypeAssignableTo(candidate, targetType) ? candidate : + isTypeAssignableTo(type, candidate) ? type : + neverType; } function narrowTypeByTypePredicate(type, callExpression, assumeTrue) { - if (type.flags & 1) { + if (type.flags & 1 || !hasMatchingArgument(callExpression, reference)) { return type; } var signature = getResolvedSignature(callExpression); @@ -18118,18 +18749,26 @@ var ts; } if (ts.isIdentifierTypePredicate(predicate)) { var predicateArgument = callExpression.arguments[predicate.parameterIndex]; - if (predicateArgument && isMatchingReference(predicateArgument, reference)) { - return getNarrowedType(type, predicate.type, assumeTrue); + if (predicateArgument) { + if (isMatchingReference(reference, predicateArgument)) { + return getNarrowedType(type, predicate.type, assumeTrue); + } + if (containsMatchingReference(reference, predicateArgument)) { + return declaredType; + } } } else { var invokedExpression = skipParenthesizedNodes(callExpression.expression); - if (invokedExpression.kind === 172 || invokedExpression.kind === 171) { + if (invokedExpression.kind === 173 || invokedExpression.kind === 172) { var accessExpression = invokedExpression; var possibleReference = skipParenthesizedNodes(accessExpression.expression); - if (isMatchingReference(possibleReference, reference)) { + if (isMatchingReference(reference, possibleReference)) { return getNarrowedType(type, predicate.type, assumeTrue); } + if (containsMatchingReference(reference, possibleReference)) { + return declaredType; + } } } return type; @@ -18138,15 +18777,15 @@ var ts; switch (expr.kind) { case 69: case 97: - case 171: + case 172: return narrowTypeByTruthiness(type, expr, assumeTrue); - case 173: + case 174: return narrowTypeByTypePredicate(type, expr, assumeTrue); - case 177: + case 178: return narrowType(type, expr.expression, assumeTrue); - case 186: + case 187: return narrowTypeByBinaryExpression(type, expr, assumeTrue); - case 184: + case 185: if (expr.operator === 49) { return narrowType(type, expr.operand, !assumeTrue); } @@ -18156,120 +18795,30 @@ var ts; } } function getTypeOfSymbolAtLocation(symbol, location) { - var type = getTypeOfSymbol(symbol); if (location.kind === 69) { if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) { location = location.parent; } - if (ts.isExpression(location)) { - checkExpression(location); - if (getNodeLinks(location).resolvedSymbol === symbol) { - return getNarrowedTypeOfReference(type, location); + if (ts.isExpression(location) && !ts.isAssignmentTarget(location)) { + var type = checkExpression(location); + if (getExportSymbolOfValueSymbolIfExported(getNodeLinks(location).resolvedSymbol) === symbol) { + return type; } } } - return getNarrowedTypeOfReference(type, createTransientIdentifier(symbol, location)); + return getTypeOfSymbol(symbol); } function skipParenthesizedNodes(expression) { - while (expression.kind === 177) { + while (expression.kind === 178) { expression = expression.expression; } return expression; } - function findFirstAssignment(symbol, container) { - return visit(ts.isFunctionLike(container) ? container.body : container); - function visit(node) { - switch (node.kind) { - case 69: - var assignment = getAssignmentRoot(node); - return assignment && getResolvedSymbol(node) === symbol ? assignment : undefined; - case 186: - case 217: - case 168: - case 166: - case 167: - case 169: - case 170: - case 171: - case 172: - case 173: - case 174: - case 176: - case 194: - case 195: - case 177: - case 184: - case 180: - case 183: - case 181: - case 182: - case 185: - case 189: - case 187: - case 190: - case 199: - case 201: - case 202: - case 203: - case 204: - case 205: - case 206: - case 207: - case 210: - case 211: - case 212: - case 226: - case 248: - case 249: - case 213: - case 214: - case 215: - case 251: - case 240: - case 241: - case 245: - case 246: - case 242: - case 247: - case 198: - case 255: - return ts.forEachChild(node, visit); - } - return undefined; - } - } - function checkVariableAssignedBefore(symbol, reference) { - if (!(symbol.flags & 3)) { - return; - } - var declaration = symbol.valueDeclaration; - if (!declaration || declaration.kind !== 217 || declaration.initializer || ts.isInAmbientContext(declaration)) { - return; - } - var parentParentKind = declaration.parent.parent.kind; - if (parentParentKind === 207 || parentParentKind === 206) { - return; - } - var declarationContainer = ts.getContainingFunction(declaration) || ts.getSourceFileOfNode(declaration); - var referenceContainer = ts.getContainingFunction(reference) || ts.getSourceFileOfNode(reference); - if (declarationContainer !== referenceContainer) { - return; - } - var links = getSymbolLinks(symbol); - if (!links.firstAssignmentChecked) { - links.firstAssignmentChecked = true; - links.firstAssignment = findFirstAssignment(symbol, declarationContainer); - } - if (links.firstAssignment && links.firstAssignment.end <= reference.pos) { - return; - } - error(reference, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); - } function checkIdentifier(node) { var symbol = getResolvedSymbol(node); if (symbol === argumentsSymbol) { var container = ts.getContainingFunction(node); - if (container.kind === 179) { + if (container.kind === 180) { if (languageVersion < 2) { error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression); } @@ -18284,7 +18833,7 @@ var ts; var localOrExportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); if (languageVersion === 2 && localOrExportSymbol.flags & 32 - && localOrExportSymbol.valueDeclaration.kind === 220 + && localOrExportSymbol.valueDeclaration.kind === 221 && ts.nodeIsDecorated(localOrExportSymbol.valueDeclaration)) { var container = ts.getContainingClass(node); while (container !== undefined) { @@ -18300,10 +18849,19 @@ var ts; checkCollisionWithCapturedThisVariable(node, node); checkNestedBlockScopedBinding(node, symbol); var type = getTypeOfSymbol(localOrExportSymbol); - if (strictNullChecks && !isAssignmentTarget(node) && !(type.flags & 1) && !(getNullableKind(type) & 32)) { - checkVariableAssignedBefore(symbol, node); + if (!(localOrExportSymbol.flags & 3) || ts.isAssignmentTarget(node)) { + return type; } - return getNarrowedTypeOfReference(type, node); + var declaration = localOrExportSymbol.valueDeclaration; + var assumeInitialized = !strictNullChecks || (type.flags & 1) !== 0 || !declaration || + ts.getRootDeclaration(declaration).kind === 142 || ts.isInAmbientContext(declaration) || + ts.getContainingFunctionOrModule(declaration) !== ts.getContainingFunctionOrModule(node); + var flowType = getFlowTypeOfReference(node, type, assumeInitialized); + if (!assumeInitialized && !(getNullableKind(type) & 32) && getNullableKind(flowType) & 32) { + error(node, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); + return type; + } + return flowType; } function isInsideFunction(node, threshold) { var current = node; @@ -18318,7 +18876,7 @@ var ts; function checkNestedBlockScopedBinding(node, symbol) { if (languageVersion >= 2 || (symbol.flags & (2 | 32)) === 0 || - symbol.valueDeclaration.parent.kind === 251) { + symbol.valueDeclaration.parent.kind === 252) { return; } var container = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration); @@ -18336,8 +18894,8 @@ var ts; if (usedInFunction) { getNodeLinks(current).flags |= 65536; } - if (container.kind === 205 && - ts.getAncestor(symbol.valueDeclaration, 218).parent === container && + if (container.kind === 206 && + ts.getAncestor(symbol.valueDeclaration, 219).parent === container && isAssignedInBodyOfForStatement(node, container)) { getNodeLinks(symbol.valueDeclaration).flags |= 2097152; } @@ -18349,14 +18907,14 @@ var ts; } function isAssignedInBodyOfForStatement(node, container) { var current = node; - while (current.parent.kind === 177) { + while (current.parent.kind === 178) { current = current.parent; } var isAssigned = false; - if (isAssignmentTarget(current)) { + if (ts.isAssignmentTarget(current)) { isAssigned = true; } - else if ((current.parent.kind === 184 || current.parent.kind === 185)) { + else if ((current.parent.kind === 185 || current.parent.kind === 186)) { var expr = current.parent; isAssigned = expr.operator === 41 || expr.operator === 42; } @@ -18375,7 +18933,7 @@ var ts; } function captureLexicalThis(node, container) { getNodeLinks(node).flags |= 2; - if (container.kind === 144 || container.kind === 147) { + if (container.kind === 145 || container.kind === 148) { var classNode = container.parent; getNodeLinks(classNode).flags |= 4; } @@ -18409,7 +18967,7 @@ var ts; function checkThisExpression(node) { var container = ts.getThisContainer(node, true); var needToCaptureLexicalThis = false; - if (container.kind === 147) { + if (container.kind === 148) { var containingClassDecl = container.parent; var baseTypeNode = ts.getClassExtendsHeritageClauseElement(containingClassDecl); if (baseTypeNode && !classDeclarationExtendsNull(containingClassDecl)) { @@ -18419,29 +18977,29 @@ var ts; } } } - if (container.kind === 179) { + if (container.kind === 180) { container = ts.getThisContainer(container, false); needToCaptureLexicalThis = (languageVersion < 2); } switch (container.kind) { - case 224: + case 225: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body); break; - case 223: + case 224: error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location); break; - case 147: + case 148: if (isInConstructorArgumentInitializer(node, container)) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments); } break; + case 145: case 144: - case 143: if (container.flags & 32) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); } break; - case 139: + case 140: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name); break; } @@ -18449,6 +19007,18 @@ var ts; captureLexicalThis(node, container); } if (ts.isFunctionLike(container)) { + if (container.kind === 179 && + ts.isInJavaScriptFile(container.parent) && + 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 type = getContextuallyTypedThisType(container); if (type) { return type; @@ -18457,35 +19027,17 @@ var ts; if (signature.thisType) { return signature.thisType; } - if (container.parent && container.parent.kind === 170) { - var type_1 = checkExpressionCached(container.parent); - if (type_1) { - return type_1; - } - } } if (ts.isClassLike(container.parent)) { var symbol = getSymbolOfNode(container.parent); var type = container.flags & 32 ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType; - return getNarrowedTypeOfReference(type, node); + return getFlowTypeOfReference(node, type, true); } if (ts.isInJavaScriptFile(node)) { var type = getTypeForThisExpressionFromJSDoc(container); if (type && type !== unknownType) { return type; } - if (container.kind === 178) { - if (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); - } - } - } } if (compilerOptions.noImplicitThis) { error(node, ts.Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation); @@ -18494,27 +19046,27 @@ var ts; } function getTypeForThisExpressionFromJSDoc(node) { var typeTag = ts.getJSDocTypeTag(node); - if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === 268) { + if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === 269) { var jsDocFunctionType = typeTag.typeExpression.type; - if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === 271) { + if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === 272) { return getTypeFromTypeNode(jsDocFunctionType.parameters[0].type); } } } function isInConstructorArgumentInitializer(node, constructorDecl) { for (var n = node; n && n !== constructorDecl; n = n.parent) { - if (n.kind === 141) { + if (n.kind === 142) { return true; } } return false; } function checkSuperExpression(node) { - var isCallExpression = node.parent.kind === 173 && node.parent.expression === node; + var isCallExpression = node.parent.kind === 174 && node.parent.expression === node; var container = ts.getSuperContainer(node, true); var needToCaptureLexicalThis = false; if (!isCallExpression) { - while (container && container.kind === 179) { + while (container && container.kind === 180) { container = ts.getSuperContainer(container, true); needToCaptureLexicalThis = languageVersion < 2; } @@ -18523,16 +19075,16 @@ var ts; var nodeCheckFlag = 0; if (!canUseSuperExpression) { var current = node; - while (current && current !== container && current.kind !== 139) { + while (current && current !== container && current.kind !== 140) { current = current.parent; } - if (current && current.kind === 139) { + if (current && current.kind === 140) { 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 === 170)) { + else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 171)) { error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions); } else { @@ -18547,8 +19099,8 @@ var ts; nodeCheckFlag = 256; } getNodeLinks(node).flags |= nodeCheckFlag; - if (container.kind === 146 && container.flags & 256) { - if (ts.isSuperPropertyOrElementAccess(node.parent) && isAssignmentTarget(node.parent)) { + if (container.kind === 147 && container.flags & 256) { + if (ts.isSuperPropertyOrElementAccess(node.parent) && ts.isAssignmentTarget(node.parent)) { getNodeLinks(container).flags |= 4096; } else { @@ -18558,7 +19110,7 @@ var ts; if (needToCaptureLexicalThis) { captureLexicalThis(node.parent, container); } - if (container.parent.kind === 170) { + if (container.parent.kind === 171) { 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; @@ -18576,7 +19128,7 @@ var ts; } return unknownType; } - if (container.kind === 147 && isInConstructorArgumentInitializer(node, container)) { + if (container.kind === 148 && isInConstructorArgumentInitializer(node, container)) { error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments); return unknownType; } @@ -18588,24 +19140,24 @@ var ts; return false; } if (isCallExpression) { - return container.kind === 147; + return container.kind === 148; } else { - if (ts.isClassLike(container.parent) || container.parent.kind === 170) { + if (ts.isClassLike(container.parent) || container.parent.kind === 171) { if (container.flags & 32) { - return container.kind === 146 || - container.kind === 145 || - container.kind === 148 || - container.kind === 149; + return container.kind === 147 || + container.kind === 146 || + container.kind === 149 || + container.kind === 150; } else { - return container.kind === 146 || - container.kind === 145 || - container.kind === 148 || + return container.kind === 147 || + container.kind === 146 || container.kind === 149 || + container.kind === 150 || + container.kind === 145 || container.kind === 144 || - container.kind === 143 || - container.kind === 147; + container.kind === 148; } } } @@ -18613,9 +19165,7 @@ var ts; } } function getContextuallyTypedThisType(func) { - if ((isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) && - isContextSensitive(func) && - func.kind !== 179) { + if (isContextSensitiveFunctionOrObjectLiteralMethod(func) && func.kind !== 180) { var contextualSignature = getContextualSignature(func); if (contextualSignature) { return contextualSignature.thisType; @@ -18625,33 +19175,63 @@ var ts; } function getContextuallyTypedParameterType(parameter) { var func = parameter.parent; - if (isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) { - if (isContextSensitive(func)) { - 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 (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)); + if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) { + var iife = getImmediatelyInvokedFunctionExpression(func); + if (iife) { + var indexOfParameter = ts.indexOf(func.parameters, parameter); + if (iife.arguments && indexOfParameter < iife.arguments.length) { + if (parameter.dotDotDotToken) { + var restTypes = []; + for (var i = indexOfParameter; i < iife.arguments.length; i++) { + restTypes.push(getTypeOfExpression(iife.arguments[i])); + } + return createArrayType(getUnionType(restTypes)); } + var links = getNodeLinks(iife); + var cached = links.resolvedSignature; + links.resolvedSignature = anySignature; + var type = checkExpression(iife.arguments[indexOfParameter]); + 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 (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 getImmediatelyInvokedFunctionExpression(func) { + if (isFunctionExpressionOrArrowFunction(func)) { + var prev = func; + var parent_8 = func.parent; + while (parent_8.kind === 178) { + prev = parent_8; + parent_8 = parent_8.parent; + } + if (parent_8.kind === 174 && parent_8.expression === prev) { + return parent_8; + } + } + } function getContextualTypeForInitializerExpression(node) { var declaration = node.parent; if (node === declaration.initializer) { if (declaration.type) { return getTypeFromTypeNode(declaration.type); } - if (declaration.kind === 141) { + if (declaration.kind === 142) { var type = getContextuallyTypedParameterType(declaration); if (type) { return type; @@ -18696,7 +19276,7 @@ var ts; } function isInParameterInitializerBeforeContainingFunction(node) { while (node.parent && !ts.isFunctionLike(node.parent)) { - if (node.parent.kind === 141 && node.parent.initializer === node) { + if (node.parent.kind === 142 && node.parent.initializer === node) { return true; } node = node.parent; @@ -18705,8 +19285,8 @@ var ts; } function getContextualReturnType(functionDecl) { if (functionDecl.type || - functionDecl.kind === 147 || - functionDecl.kind === 148 && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(functionDecl.symbol, 149))) { + functionDecl.kind === 148 || + functionDecl.kind === 149 && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(functionDecl.symbol, 150))) { return getReturnTypeOfSignature(getSignatureFromDeclaration(functionDecl)); } var signature = getContextualSignatureForFunctionLikeDeclaration(functionDecl); @@ -18719,13 +19299,13 @@ var ts; var args = getEffectiveCallArguments(callTarget); var argIndex = ts.indexOf(args, arg); if (argIndex >= 0) { - var signature = getResolvedSignature(callTarget); + var signature = getResolvedOrAnySignature(callTarget); return getTypeAtPosition(signature, argIndex); } return undefined; } function getContextualTypeForSubstitutionExpression(template, substitutionExpression) { - if (template.parent.kind === 175) { + if (template.parent.kind === 176) { return getContextualTypeForArgument(template.parent, substitutionExpression); } return undefined; @@ -18833,13 +19413,13 @@ var ts; var kind = attribute.kind; var jsxElement = attribute.parent; var attrsType = getJsxElementAttributesType(jsxElement); - if (attribute.kind === 245) { + if (attribute.kind === 246) { if (!attrsType || isTypeAny(attrsType)) { return undefined; } return getTypeOfPropertyOfType(attrsType, attribute.name.text); } - else if (attribute.kind === 246) { + else if (attribute.kind === 247) { return attrsType; } ts.Debug.fail("Expected JsxAttribute or JsxSpreadAttribute, got ts.SyntaxKind[" + kind + "]"); @@ -18857,40 +19437,40 @@ var ts; } var parent = node.parent; switch (parent.kind) { - case 217: - case 141: + case 218: + case 142: + case 145: case 144: - case 143: - case 168: - return getContextualTypeForInitializerExpression(node); - case 179: - case 210: - return getContextualTypeForReturnExpression(node); - case 189: - return getContextualTypeForYieldOperand(parent); - case 173: - case 174: - return getContextualTypeForArgument(parent, node); - case 176: - case 194: - return getTypeFromTypeNode(parent.type); - case 186: - return getContextualTypeForBinaryOperand(node); - case 252: - return getContextualTypeForObjectLiteralElement(parent); case 169: - return getContextualTypeForElementExpression(node); - case 187: - return getContextualTypeForConditionalOperand(node); - case 196: - ts.Debug.assert(parent.parent.kind === 188); - return getContextualTypeForSubstitutionExpression(parent.parent, node); + return getContextualTypeForInitializerExpression(node); + case 180: + case 211: + return getContextualTypeForReturnExpression(node); + case 190: + return getContextualTypeForYieldOperand(parent); + case 174: + case 175: + return getContextualTypeForArgument(parent, node); case 177: + case 195: + return getTypeFromTypeNode(parent.type); + case 187: + return getContextualTypeForBinaryOperand(node); + case 253: + return getContextualTypeForObjectLiteralElement(parent); + case 170: + return getContextualTypeForElementExpression(node); + case 188: + return getContextualTypeForConditionalOperand(node); + case 197: + ts.Debug.assert(parent.parent.kind === 189); + return getContextualTypeForSubstitutionExpression(parent.parent, node); + case 178: return getContextualType(parent); - case 247: + case 248: return getContextualType(parent); - case 245: case 246: + case 247: return getContextualTypeForJsxAttribute(parent); } return undefined; @@ -18905,18 +19485,21 @@ var ts; } } function isFunctionExpressionOrArrowFunction(node) { - return node.kind === 178 || node.kind === 179; + return node.kind === 179 || node.kind === 180; } 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 !== 146 || ts.isObjectLiteralMethod(node)); - var type = ts.isObjectLiteralMethod(node) - ? getContextualTypeForObjectLiteralMethod(node) - : getApparentTypeOfContextualType(node); + ts.Debug.assert(node.kind !== 147 || ts.isObjectLiteralMethod(node)); + var type = getContextualTypeForFunctionLikeDeclaration(node); if (!type) { return undefined; } @@ -18951,53 +19534,22 @@ var ts; function isInferentialContext(mapper) { return mapper && mapper.context; } - function getAssignmentRoot(node) { - while (node.parent.kind === 177) { - node = node.parent; - } - while (true) { - if (node.parent.kind === 252) { - node = node.parent.parent; - } - else if (node.parent.kind === 169) { - node = node.parent; - } - else { - break; - } - } - var parent = node.parent; - return parent.kind === 186 && - parent.operatorToken.kind === 56 && - parent.left === node ? parent : undefined; - } - function isAssignmentTarget(node) { - return !!getAssignmentRoot(node); - } - function isCompoundAssignmentTarget(node) { - var parent = node.parent; - if (parent.kind === 186 && parent.left === node) { - var operator = parent.operatorToken.kind; - return operator >= 56 && operator <= 68; - } - return false; - } function checkSpreadElementExpression(node, contextualMapper) { var arrayOrIterableType = checkExpressionCached(node.expression, contextualMapper); return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, false); } function hasDefaultValue(node) { - return (node.kind === 168 && !!node.initializer) || - (node.kind === 186 && node.operatorToken.kind === 56); + return (node.kind === 169 && !!node.initializer) || + (node.kind === 187 && node.operatorToken.kind === 56); } function checkArrayLiteral(node, contextualMapper) { var elements = node.elements; var hasSpreadElement = false; var elementTypes = []; - var inDestructuringPattern = isAssignmentTarget(node); + var inDestructuringPattern = ts.isAssignmentTarget(node); for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) { var e = elements_1[_i]; - if (inDestructuringPattern && e.kind === 190) { + if (inDestructuringPattern && e.kind === 191) { var restArrayType = checkExpression(e.expression, contextualMapper); var restElementType = getIndexTypeOfType(restArrayType, 1) || (languageVersion >= 2 ? getElementTypeOfIterable(restArrayType, undefined) : undefined); @@ -19009,7 +19561,7 @@ var ts; var type = checkExpression(e, contextualMapper); elementTypes.push(type); } - hasSpreadElement = hasSpreadElement || e.kind === 190; + hasSpreadElement = hasSpreadElement || e.kind === 191; } if (!hasSpreadElement) { if (inDestructuringPattern && elementTypes.length) { @@ -19020,7 +19572,7 @@ var ts; var contextualType = getApparentTypeOfContextualType(node); if (contextualType && contextualTypeIsTupleLikeType(contextualType)) { var pattern = contextualType.pattern; - if (pattern && (pattern.kind === 167 || pattern.kind === 169)) { + if (pattern && (pattern.kind === 168 || pattern.kind === 170)) { var patternElements = pattern.elements; for (var i = elementTypes.length; i < patternElements.length; i++) { var patternElement = patternElements[i]; @@ -19028,7 +19580,7 @@ var ts; elementTypes.push(contextualType.elementTypes[i]); } else { - if (patternElement.kind !== 192) { + if (patternElement.kind !== 193) { error(patternElement, ts.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value); } elementTypes.push(unknownType); @@ -19043,7 +19595,7 @@ var ts; return createArrayType(elementTypes.length ? getUnionType(elementTypes) : emptyArrayElementType); } function isNumericName(name) { - return name.kind === 139 ? isNumericComputedName(name) : isNumericLiteralName(name.text); + return name.kind === 140 ? isNumericComputedName(name) : isNumericLiteralName(name.text); } function isNumericComputedName(name) { return isTypeAnyOrAllConstituentTypesHaveKind(checkComputedPropertyName(name), 132); @@ -19078,13 +19630,13 @@ var ts; return createIndexInfo(unionType, false); } function checkObjectLiteral(node, contextualMapper) { - var inDestructuringPattern = isAssignmentTarget(node); + var inDestructuringPattern = ts.isAssignmentTarget(node); checkGrammarObjectLiteralExpression(node, inDestructuringPattern); var propertiesTable = {}; var propertiesArray = []; var contextualType = getApparentTypeOfContextualType(node); var contextualTypeHasPattern = contextualType && contextualType.pattern && - (contextualType.pattern.kind === 166 || contextualType.pattern.kind === 170); + (contextualType.pattern.kind === 167 || contextualType.pattern.kind === 171); var typeFlags = 0; var patternWithComputedProperties = false; var hasComputedStringProperty = false; @@ -19092,25 +19644,25 @@ var ts; for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { var memberDecl = _a[_i]; var member = memberDecl.symbol; - if (memberDecl.kind === 252 || - memberDecl.kind === 253 || + if (memberDecl.kind === 253 || + memberDecl.kind === 254 || ts.isObjectLiteralMethod(memberDecl)) { var type = void 0; - if (memberDecl.kind === 252) { + if (memberDecl.kind === 253) { type = checkPropertyAssignment(memberDecl, contextualMapper); } - else if (memberDecl.kind === 146) { + else if (memberDecl.kind === 147) { type = checkObjectLiteralMethod(memberDecl, contextualMapper); } else { - ts.Debug.assert(memberDecl.kind === 253); + ts.Debug.assert(memberDecl.kind === 254); type = checkExpression(memberDecl.name, contextualMapper); } typeFlags |= type.flags; var prop = createSymbol(4 | 67108864 | member.flags, member.name); if (inDestructuringPattern) { - var isOptional = (memberDecl.kind === 252 && hasDefaultValue(memberDecl.initializer)) || - (memberDecl.kind === 253 && memberDecl.objectAssignmentInitializer); + var isOptional = (memberDecl.kind === 253 && hasDefaultValue(memberDecl.initializer)) || + (memberDecl.kind === 254 && memberDecl.objectAssignmentInitializer); if (isOptional) { prop.flags |= 536870912; } @@ -19137,7 +19689,7 @@ var ts; member = prop; } else { - ts.Debug.assert(memberDecl.kind === 148 || memberDecl.kind === 149); + ts.Debug.assert(memberDecl.kind === 149 || memberDecl.kind === 150); checkAccessorDeclaration(memberDecl); } if (ts.hasDynamicName(memberDecl)) { @@ -19190,13 +19742,13 @@ var ts; for (var _i = 0, _a = node.children; _i < _a.length; _i++) { var child = _a[_i]; switch (child.kind) { - case 247: + case 248: checkJsxExpression(child); break; - case 240: + case 241: checkJsxElement(child); break; - case 241: + case 242: checkJsxSelfClosingElement(child); break; } @@ -19207,7 +19759,7 @@ var ts; return name.indexOf("-") < 0; } function isJsxIntrinsicIdentifier(tagName) { - if (tagName.kind === 138) { + if (tagName.kind === 139) { return false; } else { @@ -19297,8 +19849,8 @@ var ts; } return links.resolvedSymbol; } - function getJsxElementInstanceType(node) { - var valueType = checkExpression(node.tagName); + function getJsxElementInstanceType(node, valueType) { + ts.Debug.assert(!(valueType.flags & 16384)); if (isTypeAny(valueType)) { return anyType; } @@ -19333,6 +19885,79 @@ var ts; return undefined; } } + function getResolvedJsxType(node, elemType, elemClassType) { + if (!elemType) { + elemType = checkExpression(node.tagName); + } + if (elemType.flags & 16384) { + var types = elemType.types; + return getUnionType(types.map(function (type) { + return getResolvedJsxType(node, type, elemClassType); + })); + } + var elemInstanceType = getJsxElementInstanceType(node, elemType); + if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { + if (jsxElementType) { + var callSignatures = elemType && getSignaturesOfType(elemType, 0); + var callSignature = callSignatures && callSignatures.length > 0 && callSignatures[0]; + var callReturnType = callSignature && getReturnTypeOfSignature(callSignature); + var paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0])); + if (callReturnType && isTypeAssignableTo(callReturnType, jsxElementType)) { + var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes); + if (intrinsicAttributes !== unknownType) { + paramType = intersectTypes(intrinsicAttributes, paramType); + } + return paramType; + } + } + } + if (elemClassType) { + checkTypeRelatedTo(elemInstanceType, elemClassType, assignableRelation, node, 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 if (attributesType.flags & 16384) { + error(node.tagName, ts.Diagnostics.JSX_element_attributes_type_0_may_not_be_a_union_type, typeToString(attributesType)); + return anyType; + } + 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 getJsxElementAttributesType(node) { var links = getNodeLinks(node); if (!links.resolvedJsxType) { @@ -19344,74 +19969,14 @@ var ts; else if (links.jsxFlags & 2) { return links.resolvedJsxType = getIndexInfoOfSymbol(symbol, 0).type; } + else { + return links.resolvedJsxType = unknownType; + } } else { - var elemInstanceType = getJsxElementInstanceType(node); var elemClassType = getJsxGlobalElementClassType(); - if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { - if (jsxElementType) { - var elemType = checkExpression(node.tagName); - var callSignatures = elemType && getSignaturesOfType(elemType, 0); - var callSignature = callSignatures && callSignatures.length > 0 && callSignatures[0]; - var callReturnType = callSignature && getReturnTypeOfSignature(callSignature); - var paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0])); - if (callReturnType && isTypeAssignableTo(callReturnType, jsxElementType)) { - var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes); - if (intrinsicAttributes !== unknownType) { - paramType = intersectTypes(intrinsicAttributes, paramType); - } - return links.resolvedJsxType = paramType; - } - } - } - if (elemClassType) { - checkTypeRelatedTo(elemInstanceType, elemClassType, assignableRelation, node, ts.Diagnostics.JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements); - } - if (isTypeAny(elemInstanceType)) { - return links.resolvedJsxType = elemInstanceType; - } - var propsName = getJsxElementPropertiesName(); - if (propsName === undefined) { - return links.resolvedJsxType = anyType; - } - else if (propsName === "") { - return links.resolvedJsxType = elemInstanceType; - } - else { - var attributesType = getTypeOfPropertyOfType(elemInstanceType, propsName); - if (!attributesType) { - return links.resolvedJsxType = emptyObjectType; - } - else if (isTypeAny(attributesType) || (attributesType === unknownType)) { - return links.resolvedJsxType = attributesType; - } - else if (attributesType.flags & 16384) { - error(node.tagName, ts.Diagnostics.JSX_element_attributes_type_0_may_not_be_a_union_type, typeToString(attributesType)); - return links.resolvedJsxType = anyType; - } - 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 links.resolvedJsxType = apparentAttributesType; - } - } + return links.resolvedJsxType = getResolvedJsxType(node, undefined, elemClassType); } - return links.resolvedJsxType = unknownType; } return links.resolvedJsxType; } @@ -19453,11 +20018,11 @@ var ts; var nameTable = {}; var sawSpreadedAny = false; for (var i = node.attributes.length - 1; i >= 0; i--) { - if (node.attributes[i].kind === 245) { + if (node.attributes[i].kind === 246) { checkJsxAttribute((node.attributes[i]), targetAttributesType, nameTable); } else { - ts.Debug.assert(node.attributes[i].kind === 246); + ts.Debug.assert(node.attributes[i].kind === 247); var spreadType = checkJsxSpreadAttribute((node.attributes[i]), targetAttributesType, nameTable); if (isTypeAny(spreadType)) { sawSpreadedAny = true; @@ -19483,7 +20048,7 @@ var ts; } } function getDeclarationKindFromSymbol(s) { - return s.valueDeclaration ? s.valueDeclaration.kind : 144; + return s.valueDeclaration ? s.valueDeclaration.kind : 145; } function getDeclarationFlagsFromSymbol(s) { return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : s.flags & 134217728 ? 4 | 32 : 0; @@ -19491,11 +20056,11 @@ var ts; function checkClassPropertyAccess(node, left, type, prop) { var flags = getDeclarationFlagsFromSymbol(prop); var declaringClass = getDeclaredTypeOfSymbol(getParentOfSymbol(prop)); - var errorNode = node.kind === 171 || node.kind === 217 ? + var errorNode = node.kind === 172 || node.kind === 218 ? node.name : node.right; if (left.kind === 95) { - if (languageVersion < 2 && getDeclarationKindFromSymbol(prop) !== 146) { + if (languageVersion < 2 && getDeclarationKindFromSymbol(prop) !== 147) { error(errorNode, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword); return false; } @@ -19540,8 +20105,14 @@ var ts; } function checkNonNullExpression(node) { var type = checkExpression(node); - if (strictNullChecks && getNullableKind(type)) { - error(node, ts.Diagnostics.Object_is_possibly_null_or_undefined); + if (strictNullChecks) { + var kind = getNullableKind(type); + if (kind) { + error(node, kind & 32 ? kind & 64 ? + ts.Diagnostics.Object_is_possibly_null_or_undefined : + ts.Diagnostics.Object_is_possibly_undefined : + ts.Diagnostics.Object_is_possibly_null); + } return getNonNullableType(type); } return type; @@ -19573,11 +20144,28 @@ var ts; checkClassPropertyAccess(node, left, apparentType, prop); } var propType = getTypeOfSymbol(prop); - return node.kind === 171 && prop.flags & 4 ? - getNarrowedTypeOfReference(propType, node) : propType; + if (node.kind !== 172 || ts.isAssignmentTarget(node) || + !(propType.flags & 16384) && !(prop.flags & (3 | 4 | 98304))) { + return propType; + } + var leftmostNode = getLeftmostIdentifierOrThis(node); + if (!leftmostNode) { + return propType; + } + if (leftmostNode.kind === 69) { + var leftmostSymbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(leftmostNode)); + if (!leftmostSymbol) { + return propType; + } + var declaration = leftmostSymbol.valueDeclaration; + if (!declaration || declaration.kind !== 218 && declaration.kind !== 142 && declaration.kind !== 169) { + return propType; + } + } + return getFlowTypeOfReference(node, propType, true); } function isValidPropertyAccess(node, propertyName) { - var left = node.kind === 171 + var left = node.kind === 172 ? node.expression : node.left; var type = checkExpression(left); @@ -19591,7 +20179,7 @@ var ts; } function getForInVariableSymbol(node) { var initializer = node.initializer; - if (initializer.kind === 218) { + if (initializer.kind === 219) { var variable = initializer.declarations[0]; if (variable && !ts.isBindingPattern(variable.name)) { return getSymbolOfNode(variable); @@ -19613,7 +20201,7 @@ var ts; var child = expr; var node = expr.parent; while (node) { - if (node.kind === 206 && + if (node.kind === 207 && child === node.statement && getForInVariableSymbol(node) === symbol && hasNumericPropertyNames(checkExpression(node.expression))) { @@ -19629,7 +20217,7 @@ var ts; function checkIndexedAccess(node) { if (!node.argumentExpression) { var sourceFile = ts.getSourceFileOfNode(node); - if (node.parent.kind === 174 && node.parent.expression === node) { + if (node.parent.kind === 175 && 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); @@ -19692,7 +20280,7 @@ var ts; if (indexArgumentExpression.kind === 9 || indexArgumentExpression.kind === 8) { return indexArgumentExpression.text; } - if (indexArgumentExpression.kind === 172 || indexArgumentExpression.kind === 171) { + if (indexArgumentExpression.kind === 173 || indexArgumentExpression.kind === 172) { var value = getConstantValue(indexArgumentExpression); if (value !== undefined) { return value.toString(); @@ -19735,10 +20323,10 @@ var ts; return true; } function resolveUntypedCall(node) { - if (node.kind === 175) { + if (node.kind === 176) { checkExpression(node.template); } - else if (node.kind !== 142) { + else if (node.kind !== 143) { ts.forEach(node.arguments, function (argument) { checkExpression(argument); }); @@ -19760,19 +20348,19 @@ var ts; for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) { var signature = signatures_2[_i]; var symbol = signature.declaration && getSymbolOfNode(signature.declaration); - var parent_7 = signature.declaration && signature.declaration.parent; + var parent_9 = signature.declaration && signature.declaration.parent; if (!lastSymbol || symbol === lastSymbol) { - if (lastParent && parent_7 === lastParent) { + if (lastParent && parent_9 === lastParent) { index++; } else { - lastParent = parent_7; + lastParent = parent_9; index = cutoffIndex; } } else { index = cutoffIndex = result.length; - lastParent = parent_7; + lastParent = parent_9; } lastSymbol = symbol; if (signature.hasStringLiterals) { @@ -19789,7 +20377,7 @@ var ts; function getSpreadArgumentIndex(args) { for (var i = 0; i < args.length; i++) { var arg = args[i]; - if (arg && arg.kind === 190) { + if (arg && arg.kind === 191) { return i; } } @@ -19801,11 +20389,11 @@ var ts; var callIsIncomplete; var isDecorator; var spreadArgIndex = -1; - if (node.kind === 175) { + if (node.kind === 176) { var tagExpression = node; adjustedArgCount = args.length; typeArguments = undefined; - if (tagExpression.template.kind === 188) { + if (tagExpression.template.kind === 189) { var templateExpression = tagExpression.template; var lastSpan = ts.lastOrUndefined(templateExpression.templateSpans); ts.Debug.assert(lastSpan !== undefined); @@ -19817,7 +20405,7 @@ var ts; callIsIncomplete = !!templateLiteral.isUnterminated; } } - else if (node.kind === 142) { + else if (node.kind === 143) { isDecorator = true; typeArguments = undefined; adjustedArgCount = getEffectiveArgumentCount(node, undefined, signature); @@ -19825,7 +20413,7 @@ var ts; else { var callExpression = node; if (!callExpression.arguments) { - ts.Debug.assert(callExpression.kind === 174); + ts.Debug.assert(callExpression.kind === 175); return signature.minArgumentCount === 0; } adjustedArgCount = callExpression.arguments.hasTrailingComma ? args.length + 1 : args.length; @@ -19883,7 +20471,7 @@ var ts; var argCount = getEffectiveArgumentCount(node, args, signature); for (var i = 0; i < argCount; i++) { var arg = getEffectiveArgument(node, args, i); - if (arg === undefined || arg.kind !== 192) { + if (arg === undefined || arg.kind !== 193) { var paramType = getTypeAtPosition(signature, i); var argType = getEffectiveArgumentType(node, i, arg); if (argType === undefined) { @@ -19929,7 +20517,7 @@ var ts; return typeArgumentsAreAssignable; } function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) { - if (signature.thisType && signature.thisType !== voidType && node.kind !== 174) { + if (signature.thisType && signature.thisType !== voidType && node.kind !== 175) { var thisArgumentNode = getThisArgumentOfCall(node); var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; var errorNode = reportErrors ? (thisArgumentNode || node) : undefined; @@ -19942,7 +20530,7 @@ var ts; var argCount = getEffectiveArgumentCount(node, args, signature); for (var i = 0; i < argCount; i++) { var arg = getEffectiveArgument(node, args, i); - if (arg === undefined || arg.kind !== 192) { + if (arg === undefined || arg.kind !== 193) { var paramType = getTypeAtPosition(signature, i); var argType = getEffectiveArgumentType(node, i, arg); if (argType === undefined) { @@ -19959,28 +20547,28 @@ var ts; return true; } function getThisArgumentOfCall(node) { - if (node.kind === 173) { + if (node.kind === 174) { var callee = node.expression; - if (callee.kind === 171) { + if (callee.kind === 172) { return callee.expression; } - else if (callee.kind === 172) { + else if (callee.kind === 173) { return callee.expression; } } } function getEffectiveCallArguments(node) { var args; - if (node.kind === 175) { + if (node.kind === 176) { var template = node.template; args = [undefined]; - if (template.kind === 188) { + if (template.kind === 189) { ts.forEach(template.templateSpans, function (span) { args.push(span.expression); }); } } - else if (node.kind === 142) { + else if (node.kind === 143) { return undefined; } else { @@ -19989,21 +20577,21 @@ var ts; return args; } function getEffectiveArgumentCount(node, args, signature) { - if (node.kind === 142) { + if (node.kind === 143) { switch (node.parent.kind) { - case 220: - case 191: + case 221: + case 192: return 1; - case 144: + case 145: return 2; - case 146: - case 148: + case 147: case 149: + case 150: if (languageVersion === 0) { return 2; } return signature.parameters.length >= 3 ? 3 : 2; - case 141: + case 142: return 3; } } @@ -20012,48 +20600,48 @@ var ts; } } function getEffectiveDecoratorFirstArgumentType(node) { - if (node.kind === 220) { + if (node.kind === 221) { var classSymbol = getSymbolOfNode(node); return getTypeOfSymbol(classSymbol); } - if (node.kind === 141) { + if (node.kind === 142) { node = node.parent; - if (node.kind === 147) { + if (node.kind === 148) { var classSymbol = getSymbolOfNode(node); return getTypeOfSymbol(classSymbol); } } - if (node.kind === 144 || - node.kind === 146 || - node.kind === 148 || - node.kind === 149) { + if (node.kind === 145 || + node.kind === 147 || + node.kind === 149 || + node.kind === 150) { return getParentTypeOfClassElement(node); } ts.Debug.fail("Unsupported decorator target."); return unknownType; } function getEffectiveDecoratorSecondArgumentType(node) { - if (node.kind === 220) { + if (node.kind === 221) { ts.Debug.fail("Class decorators should not have a second synthetic argument."); return unknownType; } - if (node.kind === 141) { + if (node.kind === 142) { node = node.parent; - if (node.kind === 147) { + if (node.kind === 148) { return anyType; } } - if (node.kind === 144 || - node.kind === 146 || - node.kind === 148 || - node.kind === 149) { + if (node.kind === 145 || + node.kind === 147 || + node.kind === 149 || + node.kind === 150) { var element = node; switch (element.name.kind) { case 69: case 8: case 9: return getStringLiteralTypeForText(element.name.text); - case 139: + case 140: var nameType = checkComputedPropertyName(element.name); if (isTypeOfKind(nameType, 16777216)) { return nameType; @@ -20070,20 +20658,20 @@ var ts; return unknownType; } function getEffectiveDecoratorThirdArgumentType(node) { - if (node.kind === 220) { + if (node.kind === 221) { ts.Debug.fail("Class decorators should not have a third synthetic argument."); return unknownType; } - if (node.kind === 141) { + if (node.kind === 142) { return numberType; } - if (node.kind === 144) { + if (node.kind === 145) { ts.Debug.fail("Property decorators should not have a third synthetic argument."); return unknownType; } - if (node.kind === 146 || - node.kind === 148 || - node.kind === 149) { + if (node.kind === 147 || + node.kind === 149 || + node.kind === 150) { var propertyType = getTypeOfNode(node); return createTypedPropertyDescriptorType(propertyType); } @@ -20104,26 +20692,26 @@ var ts; return unknownType; } function getEffectiveArgumentType(node, argIndex, arg) { - if (node.kind === 142) { + if (node.kind === 143) { return getEffectiveDecoratorArgumentType(node, argIndex); } - else if (argIndex === 0 && node.kind === 175) { + else if (argIndex === 0 && node.kind === 176) { return getGlobalTemplateStringsArrayType(); } return undefined; } function getEffectiveArgument(node, args, argIndex) { - if (node.kind === 142 || - (argIndex === 0 && node.kind === 175)) { + if (node.kind === 143 || + (argIndex === 0 && node.kind === 176)) { return undefined; } return args[argIndex]; } function getEffectiveArgumentErrorNode(node, argIndex, arg) { - if (node.kind === 142) { + if (node.kind === 143) { return node.expression; } - else if (argIndex === 0 && node.kind === 175) { + else if (argIndex === 0 && node.kind === 176) { return node.template; } else { @@ -20131,8 +20719,8 @@ var ts; } } function resolveCall(node, signatures, candidatesOutArray, headMessage) { - var isTaggedTemplate = node.kind === 175; - var isDecorator = node.kind === 142; + var isTaggedTemplate = node.kind === 176; + var isDecorator = node.kind === 143; var typeArguments; if (!isTaggedTemplate && !isDecorator) { typeArguments = node.typeArguments; @@ -20394,16 +20982,16 @@ var ts; } function getDiagnosticHeadMessageForDecoratorResolution(node) { switch (node.parent.kind) { - case 220: - case 191: + case 221: + case 192: return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression; - case 141: + case 142: return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression; - case 144: + case 145: return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression; - case 146: - case 148: + case 147: case 149: + case 150: return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression; } } @@ -20427,27 +21015,32 @@ var ts; } return resolveCall(node, callSignatures, candidatesOutArray, headMessage); } + function resolveSignature(node, candidatesOutArray) { + switch (node.kind) { + case 174: + return resolveCallExpression(node, candidatesOutArray); + case 175: + return resolveNewExpression(node, candidatesOutArray); + case 176: + return resolveTaggedTemplateExpression(node, candidatesOutArray); + case 143: + return resolveDecorator(node, candidatesOutArray); + } + ts.Debug.fail("Branch in 'resolveSignature' should be unreachable."); + } function getResolvedSignature(node, candidatesOutArray) { var links = getNodeLinks(node); - if (!links.resolvedSignature || candidatesOutArray) { - links.resolvedSignature = anySignature; - if (node.kind === 173) { - links.resolvedSignature = resolveCallExpression(node, candidatesOutArray); - } - else if (node.kind === 174) { - links.resolvedSignature = resolveNewExpression(node, candidatesOutArray); - } - else if (node.kind === 175) { - links.resolvedSignature = resolveTaggedTemplateExpression(node, candidatesOutArray); - } - else if (node.kind === 142) { - links.resolvedSignature = resolveDecorator(node, candidatesOutArray); - } - else { - ts.Debug.fail("Branch in 'getResolvedSignature' should be unreachable."); - } + var cached = links.resolvedSignature; + if (cached && cached !== anySignature && !candidatesOutArray) { + return cached; } - return links.resolvedSignature; + links.resolvedSignature = anySignature; + var result = resolveSignature(node, candidatesOutArray); + links.resolvedSignature = flowLoopStart === flowLoopCount ? result : cached; + return result; + } + function getResolvedOrAnySignature(node) { + return getNodeLinks(node).resolvedSignature === anySignature ? anySignature : getResolvedSignature(node); } function getInferredClassType(symbol) { var links = getSymbolLinks(symbol); @@ -20462,12 +21055,12 @@ var ts; if (node.expression.kind === 95) { return voidType; } - if (node.kind === 174) { + if (node.kind === 175) { var declaration = signature.declaration; if (declaration && - declaration.kind !== 147 && - declaration.kind !== 151 && - declaration.kind !== 156 && + declaration.kind !== 148 && + declaration.kind !== 152 && + declaration.kind !== 157 && !ts.isJSDocConstructSignature(declaration)) { var funcSymbol = checkExpression(node.expression).symbol; if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16)) { @@ -20533,7 +21126,7 @@ var ts; if (ts.isBindingPattern(node.name)) { for (var _i = 0, _a = node.name.elements; _i < _a.length; _i++) { var element = _a[_i]; - if (element.kind !== 192) { + if (element.kind !== 193) { if (element.name.kind === 69) { getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element); } @@ -20546,6 +21139,11 @@ var ts; var links = getSymbolLinks(parameter); if (!links.type) { links.type = instantiateType(contextualType, mapper); + if (links.type === emptyObjectType && + (parameter.valueDeclaration.name.kind === 167 || + parameter.valueDeclaration.name.kind === 168)) { + links.type = getTypeFromBindingPattern(parameter.valueDeclaration.name); + } assignBindingElementTypes(parameter.valueDeclaration); } else if (isInferentialContext(mapper)) { @@ -20574,7 +21172,7 @@ var ts; } var isAsync = ts.isAsyncFunctionLike(func); var type; - if (func.body.kind !== 198) { + if (func.body.kind !== 199) { type = checkExpressionCached(func.body, contextualMapper); if (isAsync) { type = checkAwaitedType(type, func, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member); @@ -20596,6 +21194,9 @@ var ts; else { var hasImplicitReturn = !!(func.flags & 32768); types = checkAndAggregateReturnExpressionTypes(func.body, contextualMapper, isAsync, hasImplicitReturn); + if (!types) { + return neverType; + } if (types.length === 0) { if (isAsync) { var promiseType = createPromiseType(voidType); @@ -20605,9 +21206,7 @@ var ts; } return promiseType; } - else { - return voidType; - } + return voidType; } } type = contextualSignature ? getUnionType(types) : getCommonSupertype(types); @@ -20667,7 +21266,7 @@ var ts; if (isAsync) { type = checkAwaitedType(type, body.parent, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member); } - if (!ts.contains(aggregatedTypes, type)) { + if (type !== neverType && !ts.contains(aggregatedTypes, type)) { aggregatedTypes.push(type); } } @@ -20675,6 +21274,9 @@ var ts; hasOmittedExpressions = true; } }); + if (aggregatedTypes.length === 0 && !hasOmittedExpressions && !hasImplicitReturn) { + return undefined; + } if (strictNullChecks && aggregatedTypes.length && (hasOmittedExpressions || hasImplicitReturn)) { if (!ts.contains(aggregatedTypes, undefinedType)) { aggregatedTypes.push(undefinedType); @@ -20689,11 +21291,14 @@ var ts; if (returnType && maybeTypeOfKind(returnType, 1 | 16)) { return; } - if (ts.nodeIsMissing(func.body) || func.body.kind !== 198 || !(func.flags & 32768)) { + if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 || !(func.flags & 32768)) { return; } var hasExplicitReturn = func.flags & 65536; - if (returnType && !hasExplicitReturn) { + if (returnType === neverType) { + error(func.type, ts.Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point); + } + else if (returnType && !hasExplicitReturn) { error(func.type, ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value); } else if (returnType && strictNullChecks && !isTypeAssignableTo(undefinedType, returnType)) { @@ -20713,9 +21318,9 @@ var ts; } } function checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper) { - ts.Debug.assert(node.kind !== 146 || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 147 || ts.isObjectLiteralMethod(node)); var hasGrammarError = checkGrammarFunctionLikeDeclaration(node); - if (!hasGrammarError && node.kind === 178) { + if (!hasGrammarError && node.kind === 179) { checkGrammarForGenerator(node); } if (contextualMapper === identityMapper && isContextSensitive(node)) { @@ -20749,14 +21354,14 @@ var ts; } } } - if (produceDiagnostics && node.kind !== 146 && node.kind !== 145) { + if (produceDiagnostics && node.kind !== 147 && node.kind !== 146) { checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); } return type; } function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) { - ts.Debug.assert(node.kind !== 146 || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 147 || ts.isObjectLiteralMethod(node)); var isAsync = ts.isAsyncFunctionLike(node); var returnOrPromisedType = node.type && (isAsync ? checkAsyncFunctionReturnType(node) : getTypeFromTypeNode(node.type)); if (!node.asteriskToken) { @@ -20766,7 +21371,7 @@ var ts; if (!node.type) { getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } - if (node.body.kind === 198) { + if (node.body.kind === 199) { checkSourceElement(node.body); } else { @@ -20799,23 +21404,23 @@ var ts; function isReferenceToReadonlyEntity(expr, symbol) { if (isReadonlySymbol(symbol)) { if (symbol.flags & 4 && - (expr.kind === 171 || expr.kind === 172) && + (expr.kind === 172 || expr.kind === 173) && expr.expression.kind === 97) { var func = ts.getContainingFunction(expr); - return !(func && func.kind === 147 && func.parent === symbol.valueDeclaration.parent); + return !(func && func.kind === 148 && func.parent === symbol.valueDeclaration.parent); } return true; } return false; } function isReferenceThroughNamespaceImport(expr) { - if (expr.kind === 171 || expr.kind === 172) { + if (expr.kind === 172 || expr.kind === 173) { var node = skipParenthesizedNodes(expr.expression); if (node.kind === 69) { var symbol = getNodeLinks(node).resolvedSymbol; if (symbol.flags & 8388608) { var declaration = getDeclarationOfAliasSymbol(symbol); - return declaration && declaration.kind === 231; + return declaration && declaration.kind === 232; } } } @@ -20823,7 +21428,7 @@ var ts; } function checkReferenceExpression(expr, invalidReferenceMessage, constantVariableMessage) { var node = skipParenthesizedNodes(expr); - if (node.kind !== 69 && node.kind !== 171 && node.kind !== 172) { + if (node.kind !== 69 && node.kind !== 172 && node.kind !== 173) { error(expr, invalidReferenceMessage); return false; } @@ -20841,7 +21446,7 @@ var ts; } } } - else if (node.kind === 172) { + else if (node.kind === 173) { if (links.resolvedIndexInfo && links.resolvedIndexInfo.isReadonly) { error(expr, constantVariableMessage); return false; @@ -20971,84 +21576,92 @@ var ts; var properties = node.properties; for (var _i = 0, properties_3 = properties; _i < properties_3.length; _i++) { var p = properties_3[_i]; - if (p.kind === 252 || p.kind === 253) { - var name_13 = p.name; - if (name_13.kind === 139) { - checkComputedPropertyName(name_13); - } - if (isComputedNonLiteralName(name_13)) { - continue; - } - var text = getTextOfPropertyName(name_13); - var type = isTypeAny(sourceType) - ? sourceType - : getTypeOfPropertyOfType(sourceType, text) || - isNumericLiteralName(text) && getIndexTypeOfType(sourceType, 1) || - getIndexTypeOfType(sourceType, 0); - if (type) { - if (p.kind === 253) { - checkDestructuringAssignment(p, type); - } - else { - checkDestructuringAssignment(p.initializer, type); - } + checkObjectLiteralDestructuringPropertyAssignment(sourceType, p, contextualMapper); + } + return sourceType; + } + function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType, property, contextualMapper) { + if (property.kind === 253 || property.kind === 254) { + var name_13 = property.name; + if (name_13.kind === 140) { + checkComputedPropertyName(name_13); + } + if (isComputedNonLiteralName(name_13)) { + return undefined; + } + var text = getTextOfPropertyName(name_13); + var type = isTypeAny(objectLiteralType) + ? objectLiteralType + : getTypeOfPropertyOfType(objectLiteralType, text) || + isNumericLiteralName(text) && getIndexTypeOfType(objectLiteralType, 1) || + getIndexTypeOfType(objectLiteralType, 0); + if (type) { + if (property.kind === 254) { + return checkDestructuringAssignment(property, type); } else { - error(name_13, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(sourceType), ts.declarationNameToString(name_13)); + return checkDestructuringAssignment(property.initializer, type); } } else { - error(p, ts.Diagnostics.Property_assignment_expected); + error(name_13, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name_13)); } } - return sourceType; + else { + error(property, ts.Diagnostics.Property_assignment_expected); + } } function checkArrayLiteralAssignment(node, sourceType, contextualMapper) { var elementType = checkIteratedTypeOrElementType(sourceType, node, false) || unknownType; var elements = node.elements; for (var i = 0; i < elements.length; i++) { - var e = elements[i]; - if (e.kind !== 192) { - if (e.kind !== 190) { - var propName = "" + i; - var type = isTypeAny(sourceType) - ? sourceType - : isTupleLikeType(sourceType) - ? getTypeOfPropertyOfType(sourceType, propName) - : elementType; - if (type) { - checkDestructuringAssignment(e, type, contextualMapper); - } - else { - if (isTupleType(sourceType)) { - error(e, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), sourceType.elementTypes.length, elements.length); - } - else { - error(e, ts.Diagnostics.Type_0_has_no_property_1, typeToString(sourceType), propName); - } - } + checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, elementType, contextualMapper); + } + return sourceType; + } + function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, contextualMapper) { + var elements = node.elements; + var element = elements[elementIndex]; + if (element.kind !== 193) { + if (element.kind !== 191) { + var propName = "" + elementIndex; + var type = isTypeAny(sourceType) + ? sourceType + : isTupleLikeType(sourceType) + ? getTypeOfPropertyOfType(sourceType, propName) + : elementType; + if (type) { + return checkDestructuringAssignment(element, type, contextualMapper); } else { - if (i < elements.length - 1) { - error(e, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern); + if (isTupleType(sourceType)) { + error(element, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), sourceType.elementTypes.length, elements.length); } else { - var restExpression = e.expression; - if (restExpression.kind === 186 && restExpression.operatorToken.kind === 56) { - error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); - } - else { - checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper); - } + 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_an_array_destructuring_pattern); + } + else { + var restExpression = element.expression; + if (restExpression.kind === 187 && restExpression.operatorToken.kind === 56) { + error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); + } + else { + return checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper); } } } } - return sourceType; + return undefined; } function checkDestructuringAssignment(exprOrAssignment, sourceType, contextualMapper) { var target; - if (exprOrAssignment.kind === 253) { + if (exprOrAssignment.kind === 254) { var prop = exprOrAssignment; if (prop.objectAssignmentInitializer) { checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, contextualMapper); @@ -21058,14 +21671,14 @@ var ts; else { target = exprOrAssignment; } - if (target.kind === 186 && target.operatorToken.kind === 56) { + if (target.kind === 187 && target.operatorToken.kind === 56) { checkBinaryExpression(target, contextualMapper); target = target.left; } - if (target.kind === 170) { + if (target.kind === 171) { return checkObjectLiteralAssignment(target, sourceType, contextualMapper); } - if (target.kind === 169) { + if (target.kind === 170) { return checkArrayLiteralAssignment(target, sourceType, contextualMapper); } return checkReferenceAssignment(target, sourceType, contextualMapper); @@ -21077,12 +21690,15 @@ var ts; } return sourceType; } + function isTypeEqualityComparableTo(source, target) { + return (target.flags & 96) !== 0 || isTypeComparableTo(source, target); + } function checkBinaryExpression(node, contextualMapper) { return checkBinaryLikeExpression(node.left, node.operatorToken, node.right, contextualMapper, node); } function checkBinaryLikeExpression(left, operatorToken, right, contextualMapper, errorNode) { var operator = operatorToken.kind; - if (operator === 56 && (left.kind === 170 || left.kind === 169)) { + if (operator === 56 && (left.kind === 171 || left.kind === 170)) { return checkDestructuringAssignment(left, checkExpression(right, contextualMapper), contextualMapper); } var leftType = checkExpression(left, contextualMapper); @@ -21165,14 +21781,17 @@ var ts; case 27: case 28: case 29: - if (!checkForDisallowedESSymbolOperand(operator)) { - return booleanType; + if (checkForDisallowedESSymbolOperand(operator)) { + if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) { + reportOperatorError(); + } } + return booleanType; case 30: case 31: case 32: case 33: - if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) { + if (!isTypeEqualityComparableTo(leftType, rightType) && !isTypeEqualityComparableTo(rightType, leftType)) { reportOperatorError(); } return booleanType; @@ -21302,19 +21921,22 @@ var ts; function checkExpressionCached(node, contextualMapper) { var links = getNodeLinks(node); if (!links.resolvedType) { + var saveFlowLoopStart = flowLoopStart; + flowLoopStart = flowLoopCount; links.resolvedType = checkExpression(node, contextualMapper); + flowLoopStart = saveFlowLoopStart; } return links.resolvedType; } function checkPropertyAssignment(node, contextualMapper) { - if (node.name.kind === 139) { + if (node.name.kind === 140) { checkComputedPropertyName(node.name); } return checkExpression(node.initializer, contextualMapper); } function checkObjectLiteralMethod(node, contextualMapper) { checkGrammarMethod(node); - if (node.name.kind === 139) { + if (node.name.kind === 140) { checkComputedPropertyName(node.name); } var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); @@ -21337,7 +21959,7 @@ var ts; } function checkExpression(node, contextualMapper) { var type; - if (node.kind === 138) { + if (node.kind === 139) { type = checkQualifiedName(node); } else { @@ -21345,9 +21967,9 @@ var ts; type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper); } if (isConstEnumObjectType(type)) { - var ok = (node.parent.kind === 171 && node.parent.expression === node) || - (node.parent.kind === 172 && node.parent.expression === node) || - ((node.kind === 69 || node.kind === 138) && isInRightSideOfImportOrExportAssignment(node)); + var ok = (node.parent.kind === 172 && node.parent.expression === node) || + (node.parent.kind === 173 && node.parent.expression === node) || + ((node.kind === 69 || node.kind === 139) && 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); } @@ -21373,7 +21995,7 @@ var ts; return booleanType; case 8: return checkNumericLiteral(node); - case 188: + case 189: return checkTemplateExpression(node); case 9: return checkStringLiteralExpression(node); @@ -21381,60 +22003,60 @@ var ts; return stringType; case 10: return globalRegExpType; - case 169: - return checkArrayLiteral(node, contextualMapper); case 170: - return checkObjectLiteral(node, contextualMapper); + return checkArrayLiteral(node, contextualMapper); case 171: - return checkPropertyAccessExpression(node); + return checkObjectLiteral(node, contextualMapper); case 172: - return checkIndexedAccess(node); + return checkPropertyAccessExpression(node); case 173: + return checkIndexedAccess(node); case 174: - return checkCallExpression(node); case 175: - return checkTaggedTemplateExpression(node); - case 177: - return checkExpression(node.expression, contextualMapper); - case 191: - return checkClassExpression(node); - case 178: - case 179: - return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); - case 181: - return checkTypeOfExpression(node); + return checkCallExpression(node); case 176: - case 194: - return checkAssertion(node); - case 195: - return checkNonNullAssertion(node); - case 180: - return checkDeleteExpression(node); - case 182: - return checkVoidExpression(node); - case 183: - return checkAwaitExpression(node); - case 184: - return checkPrefixUnaryExpression(node); - case 185: - return checkPostfixUnaryExpression(node); - case 186: - return checkBinaryExpression(node, contextualMapper); - case 187: - return checkConditionalExpression(node, contextualMapper); - case 190: - return checkSpreadElementExpression(node, contextualMapper); + return checkTaggedTemplateExpression(node); + case 178: + return checkExpression(node.expression, contextualMapper); case 192: + return checkClassExpression(node); + case 179: + case 180: + return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); + case 182: + return checkTypeOfExpression(node); + case 177: + case 195: + return checkAssertion(node); + case 196: + return checkNonNullAssertion(node); + case 181: + return checkDeleteExpression(node); + case 183: + return checkVoidExpression(node); + case 184: + return checkAwaitExpression(node); + case 185: + return checkPrefixUnaryExpression(node); + case 186: + return checkPostfixUnaryExpression(node); + case 187: + return checkBinaryExpression(node, contextualMapper); + case 188: + return checkConditionalExpression(node, contextualMapper); + case 191: + return checkSpreadElementExpression(node, contextualMapper); + case 193: return undefinedType; - case 189: + case 190: return checkYieldExpression(node); - case 247: + case 248: return checkJsxExpression(node); - case 240: - return checkJsxElement(node); case 241: - return checkJsxSelfClosingElement(node); + return checkJsxElement(node); case 242: + return checkJsxSelfClosingElement(node); + case 243: ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement"); } return unknownType; @@ -21453,9 +22075,9 @@ var ts; checkGrammarDecorators(node) || checkGrammarModifiers(node); checkVariableLikeDeclaration(node); var func = ts.getContainingFunction(node); - if (node.flags & 28) { + if (node.flags & 92) { func = ts.getContainingFunction(node); - if (!(func.kind === 147 && ts.nodeIsPresent(func.body))) { + if (!(func.kind === 148 && ts.nodeIsPresent(func.body))) { error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); } } @@ -21466,12 +22088,9 @@ var ts; if (ts.indexOf(func.parameters, node) !== 0) { error(node, ts.Diagnostics.A_this_parameter_must_be_the_first_parameter); } - if (func.kind === 147 || func.kind === 151 || func.kind === 156) { + if (func.kind === 148 || func.kind === 152 || func.kind === 157) { error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter); } - if (func.kind === 149) { - error(node, ts.Diagnostics.A_setter_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); @@ -21481,9 +22100,9 @@ var ts; if (!node.asteriskToken || !node.body) { return false; } - return node.kind === 146 || - node.kind === 219 || - node.kind === 178; + return node.kind === 147 || + node.kind === 220 || + node.kind === 179; } function getTypePredicateParameterIndex(parameterList, parameter) { if (parameterList) { @@ -21539,16 +22158,16 @@ var ts; } function getTypePredicateParent(node) { switch (node.parent.kind) { + case 180: + case 151: + case 220: case 179: - case 150: - case 219: - case 178: - case 155: + case 156: + case 147: case 146: - case 145: - var parent_8 = node.parent; - if (node === parent_8.type) { - return parent_8; + var parent_10 = node.parent; + if (node === parent_10.type) { + return parent_10; } } } @@ -21560,8 +22179,8 @@ var ts; error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName); return true; } - else if (name_15.kind === 167 || - name_15.kind === 166) { + else if (name_15.kind === 168 || + name_15.kind === 167) { if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_15, predicateVariableNode, predicateVariableName)) { return true; } @@ -21569,12 +22188,12 @@ var ts; } } function checkSignatureDeclaration(node) { - if (node.kind === 152) { + if (node.kind === 153) { checkGrammarIndexSignature(node); } - else if (node.kind === 155 || node.kind === 219 || node.kind === 156 || - node.kind === 150 || node.kind === 147 || - node.kind === 151) { + else if (node.kind === 156 || node.kind === 220 || node.kind === 157 || + node.kind === 151 || node.kind === 148 || + node.kind === 152) { checkGrammarFunctionLikeDeclaration(node); } checkTypeParameters(node.typeParameters); @@ -21586,10 +22205,10 @@ var ts; checkCollisionWithArgumentsInGeneratedCode(node); if (compilerOptions.noImplicitAny && !node.type) { switch (node.kind) { - case 151: + case 152: error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; - case 150: + case 151: error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; } @@ -21613,7 +22232,7 @@ var ts; } } function checkTypeForDuplicateIndexSignatures(node) { - if (node.kind === 221) { + if (node.kind === 222) { var nodeSymbol = getSymbolOfNode(node); if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) { return; @@ -21628,7 +22247,7 @@ var ts; var declaration = decl; if (declaration.parameters.length === 1 && declaration.parameters[0].type) { switch (declaration.parameters[0].type.kind) { - case 131: + case 132: if (!seenStringIndexer) { seenStringIndexer = true; } @@ -21636,7 +22255,7 @@ var ts; error(declaration, ts.Diagnostics.Duplicate_string_index_signature); } break; - case 129: + case 130: if (!seenNumericIndexer) { seenNumericIndexer = true; } @@ -21694,12 +22313,12 @@ var ts; if (n.kind === 97) { error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location); } - else if (n.kind !== 178 && n.kind !== 219) { + else if (n.kind !== 179 && n.kind !== 220) { ts.forEachChild(n, markThisReferencesAsErrors); } } function isInstancePropertyWithInitializer(n) { - return n.kind === 144 && + return n.kind === 145 && !(n.flags & 32) && !!n.initializer; } @@ -21712,13 +22331,13 @@ var ts; error(superCall, ts.Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null); } var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) || - ts.forEach(node.parameters, function (p) { return p.flags & (4 | 8 | 16); }); + ts.forEach(node.parameters, function (p) { return p.flags & 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 === 201 && ts.isSuperCallExpression(statement.expression)) { + if (statement.kind === 202 && ts.isSuperCallExpression(statement.expression)) { superCallStatement = statement; break; } @@ -21741,7 +22360,7 @@ var ts; checkGrammarFunctionLikeDeclaration(node) || checkGrammarAccessor(node) || checkGrammarComputedPropertyName(node.name); checkDecorators(node); checkSignatureDeclaration(node); - if (node.kind === 148) { + if (node.kind === 149) { if (!ts.isInAmbientContext(node) && ts.nodeIsPresent(node.body) && (node.flags & 32768)) { if (node.flags & 65536) { if (compilerOptions.noImplicitReturns) { @@ -21753,11 +22372,11 @@ var ts; } } } - if (node.name.kind === 139) { + if (node.name.kind === 140) { checkComputedPropertyName(node.name); } if (!ts.hasDynamicName(node)) { - var otherKind = node.kind === 148 ? 149 : 148; + var otherKind = node.kind === 149 ? 150 : 149; var otherAccessor = ts.getDeclarationOfKind(node.symbol, otherKind); if (otherAccessor) { if (((node.flags & 28) !== (otherAccessor.flags & 28))) { @@ -21766,24 +22385,26 @@ var ts; if (((node.flags & 128) !== (otherAccessor.flags & 128))) { error(node.name, ts.Diagnostics.Accessors_must_both_be_abstract_or_non_abstract); } - var currentAccessorType = getAnnotatedAccessorType(node); - var otherAccessorType = getAnnotatedAccessorType(otherAccessor); - if (currentAccessorType && otherAccessorType) { - if (!isTypeIdenticalTo(currentAccessorType, otherAccessorType)) { - error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); - } - } + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getAnnotatedAccessorType, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getAnnotatedAccessorThisType, ts.Diagnostics.get_and_set_accessor_must_have_the_same_this_type); } } getTypeOfAccessors(getSymbolOfNode(node)); } - if (node.parent.kind !== 170) { + if (node.parent.kind !== 171) { checkSourceElement(node.body); } else { checkNodeDeferred(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 checkAccessorDeferred(node) { checkSourceElement(node.body); } @@ -21848,9 +22469,9 @@ var ts; } function getEffectiveDeclarationFlags(n, flagsToCheck) { var flags = ts.getCombinedNodeFlags(n); - if (n.parent.kind !== 221 && - n.parent.kind !== 220 && - n.parent.kind !== 191 && + if (n.parent.kind !== 222 && + n.parent.kind !== 221 && + n.parent.kind !== 192 && ts.isInAmbientContext(n)) { if (!(flags & 2)) { flags |= 1; @@ -21927,7 +22548,7 @@ var ts; if (subsequentNode.kind === node.kind) { var errorNode_1 = subsequentNode.name || subsequentNode; if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) { - var reportError = (node.kind === 146 || node.kind === 145) && + var reportError = (node.kind === 147 || node.kind === 146) && (node.flags & 32) !== (subsequentNode.flags & 32); if (reportError) { var diagnostic = node.flags & 32 ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static; @@ -21961,11 +22582,11 @@ var ts; var current = declarations_4[_i]; var node = current; var inAmbientContext = ts.isInAmbientContext(node); - var inAmbientContextOrInterface = node.parent.kind === 221 || node.parent.kind === 158 || inAmbientContext; + var inAmbientContextOrInterface = node.parent.kind === 222 || node.parent.kind === 159 || inAmbientContext; if (inAmbientContextOrInterface) { previousDeclaration = undefined; } - if (node.kind === 219 || node.kind === 146 || node.kind === 145 || node.kind === 147) { + if (node.kind === 220 || node.kind === 147 || node.kind === 146 || node.kind === 148) { var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck); someNodeFlags |= currentNodeFlags; allNodeFlags &= currentNodeFlags; @@ -22007,7 +22628,7 @@ var ts; }); } if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && - !(lastSeenNonAmbientDeclaration.flags & 128)) { + !(lastSeenNonAmbientDeclaration.flags & 128) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } if (hasOverloads) { @@ -22076,16 +22697,16 @@ var ts; } function getDeclarationSpaces(d) { switch (d.kind) { - case 221: + case 222: return 2097152; - case 224: + case 225: return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0 ? 4194304 | 1048576 : 4194304; - case 220: - case 223: + case 221: + case 224: return 2097152 | 1048576; - case 228: + case 229: var result_1 = 0; var target = resolveAlias(getSymbolOfNode(d)); ts.forEach(target.declarations, function (d) { result_1 |= getDeclarationSpaces(d); }); @@ -22127,7 +22748,7 @@ var ts; if (thenSignatures.length === 0) { return undefined; } - var onfulfilledParameterType = getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)); + var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 131072); if (onfulfilledParameterType.flags & 1) { return undefined; } @@ -22232,22 +22853,22 @@ var ts; var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node); var errorInfo; switch (node.parent.kind) { - case 220: + case 221: var classSymbol = getSymbolOfNode(node.parent); var classConstructorType = getTypeOfSymbol(classSymbol); expectedReturnType = getUnionType([classConstructorType, voidType]); break; - case 141: + case 142: expectedReturnType = voidType; errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any); break; - case 144: + case 145: expectedReturnType = voidType; errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any); break; - case 146: - case 148: + case 147: case 149: + case 150: var methodType = getTypeOfNode(node.parent); var descriptorType = createTypedPropertyDescriptorType(methodType); expectedReturnType = getUnionType([descriptorType, voidType]); @@ -22256,9 +22877,9 @@ var ts; checkTypeAssignableTo(returnType, expectedReturnType, node, headMessage, errorInfo); } function checkTypeNodeAsExpression(node) { - if (node && node.kind === 154) { + if (node && node.kind === 155) { var root = getFirstIdentifier(node.typeName); - var meaning = root.parent.kind === 154 ? 793056 : 1536; + var meaning = root.parent.kind === 155 ? 793056 : 1536; var rootSymbol = resolveName(root, root.text, meaning | 8388608, undefined, undefined); if (rootSymbol && rootSymbol.flags & 8388608) { var aliasTarget = resolveAlias(rootSymbol); @@ -22292,20 +22913,20 @@ var ts; } if (compilerOptions.emitDecoratorMetadata) { switch (node.kind) { - case 220: + case 221: var constructor = ts.getFirstConstructorWithBody(node); if (constructor) { checkParameterTypeAnnotationsAsExpressions(constructor); } break; - case 146: - case 148: + case 147: case 149: + case 150: checkParameterTypeAnnotationsAsExpressions(node); checkReturnTypeAnnotationAsExpression(node); break; - case 144: - case 141: + case 145: + case 142: checkTypeAnnotationAsExpression(node); break; } @@ -22325,7 +22946,7 @@ var ts; checkDecorators(node); checkSignatureDeclaration(node); var isAsync = ts.isAsyncFunctionLike(node); - if (node.name && node.name.kind === 139) { + if (node.name && node.name.kind === 140) { checkComputedPropertyName(node.name); } if (!ts.hasDynamicName(node)) { @@ -22357,13 +22978,13 @@ var ts; } } function checkBlock(node) { - if (node.kind === 198) { + if (node.kind === 199) { checkGrammarStatementInAmbientContext(node); } ts.forEach(node.statements, checkSourceElement); } function checkCollisionWithArgumentsInGeneratedCode(node) { - if (!ts.hasRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) { + if (!ts.hasDeclaredRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) { return; } ts.forEach(node.parameters, function (p) { @@ -22376,19 +22997,19 @@ var ts; if (!(identifier && identifier.text === name)) { return false; } - if (node.kind === 144 || - node.kind === 143 || + if (node.kind === 145 || + node.kind === 144 || + node.kind === 147 || node.kind === 146 || - node.kind === 145 || - node.kind === 148 || - node.kind === 149) { + node.kind === 149 || + node.kind === 150) { return false; } if (ts.isInAmbientContext(node)) { return false; } var root = ts.getRootDeclaration(node); - if (root.kind === 141 && ts.nodeIsMissing(root.parent.body)) { + if (root.kind === 142 && ts.nodeIsMissing(root.parent.body)) { return false; } return true; @@ -22436,11 +23057,11 @@ var ts; if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { return; } - if (node.kind === 224 && ts.getModuleInstanceState(node) !== 1) { + if (node.kind === 225 && ts.getModuleInstanceState(node) !== 1) { return; } var parent = getDeclarationContainer(node); - if (parent.kind === 255 && ts.isExternalOrCommonJsModule(parent)) { + if (parent.kind === 256 && 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)); } } @@ -22448,11 +23069,11 @@ var ts; if (!needCollisionCheckForIdentifier(node, name, "Promise")) { return; } - if (node.kind === 224 && ts.getModuleInstanceState(node) !== 1) { + if (node.kind === 225 && ts.getModuleInstanceState(node) !== 1) { return; } var parent = getDeclarationContainer(node); - if (parent.kind === 255 && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2097152) { + if (parent.kind === 256 && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2097152) { 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)); } } @@ -22460,7 +23081,7 @@ var ts; if ((ts.getCombinedNodeFlags(node) & 3072) !== 0 || ts.isParameterDeclaration(node)) { return; } - if (node.kind === 217 && !node.initializer) { + if (node.kind === 218 && !node.initializer) { return; } var symbol = getSymbolOfNode(node); @@ -22470,15 +23091,15 @@ var ts; localDeclarationSymbol !== symbol && localDeclarationSymbol.flags & 2) { if (getDeclarationFlagsFromSymbol(localDeclarationSymbol) & 3072) { - var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 218); - var container = varDeclList.parent.kind === 199 && varDeclList.parent.parent + var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 219); + var container = varDeclList.parent.kind === 200 && varDeclList.parent.parent ? varDeclList.parent.parent : undefined; var namesShareScope = container && - (container.kind === 198 && ts.isFunctionLike(container.parent) || + (container.kind === 199 && ts.isFunctionLike(container.parent) || + container.kind === 226 || container.kind === 225 || - container.kind === 224 || - container.kind === 255); + container.kind === 256); if (!namesShareScope) { var name_16 = symbolToString(localDeclarationSymbol); error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name_16, name_16); @@ -22488,62 +23109,84 @@ var ts; } } function checkParameterInitializer(node) { - if (ts.getRootDeclaration(node).kind !== 141) { + if (ts.getRootDeclaration(node).kind !== 142) { return; } var func = ts.getContainingFunction(node); visit(node.initializer); function visit(n) { - if (n.kind === 69) { - var referencedSymbol = getNodeLinks(n).resolvedSymbol; - if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(func.locals, referencedSymbol.name, 107455) === referencedSymbol) { - if (referencedSymbol.valueDeclaration.kind === 141) { - if (referencedSymbol.valueDeclaration === node) { - error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.declarationNameToString(node.name)); + if (ts.isTypeNode(n) || ts.isDeclarationName(n)) { + return; + } + if (n.kind === 172) { + return visit(n.expression); + } + else if (n.kind === 69) { + var symbol = resolveName(n, n.text, 107455 | 8388608, undefined, undefined); + 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 === 142) { + if (symbol.valueDeclaration.pos < node.pos) { return; } - if (referencedSymbol.valueDeclaration.pos < node.pos) { - return; + var current = n; + while (current !== node.initializer) { + if (ts.isFunctionLike(current.parent)) { + return; + } + if (current.parent.kind === 145 && + !(current.parent.flags & 32) && + ts.isClassLike(current.parent.parent)) { + return; + } + current = current.parent; } } error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.declarationNameToString(node.name), ts.declarationNameToString(n)); } } else { - ts.forEachChild(n, visit); + return ts.forEachChild(n, visit); } } } function checkVariableLikeDeclaration(node) { checkDecorators(node); checkSourceElement(node.type); - if (node.name.kind === 139) { + if (node.name.kind === 140) { checkComputedPropertyName(node.name); if (node.initializer) { checkExpressionCached(node.initializer); } } - if (node.kind === 168) { - if (node.propertyName && node.propertyName.kind === 139) { + if (node.kind === 169) { + if (node.propertyName && node.propertyName.kind === 140) { checkComputedPropertyName(node.propertyName); } - var parent_9 = node.parent.parent; - var parentType = getTypeForBindingElementParent(parent_9); + var parent_11 = node.parent.parent; + var parentType = getTypeForBindingElementParent(parent_11); var name_17 = node.propertyName || node.name; var property = getPropertyOfType(parentType, getTextOfPropertyName(name_17)); - if (parent_9.initializer && property && getParentOfSymbol(property)) { - checkClassPropertyAccess(parent_9, parent_9.initializer, parentType, property); + if (parent_11.initializer && property && getParentOfSymbol(property)) { + checkClassPropertyAccess(parent_11, parent_11.initializer, parentType, property); } } if (ts.isBindingPattern(node.name)) { ts.forEach(node.name.elements, checkSourceElement); } - if (node.initializer && ts.getRootDeclaration(node).kind === 141 && ts.nodeIsMissing(ts.getContainingFunction(node).body)) { + if (node.initializer && ts.getRootDeclaration(node).kind === 142 && 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 !== 206) { + if (node.initializer && node.parent.parent.kind !== 207) { checkTypeAssignableTo(checkExpressionCached(node.initializer), getWidenedTypeForVariableLikeDeclaration(node), node, undefined); checkParameterInitializer(node); } @@ -22552,7 +23195,7 @@ var ts; var symbol = getSymbolOfNode(node); var type = getTypeOfVariableOrParameterOrProperty(symbol); if (node === symbol.valueDeclaration) { - if (node.initializer && node.parent.parent.kind !== 206) { + if (node.initializer && node.parent.parent.kind !== 207) { checkTypeAssignableTo(checkExpressionCached(node.initializer), type, node, undefined); checkParameterInitializer(node); } @@ -22566,9 +23209,9 @@ var ts; checkTypeAssignableTo(checkExpressionCached(node.initializer), declarationType, node, undefined); } } - if (node.kind !== 144 && node.kind !== 143) { + if (node.kind !== 145 && node.kind !== 144) { checkExportsOnMergedDeclarations(node); - if (node.kind === 217 || node.kind === 168) { + if (node.kind === 218 || node.kind === 169) { checkVarDeclaredNamesNotShadowed(node); } checkCollisionWithCapturedSuperVariable(node, node.name); @@ -22590,7 +23233,7 @@ var ts; ts.forEach(node.declarationList.declarations, checkSourceElement); } function checkGrammarDisallowedModifiersOnObjectLiteralExpressionMethod(node) { - if (node.modifiers && node.parent.kind === 170) { + if (node.modifiers && node.parent.kind === 171) { if (ts.isAsyncFunctionLike(node)) { if (node.modifiers.length > 1) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); @@ -22609,7 +23252,7 @@ var ts; checkGrammarStatementInAmbientContext(node); checkExpression(node.expression); checkSourceElement(node.thenStatement); - if (node.thenStatement.kind === 200) { + if (node.thenStatement.kind === 201) { error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement); } checkSourceElement(node.elseStatement); @@ -22626,12 +23269,12 @@ var ts; } function checkForStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) { - if (node.initializer && node.initializer.kind === 218) { + if (node.initializer && node.initializer.kind === 219) { checkGrammarVariableDeclarationList(node.initializer); } } if (node.initializer) { - if (node.initializer.kind === 218) { + if (node.initializer.kind === 219) { ts.forEach(node.initializer.declarations, checkVariableDeclaration); } else { @@ -22646,13 +23289,13 @@ var ts; } function checkForOfStatement(node) { checkGrammarForInOrForOfStatement(node); - if (node.initializer.kind === 218) { + if (node.initializer.kind === 219) { checkForInOrForOfVariableDeclaration(node); } else { var varExpr = node.initializer; var iteratedType = checkRightHandSideOfForOf(node.expression); - if (varExpr.kind === 169 || varExpr.kind === 170) { + if (varExpr.kind === 170 || varExpr.kind === 171) { checkDestructuringAssignment(varExpr, iteratedType || unknownType); } else { @@ -22667,7 +23310,7 @@ var ts; } function checkForInStatement(node) { checkGrammarForInOrForOfStatement(node); - if (node.initializer.kind === 218) { + if (node.initializer.kind === 219) { 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); @@ -22677,7 +23320,7 @@ var ts; else { var varExpr = node.initializer; var leftType = checkExpression(varExpr); - if (varExpr.kind === 169 || varExpr.kind === 170) { + if (varExpr.kind === 170 || varExpr.kind === 171) { error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern); } else if (!isTypeAnyOrAllConstituentTypesHaveKind(leftType, 258)) { @@ -22720,7 +23363,9 @@ var ts; return indexType; } } - error(errorNode, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(inputType)); + if (errorNode) { + error(errorNode, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(inputType)); + } return unknownType; } function checkElementTypeOfIterable(iterable, errorNode) { @@ -22810,7 +23455,7 @@ var ts; arrayType = getUnionType(ts.filter(arrayOrStringType.types, function (t) { return !(t.flags & 258); })); } else if (arrayOrStringType.flags & 258) { - arrayType = emptyUnionType; + arrayType = neverType; } var hasStringConstituent = arrayOrStringType !== arrayType; var reportedError = false; @@ -22819,7 +23464,7 @@ var ts; error(errorNode, ts.Diagnostics.Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher); reportedError = true; } - if (arrayType === emptyObjectType) { + if (arrayType === neverType) { return stringType; } } @@ -22845,7 +23490,7 @@ var ts; checkGrammarStatementInAmbientContext(node) || checkGrammarBreakOrContinueStatement(node); } function isGetAccessorWithAnnotatedSetAccessor(node) { - return !!(node.kind === 148 && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 149))); + return !!(node.kind === 149 && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 150))); } function isUnwrappedReturnTypeVoidOrAny(func, returnType) { var unwrappedReturnType = ts.isAsyncFunctionLike(func) ? getPromisedType(returnType) : returnType; @@ -22862,17 +23507,17 @@ var ts; if (func) { var signature = getSignatureFromDeclaration(func); var returnType = getReturnTypeOfSignature(signature); - if (strictNullChecks || node.expression) { + if (strictNullChecks || node.expression || returnType === neverType) { var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType; if (func.asteriskToken) { return; } - if (func.kind === 149) { + if (func.kind === 150) { if (node.expression) { error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value); } } - else if (func.kind === 147) { + else if (func.kind === 148) { if (node.expression && !checkTypeAssignableTo(exprType, returnType, node.expression)) { error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); } @@ -22890,7 +23535,7 @@ var ts; } } } - else if (func.kind !== 147 && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { + else if (func.kind !== 148 && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { error(node, ts.Diagnostics.Not_all_code_paths_return_a_value); } } @@ -22910,7 +23555,7 @@ var ts; var hasDuplicateDefaultClause = false; var expressionType = checkExpression(node.expression); ts.forEach(node.caseBlock.clauses, function (clause) { - if (clause.kind === 249 && !hasDuplicateDefaultClause) { + if (clause.kind === 250 && !hasDuplicateDefaultClause) { if (firstDefaultClause === undefined) { firstDefaultClause = clause; } @@ -22922,7 +23567,7 @@ var ts; hasDuplicateDefaultClause = true; } } - if (produceDiagnostics && clause.kind === 248) { + if (produceDiagnostics && clause.kind === 249) { var caseClause = clause; var caseType = checkExpression(caseClause.expression); if (!isTypeComparableTo(expressionType, caseType)) { @@ -22939,7 +23584,7 @@ var ts; if (ts.isFunctionLike(current)) { break; } - if (current.kind === 213 && current.label.text === node.label.text) { + if (current.kind === 214 && current.label.text === node.label.text) { var sourceFile = ts.getSourceFileOfNode(node); grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNodeFromSourceText(sourceFile.text, node.label)); break; @@ -23033,7 +23678,7 @@ var ts; return; } var errorNode; - if (prop.valueDeclaration.name.kind === 139 || prop.parent === containingType.symbol) { + if (prop.valueDeclaration.name.kind === 140 || prop.parent === containingType.symbol) { errorNode = prop.valueDeclaration; } else if (indexDeclaration) { @@ -23084,7 +23729,7 @@ var ts; var firstDecl; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 220 || declaration.kind === 221) { + if (declaration.kind === 221 || declaration.kind === 222) { if (!firstDecl) { firstDecl = declaration; } @@ -23213,7 +23858,7 @@ var ts; if (derived === base) { var derivedClassDecl = getClassLikeDeclarationOfSymbol(type.symbol); if (baseDeclarationFlags & 128 && (!derivedClassDecl || !(derivedClassDecl.flags & 128))) { - if (derivedClassDecl.kind === 191) { + if (derivedClassDecl.kind === 192) { error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType)); } else { @@ -23257,7 +23902,7 @@ var ts; } } function isAccessor(kind) { - return kind === 148 || kind === 149; + return kind === 149 || kind === 150; } function areTypeParametersIdentical(list1, list2) { if (!list1 && !list2) { @@ -23324,7 +23969,7 @@ var ts; checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); checkTypeParameterListsIdentical(node, symbol); - var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 221); + var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 222); if (node === firstInterfaceDecl) { var type = getDeclaredTypeOfSymbol(symbol); var typeWithThis = getTypeWithThisArgument(type); @@ -23417,7 +24062,7 @@ var ts; return value; function evalConstant(e) { switch (e.kind) { - case 184: + case 185: var value_1 = evalConstant(e.operand); if (value_1 === undefined) { return undefined; @@ -23428,7 +24073,7 @@ var ts; case 50: return ~value_1; } return undefined; - case 186: + case 187: var left = evalConstant(e.left); if (left === undefined) { return undefined; @@ -23453,11 +24098,11 @@ var ts; return undefined; case 8: return +e.text; - case 177: + case 178: return evalConstant(e.expression); case 69: + case 173: case 172: - case 171: var member = initializer.parent; var currentType = getTypeOfSymbol(getSymbolOfNode(member.parent)); var enumType_1; @@ -23468,7 +24113,7 @@ var ts; } else { var expression = void 0; - if (e.kind === 172) { + if (e.kind === 173) { if (e.argumentExpression === undefined || e.argumentExpression.kind !== 9) { return undefined; @@ -23485,7 +24130,7 @@ var ts; if (current.kind === 69) { break; } - else if (current.kind === 171) { + else if (current.kind === 172) { current = current.expression; } else { @@ -23545,7 +24190,7 @@ var ts; } var seenEnumMissingInitialInitializer_1 = false; ts.forEach(enumSymbol.declarations, function (declaration) { - if (declaration.kind !== 223) { + if (declaration.kind !== 224) { return false; } var enumDeclaration = declaration; @@ -23568,8 +24213,8 @@ var ts; var declarations = symbol.declarations; for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) { var declaration = declarations_5[_i]; - if ((declaration.kind === 220 || - (declaration.kind === 219 && ts.nodeIsPresent(declaration.body))) && + if ((declaration.kind === 221 || + (declaration.kind === 220 && ts.nodeIsPresent(declaration.body))) && !ts.isInAmbientContext(declaration)) { return declaration; } @@ -23626,7 +24271,7 @@ var ts; 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, 220); + var mergedClass = ts.getDeclarationOfKind(symbol, 221); if (mergedClass && inSameLexicalScope(node, mergedClass)) { getNodeLinks(node).flags |= 32768; @@ -23664,26 +24309,22 @@ var ts; } function checkModuleAugmentationElement(node, isGlobalAugmentation) { switch (node.kind) { - case 199: + case 200: for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var decl = _a[_i]; checkModuleAugmentationElement(decl, isGlobalAugmentation); } break; - case 234: case 235: + case 236: grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations); break; - case 228: - if (node.moduleReference.kind !== 9) { - error(node.name, ts.Diagnostics.Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope); - break; - } case 229: + case 230: grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module); break; - case 168: - case 217: + case 169: + case 218: var name_18 = node.name; if (ts.isBindingPattern(name_18)) { for (var _b = 0, _c = name_18.elements; _b < _c.length; _b++) { @@ -23692,25 +24333,20 @@ var ts; } break; } - case 220: - case 223: - case 219: case 221: case 224: + case 220: case 222: + case 225: + case 223: + if (isGlobalAugmentation) { + return; + } var symbol = getSymbolOfNode(node); if (symbol) { var reportError = !(symbol.flags & 33554432); if (!reportError) { - if (isGlobalAugmentation) { - reportError = symbol.parent !== undefined; - } - else { - reportError = ts.isExternalModuleAugmentation(symbol.parent.declarations[0]); - } - } - if (reportError) { - error(node, ts.Diagnostics.Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope); + reportError = ts.isExternalModuleAugmentation(symbol.parent.declarations[0]); } } break; @@ -23718,10 +24354,10 @@ var ts; } function getFirstIdentifier(node) { while (true) { - if (node.kind === 138) { + if (node.kind === 139) { node = node.left; } - else if (node.kind === 171) { + else if (node.kind === 172) { node = node.expression; } else { @@ -23737,9 +24373,9 @@ var ts; error(moduleName, ts.Diagnostics.String_literal_expected); return false; } - var inAmbientExternalModule = node.parent.kind === 225 && ts.isAmbientModule(node.parent.parent); - if (node.parent.kind !== 255 && !inAmbientExternalModule) { - error(moduleName, node.kind === 235 ? + var inAmbientExternalModule = node.parent.kind === 226 && ts.isAmbientModule(node.parent.parent); + if (node.parent.kind !== 256 && !inAmbientExternalModule) { + error(moduleName, node.kind === 236 ? ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace : ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module); return false; @@ -23760,7 +24396,7 @@ var ts; (symbol.flags & 793056 ? 793056 : 0) | (symbol.flags & 1536 ? 1536 : 0); if (target.flags & excludedMeanings) { - var message = node.kind === 237 ? + var message = node.kind === 238 ? 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)); @@ -23777,7 +24413,7 @@ var ts; if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module)) { return; } - if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 959)) { + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_import_declaration_cannot_have_modifiers); } if (checkExternalImportOrExportDeclaration(node)) { @@ -23787,7 +24423,7 @@ var ts; checkImportBinding(importClause); } if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 231) { + if (importClause.namedBindings.kind === 232) { checkImportBinding(importClause.namedBindings); } else { @@ -23832,14 +24468,14 @@ var ts; if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_declaration_can_only_be_used_in_a_module)) { return; } - if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 959)) { + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023)) { 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 === 225 && ts.isAmbientModule(node.parent.parent); - if (node.parent.kind !== 255 && !inAmbientExternalModule) { + var inAmbientExternalModule = node.parent.kind === 226 && ts.isAmbientModule(node.parent.parent); + if (node.parent.kind !== 256 && !inAmbientExternalModule) { error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace); } } @@ -23852,7 +24488,7 @@ var ts; } } function checkGrammarModuleElementContext(node, errorMessage) { - if (node.parent.kind !== 255 && node.parent.kind !== 225 && node.parent.kind !== 224) { + if (node.parent.kind !== 256 && node.parent.kind !== 226 && node.parent.kind !== 225) { return grammarErrorOnFirstToken(node, errorMessage); } } @@ -23862,7 +24498,7 @@ var ts; var exportedName = node.propertyName || node.name; var symbol = resolveName(exportedName, exportedName.text, 107455 | 793056 | 1536 | 8388608, undefined, undefined); if (symbol && (symbol === undefinedSymbol || isGlobalSourceFile(getDeclarationContainer(symbol.declarations[0])))) { - error(exportedName, ts.Diagnostics.Cannot_re_export_name_that_is_not_defined_in_the_module); + error(exportedName, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, exportedName.text); } else { markExportAsReferenced(node); @@ -23873,12 +24509,12 @@ var ts; if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_assignment_can_only_be_used_in_a_module)) { return; } - var container = node.parent.kind === 255 ? node.parent : node.parent.parent; - if (container.kind === 224 && !ts.isAmbientModule(container)) { + var container = node.parent.kind === 256 ? node.parent : node.parent.parent; + if (container.kind === 225 && !ts.isAmbientModule(container)) { error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace); return; } - if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 959)) { + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); } if (node.expression.kind === 69) { @@ -23941,7 +24577,7 @@ var ts; links.exportsChecked = true; } function isNotOverload(declaration) { - return declaration.kind !== 219 || !!declaration.body; + return declaration.kind !== 220 || !!declaration.body; } } function checkSourceElement(node) { @@ -23951,118 +24587,118 @@ var ts; var kind = node.kind; if (cancellationToken) { switch (kind) { - case 224: - case 220: + case 225: case 221: - case 219: + case 222: + case 220: cancellationToken.throwIfCancellationRequested(); } } switch (kind) { - case 140: - return checkTypeParameter(node); case 141: + return checkTypeParameter(node); + case 142: return checkParameter(node); + case 145: case 144: - case 143: return checkPropertyDeclaration(node); - case 155: case 156: - case 150: + case 157: case 151: - return checkSignatureDeclaration(node); case 152: return checkSignatureDeclaration(node); - case 146: - case 145: - return checkMethodDeclaration(node); - case 147: - return checkConstructorDeclaration(node); - case 148: - case 149: - return checkAccessorDeclaration(node); - case 154: - return checkTypeReferenceNode(node); case 153: + return checkSignatureDeclaration(node); + case 147: + case 146: + return checkMethodDeclaration(node); + case 148: + return checkConstructorDeclaration(node); + case 149: + case 150: + return checkAccessorDeclaration(node); + case 155: + return checkTypeReferenceNode(node); + case 154: return checkTypePredicate(node); - case 157: - return checkTypeQuery(node); case 158: - return checkTypeLiteral(node); + return checkTypeQuery(node); case 159: - return checkArrayType(node); + return checkTypeLiteral(node); case 160: - return checkTupleType(node); + return checkArrayType(node); case 161: + return checkTupleType(node); case 162: - return checkUnionOrIntersectionType(node); case 163: + return checkUnionOrIntersectionType(node); + case 164: return checkSourceElement(node.type); - case 219: - return checkFunctionDeclaration(node); - case 198: - case 225: - return checkBlock(node); - case 199: - return checkVariableStatement(node); - case 201: - return checkExpressionStatement(node); - case 202: - return checkIfStatement(node); - case 203: - return checkDoStatement(node); - case 204: - return checkWhileStatement(node); - case 205: - return checkForStatement(node); - case 206: - return checkForInStatement(node); - case 207: - return checkForOfStatement(node); - case 208: - case 209: - return checkBreakOrContinueStatement(node); - case 210: - return checkReturnStatement(node); - case 211: - return checkWithStatement(node); - case 212: - return checkSwitchStatement(node); - case 213: - return checkLabeledStatement(node); - case 214: - return checkThrowStatement(node); - case 215: - return checkTryStatement(node); - case 217: - return checkVariableDeclaration(node); - case 168: - return checkBindingElement(node); case 220: - return checkClassDeclaration(node); - case 221: - return checkInterfaceDeclaration(node); - case 222: - return checkTypeAliasDeclaration(node); - case 223: - return checkEnumDeclaration(node); - case 224: - return checkModuleDeclaration(node); - case 229: - return checkImportDeclaration(node); - case 228: - return checkImportEqualsDeclaration(node); - case 235: - return checkExportDeclaration(node); - case 234: - return checkExportAssignment(node); + return checkFunctionDeclaration(node); + case 199: + case 226: + return checkBlock(node); case 200: - checkGrammarStatementInAmbientContext(node); - return; + return checkVariableStatement(node); + case 202: + return checkExpressionStatement(node); + case 203: + return checkIfStatement(node); + case 204: + return checkDoStatement(node); + case 205: + return checkWhileStatement(node); + case 206: + return checkForStatement(node); + case 207: + return checkForInStatement(node); + case 208: + return checkForOfStatement(node); + case 209: + case 210: + return checkBreakOrContinueStatement(node); + case 211: + return checkReturnStatement(node); + case 212: + return checkWithStatement(node); + case 213: + return checkSwitchStatement(node); + case 214: + return checkLabeledStatement(node); + case 215: + return checkThrowStatement(node); case 216: + return checkTryStatement(node); + case 218: + return checkVariableDeclaration(node); + case 169: + return checkBindingElement(node); + case 221: + return checkClassDeclaration(node); + case 222: + return checkInterfaceDeclaration(node); + case 223: + return checkTypeAliasDeclaration(node); + case 224: + return checkEnumDeclaration(node); + case 225: + return checkModuleDeclaration(node); + case 230: + return checkImportDeclaration(node); + case 229: + return checkImportEqualsDeclaration(node); + case 236: + return checkExportDeclaration(node); + case 235: + return checkExportAssignment(node); + case 201: checkGrammarStatementInAmbientContext(node); return; - case 238: + case 217: + checkGrammarStatementInAmbientContext(node); + return; + case 239: return checkMissingDeclaration(node); } } @@ -24075,17 +24711,17 @@ var ts; for (var _i = 0, deferredNodes_1 = deferredNodes; _i < deferredNodes_1.length; _i++) { var node = deferredNodes_1[_i]; switch (node.kind) { - case 178: case 179: + case 180: + case 147: case 146: - case 145: checkFunctionExpressionOrObjectLiteralMethodDeferred(node); break; - case 148: case 149: + case 150: checkAccessorDeferred(node); break; - case 191: + case 192: checkClassExpressionDeferred(node); break; } @@ -24150,7 +24786,7 @@ var ts; function isInsideWithStatementBody(node) { if (node) { while (node.parent) { - if (node.parent.kind === 211 && node.parent.statement === node) { + if (node.parent.kind === 212 && node.parent.statement === node) { return true; } node = node.parent; @@ -24172,28 +24808,28 @@ var ts; copySymbols(location.locals, meaning); } switch (location.kind) { - case 255: + case 256: if (!ts.isExternalOrCommonJsModule(location)) { break; } - case 224: + case 225: copySymbols(getSymbolOfNode(location).exports, meaning & 8914931); break; - case 223: + case 224: copySymbols(getSymbolOfNode(location).exports, meaning & 8); break; - case 191: + case 192: var className = location.name; if (className) { copySymbol(location.symbol, meaning); } - case 220: case 221: + case 222: if (!(memberFlags & 32)) { copySymbols(getSymbolOfNode(location).members, meaning & 793056); } break; - case 178: + case 179: var funcName = location.name; if (funcName) { copySymbol(location.symbol, meaning); @@ -24232,27 +24868,27 @@ var ts; } function isTypeDeclaration(node) { switch (node.kind) { - case 140: - case 220: + case 141: case 221: case 222: case 223: + case 224: return true; } } function isTypeReferenceIdentifier(entityName) { var node = entityName; - while (node.parent && node.parent.kind === 138) { + while (node.parent && node.parent.kind === 139) { node = node.parent; } - return node.parent && node.parent.kind === 154; + return node.parent && node.parent.kind === 155; } function isHeritageClauseElementIdentifier(entityName) { var node = entityName; - while (node.parent && node.parent.kind === 171) { + while (node.parent && node.parent.kind === 172) { node = node.parent; } - return node.parent && node.parent.kind === 193; + return node.parent && node.parent.kind === 194; } function forEachEnclosingClass(node, callback) { var result; @@ -24269,13 +24905,13 @@ var ts; return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; }); } function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) { - while (nodeOnRightSide.parent.kind === 138) { + while (nodeOnRightSide.parent.kind === 139) { nodeOnRightSide = nodeOnRightSide.parent; } - if (nodeOnRightSide.parent.kind === 228) { + if (nodeOnRightSide.parent.kind === 229) { return nodeOnRightSide.parent.moduleReference === nodeOnRightSide && nodeOnRightSide.parent; } - if (nodeOnRightSide.parent.kind === 234) { + if (nodeOnRightSide.parent.kind === 235) { return nodeOnRightSide.parent.expression === nodeOnRightSide && nodeOnRightSide.parent; } return undefined; @@ -24287,7 +24923,7 @@ var ts; if (ts.isDeclarationName(entityName)) { return getSymbolOfNode(entityName.parent); } - if (ts.isInJavaScriptFile(entityName) && entityName.parent.kind === 171) { + if (ts.isInJavaScriptFile(entityName) && entityName.parent.kind === 172) { var specialPropertyAssignmentKind = ts.getSpecialPropertyAssignmentKind(entityName.parent.parent); switch (specialPropertyAssignmentKind) { case 1: @@ -24299,10 +24935,10 @@ var ts; default: } } - if (entityName.parent.kind === 234) { + if (entityName.parent.kind === 235) { return resolveEntityName(entityName, 107455 | 793056 | 1536 | 8388608); } - if (entityName.kind !== 171) { + if (entityName.kind !== 172) { if (isInRightSideOfImportOrExportAssignment(entityName)) { return getSymbolOfPartOfRightHandSideOfImportEquals(entityName); } @@ -24312,7 +24948,7 @@ var ts; } if (isHeritageClauseElementIdentifier(entityName)) { var meaning = 0; - if (entityName.parent.kind === 193) { + if (entityName.parent.kind === 194) { meaning = 793056; if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { meaning |= 107455; @@ -24335,14 +24971,14 @@ var ts; var meaning = 107455 | 8388608; return resolveEntityName(entityName, meaning); } - else if (entityName.kind === 171) { + else if (entityName.kind === 172) { var symbol = getNodeLinks(entityName).resolvedSymbol; if (!symbol) { checkPropertyAccessExpression(entityName); } return getNodeLinks(entityName).resolvedSymbol; } - else if (entityName.kind === 138) { + else if (entityName.kind === 139) { var symbol = getNodeLinks(entityName).resolvedSymbol; if (!symbol) { checkQualifiedName(entityName); @@ -24351,33 +24987,39 @@ var ts; } } else if (isTypeReferenceIdentifier(entityName)) { - var meaning = entityName.parent.kind === 154 ? 793056 : 1536; + var meaning = entityName.parent.kind === 155 ? 793056 : 1536; meaning |= 8388608; return resolveEntityName(entityName, meaning); } - else if (entityName.parent.kind === 245) { + else if (entityName.parent.kind === 246) { return getJsxAttributePropertySymbol(entityName.parent); } - if (entityName.parent.kind === 153) { + if (entityName.parent.kind === 154) { return resolveEntityName(entityName, 1); } return undefined; } function getSymbolAtLocation(node) { + if (node.kind === 256) { + return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined; + } if (isInsideWithStatementBody(node)) { return undefined; } if (ts.isDeclarationName(node)) { return getSymbolOfNode(node.parent); } + else if (ts.isLiteralComputedPropertyDeclarationName(node)) { + return getSymbolOfNode(node.parent.parent); + } if (node.kind === 69) { if (isInRightSideOfImportOrExportAssignment(node)) { - return node.parent.kind === 234 + return node.parent.kind === 235 ? getSymbolOfEntityNameOrPropertyAccessExpression(node) : getSymbolOfPartOfRightHandSideOfImportEquals(node); } - else if (node.parent.kind === 168 && - node.parent.parent.kind === 166 && + else if (node.parent.kind === 169 && + node.parent.parent.kind === 167 && node === node.parent.propertyName) { var typeOfPattern = getTypeOfNode(node.parent.parent); var propertyDeclaration = typeOfPattern && getPropertyOfType(typeOfPattern, node.text); @@ -24388,30 +25030,30 @@ var ts; } switch (node.kind) { case 69: - case 171: - case 138: + case 172: + case 139: return getSymbolOfEntityNameOrPropertyAccessExpression(node); case 97: case 95: var type = ts.isExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node); return type.symbol; - case 164: + case 165: return getTypeFromTypeNode(node).symbol; case 121: var constructorDeclaration = node.parent; - if (constructorDeclaration && constructorDeclaration.kind === 147) { + if (constructorDeclaration && constructorDeclaration.kind === 148) { return constructorDeclaration.parent.symbol; } return undefined; case 9: if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) || - ((node.parent.kind === 229 || node.parent.kind === 235) && + ((node.parent.kind === 230 || node.parent.kind === 236) && node.parent.moduleSpecifier === node)) { return resolveExternalModuleName(node, node); } case 8: - if (node.parent.kind === 172 && node.parent.argumentExpression === node) { + if (node.parent.kind === 173 && node.parent.argumentExpression === node) { var objectType = checkExpression(node.parent.expression); if (objectType === unknownType) return undefined; @@ -24425,7 +25067,7 @@ var ts; return undefined; } function getShorthandAssignmentValueSymbol(location) { - if (location && location.kind === 253) { + if (location && location.kind === 254) { return resolveEntityName(location.name, 107455 | 8388608); } return undefined; @@ -24474,6 +25116,29 @@ var ts; } return unknownType; } + function getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr) { + ts.Debug.assert(expr.kind === 171 || expr.kind === 170); + if (expr.parent.kind === 208) { + var iteratedType = checkRightHandSideOfForOf(expr.parent.expression); + return checkDestructuringAssignment(expr, iteratedType || unknownType); + } + if (expr.parent.kind === 187) { + var iteratedType = checkExpression(expr.parent.right); + return checkDestructuringAssignment(expr, iteratedType || unknownType); + } + if (expr.parent.kind === 253) { + var typeOfParentObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent.parent); + return checkObjectLiteralDestructuringPropertyAssignment(typeOfParentObjectLiteral || unknownType, expr.parent); + } + ts.Debug.assert(expr.parent.kind === 170); + var typeOfArrayLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent); + var elementType = checkIteratedTypeOrElementType(typeOfArrayLiteral || unknownType, expr.parent, 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.text); + } function getTypeOfExpression(expr) { if (ts.isRightSideOfQualifiedNameOrPropertyAccess(expr)) { expr = expr.parent; @@ -24511,7 +25176,11 @@ var ts; return symbols_3; } else if (symbol.flags & 67108864) { - var target = getSymbolLinks(symbol).target; + var target = void 0; + var next = symbol; + while (next = getSymbolLinks(next).target) { + target = next; + } if (target) { return [target]; } @@ -24552,11 +25221,11 @@ var ts; } var parentSymbol = getParentOfSymbol(symbol); if (parentSymbol) { - if (parentSymbol.flags & 512 && parentSymbol.valueDeclaration.kind === 255) { + if (parentSymbol.flags & 512 && parentSymbol.valueDeclaration.kind === 256) { return parentSymbol.valueDeclaration; } for (var n = node.parent; n; n = n.parent) { - if ((n.kind === 224 || n.kind === 223) && getSymbolOfNode(n) === parentSymbol) { + if ((n.kind === 225 || n.kind === 224) && getSymbolOfNode(n) === parentSymbol) { return n; } } @@ -24580,7 +25249,7 @@ var ts; else if (nodeLinks_1.flags & 131072) { var isDeclaredInLoop = nodeLinks_1.flags & 262144; var inLoopInitializer = ts.isIterationStatement(container, false); - var inLoopBodyBlock = container.kind === 198 && ts.isIterationStatement(container.parent, false); + var inLoopBodyBlock = container.kind === 199 && ts.isIterationStatement(container.parent, false); links.isDeclarationWithCollidingName = !ts.isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || (!inLoopInitializer && !inLoopBodyBlock)); } else { @@ -24601,22 +25270,22 @@ var ts; } function isValueAliasDeclaration(node) { switch (node.kind) { - case 228: - case 230: + case 229: case 231: - case 233: - case 237: + case 232: + case 234: + case 238: return isAliasResolvedToValue(getSymbolOfNode(node)); - case 235: + case 236: var exportClause = node.exportClause; return exportClause && ts.forEach(exportClause.elements, isValueAliasDeclaration); - case 234: + case 235: return node.expression && node.expression.kind === 69 ? isAliasResolvedToValue(getSymbolOfNode(node)) : true; } return false; } function isTopLevelValueImportEqualsWithEntityName(node) { - if (node.parent.kind !== 255 || !ts.isInternalModuleImportEqualsDeclaration(node)) { + if (node.parent.kind !== 256 || !ts.isInternalModuleImportEqualsDeclaration(node)) { return false; } var isValue = isAliasResolvedToValue(getSymbolOfNode(node)); @@ -24624,12 +25293,10 @@ var ts; } function isAliasResolvedToValue(symbol) { var target = resolveAlias(symbol); - if (target === unknownSymbol && compilerOptions.isolatedModules) { + if (target === unknownSymbol) { return true; } - return target !== unknownSymbol && - target && - target.flags & 107455 && + return target.flags & 107455 && (compilerOptions.preserveConstEnums || !isConstEnumOrConstEnumOnlyModule(target)); } function isConstEnumOrConstEnumOnlyModule(s) { @@ -24664,7 +25331,7 @@ var ts; return getNodeLinks(node).enumMemberValue; } function getConstantValue(node) { - if (node.kind === 254) { + if (node.kind === 255) { return getEnumMemberValue(node); } var symbol = getNodeLinks(node).resolvedSymbol; @@ -24757,6 +25424,22 @@ var ts; return symbol && getExportSymbolOfValueSymbolIfExported(symbol).valueDeclaration; } function createResolver() { + var resolvedTypeReferenceDirectives = host.getResolvedTypeReferenceDirectives(); + var fileToDirective; + if (resolvedTypeReferenceDirectives) { + fileToDirective = ts.createFileMap(); + for (var key in resolvedTypeReferenceDirectives) { + if (!ts.hasProperty(resolvedTypeReferenceDirectives, key)) { + continue; + } + var resolvedDirective = resolvedTypeReferenceDirectives[key]; + if (!resolvedDirective) { + continue; + } + var file = host.getSourceFile(resolvedDirective.resolvedFileName); + fileToDirective.set(file.path, key); + } + } return { getReferencedExportContainer: getReferencedExportContainer, getReferencedImportDeclaration: getReferencedImportDeclaration, @@ -24782,8 +25465,66 @@ var ts; isOptionalParameter: isOptionalParameter, moduleExportsSomeValue: moduleExportsSomeValue, isArgumentsLocalBinding: isArgumentsLocalBinding, - getExternalModuleFileFromDeclaration: getExternalModuleFileFromDeclaration + getExternalModuleFileFromDeclaration: getExternalModuleFileFromDeclaration, + getTypeReferenceDirectivesForEntityName: getTypeReferenceDirectivesForEntityName, + getTypeReferenceDirectivesForSymbol: getTypeReferenceDirectivesForSymbol }; + function getTypeReferenceDirectivesForEntityName(node) { + if (!fileToDirective) { + return undefined; + } + var meaning = (node.kind === 172) || (node.kind === 69 && isInTypeQuery(node)) + ? 107455 | 1048576 + : 793056 | 1536; + 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); + } + } + } + return typeReferenceDirectives; + } + function isSymbolFromTypeDeclarationFile(symbol) { + if (!symbol.declarations) { + return false; + } + var current = symbol; + while (true) { + var parent_12 = getParentOfSymbol(current); + if (parent_12) { + current = parent_12; + } + else { + break; + } + } + if (current.valueDeclaration && current.valueDeclaration.kind === 256 && 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.contains(file.path)) { + return true; + } + } + return false; + } } function getExternalModuleFileFromDeclaration(declaration) { var specifier = ts.getExternalModuleName(declaration); @@ -24791,7 +25532,7 @@ var ts; if (!moduleSymbol) { return undefined; } - return ts.getDeclarationOfKind(moduleSymbol, 255); + return ts.getDeclarationOfKind(moduleSymbol, 256); } function initializeTypeChecker() { ts.forEach(host.getSourceFiles(), function (file) { @@ -24883,14 +25624,14 @@ var ts; return false; } if (!ts.nodeCanBeDecorated(node)) { - if (node.kind === 146 && !ts.nodeIsPresent(node.body)) { + if (node.kind === 147 && !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 === 148 || node.kind === 149) { + else if (node.kind === 149 || node.kind === 150) { 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); @@ -24900,38 +25641,38 @@ var ts; } function checkGrammarModifiers(node) { switch (node.kind) { - case 148: case 149: - case 147: - case 144: - case 143: - case 146: + case 150: + case 148: case 145: - case 152: - case 224: + case 144: + case 147: + case 146: + case 153: + case 225: + case 230: case 229: - case 228: + case 236: case 235: - case 234: - case 141: - break; - case 219: - if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 118) && - node.parent.kind !== 225 && node.parent.kind !== 255) { - return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); - } + case 142: break; case 220: - case 221: - case 199: - case 222: - if (node.modifiers && node.parent.kind !== 225 && node.parent.kind !== 255) { + if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 118) && + node.parent.kind !== 226 && node.parent.kind !== 256) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); } break; + case 221: + case 222: + case 200: case 223: + if (node.modifiers && node.parent.kind !== 226 && node.parent.kind !== 256) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); + } + break; + case 224: if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 74) && - node.parent.kind !== 225 && node.parent.kind !== 255) { + node.parent.kind !== 226 && node.parent.kind !== 256) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); } break; @@ -24945,17 +25686,17 @@ var ts; var flags = 0; for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) { var modifier = _a[_i]; - if (modifier.kind !== 127) { - if (node.kind === 143 || node.kind === 145) { + if (modifier.kind !== 128) { + if (node.kind === 144 || node.kind === 146) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind)); } - if (node.kind === 152) { + if (node.kind === 153) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind)); } } switch (modifier.kind) { case 74: - if (node.kind !== 223 && node.parent.kind === 220) { + if (node.kind !== 224 && node.parent.kind === 221) { return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(74)); } break; @@ -24981,7 +25722,7 @@ var ts; else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async"); } - else if (node.parent.kind === 225 || node.parent.kind === 255) { + else if (node.parent.kind === 226 || node.parent.kind === 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text); } else if (flags & 128) { @@ -25004,10 +25745,10 @@ var ts; else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async"); } - else if (node.parent.kind === 225 || node.parent.kind === 255) { + else if (node.parent.kind === 226 || node.parent.kind === 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static"); } - else if (node.kind === 141) { + else if (node.kind === 142) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); } else if (flags & 128) { @@ -25016,11 +25757,11 @@ var ts; flags |= 32; lastStatic = modifier; break; - case 127: + case 128: if (flags & 64) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly"); } - else if (node.kind !== 144 && node.kind !== 143 && node.kind !== 152) { + else if (node.kind !== 145 && node.kind !== 144 && node.kind !== 153 && node.kind !== 142) { return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature); } flags |= 64; @@ -25039,10 +25780,10 @@ var ts; else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "async"); } - else if (node.parent.kind === 220) { + else if (node.parent.kind === 221) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); } - else if (node.kind === 141) { + else if (node.kind === 142) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); } flags |= 1; @@ -25054,13 +25795,13 @@ var ts; else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async"); } - else if (node.parent.kind === 220) { + else if (node.parent.kind === 221) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); } - else if (node.kind === 141) { + else if (node.kind === 142) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); } - else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 225) { + else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 226) { return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); } flags |= 2; @@ -25070,14 +25811,14 @@ var ts; if (flags & 128) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract"); } - if (node.kind !== 220) { - if (node.kind !== 146 && - node.kind !== 144 && - node.kind !== 148 && - node.kind !== 149) { + if (node.kind !== 221) { + if (node.kind !== 147 && + node.kind !== 145 && + node.kind !== 149 && + node.kind !== 150) { return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration); } - if (!(node.parent.kind === 220 && node.parent.flags & 128)) { + if (!(node.parent.kind === 221 && node.parent.flags & 128)) { return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class); } if (flags & 32) { @@ -25096,7 +25837,7 @@ var ts; 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 === 141) { + else if (node.kind === 142) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async"); } flags |= 256; @@ -25104,7 +25845,7 @@ var ts; break; } } - if (node.kind === 147) { + if (node.kind === 148) { if (flags & 32) { return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); } @@ -25119,10 +25860,10 @@ var ts; } return; } - else if ((node.kind === 229 || node.kind === 228) && flags & 2) { + else if ((node.kind === 230 || node.kind === 229) && flags & 2) { return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare"); } - else if (node.kind === 141 && (flags & 28) && ts.isBindingPattern(node.name)) { + else if (node.kind === 142 && (flags & 92) && ts.isBindingPattern(node.name)) { return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_a_binding_pattern); } if (flags & 256) { @@ -25134,10 +25875,10 @@ var ts; return grammarErrorOnNode(asyncModifier, ts.Diagnostics.Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher); } switch (node.kind) { - case 146: - case 219: - case 178: + case 147: + case 220: case 179: + case 180: if (!node.asteriskToken) { return false; } @@ -25202,7 +25943,7 @@ var ts; checkGrammarParameterList(node.parameters) || checkGrammarArrowFunction(node, file); } function checkGrammarArrowFunction(node, file) { - if (node.kind === 179) { + if (node.kind === 180) { var arrowFunction = node; var startLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.pos).line; var endLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.end).line; @@ -25225,7 +25966,7 @@ var ts; if (parameter.dotDotDotToken) { return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); } - if (parameter.flags & 959) { + if (parameter.flags & 1023) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); } if (parameter.questionToken) { @@ -25237,7 +25978,7 @@ var ts; if (!parameter.type) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); } - if (parameter.type.kind !== 131 && parameter.type.kind !== 129) { + if (parameter.type.kind !== 132 && parameter.type.kind !== 130) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); } if (!node.type) { @@ -25264,7 +26005,7 @@ var ts; var sourceFile = ts.getSourceFileOfNode(node); for (var _i = 0, args_1 = args; _i < args_1.length; _i++) { var arg = args_1[_i]; - if (arg.kind === 192) { + if (arg.kind === 193) { return grammarErrorAtPos(sourceFile, arg.pos, 0, ts.Diagnostics.Argument_expression_expected); } } @@ -25335,19 +26076,19 @@ var ts; return false; } function checkGrammarComputedPropertyName(node) { - if (node.kind !== 139) { + if (node.kind !== 140) { return false; } var computedPropertyName = node; - if (computedPropertyName.expression.kind === 186 && computedPropertyName.expression.operatorToken.kind === 24) { + if (computedPropertyName.expression.kind === 187 && computedPropertyName.expression.operatorToken.kind === 24) { 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 === 219 || - node.kind === 178 || - node.kind === 146); + ts.Debug.assert(node.kind === 220 || + node.kind === 179 || + node.kind === 147); if (ts.isInAmbientContext(node)) { return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context); } @@ -25372,34 +26113,34 @@ var ts; var GetOrSetAccessor = GetAccessor | SetAccessor; var _loop_1 = function(prop) { var name_20 = prop.name; - if (prop.kind === 192 || - name_20.kind === 139) { + if (prop.kind === 193 || + name_20.kind === 140) { checkGrammarComputedPropertyName(name_20); return "continue"; } - if (prop.kind === 253 && !inDestructuring && prop.objectAssignmentInitializer) { + if (prop.kind === 254 && !inDestructuring && prop.objectAssignmentInitializer) { return { value: grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment) }; } ts.forEach(prop.modifiers, function (mod) { - if (mod.kind !== 118 || prop.kind !== 146) { + if (mod.kind !== 118 || prop.kind !== 147) { grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod)); } }); var currentKind = void 0; - if (prop.kind === 252 || prop.kind === 253) { + if (prop.kind === 253 || prop.kind === 254) { checkGrammarForInvalidQuestionMark(prop, prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional); if (name_20.kind === 8) { checkGrammarNumericLiteral(name_20); } currentKind = Property; } - else if (prop.kind === 146) { + else if (prop.kind === 147) { currentKind = Property; } - else if (prop.kind === 148) { + else if (prop.kind === 149) { currentKind = GetAccessor; } - else if (prop.kind === 149) { + else if (prop.kind === 150) { currentKind = SetAccessor; } else { @@ -25436,7 +26177,7 @@ var ts; var seen = {}; for (var _i = 0, _a = node.attributes; _i < _a.length; _i++) { var attr = _a[_i]; - if (attr.kind === 246) { + if (attr.kind === 247) { continue; } var jsxAttr = attr; @@ -25448,7 +26189,7 @@ var ts; return grammarErrorOnNode(name_21, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); } var initializer = jsxAttr.initializer; - if (initializer && initializer.kind === 247 && !initializer.expression) { + if (initializer && initializer.kind === 248 && !initializer.expression) { return grammarErrorOnNode(jsxAttr.initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression); } } @@ -25457,7 +26198,7 @@ var ts; if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) { return true; } - if (forInOrOfStatement.initializer.kind === 218) { + if (forInOrOfStatement.initializer.kind === 219) { var variableList = forInOrOfStatement.initializer; if (!checkGrammarVariableDeclarationList(variableList)) { var declarations = variableList.declarations; @@ -25465,20 +26206,20 @@ var ts; return false; } if (declarations.length > 1) { - var diagnostic = forInOrOfStatement.kind === 206 + var diagnostic = forInOrOfStatement.kind === 207 ? 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 === 206 + var diagnostic = forInOrOfStatement.kind === 207 ? 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 === 206 + var diagnostic = forInOrOfStatement.kind === 207 ? 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); @@ -25501,24 +26242,20 @@ var ts; else if (accessor.typeParameters) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); } - else if (kind === 148 && accessor.parameters.length) { - return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters); + else if (!doesAccessorHaveCorrectParameterCount(accessor)) { + return grammarErrorOnNode(accessor.name, kind === 149 ? + ts.Diagnostics.A_get_accessor_cannot_have_parameters : + ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); } - else if (kind === 149) { + else if (kind === 150) { if (accessor.type) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); } - else if (accessor.parameters.length !== 1) { - return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); - } 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.flags & 959) { - return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); - } else if (parameter.questionToken) { return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); } @@ -25528,6 +26265,16 @@ var ts; } } } + function doesAccessorHaveCorrectParameterCount(accessor) { + return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 149 ? 0 : 1); + } + function getAccessorThisParameter(accessor) { + if (accessor.parameters.length === (accessor.kind === 149 ? 1 : 2) && + accessor.parameters[0].name.kind === 69 && + accessor.parameters[0].name.originalKeywordKind === 97) { + return accessor.parameters[0]; + } + } function checkGrammarForNonSymbolComputedProperty(node, message) { if (ts.isDynamicName(node)) { return grammarErrorOnNode(node, message); @@ -25539,8 +26286,8 @@ var ts; checkGrammarForGenerator(node)) { return true; } - if (node.parent.kind === 170) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) { + if (node.parent.kind === 171) { + if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) { return true; } else if (node.body === undefined) { @@ -25548,9 +26295,6 @@ var ts; } } if (ts.isClassLike(node.parent)) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) { - return true; - } 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); } @@ -25558,10 +26302,10 @@ var ts; 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 === 221) { + else if (node.parent.kind === 222) { 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 === 158) { + else if (node.parent.kind === 159) { return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol); } } @@ -25572,9 +26316,9 @@ var ts; return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); } switch (current.kind) { - case 213: + case 214: if (node.label && current.label.text === node.label.text) { - var isMisplacedContinueLabel = node.kind === 208 + var isMisplacedContinueLabel = node.kind === 209 && !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); @@ -25582,8 +26326,8 @@ var ts; return false; } break; - case 212: - if (node.kind === 209 && !node.label) { + case 213: + if (node.kind === 210 && !node.label) { return false; } break; @@ -25596,13 +26340,13 @@ var ts; current = current.parent; } if (node.label) { - var message = node.kind === 209 + var message = node.kind === 210 ? 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 === 209 + var message = node.kind === 210 ? 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); @@ -25614,7 +26358,7 @@ var ts; if (node !== ts.lastOrUndefined(elements)) { return grammarErrorOnNode(node, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern); } - if (node.name.kind === 167 || node.name.kind === 166) { + if (node.name.kind === 168 || node.name.kind === 167) { return grammarErrorOnNode(node.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern); } if (node.initializer) { @@ -25623,7 +26367,7 @@ var ts; } } function checkGrammarVariableDeclaration(node) { - if (node.parent.parent.kind !== 206 && node.parent.parent.kind !== 207) { + if (node.parent.parent.kind !== 207 && node.parent.parent.kind !== 208) { if (ts.isInAmbientContext(node)) { if (node.initializer) { var equalsTokenLength = "=".length; @@ -25652,7 +26396,7 @@ var ts; var elements = name.elements; for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) { var element = elements_2[_i]; - if (element.kind !== 192) { + if (element.kind !== 193) { checkGrammarNameInLetOrConstDeclarations(element.name); } } @@ -25669,15 +26413,15 @@ var ts; } function allowLetAndConstDeclarations(parent) { switch (parent.kind) { - case 202: case 203: case 204: - case 211: case 205: + case 212: case 206: case 207: + case 208: return false; - case 213: + case 214: return allowLetAndConstDeclarations(parent.parent); } return true; @@ -25728,12 +26472,11 @@ var ts; } function checkGrammarProperty(node) { if (ts.isClassLike(node.parent)) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional) || - checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol)) { + 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 === 221) { + else if (node.parent.kind === 222) { if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol)) { return true; } @@ -25741,7 +26484,7 @@ var ts; return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer); } } - else if (node.parent.kind === 158) { + else if (node.parent.kind === 159) { if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol)) { return true; } @@ -25754,12 +26497,12 @@ var ts; } } function checkGrammarTopLevelElementForRequiredDeclareModifier(node) { - if (node.kind === 221 || - node.kind === 222 || + if (node.kind === 222 || + node.kind === 223 || + node.kind === 230 || node.kind === 229 || - node.kind === 228 || + node.kind === 236 || node.kind === 235 || - node.kind === 234 || (node.flags & 2) || (node.flags & (1 | 512))) { return false; @@ -25769,7 +26512,7 @@ var ts; function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) { for (var _i = 0, _a = file.statements; _i < _a.length; _i++) { var decl = _a[_i]; - if (ts.isDeclaration(decl) || decl.kind === 199) { + if (ts.isDeclaration(decl) || decl.kind === 200) { if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) { return true; } @@ -25788,7 +26531,7 @@ var ts; 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 === 198 || node.parent.kind === 225 || node.parent.kind === 255) { + if (node.parent.kind === 199 || node.parent.kind === 226 || node.parent.kind === 256) { 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); @@ -26114,7 +26857,8 @@ var ts; var noDeclare; var moduleElementDeclarationEmitInfo = []; var asynchronousSubModuleDeclarationEmitInfo; - var referencePathsOutput = ""; + var referencesOutput = ""; + var usedTypeDirectiveReferences; var emittedReferencedFiles = []; var addedGlobalFileReference = false; var allSourcesModuleElementDeclarationEmitInfo = []; @@ -26152,7 +26896,7 @@ var ts; var oldWriter = writer; ts.forEach(moduleElementDeclarationEmitInfo, function (aliasEmitInfo) { if (aliasEmitInfo.isVisible && !aliasEmitInfo.asynchronousOutput) { - ts.Debug.assert(aliasEmitInfo.node.kind === 229); + ts.Debug.assert(aliasEmitInfo.node.kind === 230); createAndSetNewTextWriterWithSymbolWriter(); ts.Debug.assert(aliasEmitInfo.indent === 0 || (aliasEmitInfo.indent === 1 && isBundledEmit)); for (var i = 0; i < aliasEmitInfo.indent; i++) { @@ -26174,11 +26918,18 @@ var ts; writeLine(); } }); + if (usedTypeDirectiveReferences) { + for (var directive in usedTypeDirectiveReferences) { + if (ts.hasProperty(usedTypeDirectiveReferences, directive)) { + referencesOutput += "/// " + newLine; + } + } + } return { reportedDeclarationError: reportedDeclarationError, moduleElementDeclarationEmitInfo: allSourcesModuleElementDeclarationEmitInfo, synchronousDeclarationOutput: writer.getText(), - referencePathsOutput: referencePathsOutput + referencesOutput: referencesOutput }; function hasInternalAnnotation(range) { var comment = currentText.substring(range.pos, range.end); @@ -26218,10 +26969,10 @@ var ts; var oldWriter = writer; ts.forEach(nodes, function (declaration) { var nodeToCheck; - if (declaration.kind === 217) { + if (declaration.kind === 218) { nodeToCheck = declaration.parent.parent; } - else if (declaration.kind === 232 || declaration.kind === 233 || declaration.kind === 230) { + else if (declaration.kind === 233 || declaration.kind === 234 || declaration.kind === 231) { ts.Debug.fail("We should be getting ImportDeclaration instead to write"); } else { @@ -26232,7 +26983,7 @@ var ts; moduleElementEmitInfo = ts.forEach(asynchronousSubModuleDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.node === nodeToCheck ? declEmitInfo : undefined; }); } if (moduleElementEmitInfo) { - if (moduleElementEmitInfo.node.kind === 229) { + if (moduleElementEmitInfo.node.kind === 230) { moduleElementEmitInfo.isVisible = true; } else { @@ -26240,12 +26991,12 @@ var ts; for (var declarationIndent = moduleElementEmitInfo.indent; declarationIndent; declarationIndent--) { increaseIndent(); } - if (nodeToCheck.kind === 224) { + if (nodeToCheck.kind === 225) { ts.Debug.assert(asynchronousSubModuleDeclarationEmitInfo === undefined); asynchronousSubModuleDeclarationEmitInfo = []; } writeModuleElement(nodeToCheck); - if (nodeToCheck.kind === 224) { + if (nodeToCheck.kind === 225) { moduleElementEmitInfo.subModuleElementDeclarationEmitInfo = asynchronousSubModuleDeclarationEmitInfo; asynchronousSubModuleDeclarationEmitInfo = undefined; } @@ -26255,6 +27006,20 @@ var ts; }); setWriter(oldWriter); } + function recordTypeReferenceDirectivesIfNecessary(typeReferenceDirectives) { + if (!typeReferenceDirectives) { + return; + } + if (!usedTypeDirectiveReferences) { + usedTypeDirectiveReferences = {}; + } + for (var _i = 0, typeReferenceDirectives_1 = typeReferenceDirectives; _i < typeReferenceDirectives_1.length; _i++) { + var directive = typeReferenceDirectives_1[_i]; + if (!ts.hasProperty(usedTypeDirectiveReferences, directive)) { + usedTypeDirectiveReferences[directive] = directive; + } + } + } function handleSymbolAccessibilityError(symbolAccessibilityResult) { if (symbolAccessibilityResult.accessibility === 0) { if (symbolAccessibilityResult && symbolAccessibilityResult.aliasesToMakeVisible) { @@ -26276,6 +27041,7 @@ var ts; } function trackSymbol(symbol, enclosingDeclaration, meaning) { handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning)); + recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning)); } function reportInaccessibleThisError() { if (errorNameNode) { @@ -26343,42 +27109,43 @@ var ts; function emitType(type) { switch (type.kind) { case 117: - case 131: - case 129: - case 120: case 132: + case 130: + case 120: + case 133: case 103: - case 134: + case 135: case 93: - case 164: + case 127: case 165: + case 166: return writeTextOfNode(currentText, type); - case 193: + case 194: return emitExpressionWithTypeArguments(type); - case 154: - return emitTypeReference(type); - case 157: - return emitTypeQuery(type); - case 159: - return emitArrayType(type); - case 160: - return emitTupleType(type); - case 161: - return emitUnionType(type); - case 162: - return emitIntersectionType(type); - case 163: - return emitParenType(type); case 155: - case 156: - return emitSignatureDeclarationWithJsDocComments(type); + return emitTypeReference(type); case 158: + return emitTypeQuery(type); + case 160: + return emitArrayType(type); + case 161: + return emitTupleType(type); + case 162: + return emitUnionType(type); + case 163: + return emitIntersectionType(type); + case 164: + return emitParenType(type); + case 156: + case 157: + return emitSignatureDeclarationWithJsDocComments(type); + case 159: return emitTypeLiteral(type); case 69: return emitEntityName(type); - case 138: + case 139: return emitEntityName(type); - case 153: + case 154: return emitTypePredicate(type); } function writeEntityName(entityName) { @@ -26386,21 +27153,22 @@ var ts; writeTextOfNode(currentText, entityName); } else { - var left = entityName.kind === 138 ? entityName.left : entityName.expression; - var right = entityName.kind === 138 ? entityName.right : entityName.name; + var left = entityName.kind === 139 ? entityName.left : entityName.expression; + var right = entityName.kind === 139 ? entityName.right : entityName.name; writeEntityName(left); write("."); writeTextOfNode(currentText, right); } } function emitEntityName(entityName) { - var visibilityResult = resolver.isEntityNameVisible(entityName, entityName.parent.kind === 228 ? entityName.parent : enclosingDeclaration); + var visibilityResult = resolver.isEntityNameVisible(entityName, entityName.parent.kind === 229 ? entityName.parent : enclosingDeclaration); handleSymbolAccessibilityError(visibilityResult); + recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForEntityName(entityName)); writeEntityName(entityName); } function emitExpressionWithTypeArguments(node) { if (ts.isSupportedExpressionWithTypeArguments(node)) { - ts.Debug.assert(node.expression.kind === 69 || node.expression.kind === 171); + ts.Debug.assert(node.expression.kind === 69 || node.expression.kind === 172); emitEntityName(node.expression); if (node.typeArguments) { write("<"); @@ -26520,10 +27288,10 @@ var ts; if (isModuleElementVisible) { writeModuleElement(node); } - else if (node.kind === 228 || - (node.parent.kind === 255 && isCurrentFileExternalModule)) { + else if (node.kind === 229 || + (node.parent.kind === 256 && isCurrentFileExternalModule)) { var isVisible = void 0; - if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 255) { + if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 256) { asynchronousSubModuleDeclarationEmitInfo.push({ node: node, outputPos: writer.getTextPos(), @@ -26532,7 +27300,7 @@ var ts; }); } else { - if (node.kind === 229) { + if (node.kind === 230) { var importDeclaration = node; if (importDeclaration.importClause) { isVisible = (importDeclaration.importClause.name && resolver.isDeclarationVisible(importDeclaration.importClause)) || @@ -26550,37 +27318,37 @@ var ts; } function writeModuleElement(node) { switch (node.kind) { - case 219: - return writeFunctionDeclaration(node); - case 199: - return writeVariableStatement(node); - case 221: - return writeInterfaceDeclaration(node); case 220: - return writeClassDeclaration(node); + return writeFunctionDeclaration(node); + case 200: + return writeVariableStatement(node); case 222: - return writeTypeAliasDeclaration(node); + return writeInterfaceDeclaration(node); + case 221: + return writeClassDeclaration(node); case 223: - return writeEnumDeclaration(node); + return writeTypeAliasDeclaration(node); case 224: + return writeEnumDeclaration(node); + case 225: return writeModuleDeclaration(node); - case 228: - return writeImportEqualsDeclaration(node); case 229: + return writeImportEqualsDeclaration(node); + case 230: return writeImportDeclaration(node); default: ts.Debug.fail("Unknown symbol kind"); } } function emitModuleElementDeclarationFlags(node) { - if (node.parent.kind === 255) { + if (node.parent.kind === 256) { if (node.flags & 1) { write("export "); } if (node.flags & 512) { write("default "); } - else if (node.kind !== 221 && !noDeclare) { + else if (node.kind !== 222 && !noDeclare) { write("declare "); } } @@ -26630,7 +27398,7 @@ var ts; } function isVisibleNamedBinding(namedBindings) { if (namedBindings) { - if (namedBindings.kind === 231) { + if (namedBindings.kind === 232) { return resolver.isDeclarationVisible(namedBindings); } else { @@ -26653,7 +27421,7 @@ var ts; if (currentWriterPos !== writer.getTextPos()) { write(", "); } - if (node.importClause.namedBindings.kind === 231) { + if (node.importClause.namedBindings.kind === 232) { write("* as "); writeTextOfNode(currentText, node.importClause.namedBindings.name); } @@ -26670,13 +27438,13 @@ var ts; writer.writeLine(); } function emitExternalModuleSpecifier(parent) { - resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || parent.kind !== 224; + resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || parent.kind !== 225; var moduleSpecifier; - if (parent.kind === 228) { + if (parent.kind === 229) { var node = parent; moduleSpecifier = ts.getExternalModuleImportEqualsDeclarationExpression(node); } - else if (parent.kind === 224) { + else if (parent.kind === 225) { moduleSpecifier = parent.name; } else { @@ -26744,7 +27512,7 @@ var ts; writeTextOfNode(currentText, node.name); } } - while (node.body.kind !== 225) { + while (node.body.kind !== 226) { node = node.body; write("."); writeTextOfNode(currentText, node.name); @@ -26809,7 +27577,7 @@ var ts; writeLine(); } function isPrivateMethodTypeParameter(node) { - return node.parent.kind === 146 && (node.parent.flags & 8); + return node.parent.kind === 147 && (node.parent.flags & 8); } function emitTypeParameters(typeParameters) { function emitTypeParameter(node) { @@ -26819,15 +27587,15 @@ var ts; writeTextOfNode(currentText, node.name); if (node.constraint && !isPrivateMethodTypeParameter(node)) { write(" extends "); - if (node.parent.kind === 155 || - node.parent.kind === 156 || - (node.parent.parent && node.parent.parent.kind === 158)) { - ts.Debug.assert(node.parent.kind === 146 || - node.parent.kind === 145 || - node.parent.kind === 155 || + if (node.parent.kind === 156 || + node.parent.kind === 157 || + (node.parent.parent && node.parent.parent.kind === 159)) { + ts.Debug.assert(node.parent.kind === 147 || + node.parent.kind === 146 || node.parent.kind === 156 || - node.parent.kind === 150 || - node.parent.kind === 151); + node.parent.kind === 157 || + node.parent.kind === 151 || + node.parent.kind === 152); emitType(node.constraint); } else { @@ -26837,31 +27605,31 @@ var ts; function getTypeParameterConstraintVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; switch (node.parent.kind) { - case 220: + case 221: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; break; - case 221: + case 222: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; break; - case 151: + case 152: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; break; - case 150: + case 151: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; break; + case 147: case 146: - case 145: if (node.parent.flags & 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 === 220) { + else if (node.parent.parent.kind === 221) { 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 219: + case 220: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; break; default: @@ -26898,7 +27666,7 @@ var ts; } function getHeritageClauseVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; - if (node.parent.parent.kind === 220) { + if (node.parent.parent.kind === 221) { 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; @@ -26918,7 +27686,7 @@ var ts; function emitParameterProperties(constructorDeclaration) { if (constructorDeclaration) { ts.forEach(constructorDeclaration.parameters, function (param) { - if (param.flags & 28) { + if (param.flags & 92) { emitPropertyDeclaration(param); } }); @@ -26978,16 +27746,16 @@ var ts; writeLine(); } function emitVariableDeclaration(node) { - if (node.kind !== 217 || resolver.isDeclarationVisible(node)) { + if (node.kind !== 218 || resolver.isDeclarationVisible(node)) { if (ts.isBindingPattern(node.name)) { emitBindingPattern(node.name); } else { writeTextOfNode(currentText, node.name); - if ((node.kind === 144 || node.kind === 143) && ts.hasQuestionToken(node)) { + if ((node.kind === 145 || node.kind === 144 || node.kind === 142) && ts.hasQuestionToken(node)) { write("?"); } - if ((node.kind === 144 || node.kind === 143) && node.parent.kind === 158) { + if ((node.kind === 145 || node.kind === 144) && node.parent.kind === 159) { emitTypeOfVariableDeclarationFromTypeLiteral(node); } else if (!(node.flags & 8)) { @@ -26996,14 +27764,14 @@ var ts; } } function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { - if (node.kind === 217) { + if (node.kind === 218) { 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 === 144 || node.kind === 143) { + else if (node.kind === 145 || node.kind === 144) { if (node.flags & 32) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 ? @@ -27011,7 +27779,7 @@ var ts; 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 === 220) { + else if (node.parent.kind === 221) { 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 : @@ -27037,7 +27805,7 @@ var ts; var elements = []; for (var _i = 0, _a = bindingPattern.elements; _i < _a.length; _i++) { var element = _a[_i]; - if (element.kind !== 192) { + if (element.kind !== 193) { elements.push(element); } } @@ -27103,7 +27871,7 @@ var ts; accessorWithTypeAnnotation = node; var type = getTypeAnnotationFromAccessor(node); if (!type) { - var anotherAccessor = node.kind === 148 ? accessors.setAccessor : accessors.getAccessor; + var anotherAccessor = node.kind === 149 ? accessors.setAccessor : accessors.getAccessor; type = getTypeAnnotationFromAccessor(anotherAccessor); if (type) { accessorWithTypeAnnotation = anotherAccessor; @@ -27116,7 +27884,7 @@ var ts; } function getTypeAnnotationFromAccessor(accessor) { if (accessor) { - return accessor.kind === 148 + return accessor.kind === 149 ? accessor.type : accessor.parameters.length > 0 ? accessor.parameters[0].type @@ -27125,7 +27893,7 @@ var ts; } function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; - if (accessorWithTypeAnnotation.kind === 149) { + if (accessorWithTypeAnnotation.kind === 150) { if (accessorWithTypeAnnotation.parent.flags & 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 : @@ -27171,17 +27939,17 @@ var ts; } if (!resolver.isImplementationOfOverload(node)) { emitJsDocComments(node); - if (node.kind === 219) { + if (node.kind === 220) { emitModuleElementDeclarationFlags(node); } - else if (node.kind === 146 || node.kind === 147) { + else if (node.kind === 147 || node.kind === 148) { emitClassMemberDeclarationFlags(node.flags); } - if (node.kind === 219) { + if (node.kind === 220) { write("function "); writeTextOfNode(currentText, node.name); } - else if (node.kind === 147) { + else if (node.kind === 148) { write("constructor"); } else { @@ -27200,32 +27968,40 @@ var ts; function emitSignatureDeclaration(node) { var prevEnclosingDeclaration = enclosingDeclaration; enclosingDeclaration = node; - if (node.kind === 152) { + var closeParenthesizedFunctionType = false; + if (node.kind === 153) { emitClassMemberDeclarationFlags(node.flags); write("["); } else { - if (node.kind === 151 || node.kind === 156) { + if (node.kind === 152 || node.kind === 157) { write("new "); } + else if (node.kind === 156) { + 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 === 152) { + if (node.kind === 153) { write("]"); } else { write(")"); } - var isFunctionTypeOrConstructorType = node.kind === 155 || node.kind === 156; - if (isFunctionTypeOrConstructorType || node.parent.kind === 158) { + var isFunctionTypeOrConstructorType = node.kind === 156 || node.kind === 157; + if (isFunctionTypeOrConstructorType || node.parent.kind === 159) { if (node.type) { write(isFunctionTypeOrConstructorType ? " => " : ": "); emitType(node.type); } } - else if (node.kind !== 147 && !(node.flags & 8)) { + else if (node.kind !== 148 && !(node.flags & 8)) { writeReturnTypeAtSignature(node, getReturnTypeVisibilityError); } enclosingDeclaration = prevEnclosingDeclaration; @@ -27233,26 +28009,29 @@ var ts; write(";"); writeLine(); } + else if (closeParenthesizedFunctionType) { + write(")"); + } function getReturnTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; switch (node.kind) { - case 151: + case 152: 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 150: + case 151: 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 152: + case 153: 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 147: case 146: - case 145: if (node.flags & 32) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 ? @@ -27260,7 +28039,7 @@ var ts; 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 === 220) { + else if (node.parent.kind === 221) { 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 : @@ -27273,7 +28052,7 @@ var ts; ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; } break; - case 219: + case 220: 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 : @@ -27305,9 +28084,9 @@ var ts; write("?"); } decreaseIndent(); - if (node.parent.kind === 155 || - node.parent.kind === 156 || - node.parent.parent.kind === 158) { + if (node.parent.kind === 156 || + node.parent.kind === 157 || + node.parent.parent.kind === 159) { emitTypeOfVariableDeclarationFromTypeLiteral(node); } else if (!(node.parent.flags & 8)) { @@ -27323,22 +28102,22 @@ var ts; } function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { switch (node.parent.kind) { - case 147: + case 148: 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 151: + case 152: 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 150: + case 151: 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 147: case 146: - case 145: if (node.parent.flags & 32) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 ? @@ -27346,7 +28125,7 @@ var ts; 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 === 220) { + else if (node.parent.parent.kind === 221) { 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 : @@ -27358,7 +28137,7 @@ var ts; 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 219: + case 220: 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 : @@ -27369,12 +28148,12 @@ var ts; } } function emitBindingPattern(bindingPattern) { - if (bindingPattern.kind === 166) { + if (bindingPattern.kind === 167) { write("{"); emitCommaList(bindingPattern.elements, emitBindingElement); write("}"); } - else if (bindingPattern.kind === 167) { + else if (bindingPattern.kind === 168) { write("["); var elements = bindingPattern.elements; emitCommaList(elements, emitBindingElement); @@ -27385,10 +28164,10 @@ var ts; } } function emitBindingElement(bindingElement) { - if (bindingElement.kind === 192) { + if (bindingElement.kind === 193) { write(" "); } - else if (bindingElement.kind === 168) { + else if (bindingElement.kind === 169) { if (bindingElement.propertyName) { writeTextOfNode(currentText, bindingElement.propertyName); write(": "); @@ -27410,39 +28189,39 @@ var ts; } function emitNode(node) { switch (node.kind) { - case 219: - case 224: - case 228: - case 221: case 220: - case 222: - case 223: - return emitModuleElement(node, isModuleElementVisible(node)); - case 199: - return emitModuleElement(node, isVariableStatementVisible(node)); + case 225: case 229: + case 222: + case 221: + case 223: + case 224: + return emitModuleElement(node, isModuleElementVisible(node)); + case 200: + return emitModuleElement(node, isVariableStatementVisible(node)); + case 230: return emitModuleElement(node, !node.importClause); - case 235: + case 236: return emitExportDeclaration(node); + case 148: case 147: case 146: - case 145: return writeFunctionDeclaration(node); - case 151: - case 150: case 152: + case 151: + case 153: return emitSignatureDeclarationWithJsDocComments(node); - case 148: case 149: + case 150: return emitAccessorDeclaration(node); + case 145: case 144: - case 143: return emitPropertyDeclaration(node); - case 254: - return emitEnumMemberDeclaration(node); - case 234: - return emitExportAssignment(node); case 255: + return emitEnumMemberDeclaration(node); + case 235: + return emitExportAssignment(node); + case 256: return emitSourceFile(node); } } @@ -27457,7 +28236,7 @@ var ts; } if (declFileName) { declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(declarationFilePath)), declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, false); - referencePathsOutput += '/// ' + newLine; + referencesOutput += "/// " + newLine; } return addedBundledEmitReference; function getDeclFileName(emitFileNames, sourceFiles, isBundledEmit) { @@ -27474,9 +28253,9 @@ var ts; var emitDeclarationResult = emitDeclarations(host, resolver, emitterDiagnostics, declarationFilePath, sourceFiles, isBundledEmit); var emitSkipped = emitDeclarationResult.reportedDeclarationError || host.isEmitBlocked(declarationFilePath) || host.getCompilerOptions().noEmit; if (!emitSkipped) { - var declarationOutput = emitDeclarationResult.referencePathsOutput + var declarationOutput = emitDeclarationResult.referencesOutput + getDeclarationOutput(emitDeclarationResult.synchronousDeclarationOutput, emitDeclarationResult.moduleElementDeclarationEmitInfo); - ts.writeFile(host, emitterDiagnostics, declarationFilePath, declarationOutput, host.getCompilerOptions().emitBOM); + ts.writeFile(host, emitterDiagnostics, declarationFilePath, declarationOutput, host.getCompilerOptions().emitBOM, sourceFiles); } return emitSkipped; function getDeclarationOutput(synchronousDeclarationOutput, moduleElementDeclarationEmitInfo) { @@ -27997,17 +28776,17 @@ var ts; switch (node.kind) { case 69: return makeUniqueName(node.text); + case 225: case 224: - case 223: return generateNameForModuleOrEnum(node); - case 229: - case 235: + case 230: + case 236: return generateNameForImportOrExportDeclaration(node); - case 219: case 220: - case 234: + case 221: + case 235: return generateNameForExportDefault(); - case 191: + case 192: return generateNameForClassExpression(); } } @@ -28247,10 +29026,10 @@ var ts; emitParenthesizedIf(node.tag, needsParenthesisForPropertyAccessOrInvocation(node.tag)); write("("); emit(tempVariable); - if (node.template.kind === 188) { + if (node.template.kind === 189) { ts.forEach(node.template.templateSpans, function (templateSpan) { write(", "); - var needsParens = templateSpan.expression.kind === 186 + var needsParens = templateSpan.expression.kind === 187 && templateSpan.expression.operatorToken.kind === 24; emitParenthesizedIf(templateSpan.expression, needsParens); }); @@ -28274,7 +29053,7 @@ var ts; } for (var i = 0, n = node.templateSpans.length; i < n; i++) { var templateSpan = node.templateSpans[i]; - var needsParens = templateSpan.expression.kind !== 177 + var needsParens = templateSpan.expression.kind !== 178 && comparePrecedenceToBinaryPlus(templateSpan.expression) !== 1; if (i > 0 || headEmitted) { write(" + "); @@ -28294,11 +29073,11 @@ var ts; } function templateNeedsParens(template, parent) { switch (parent.kind) { - case 173: case 174: - return parent.expression === template; case 175: - case 177: + return parent.expression === template; + case 176: + case 178: return false; default: return comparePrecedenceToBinaryPlus(parent) !== -1; @@ -28306,7 +29085,7 @@ var ts; } function comparePrecedenceToBinaryPlus(expression) { switch (expression.kind) { - case 186: + case 187: switch (expression.operatorToken.kind) { case 37: case 39: @@ -28318,8 +29097,8 @@ var ts; default: return -1; } - case 189: - case 187: + case 190: + case 188: return -1; default: return 1; @@ -28375,11 +29154,11 @@ var ts; } else { var attrs = openingNode.attributes; - if (ts.forEach(attrs, function (attr) { return attr.kind === 246; })) { + if (ts.forEach(attrs, function (attr) { return attr.kind === 247; })) { write("__assign("); var haveOpenedObjectLiteral = false; for (var i = 0; i < attrs.length; i++) { - if (attrs[i].kind === 246) { + if (attrs[i].kind === 247) { if (i === 0) { write("{}, "); } @@ -28393,7 +29172,7 @@ var ts; emit(attrs[i].expression); } else { - ts.Debug.assert(attrs[i].kind === 245); + ts.Debug.assert(attrs[i].kind === 246); if (haveOpenedObjectLiteral) { write(", "); } @@ -28449,7 +29228,7 @@ var ts; decreaseIndent(); } else if (firstChild) { - if (firstChild.kind !== 240 && firstChild.kind !== 241) { + if (firstChild.kind !== 241 && firstChild.kind !== 242) { emit(firstChild); } else { @@ -28464,11 +29243,11 @@ var ts; write(")"); emitTrailingComments(openingNode); } - if (node.kind === 240) { + if (node.kind === 241) { emitJsxElement(node.openingElement, node.children); } else { - ts.Debug.assert(node.kind === 241); + ts.Debug.assert(node.kind === 242); emitJsxElement(node); } } @@ -28490,11 +29269,11 @@ var ts; if (i > 0) { write(" "); } - if (attribs[i].kind === 246) { + if (attribs[i].kind === 247) { emitJsxSpreadAttribute(attribs[i]); } else { - ts.Debug.assert(attribs[i].kind === 245); + ts.Debug.assert(attribs[i].kind === 246); emitJsxAttribute(attribs[i]); } } @@ -28502,11 +29281,11 @@ var ts; function emitJsxOpeningOrSelfClosingElement(node) { write("<"); emit(node.tagName); - if (node.attributes.length > 0 || (node.kind === 241)) { + if (node.attributes.length > 0 || (node.kind === 242)) { write(" "); } emitAttributes(node.attributes); - if (node.kind === 241) { + if (node.kind === 242) { write("/>"); } else { @@ -28525,20 +29304,20 @@ var ts; } emitJsxClosingElement(node.closingElement); } - if (node.kind === 240) { + if (node.kind === 241) { emitJsxElement(node); } else { - ts.Debug.assert(node.kind === 241); + ts.Debug.assert(node.kind === 242); emitJsxOpeningOrSelfClosingElement(node); } } function emitExpressionForPropertyName(node) { - ts.Debug.assert(node.kind !== 168); + ts.Debug.assert(node.kind !== 169); if (node.kind === 9) { emitLiteral(node); } - else if (node.kind === 139) { + else if (node.kind === 140) { if (ts.nodeIsDecorated(node.parent)) { if (!computedPropertyNamesToGeneratedNames) { computedPropertyNamesToGeneratedNames = []; @@ -28569,63 +29348,64 @@ var ts; function isExpressionIdentifier(node) { var parent = node.parent; switch (parent.kind) { - case 169: - case 194: - case 186: - case 173: - case 248: - case 139: + case 170: + case 195: + case 184: case 187: - case 142: - case 180: - case 203: - case 172: - case 234: - case 201: - case 193: - case 205: + case 174: + case 249: + case 140: + case 188: + case 143: + case 181: + case 204: + case 173: + case 235: + case 202: + case 194: case 206: case 207: - case 202: - case 244: - case 241: + case 208: + case 203: + case 245: case 242: - case 246: + case 243: case 247: - case 174: - case 195: - case 177: - case 185: - case 184: - case 210: - case 253: - case 190: - case 212: + case 248: case 175: case 196: - case 214: - case 176: - case 181: - case 182: - case 204: - case 211: - case 189: - return true; - case 168: - case 254: - case 141: - case 252: - case 144: - case 217: - return parent.initializer === node; - case 171: - return parent.expression === node; - case 179: case 178: + case 186: + case 185: + case 211: + case 254: + case 191: + case 213: + case 176: + case 197: + case 215: + case 177: + case 182: + case 183: + case 205: + case 212: + case 190: + return true; + case 169: + case 255: + case 142: + case 253: + case 145: + case 218: + return parent.initializer === node; + case 172: + return parent.expression === node; + case 180: + case 179: return parent.body === node; - case 228: + case 229: return parent.moduleReference === node; - case 138: + case 139: return parent.left === node; } return false; @@ -28633,7 +29413,7 @@ var ts; function emitExpressionIdentifier(node) { var container = resolver.getReferencedExportContainer(node); if (container) { - if (container.kind === 255) { + if (container.kind === 256) { if (modulekind !== ts.ModuleKind.ES6 && modulekind !== ts.ModuleKind.System) { write("exports."); } @@ -28647,12 +29427,12 @@ var ts; if (modulekind !== ts.ModuleKind.ES6) { var declaration = resolver.getReferencedImportDeclaration(node); if (declaration) { - if (declaration.kind === 230) { + if (declaration.kind === 231) { write(getGeneratedNameForNode(declaration.parent)); write(languageVersion === 0 ? '["default"]' : ".default"); return; } - else if (declaration.kind === 233) { + else if (declaration.kind === 234) { write(getGeneratedNameForNode(declaration.parent.parent.parent)); var name_25 = declaration.propertyName || declaration.name; var identifier = ts.getTextOfNodeFromSourceText(currentText, name_25); @@ -28694,13 +29474,13 @@ var ts; } function isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(node) { if (languageVersion < 2) { - var parent_10 = node.parent; - switch (parent_10.kind) { - case 168: - case 220: - case 223: - case 217: - return parent_10.name === node && resolver.isDeclarationWithCollidingName(parent_10); + var parent_13 = node.parent; + switch (parent_13.kind) { + case 169: + case 221: + case 224: + case 218: + return parent_13.name === node && resolver.isDeclarationWithCollidingName(parent_13); } } return false; @@ -28809,10 +29589,10 @@ var ts; } } function needsParenthesisForAwaitExpressionAsYield(node) { - if (node.parent.kind === 186 && !ts.isAssignmentOperator(node.parent.operatorToken.kind)) { + if (node.parent.kind === 187 && !ts.isAssignmentOperator(node.parent.operatorToken.kind)) { return true; } - else if (node.parent.kind === 187 && node.parent.condition === node) { + else if (node.parent.kind === 188 && node.parent.condition === node) { return true; } return false; @@ -28820,11 +29600,11 @@ var ts; function needsParenthesisForPropertyAccessOrInvocation(node) { switch (node.kind) { case 69: - case 169: - case 171: + case 170: case 172: case 173: - case 177: + case 174: + case 178: return false; } return true; @@ -28841,17 +29621,17 @@ var ts; write(", "); } var e = elements[pos]; - if (e.kind === 190) { + if (e.kind === 191) { e = e.expression; emitParenthesizedIf(e, group === 0 && needsParenthesisForPropertyAccessOrInvocation(e)); pos++; - if (pos === length && group === 0 && needsUniqueCopy && e.kind !== 169) { + if (pos === length && group === 0 && needsUniqueCopy && e.kind !== 170) { write(".slice()"); } } else { var i = pos; - while (i < length && elements[i].kind !== 190) { + while (i < length && elements[i].kind !== 191) { i++; } write("["); @@ -28874,7 +29654,7 @@ var ts; } } function isSpreadElementExpression(node) { - return node.kind === 190; + return node.kind === 191; } function emitArrayLiteral(node) { var elements = node.elements; @@ -28935,7 +29715,7 @@ var ts; writeComma(); var property = properties[i]; emitStart(property); - if (property.kind === 148 || property.kind === 149) { + if (property.kind === 149 || property.kind === 150) { var accessors = ts.getAllAccessorDeclarations(node.properties, property); if (property !== accessors.firstAccessor) { continue; @@ -28943,7 +29723,7 @@ var ts; write("Object.defineProperty("); emit(tempVar); write(", "); - emitStart(node.name); + emitStart(property.name); emitExpressionForPropertyName(property.name); emitEnd(property.name); write(", {"); @@ -28986,13 +29766,13 @@ var ts; emitMemberAccessForPropertyName(property.name); emitEnd(property.name); write(" = "); - if (property.kind === 252) { + if (property.kind === 253) { emit(property.initializer); } - else if (property.kind === 253) { + else if (property.kind === 254) { emitExpressionIdentifier(property.name); } - else if (property.kind === 146) { + else if (property.kind === 147) { emitFunctionDeclaration(property); } else { @@ -29024,7 +29804,7 @@ var ts; var numProperties = properties.length; var numInitialNonComputedProperties = numProperties; for (var i = 0, n = properties.length; i < n; i++) { - if (properties[i].name.kind === 139) { + if (properties[i].name.kind === 140) { numInitialNonComputedProperties = i; break; } @@ -29038,37 +29818,37 @@ var ts; emitObjectLiteralBody(node, properties.length); } function createBinaryExpression(left, operator, right, startsOnNewLine) { - var result = ts.createSynthesizedNode(186, startsOnNewLine); + var result = ts.createSynthesizedNode(187, startsOnNewLine); result.operatorToken = ts.createSynthesizedNode(operator); result.left = left; result.right = right; return result; } function createPropertyAccessExpression(expression, name) { - var result = ts.createSynthesizedNode(171); + var result = ts.createSynthesizedNode(172); result.expression = parenthesizeForAccess(expression); result.dotToken = ts.createSynthesizedNode(21); result.name = name; return result; } function createElementAccessExpression(expression, argumentExpression) { - var result = ts.createSynthesizedNode(172); + var result = ts.createSynthesizedNode(173); result.expression = parenthesizeForAccess(expression); result.argumentExpression = argumentExpression; return result; } function parenthesizeForAccess(expr) { - while (expr.kind === 176 || - expr.kind === 194 || - expr.kind === 195) { + while (expr.kind === 177 || + expr.kind === 195 || + expr.kind === 196) { expr = expr.expression; } if (ts.isLeftHandSideExpression(expr) && - expr.kind !== 174 && + expr.kind !== 175 && expr.kind !== 8) { return expr; } - var node = ts.createSynthesizedNode(177); + var node = ts.createSynthesizedNode(178); node.expression = expr; return node; } @@ -29095,11 +29875,11 @@ var ts; } function isNamespaceExportReference(node) { var container = resolver.getReferencedExportContainer(node); - return container && container.kind !== 255; + return container && container.kind !== 256; } function isImportedReference(node) { var declaration = resolver.getReferencedImportDeclaration(node); - return declaration && (declaration.kind === 230 || declaration.kind === 233); + return declaration && (declaration.kind === 231 || declaration.kind === 234); } function emitShorthandPropertyAssignment(node) { writeTextOfNode(currentText, node.name); @@ -29117,7 +29897,7 @@ var ts; if (constantValue !== undefined) { write(constantValue.toString()); if (!compilerOptions.removeComments) { - var propertyName = node.kind === 171 ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); + var propertyName = node.kind === 172 ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); write(" /* " + propertyName + " */"); } return true; @@ -29128,7 +29908,7 @@ var ts; if (compilerOptions.isolatedModules) { return undefined; } - return node.kind === 171 || node.kind === 172 + return node.kind === 172 || node.kind === 173 ? resolver.getConstantValue(node) : undefined; } @@ -29216,7 +29996,7 @@ var ts; } emitExpressionIdentifier(node); break; - case 138: + case 139: emitQualifiedNameAsExpression(node, useFallback); break; default: @@ -29240,13 +30020,13 @@ var ts; write("]"); } function hasSpreadElement(elements) { - return ts.forEach(elements, function (e) { return e.kind === 190; }); + return ts.forEach(elements, function (e) { return e.kind === 191; }); } function skipParentheses(node) { - while (node.kind === 177 || - node.kind === 176 || - node.kind === 194 || - node.kind === 195) { + while (node.kind === 178 || + node.kind === 177 || + node.kind === 195 || + node.kind === 196) { node = node.expression; } return node; @@ -29267,12 +30047,12 @@ var ts; function emitCallWithSpread(node) { var target; var expr = skipParentheses(node.expression); - if (expr.kind === 171) { + if (expr.kind === 172) { target = emitCallTarget(expr.expression); write("."); emit(expr.name); } - else if (expr.kind === 172) { + else if (expr.kind === 173) { target = emitCallTarget(expr.expression); write("["); emit(expr.argumentExpression); @@ -29383,25 +30163,25 @@ var ts; } } function emitParenExpression(node) { - if (!ts.nodeIsSynthesized(node) && node.parent.kind !== 179) { - if (node.expression.kind === 176 || - node.expression.kind === 194 || - node.expression.kind === 195) { + if (!ts.nodeIsSynthesized(node) && node.parent.kind !== 180) { + if (node.expression.kind === 177 || + node.expression.kind === 195 || + node.expression.kind === 196) { var operand = node.expression.expression; - while (operand.kind === 176 || - operand.kind === 194 || - operand.kind === 195) { + while (operand.kind === 177 || + operand.kind === 195 || + operand.kind === 196) { operand = operand.expression; } - if (operand.kind !== 184 && + if (operand.kind !== 185 && + operand.kind !== 183 && operand.kind !== 182 && operand.kind !== 181 && - operand.kind !== 180 && - operand.kind !== 185 && - operand.kind !== 174 && - !(operand.kind === 173 && node.parent.kind === 174) && - !(operand.kind === 178 && node.parent.kind === 173) && - !(operand.kind === 8 && node.parent.kind === 171)) { + operand.kind !== 186 && + operand.kind !== 175 && + !(operand.kind === 174 && node.parent.kind === 175) && + !(operand.kind === 179 && node.parent.kind === 174) && + !(operand.kind === 8 && node.parent.kind === 172)) { emit(operand); return; } @@ -29430,7 +30210,7 @@ var ts; if (!isCurrentFileSystemExternalModule() || node.kind !== 69 || ts.nodeIsSynthesized(node)) { return false; } - var isVariableDeclarationOrBindingElement = node.parent && (node.parent.kind === 217 || node.parent.kind === 168); + var isVariableDeclarationOrBindingElement = node.parent && (node.parent.kind === 218 || node.parent.kind === 169); var targetDeclaration = isVariableDeclarationOrBindingElement ? node.parent : resolver.getReferencedValueDeclaration(node); @@ -29445,7 +30225,7 @@ var ts; write("\", "); } write(ts.tokenToString(node.operator)); - if (node.operand.kind === 184) { + if (node.operand.kind === 185) { var operand = node.operand; if (node.operator === 35 && (operand.operator === 35 || operand.operator === 41)) { write(" "); @@ -29488,7 +30268,7 @@ var ts; } var current = ts.getRootDeclaration(node).parent; while (current) { - if (current.kind === 255) { + if (current.kind === 256) { return !isExported || ((ts.getCombinedNodeFlags(node) & 1) !== 0); } else if (ts.isDeclaration(current)) { @@ -29507,7 +30287,7 @@ var ts; if (ts.isElementAccessExpression(leftHandSideExpression)) { shouldEmitParentheses = true; write("("); - synthesizedLHS = ts.createSynthesizedNode(172, false); + synthesizedLHS = ts.createSynthesizedNode(173, false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, false, false); synthesizedLHS.expression = identifier; if (leftHandSideExpression.argumentExpression.kind !== 8 && @@ -29524,7 +30304,7 @@ var ts; else if (ts.isPropertyAccessExpression(leftHandSideExpression)) { shouldEmitParentheses = true; write("("); - synthesizedLHS = ts.createSynthesizedNode(171, false); + synthesizedLHS = ts.createSynthesizedNode(172, false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, false, false); synthesizedLHS.expression = identifier; synthesizedLHS.dotToken = leftHandSideExpression.dotToken; @@ -29552,8 +30332,8 @@ var ts; } function emitBinaryExpression(node) { if (languageVersion < 2 && node.operatorToken.kind === 56 && - (node.left.kind === 170 || node.left.kind === 169)) { - emitDestructuring(node, node.parent.kind === 201); + (node.left.kind === 171 || node.left.kind === 170)) { + emitDestructuring(node, node.parent.kind === 202); } else { var exportChanged = node.operatorToken.kind >= 56 && @@ -29605,7 +30385,7 @@ var ts; } } function isSingleLineEmptyBlock(node) { - if (node && node.kind === 198) { + if (node && node.kind === 199) { var block = node; return block.statements.length === 0 && nodeEndIsOnSameLineAsNodeStart(block, block); } @@ -29619,12 +30399,12 @@ var ts; } emitToken(15, node.pos); increaseIndent(); - if (node.kind === 225) { - ts.Debug.assert(node.parent.kind === 224); + if (node.kind === 226) { + ts.Debug.assert(node.parent.kind === 225); emitCaptureThisForNodeIfNecessary(node.parent); } emitLines(node.statements); - if (node.kind === 225) { + if (node.kind === 226) { emitTempDeclarations(true); } decreaseIndent(); @@ -29632,7 +30412,7 @@ var ts; emitToken(16, node.statements.end); } function emitEmbeddedStatement(node) { - if (node.kind === 198) { + if (node.kind === 199) { write(" "); emit(node); } @@ -29644,7 +30424,7 @@ var ts; } } function emitExpressionStatement(node) { - emitParenthesizedIf(node.expression, node.expression.kind === 179); + emitParenthesizedIf(node.expression, node.expression.kind === 180); write(";"); } function emitIfStatement(node) { @@ -29657,7 +30437,7 @@ var ts; if (node.elseStatement) { writeLine(); emitToken(80, node.thenStatement.end); - if (node.elseStatement.kind === 202) { + if (node.elseStatement.kind === 203) { write(" "); emit(node.elseStatement); } @@ -29677,7 +30457,7 @@ var ts; else { emitNormalLoopBody(node, true); } - if (node.statement.kind === 198) { + if (node.statement.kind === 199) { write(" "); } else { @@ -29757,7 +30537,7 @@ var ts; } else { var loop = convertLoopBody(node); - if (node.parent.kind === 213) { + if (node.parent.kind === 214) { emitLabelAndColon(node.parent); } loopEmitter(node, loop); @@ -29767,11 +30547,11 @@ var ts; var functionName = makeUniqueName("_loop"); var loopInitializer; switch (node.kind) { - case 205: case 206: case 207: + case 208: var initializer = node.initializer; - if (initializer && initializer.kind === 218) { + if (initializer && initializer.kind === 219) { loopInitializer = node.initializer; } break; @@ -29785,7 +30565,7 @@ var ts; processVariableDeclaration(varDeclaration.name); } } - var bodyIsBlock = node.statement.kind === 198; + var bodyIsBlock = node.statement.kind === 199; var paramList = loopParameters ? loopParameters.join(", ") : ""; writeLine(); write("var " + functionName + " = function(" + paramList + ")"); @@ -29901,7 +30681,7 @@ var ts; if (emitAsEmbeddedStatement) { emitEmbeddedStatement(node.statement); } - else if (node.statement.kind === 198) { + else if (node.statement.kind === 199) { emitLines(node.statement.statements); } else { @@ -30017,7 +30797,7 @@ var ts; var endPos = emitToken(86, node.pos); write(" "); endPos = emitToken(17, endPos); - if (node.initializer && node.initializer.kind === 218) { + if (node.initializer && node.initializer.kind === 219) { var variableDeclarationList = node.initializer; var startIsEmitted = tryEmitStartOfVariableDeclarationList(variableDeclarationList); if (startIsEmitted) { @@ -30043,7 +30823,7 @@ var ts; } } function emitForInOrForOfStatement(node) { - if (languageVersion < 2 && node.kind === 207) { + if (languageVersion < 2 && node.kind === 208) { emitLoop(node, emitDownLevelForOfStatementWorker); } else { @@ -30054,7 +30834,7 @@ var ts; var endPos = emitToken(86, node.pos); write(" "); endPos = emitToken(17, endPos); - if (node.initializer.kind === 218) { + if (node.initializer.kind === 219) { var variableDeclarationList = node.initializer; if (variableDeclarationList.declarations.length >= 1) { tryEmitStartOfVariableDeclarationList(variableDeclarationList); @@ -30064,7 +30844,7 @@ var ts; else { emit(node.initializer); } - if (node.kind === 206) { + if (node.kind === 207) { write(" in "); } else { @@ -30117,7 +30897,7 @@ var ts; increaseIndent(); var rhsIterationValue = createElementAccessExpression(rhsReference, counter); emitStart(node.initializer); - if (node.initializer.kind === 218) { + if (node.initializer.kind === 219) { write("var "); var variableDeclarationList = node.initializer; if (variableDeclarationList.declarations.length > 0) { @@ -30139,7 +30919,7 @@ var ts; } else { var assignmentExpression = createBinaryExpression(node.initializer, 56, rhsIterationValue, false); - if (node.initializer.kind === 169 || node.initializer.kind === 170) { + if (node.initializer.kind === 170 || node.initializer.kind === 171) { emitDestructuring(assignmentExpression, true, undefined); } else { @@ -30161,14 +30941,14 @@ var ts; } function emitBreakOrContinueStatement(node) { if (convertedLoopState) { - var jump = node.kind === 209 ? 2 : 4; + var jump = node.kind === 210 ? 2 : 4; var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels[node.label.text]) || (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump)); if (!canUseBreakOrContinue) { write("return "); copyLoopOutParameters(convertedLoopState, 1, false); if (!node.label) { - if (node.kind === 209) { + if (node.kind === 210) { convertedLoopState.nonLocalJumps |= 2; write("\"break\";"); } @@ -30179,7 +30959,7 @@ var ts; } else { var labelMarker = void 0; - if (node.kind === 209) { + if (node.kind === 210) { labelMarker = "break-" + node.label.text; setLabeledJump(convertedLoopState, true, node.label.text, labelMarker); } @@ -30192,7 +30972,7 @@ var ts; return; } } - emitToken(node.kind === 209 ? 70 : 75, node.pos); + emitToken(node.kind === 210 ? 70 : 75, node.pos); emitOptional(" ", node.label); write(";"); } @@ -30257,7 +31037,7 @@ var ts; ts.getLineOfLocalPositionFromLineMap(currentLineMap, ts.skipTrivia(currentText, node2.pos)); } function emitCaseOrDefaultClause(node) { - if (node.kind === 248) { + if (node.kind === 249) { write("case "); emit(node.expression); write(":"); @@ -30326,7 +31106,7 @@ var ts; function getContainingModule(node) { do { node = node.parent; - } while (node && node.kind !== 224); + } while (node && node.kind !== 225); return node; } function emitContainingModuleName(node) { @@ -30351,13 +31131,13 @@ var ts; function createVoidZero() { var zero = ts.createSynthesizedNode(8); zero.text = "0"; - var result = ts.createSynthesizedNode(182); + var result = ts.createSynthesizedNode(183); result.expression = zero; return result; } function emitEs6ExportDefaultCompat(node) { - if (node.parent.kind === 255) { - ts.Debug.assert(!!(node.flags & 512) || node.kind === 234); + if (node.parent.kind === 256) { + ts.Debug.assert(!!(node.flags & 512) || node.kind === 235); if (modulekind === ts.ModuleKind.CommonJS || modulekind === ts.ModuleKind.AMD || modulekind === ts.ModuleKind.UMD) { if (!isEs6Module) { if (languageVersion !== 0) { @@ -30452,7 +31232,7 @@ var ts; emitNodeWithCommentsAndWithoutSourcemap(name); write("\", "); } - var isVariableDeclarationOrBindingElement = name.parent && (name.parent.kind === 217 || name.parent.kind === 168); + var isVariableDeclarationOrBindingElement = name.parent && (name.parent.kind === 218 || name.parent.kind === 169); emitStart(isFirstVariableDeclaration(nodeForSourceMap) ? nodeForSourceMap.parent : nodeForSourceMap); withTemporaryNoSourceMap(function () { if (isVariableDeclarationOrBindingElement) { @@ -30478,22 +31258,22 @@ var ts; return identifier; } function isFirstVariableDeclaration(root) { - return root.kind === 217 && - root.parent.kind === 218 && + return root.kind === 218 && + root.parent.kind === 219 && root.parent.declarations[0] === root; } function emitDestructuring(root, isAssignmentExpressionStatement, value) { var emitCount = 0; var canDefineTempVariablesInPlace = false; - if (root.kind === 217) { + if (root.kind === 218) { var isExported = ts.getCombinedNodeFlags(root) & 1; var isSourceLevelForSystemModuleKind = shouldHoistDeclarationInSystemJsModule(root); canDefineTempVariablesInPlace = !isExported && !isSourceLevelForSystemModuleKind; } - else if (root.kind === 141) { + else if (root.kind === 142) { canDefineTempVariablesInPlace = true; } - if (root.kind === 186) { + if (root.kind === 187) { emitAssignmentExpression(root); } else { @@ -30513,14 +31293,14 @@ var ts; } function createDefaultValueCheck(value, defaultValue, sourceMapNode) { value = ensureIdentifier(value, true, sourceMapNode); - var equals = ts.createSynthesizedNode(186); + var equals = ts.createSynthesizedNode(187); equals.left = value; equals.operatorToken = ts.createSynthesizedNode(32); equals.right = createVoidZero(); return createConditionalExpression(equals, defaultValue, value); } function createConditionalExpression(condition, whenTrue, whenFalse) { - var cond = ts.createSynthesizedNode(187); + var cond = ts.createSynthesizedNode(188); cond.condition = condition; cond.questionToken = ts.createSynthesizedNode(53); cond.whenTrue = whenTrue; @@ -30535,7 +31315,7 @@ var ts; } function createPropertyAccessForDestructuringProperty(object, propName) { var index; - var nameIsComputed = propName.kind === 139; + var nameIsComputed = propName.kind === 140; if (nameIsComputed) { index = ensureIdentifier(propName.expression, false, propName); } @@ -30548,7 +31328,7 @@ var ts; : createElementAccessExpression(object, index); } function createSliceCall(value, sliceIndex) { - var call = ts.createSynthesizedNode(173); + var call = ts.createSynthesizedNode(174); var sliceIdentifier = ts.createSynthesizedNode(69); sliceIdentifier.text = "slice"; call.expression = createPropertyAccessExpression(value, sliceIdentifier); @@ -30563,9 +31343,9 @@ var ts; } for (var _a = 0, properties_5 = properties; _a < properties_5.length; _a++) { var p = properties_5[_a]; - if (p.kind === 252 || p.kind === 253) { + if (p.kind === 253 || p.kind === 254) { var propName = p.name; - var target_1 = p.kind === 253 ? p : p.initializer || propName; + var target_1 = p.kind === 254 ? p : p.initializer || propName; emitDestructuringAssignment(target_1, createPropertyAccessForDestructuringProperty(value, propName), p); } } @@ -30577,8 +31357,8 @@ var ts; } for (var i = 0; i < elements.length; i++) { var e = elements[i]; - if (e.kind !== 192) { - if (e.kind !== 190) { + if (e.kind !== 193) { + if (e.kind !== 191) { emitDestructuringAssignment(e, createElementAccessExpression(value, createNumericLiteral(i)), e); } else if (i === elements.length - 1) { @@ -30588,20 +31368,20 @@ var ts; } } function emitDestructuringAssignment(target, value, sourceMapNode) { - if (target.kind === 253) { + if (target.kind === 254) { if (target.objectAssignmentInitializer) { value = createDefaultValueCheck(value, target.objectAssignmentInitializer, sourceMapNode); } target = target.name; } - else if (target.kind === 186 && target.operatorToken.kind === 56) { + else if (target.kind === 187 && target.operatorToken.kind === 56) { value = createDefaultValueCheck(value, target.right, sourceMapNode); target = target.left; } - if (target.kind === 170) { + if (target.kind === 171) { emitObjectLiteralAssignment(target, value, sourceMapNode); } - else if (target.kind === 169) { + else if (target.kind === 170) { emitArrayLiteralAssignment(target, value, sourceMapNode); } else { @@ -30619,14 +31399,14 @@ var ts; emitDestructuringAssignment(target, value, ts.nodeIsSynthesized(root) ? target : root); } else { - if (root.parent.kind !== 177) { + if (root.parent.kind !== 178) { write("("); } value = ensureIdentifier(value, true, root); emitDestructuringAssignment(target, value, root); write(", "); emit(value); - if (root.parent.kind !== 177) { + if (root.parent.kind !== 178) { write(")"); } } @@ -30647,11 +31427,11 @@ var ts; } for (var i = 0; i < numElements; i++) { var element = elements[i]; - if (pattern.kind === 166) { + if (pattern.kind === 167) { var propName = element.propertyName || element.name; emitBindingElement(element, createPropertyAccessForDestructuringProperty(value, propName)); } - else if (element.kind !== 192) { + else if (element.kind !== 193) { if (!element.dotDotDotToken) { emitBindingElement(element, createElementAccessExpression(value, createNumericLiteral(i))); } @@ -30696,12 +31476,12 @@ var ts; var isCapturedInFunction = flags & 131072; var isDeclaredInLoop = flags & 262144; var emittedAsTopLevel = ts.isBlockScopedContainerTopLevel(container) || - (isCapturedInFunction && isDeclaredInLoop && container.kind === 198 && ts.isIterationStatement(container.parent, false)); + (isCapturedInFunction && isDeclaredInLoop && container.kind === 199 && ts.isIterationStatement(container.parent, false)); var emittedAsNestedLetDeclaration = ts.getCombinedNodeFlags(node) & 1024 && !emittedAsTopLevel; var emitExplicitInitializer = emittedAsNestedLetDeclaration && - container.kind !== 206 && container.kind !== 207 && + container.kind !== 208 && (!resolver.isDeclarationWithCollidingName(node) || (isDeclaredInLoop && !isCapturedInFunction && !ts.isIterationStatement(container, false))); if (emitExplicitInitializer) { @@ -30722,7 +31502,7 @@ var ts; } } function emitExportVariableAssignments(node) { - if (node.kind === 192) { + if (node.kind === 193) { return; } var name = node.name; @@ -30736,7 +31516,7 @@ var ts; function isES6ExportedDeclaration(node) { return !!(node.flags & 1) && modulekind === ts.ModuleKind.ES6 && - node.parent.kind === 255; + node.parent.kind === 256; } function emitVariableStatement(node) { var startIsEmitted = false; @@ -30844,7 +31624,7 @@ var ts; } } function emitRestParameter(node) { - if (languageVersion < 2 && ts.hasRestParameter(node)) { + if (languageVersion < 2 && ts.hasDeclaredRestParameter(node)) { var restIndex = node.parameters.length - 1; var restParam = node.parameters[restIndex]; if (ts.isBindingPattern(restParam.name)) { @@ -30885,12 +31665,12 @@ var ts; } } function emitAccessor(node) { - write(node.kind === 148 ? "get " : "set "); + write(node.kind === 149 ? "get " : "set "); emit(node.name); emitSignatureAndBody(node); } function shouldEmitAsArrowFunction(node) { - return node.kind === 179 && languageVersion >= 2; + return node.kind === 180 && languageVersion >= 2; } function emitDeclarationName(node) { if (node.name) { @@ -30901,10 +31681,10 @@ var ts; } } function shouldEmitFunctionName(node) { - if (node.kind === 178) { + if (node.kind === 179) { return !!node.name; } - if (node.kind === 219) { + if (node.kind === 220) { return !!node.name || modulekind !== ts.ModuleKind.ES6; } } @@ -30913,12 +31693,12 @@ var ts; return emitCommentsOnNotEmittedNode(node); } var kind = node.kind, parent = node.parent; - if (kind !== 146 && - kind !== 145 && + if (kind !== 147 && + kind !== 146 && parent && - parent.kind !== 252 && - parent.kind !== 173 && - parent.kind !== 169) { + parent.kind !== 253 && + parent.kind !== 174 && + parent.kind !== 170) { emitLeadingComments(node); } emitStart(node); @@ -30939,13 +31719,13 @@ var ts; emitDeclarationName(node); } emitSignatureAndBody(node); - if (modulekind !== ts.ModuleKind.ES6 && kind === 219 && parent === currentSourceFile && node.name) { + if (modulekind !== ts.ModuleKind.ES6 && kind === 220 && parent === currentSourceFile && node.name) { emitExportMemberAssignments(node.name); } emitEnd(node); - if (kind !== 146 && - kind !== 145 && - kind !== 179) { + if (kind !== 147 && + kind !== 146 && + kind !== 180) { emitTrailingComments(node); } } @@ -30963,7 +31743,7 @@ var ts; if (node) { var parameters = node.parameters; var skipCount = node.parameters.length && node.parameters[0].name.text === "this" ? 1 : 0; - var omitCount = languageVersion < 2 && ts.hasRestParameter(node) ? 1 : 0; + var omitCount = languageVersion < 2 && ts.hasDeclaredRestParameter(node) ? 1 : 0; emitList(parameters, skipCount, parameters.length - omitCount - skipCount, false, false); } write(")"); @@ -30978,7 +31758,7 @@ var ts; } function emitAsyncFunctionBodyForES6(node) { var promiseConstructor = ts.getEntityNameFromTypeNode(node.type); - var isArrowFunction = node.kind === 179; + var isArrowFunction = node.kind === 180; var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192) !== 0; if (!isArrowFunction) { write(" {"); @@ -31022,7 +31802,7 @@ var ts; write(" { }"); } else { - if (node.body.kind === 198) { + if (node.body.kind === 199) { emitBlockFunctionBody(node, node.body); } else { @@ -31074,10 +31854,10 @@ var ts; } write(" "); var current = body; - while (current.kind === 176) { + while (current.kind === 177) { current = current.expression; } - emitParenthesizedIf(body, current.kind === 170); + emitParenthesizedIf(body, current.kind === 171); } function emitDownLevelExpressionFunctionBody(node, body) { write(" {"); @@ -31153,13 +31933,13 @@ var ts; return undefined; } var statement = statements[index]; - if (statement.kind === 201) { + if (statement.kind === 202) { return ts.isSuperCallExpression(statement.expression) ? statement : undefined; } } function emitParameterPropertyAssignments(node) { ts.forEach(node.parameters, function (param) { - if (param.flags & 28) { + if (param.flags & 92) { writeLine(); emitStart(param); emitStart(param.name); @@ -31179,7 +31959,7 @@ var ts; emitNodeWithCommentsAndWithoutSourcemap(memberName); write("]"); } - else if (memberName.kind === 139) { + else if (memberName.kind === 140) { emitComputedPropertyName(memberName); } else { @@ -31191,7 +31971,7 @@ var ts; var properties = []; for (var _a = 0, _b = node.members; _a < _b.length; _a++) { var member = _b[_a]; - if (member.kind === 144 && isStatic === ((member.flags & 32) !== 0) && member.initializer) { + if (member.kind === 145 && isStatic === ((member.flags & 32) !== 0) && member.initializer) { properties.push(member); } } @@ -31231,11 +32011,11 @@ var ts; } function emitMemberFunctionsForES5AndLower(node) { ts.forEach(node.members, function (member) { - if (member.kind === 197) { + if (member.kind === 198) { writeLine(); write(";"); } - else if (member.kind === 146 || node.kind === 145) { + else if (member.kind === 147 || node.kind === 146) { if (!member.body) { return emitCommentsOnNotEmittedNode(member); } @@ -31252,7 +32032,7 @@ var ts; write(";"); emitTrailingComments(member); } - else if (member.kind === 148 || member.kind === 149) { + else if (member.kind === 149 || member.kind === 150) { var accessors = ts.getAllAccessorDeclarations(node.members, member); if (member === accessors.firstAccessor) { writeLine(); @@ -31302,22 +32082,22 @@ var ts; function emitMemberFunctionsForES6AndHigher(node) { for (var _a = 0, _b = node.members; _a < _b.length; _a++) { var member = _b[_a]; - if ((member.kind === 146 || node.kind === 145) && !member.body) { + if ((member.kind === 147 || node.kind === 146) && !member.body) { emitCommentsOnNotEmittedNode(member); } - else if (member.kind === 146 || - member.kind === 148 || - member.kind === 149) { + else if (member.kind === 147 || + member.kind === 149 || + member.kind === 150) { writeLine(); emitLeadingComments(member); emitStart(member); if (member.flags & 32) { write("static "); } - if (member.kind === 148) { + if (member.kind === 149) { write("get "); } - else if (member.kind === 149) { + else if (member.kind === 150) { write("set "); } if (member.asteriskToken) { @@ -31328,7 +32108,7 @@ var ts; emitEnd(member); emitTrailingComments(member); } - else if (member.kind === 197) { + else if (member.kind === 198) { writeLine(); write(";"); } @@ -31353,10 +32133,10 @@ var ts; function emitConstructorWorker(node, baseTypeElement) { var hasInstancePropertyWithInitializer = false; ts.forEach(node.members, function (member) { - if (member.kind === 147 && !member.body) { + if (member.kind === 148 && !member.body) { emitCommentsOnNotEmittedNode(member); } - if (member.kind === 144 && member.initializer && (member.flags & 32) === 0) { + if (member.kind === 145 && member.initializer && (member.flags & 32) === 0) { hasInstancePropertyWithInitializer = true; } }); @@ -31463,7 +32243,7 @@ var ts; var isHoistedDeclarationInSystemModule = shouldHoistDeclarationInSystemJsModule(node); var isDecorated = ts.nodeIsDecorated(node); var rewriteAsClassExpression = isDecorated || isHoistedDeclarationInSystemModule; - if (node.kind === 220) { + if (node.kind === 221) { if (rewriteAsClassExpression) { if (isDecorated && resolver.getNodeCheckFlags(node) & 524288) { decoratedClassAlias = ts.unescapeIdentifier(makeUniqueName(node.name ? node.name.text : "default")); @@ -31491,7 +32271,7 @@ var ts; } } var staticProperties = getInitializedProperties(node, true); - var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 191; + var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 192; var tempVariable; if (isClassExpressionWithStaticProperties) { tempVariable = createAndRecordTempVariable(0); @@ -31555,7 +32335,7 @@ var ts; write(";"); } } - else if (node.parent.kind !== 255) { + else if (node.parent.kind !== 256) { writeLine(); emitStart(node); emitModuleMemberName(node); @@ -31567,7 +32347,7 @@ var ts; } } function emitClassLikeDeclarationBelowES6(node) { - if (node.kind === 220) { + if (node.kind === 221) { if (!shouldHoistDeclarationInSystemJsModule(node)) { write("var "); } @@ -31627,11 +32407,11 @@ var ts; emit(baseTypeNode.expression); } write("))"); - if (node.kind === 220) { + if (node.kind === 221) { write(";"); } emitEnd(node); - if (node.kind === 220) { + if (node.kind === 221) { emitExportMemberAssignment(node); } } @@ -31701,7 +32481,7 @@ var ts; } else { decorators = member.decorators; - if (member.kind === 146) { + if (member.kind === 147) { functionLikeMember = member; } } @@ -31727,7 +32507,7 @@ var ts; write(", "); emitExpressionForPropertyName(member.name); if (languageVersion > 0) { - if (member.kind !== 144) { + if (member.kind !== 145) { write(", null"); } else { @@ -31762,45 +32542,45 @@ var ts; } function shouldEmitTypeMetadata(node) { switch (node.kind) { - case 146: - case 148: + case 147: case 149: - case 144: + case 150: + case 145: return true; } return false; } function shouldEmitReturnTypeMetadata(node) { switch (node.kind) { - case 146: + case 147: return true; } return false; } function shouldEmitParamTypesMetadata(node) { switch (node.kind) { - case 220: - case 146: - case 149: + case 221: + case 147: + case 150: return true; } return false; } function emitSerializedTypeOfNode(node) { switch (node.kind) { - case 220: + case 221: write("Function"); return; - case 144: + case 145: emitSerializedTypeNode(node.type); return; - case 141: - emitSerializedTypeNode(node.type); - return; - case 148: + case 142: emitSerializedTypeNode(node.type); return; case 149: + emitSerializedTypeNode(node.type); + return; + case 150: emitSerializedTypeNode(ts.getSetAccessorTypeAnnotationNode(node)); return; } @@ -31816,40 +32596,40 @@ var ts; case 103: write("void 0"); return; - case 163: + case 164: emitSerializedTypeNode(node.type); return; - case 155: case 156: + case 157: write("Function"); return; - case 159: case 160: + case 161: write("Array"); return; - case 153: + case 154: case 120: write("Boolean"); return; - case 131: - case 165: + case 132: + case 166: write("String"); return; - case 129: + case 130: write("Number"); return; - case 132: + case 133: write("Symbol"); return; - case 154: + case 155: emitSerializedTypeReferenceNode(node); return; - case 157: case 158: - case 161: + case 159: case 162: + case 163: case 117: - case 164: + case 165: break; default: ts.Debug.fail("Cannot serialize unexpected type node."); @@ -31913,7 +32693,7 @@ var ts; function emitSerializedParameterTypesOfNode(node) { if (node) { var valueDeclaration = void 0; - if (node.kind === 220) { + if (node.kind === 221) { valueDeclaration = ts.getFirstConstructorWithBody(node); } else if (ts.isFunctionLike(node) && ts.nodeIsPresent(node.body)) { @@ -31929,10 +32709,10 @@ var ts; } if (parameters[i].dotDotDotToken) { var parameterType = parameters[i].type; - if (parameterType.kind === 159) { + if (parameterType.kind === 160) { parameterType = parameterType.elementType; } - else if (parameterType.kind === 154 && parameterType.typeArguments && parameterType.typeArguments.length === 1) { + else if (parameterType.kind === 155 && parameterType.typeArguments && parameterType.typeArguments.length === 1) { parameterType = parameterType.typeArguments[0]; } else { @@ -32004,7 +32784,7 @@ var ts; } if (!shouldHoistDeclarationInSystemJsModule(node)) { var isES6ExportedEnum = isES6ExportedDeclaration(node); - if (!(node.flags & 1) || (isES6ExportedEnum && isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 223))) { + if (!(node.flags & 1) || (isES6ExportedEnum && isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 224))) { emitStart(node); if (isES6ExportedEnum) { write("export "); @@ -32084,7 +32864,7 @@ var ts; } } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { - if (moduleDeclaration.body.kind === 224) { + if (moduleDeclaration.body.kind === 225) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); return recursiveInnerModule || moduleDeclaration.body; } @@ -32107,7 +32887,7 @@ var ts; var emitVarForModule = !hoistedInDeclarationScope && !isModuleMergedWithES6Class(node); if (emitVarForModule) { var isES6ExportedNamespace = isES6ExportedDeclaration(node); - if (!isES6ExportedNamespace || isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 224)) { + if (!isES6ExportedNamespace || isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 225)) { emitStart(node); if (isES6ExportedNamespace) { write("export "); @@ -32125,7 +32905,7 @@ var ts; write(getGeneratedNameForNode(node)); emitEnd(node.name); write(") "); - if (node.body.kind === 225) { + if (node.body.kind === 226) { var saveConvertedLoopState = convertedLoopState; var saveTempFlags = tempFlags; var saveTempVariables = tempVariables; @@ -32196,16 +32976,16 @@ var ts; } } function getNamespaceDeclarationNode(node) { - if (node.kind === 228) { + if (node.kind === 229) { return node; } var importClause = node.importClause; - if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 231) { + if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 232) { return importClause.namedBindings; } } function isDefaultImport(node) { - return node.kind === 229 && node.importClause && !!node.importClause.name; + return node.kind === 230 && node.importClause && !!node.importClause.name; } function emitExportImportAssignments(node) { if (ts.isAliasSymbolDeclaration(node) && resolver.isValueAliasDeclaration(node)) { @@ -32232,7 +33012,7 @@ var ts; if (shouldEmitNamedBindings) { emitLeadingComments(node.importClause.namedBindings); emitStart(node.importClause.namedBindings); - if (node.importClause.namedBindings.kind === 231) { + if (node.importClause.namedBindings.kind === 232) { write("* as "); emit(node.importClause.namedBindings.name); } @@ -32258,7 +33038,7 @@ var ts; } function emitExternalImportDeclaration(node) { if (ts.contains(externalImports, node)) { - var isExportedImport = node.kind === 228 && (node.flags & 1) !== 0; + var isExportedImport = node.kind === 229 && (node.flags & 1) !== 0; var namespaceDeclaration = getNamespaceDeclarationNode(node); var varOrConst = (languageVersion <= 1) ? "var " : "const "; if (modulekind !== ts.ModuleKind.AMD) { @@ -32273,7 +33053,7 @@ var ts; write(" = "); } else { - var isNakedImport = 229 && !node.importClause; + var isNakedImport = 230 && !node.importClause; if (!isNakedImport) { write(varOrConst); write(getGeneratedNameForNode(node)); @@ -32440,8 +33220,8 @@ var ts; write("export default "); var expression = node.expression; emit(expression); - if (expression.kind !== 219 && - expression.kind !== 220) { + if (expression.kind !== 220 && + expression.kind !== 221) { write(";"); } emitEnd(node); @@ -32478,18 +33258,18 @@ var ts; for (var _a = 0, _b = sourceFile.statements; _a < _b.length; _a++) { var node = _b[_a]; switch (node.kind) { - case 229: + case 230: if (!node.importClause || resolver.isReferencedAliasDeclaration(node.importClause, true)) { externalImports.push(node); } break; - case 228: - if (node.moduleReference.kind === 239 && resolver.isReferencedAliasDeclaration(node)) { + case 229: + if (node.moduleReference.kind === 240 && resolver.isReferencedAliasDeclaration(node)) { externalImports.push(node); } break; - case 235: + case 236: if (node.moduleSpecifier) { if (!node.exportClause) { if (resolver.moduleExportsSomeValue(node.moduleSpecifier)) { @@ -32509,7 +33289,7 @@ var ts; } } break; - case 234: + case 235: if (node.isExportEquals && !exportEquals) { exportEquals = node; } @@ -32534,10 +33314,10 @@ var ts; if (namespaceDeclaration && !isDefaultImport(node)) { return ts.getTextOfNodeFromSourceText(currentText, namespaceDeclaration.name); } - if (node.kind === 229 && node.importClause) { + if (node.kind === 230 && node.importClause) { return getGeneratedNameForNode(node); } - if (node.kind === 235 && node.moduleSpecifier) { + if (node.kind === 236 && node.moduleSpecifier) { return getGeneratedNameForNode(node); } } @@ -32562,8 +33342,8 @@ var ts; var started = false; for (var _a = 0, externalImports_1 = externalImports; _a < externalImports_1.length; _a++) { var importNode = externalImports_1[_a]; - var skipNode = importNode.kind === 235 || - (importNode.kind === 229 && !importNode.importClause); + var skipNode = importNode.kind === 236 || + (importNode.kind === 230 && !importNode.importClause); if (skipNode) { continue; } @@ -32588,7 +33368,7 @@ var ts; var hasExportDeclarationWithExportClause = false; for (var _a = 0, externalImports_2 = externalImports; _a < externalImports_2.length; _a++) { var externalImport = externalImports_2[_a]; - if (externalImport.kind === 235 && externalImport.exportClause) { + if (externalImport.kind === 236 && externalImport.exportClause) { hasExportDeclarationWithExportClause = true; break; } @@ -32617,7 +33397,7 @@ var ts; } for (var _d = 0, externalImports_3 = externalImports; _d < externalImports_3.length; _d++) { var externalImport = externalImports_3[_d]; - if (externalImport.kind !== 235) { + if (externalImport.kind !== 236) { continue; } var exportDecl = externalImport; @@ -32706,7 +33486,7 @@ var ts; if (i !== 0) { write(", "); } - if (local.kind === 220 || local.kind === 224 || local.kind === 223) { + if (local.kind === 221 || local.kind === 225 || local.kind === 224) { emitDeclarationName(local); } else { @@ -32740,21 +33520,21 @@ var ts; if (node.flags & 2) { return; } - if (node.kind === 219) { + if (node.kind === 220) { if (!hoistedFunctionDeclarations) { hoistedFunctionDeclarations = []; } hoistedFunctionDeclarations.push(node); return; } - if (node.kind === 220) { + if (node.kind === 221) { if (!hoistedVars) { hoistedVars = []; } hoistedVars.push(node); return; } - if (node.kind === 223) { + if (node.kind === 224) { if (shouldEmitEnumDeclaration(node)) { if (!hoistedVars) { hoistedVars = []; @@ -32763,7 +33543,7 @@ var ts; } return; } - if (node.kind === 224) { + if (node.kind === 225) { if (shouldEmitModuleDeclaration(node)) { if (!hoistedVars) { hoistedVars = []; @@ -32772,7 +33552,7 @@ var ts; } return; } - if (node.kind === 217 || node.kind === 168) { + if (node.kind === 218 || node.kind === 169) { if (shouldHoistVariable(node, false)) { var name_32 = node.name; if (name_32.kind === 69) { @@ -32808,7 +33588,7 @@ var ts; return false; } return (ts.getCombinedNodeFlags(node) & 3072) === 0 || - ts.getEnclosingBlockScopeContainer(node).kind === 255; + ts.getEnclosingBlockScopeContainer(node).kind === 256; } function isCurrentFileSystemExternalModule() { return modulekind === ts.ModuleKind.System && isCurrentFileExternalModule; @@ -32846,17 +33626,17 @@ var ts; var entry = group_1[_a]; var importVariableName = getLocalNameForExternalImport(entry) || ""; switch (entry.kind) { - case 229: + case 230: if (!entry.importClause) { break; } - case 228: + case 229: ts.Debug.assert(importVariableName !== ""); writeLine(); write(importVariableName + " = " + parameterName + ";"); writeLine(); break; - case 235: + case 236: ts.Debug.assert(importVariableName !== ""); if (entry.exportClause) { writeLine(); @@ -32900,10 +33680,10 @@ var ts; for (var i = startIndex; i < node.statements.length; i++) { var statement = node.statements[i]; switch (statement.kind) { - case 219: - case 229: + case 220: + case 230: continue; - case 235: + case 236: if (!statement.moduleSpecifier) { for (var _a = 0, _b = statement.exportClause.elements; _a < _b.length; _a++) { var element = _b[_a]; @@ -32911,7 +33691,7 @@ var ts; } } continue; - case 228: + case 229: if (!ts.isInternalModuleImportEqualsDeclaration(statement)) { continue; } @@ -33150,10 +33930,10 @@ var ts; return result; } function isJsxChildEmittable(child) { - if (child.kind === 247) { + if (child.kind === 248) { return !!child.expression; } - else if (child.kind === 243) { + else if (child.kind === 244) { return !!getTextToEmit(child); } return true; @@ -33347,30 +34127,30 @@ var ts; } function isSpecializedCommentHandling(node) { switch (node.kind) { - case 221: - case 219: - case 229: - case 228: case 222: - case 234: + case 220: + case 230: + case 229: + case 223: + case 235: return true; } } function shouldEmitLeadingAndTrailingComments(node) { switch (node.kind) { - case 199: + case 200: return shouldEmitLeadingAndTrailingCommentsForVariableStatement(node); - case 224: + case 225: return shouldEmitModuleDeclaration(node); - case 223: + case 224: return shouldEmitEnumDeclaration(node); } ts.Debug.assert(!isSpecializedCommentHandling(node)); - if (node.kind !== 198 && + if (node.kind !== 199 && node.parent && - node.parent.kind === 179 && + node.parent.kind === 180 && node.parent.body === node && - compilerOptions.target <= 1) { + languageVersion <= 1) { return false; } return true; @@ -33379,13 +34159,13 @@ var ts; switch (node.kind) { case 69: return emitIdentifier(node); - case 141: + case 142: return emitParameter(node); + case 147: case 146: - case 145: return emitMethod(node); - case 148: case 149: + case 150: return emitAccessor(node); case 97: return emitThis(node); @@ -33405,142 +34185,142 @@ var ts; case 13: case 14: return emitLiteral(node); - case 188: - return emitTemplateExpression(node); - case 196: - return emitTemplateSpan(node); - case 240: - case 241: - return emitJsxElement(node); - case 243: - return emitJsxText(node); - case 247: - return emitJsxExpression(node); - case 138: - return emitQualifiedName(node); - case 166: - return emitObjectBindingPattern(node); - case 167: - return emitArrayBindingPattern(node); - case 168: - return emitBindingElement(node); - case 169: - return emitArrayLiteral(node); - case 170: - return emitObjectLiteral(node); - case 252: - return emitPropertyAssignment(node); - case 253: - return emitShorthandPropertyAssignment(node); - case 139: - return emitComputedPropertyName(node); - case 171: - return emitPropertyAccess(node); - case 172: - return emitIndexedAccess(node); - case 173: - return emitCallExpression(node); - case 174: - return emitNewExpression(node); - case 175: - return emitTaggedTemplateExpression(node); - case 176: - case 194: - case 195: - return emit(node.expression); - case 177: - return emitParenExpression(node); - case 219: - case 178: - case 179: - return emitFunctionDeclaration(node); - case 180: - return emitDeleteExpression(node); - case 181: - return emitTypeOfExpression(node); - case 182: - return emitVoidExpression(node); - case 183: - return emitAwaitExpression(node); - case 184: - return emitPrefixUnaryExpression(node); - case 185: - return emitPostfixUnaryExpression(node); - case 186: - return emitBinaryExpression(node); - case 187: - return emitConditionalExpression(node); - case 190: - return emitSpreadElementExpression(node); case 189: - return emitYieldExpression(node); - case 192: - return; - case 198: - case 225: - return emitBlock(node); - case 199: - return emitVariableStatement(node); - case 200: - return write(";"); - case 201: - return emitExpressionStatement(node); - case 202: - return emitIfStatement(node); - case 203: - return emitDoStatement(node); - case 204: - return emitWhileStatement(node); - case 205: - return emitForStatement(node); - case 207: - case 206: - return emitForInOrForOfStatement(node); - case 208: - case 209: - return emitBreakOrContinueStatement(node); - case 210: - return emitReturnStatement(node); - case 211: - return emitWithStatement(node); - case 212: - return emitSwitchStatement(node); + return emitTemplateExpression(node); + case 197: + return emitTemplateSpan(node); + case 241: + case 242: + return emitJsxElement(node); + case 244: + return emitJsxText(node); case 248: - case 249: - return emitCaseOrDefaultClause(node); - case 213: - return emitLabeledStatement(node); - case 214: - return emitThrowStatement(node); - case 215: - return emitTryStatement(node); - case 251: - return emitCatchClause(node); - case 216: - return emitDebuggerStatement(node); - case 217: - return emitVariableDeclaration(node); - case 191: - return emitClassExpression(node); - case 220: - return emitClassDeclaration(node); - case 221: - return emitInterfaceDeclaration(node); - case 223: - return emitEnumDeclaration(node); + return emitJsxExpression(node); + case 139: + return emitQualifiedName(node); + case 167: + return emitObjectBindingPattern(node); + case 168: + return emitArrayBindingPattern(node); + case 169: + return emitBindingElement(node); + case 170: + return emitArrayLiteral(node); + case 171: + return emitObjectLiteral(node); + case 253: + return emitPropertyAssignment(node); case 254: - return emitEnumMember(node); + return emitShorthandPropertyAssignment(node); + case 140: + return emitComputedPropertyName(node); + case 172: + return emitPropertyAccess(node); + case 173: + return emitIndexedAccess(node); + case 174: + return emitCallExpression(node); + case 175: + return emitNewExpression(node); + case 176: + return emitTaggedTemplateExpression(node); + case 177: + case 195: + case 196: + return emit(node.expression); + case 178: + return emitParenExpression(node); + case 220: + case 179: + case 180: + return emitFunctionDeclaration(node); + case 181: + return emitDeleteExpression(node); + case 182: + return emitTypeOfExpression(node); + case 183: + return emitVoidExpression(node); + case 184: + return emitAwaitExpression(node); + case 185: + return emitPrefixUnaryExpression(node); + case 186: + return emitPostfixUnaryExpression(node); + case 187: + return emitBinaryExpression(node); + case 188: + return emitConditionalExpression(node); + case 191: + return emitSpreadElementExpression(node); + case 190: + return emitYieldExpression(node); + case 193: + return; + case 199: + case 226: + return emitBlock(node); + case 200: + return emitVariableStatement(node); + case 201: + return write(";"); + case 202: + return emitExpressionStatement(node); + case 203: + return emitIfStatement(node); + case 204: + return emitDoStatement(node); + case 205: + return emitWhileStatement(node); + case 206: + return emitForStatement(node); + case 208: + case 207: + return emitForInOrForOfStatement(node); + case 209: + case 210: + return emitBreakOrContinueStatement(node); + case 211: + return emitReturnStatement(node); + case 212: + return emitWithStatement(node); + case 213: + return emitSwitchStatement(node); + case 249: + case 250: + return emitCaseOrDefaultClause(node); + case 214: + return emitLabeledStatement(node); + case 215: + return emitThrowStatement(node); + case 216: + return emitTryStatement(node); + case 252: + return emitCatchClause(node); + case 217: + return emitDebuggerStatement(node); + case 218: + return emitVariableDeclaration(node); + case 192: + return emitClassExpression(node); + case 221: + return emitClassDeclaration(node); + case 222: + return emitInterfaceDeclaration(node); case 224: - return emitModuleDeclaration(node); - case 229: - return emitImportDeclaration(node); - case 228: - return emitImportEqualsDeclaration(node); - case 235: - return emitExportDeclaration(node); - case 234: - return emitExportAssignment(node); + return emitEnumDeclaration(node); case 255: + return emitEnumMember(node); + case 225: + return emitModuleDeclaration(node); + case 230: + return emitImportDeclaration(node); + case 229: + return emitImportEqualsDeclaration(node); + case 236: + return emitExportDeclaration(node); + case 235: + return emitExportAssignment(node); + case 256: return emitSourceFileNode(node); } } @@ -33570,7 +34350,7 @@ var ts; } function getLeadingCommentsToEmit(node) { if (node.parent) { - if (node.parent.kind === 255 || node.pos !== node.parent.pos) { + if (node.parent.kind === 256 || node.pos !== node.parent.pos) { if (hasDetachedComments(node.pos)) { return getLeadingCommentsWithoutDetachedComments(); } @@ -33582,7 +34362,7 @@ var ts; } function getTrailingCommentsToEmit(node) { if (node.parent) { - if (node.parent.kind === 255 || node.end !== node.parent.end) { + if (node.parent.kind === 256 || node.end !== node.parent.end) { return ts.getTrailingCommentRanges(currentText, node.end); } } @@ -34092,20 +34872,26 @@ var ts; var failedLookupLocations = []; var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled, skipTsx: false }; var resolvedFileName = tryLoadModuleUsingOptionalResolutionSettings(moduleName, containingDirectory, nodeLoadModuleByRelativeName, failedLookupLocations, supportedExtensions, state); - if (resolvedFileName) { - return createResolvedModule(resolvedFileName, false, failedLookupLocations); - } var isExternalLibraryImport = false; - if (moduleHasNonRelativeName(moduleName)) { - if (traceEnabled) { - trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder, moduleName); + if (!resolvedFileName) { + if (moduleHasNonRelativeName(moduleName)) { + if (traceEnabled) { + trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder, moduleName); + } + resolvedFileName = loadModuleFromNodeModules(moduleName, containingDirectory, failedLookupLocations, state); + isExternalLibraryImport = resolvedFileName !== undefined; + } + else { + var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); + resolvedFileName = nodeLoadModuleByRelativeName(candidate, supportedExtensions, failedLookupLocations, false, state); } - resolvedFileName = loadModuleFromNodeModules(moduleName, containingDirectory, failedLookupLocations, state); - isExternalLibraryImport = resolvedFileName !== undefined; } - else { - var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); - resolvedFileName = nodeLoadModuleByRelativeName(candidate, supportedExtensions, failedLookupLocations, false, state); + if (resolvedFileName && host.realpath) { + var originalFileName = resolvedFileName; + resolvedFileName = ts.normalizePath(host.realpath(resolvedFileName)); + if (traceEnabled) { + trace(host, ts.Diagnostics.Resolving_real_path_for_0_result_1, originalFileName, resolvedFileName); + } } return createResolvedModule(resolvedFileName, isExternalLibraryImport, failedLookupLocations); } @@ -34334,6 +35120,7 @@ var ts; 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, @@ -34346,7 +35133,8 @@ var ts; 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); } + directoryExists: function (directoryName) { return ts.sys.directoryExists(directoryName); }, + realpath: realpath }; } ts.createCompilerHost = createCompilerHost; @@ -34459,6 +35247,7 @@ var ts; program = { getRootFileNames: function () { return rootNames; }, getSourceFile: getSourceFile, + getSourceFileByPath: getSourceFileByPath, getSourceFiles: function () { return files; }, getCompilerOptions: function () { return options; }, getSyntacticDiagnostics: getSyntacticDiagnostics, @@ -34477,7 +35266,7 @@ var ts; getSymbolCount: function () { return getDiagnosticsProducingTypeChecker().getSymbolCount(); }, getTypeCount: function () { return getDiagnosticsProducingTypeChecker().getTypeCount(); }, getFileProcessingDiagnostics: function () { return fileProcessingDiagnostics; }, - resolvedTypeReferenceDirectives: resolvedTypeReferenceDirectives + getResolvedTypeReferenceDirectives: function () { return resolvedTypeReferenceDirectives; } }; verifyCompilerOptions(); ts.programTime += new Date().getTime() - start; @@ -34520,7 +35309,11 @@ var ts; (oldOptions.allowJs !== options.allowJs) || (oldOptions.rootDir !== options.rootDir) || (oldOptions.typesSearchPaths !== options.typesSearchPaths) || - (oldOptions.configFilePath !== options.configFilePath)) { + (oldOptions.configFilePath !== options.configFilePath) || + (oldOptions.baseUrl !== options.baseUrl) || + (oldOptions.typesRoot !== options.typesRoot) || + !ts.arrayIsEqualTo(oldOptions.rootDirs, options.rootDirs) || + !ts.mapIsEqualTo(oldOptions.paths, options.paths)) { return false; } ts.Debug.assert(!oldProgram.structureIsReused); @@ -34536,7 +35329,9 @@ var ts; var modifiedSourceFiles = []; for (var _i = 0, _a = oldProgram.getSourceFiles(); _i < _a.length; _i++) { var oldSourceFile = _a[_i]; - var newSourceFile = host.getSourceFile(oldSourceFile.fileName, options.target); + var newSourceFile = host.getSourceFileByPath + ? host.getSourceFileByPath(oldSourceFile.fileName, oldSourceFile.path, options.target) + : host.getSourceFile(oldSourceFile.fileName, options.target); if (!newSourceFile) { return false; } @@ -34594,7 +35389,7 @@ var ts; var modifiedFile = modifiedSourceFiles_1[_b]; fileProcessingDiagnostics.reattachFileDiagnostics(modifiedFile); } - resolvedTypeReferenceDirectives = oldProgram.resolvedTypeReferenceDirectives; + resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives(); oldProgram.structureIsReused = true; return true; } @@ -34606,6 +35401,7 @@ var ts; getCurrentDirectory: function () { return currentDirectory; }, getNewLine: function () { return host.getNewLine(); }, getSourceFile: program.getSourceFile, + getSourceFileByPath: program.getSourceFileByPath, getSourceFiles: program.getSourceFiles, writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }), isEmitBlocked: isEmitBlocked @@ -34650,7 +35446,10 @@ var ts; return emitResult; } function getSourceFile(fileName) { - return filesByName.get(ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + return getSourceFileByPath(ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + } + function getSourceFileByPath(path) { + return filesByName.get(path); } function getDiagnosticsHelper(sourceFile, getDiagnostics, cancellationToken) { if (sourceFile) { @@ -34718,47 +35517,47 @@ var ts; return false; } switch (node.kind) { - case 228: + case 229: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_a_ts_file)); return true; - case 234: + case 235: if (node.isExportEquals) { diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_a_ts_file)); return true; } break; - case 220: + case 221: var classDeclaration = node; if (checkModifiers(classDeclaration.modifiers) || checkTypeParameters(classDeclaration.typeParameters)) { return true; } break; - case 250: + case 251: var heritageClause = node; if (heritageClause.token === 106) { diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_a_ts_file)); return true; } break; - case 221: + case 222: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.interface_declarations_can_only_be_used_in_a_ts_file)); return true; - case 224: + case 225: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.module_declarations_can_only_be_used_in_a_ts_file)); return true; - case 222: + case 223: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.type_aliases_can_only_be_used_in_a_ts_file)); return true; - case 146: - case 145: case 147: + case 146: case 148: case 149: - case 178: - case 219: + case 150: case 179: - case 219: + case 220: + case 180: + case 220: var functionDeclaration = node; if (checkModifiers(functionDeclaration.modifiers) || checkTypeParameters(functionDeclaration.typeParameters) || @@ -34766,20 +35565,20 @@ var ts; return true; } break; - case 199: + case 200: var variableStatement = node; if (checkModifiers(variableStatement.modifiers)) { return true; } break; - case 217: + case 218: var variableDeclaration = node; if (checkTypeAnnotation(variableDeclaration.type)) { return true; } break; - case 173: case 174: + case 175: var expression = node; if (expression.typeArguments && expression.typeArguments.length > 0) { var start_2 = expression.typeArguments.pos; @@ -34787,7 +35586,7 @@ var ts; return true; } break; - case 141: + case 142: var parameter = node; if (parameter.modifiers) { var start_3 = parameter.modifiers.pos; @@ -34803,17 +35602,17 @@ var ts; return true; } break; - case 144: + case 145: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.property_declarations_can_only_be_used_in_a_ts_file)); return true; - case 223: + case 224: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); return true; - case 176: + case 177: var typeAssertionExpression = node; diagnostics.push(ts.createDiagnosticForNode(typeAssertionExpression.type, ts.Diagnostics.type_assertion_expressions_can_only_be_used_in_a_ts_file)); return true; - case 142: + case 143: if (!options.experimentalDecorators) { diagnostics.push(ts.createDiagnosticForNode(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)); } @@ -34844,7 +35643,7 @@ var ts; case 112: case 110: case 111: - case 127: + case 128: case 122: diagnostics.push(ts.createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind))); return true; @@ -34916,9 +35715,9 @@ var ts; return; function collectModuleReferences(node, inAmbientModule) { switch (node.kind) { + case 230: case 229: - case 228: - case 235: + case 236: var moduleNameExpr = ts.getExternalModuleName(node); if (!moduleNameExpr || moduleNameExpr.kind !== 9) { break; @@ -34930,7 +35729,7 @@ var ts; (imports || (imports = [])).push(moduleNameExpr); } break; - case 224: + case 225: if (ts.isAmbientModule(node) && (inAmbientModule || node.flags & 2 || ts.isDeclarationFile(file))) { var moduleName = node.name; if (isExternalModuleFile || (inAmbientModule && !ts.isExternalModuleNameRelative(moduleName.text))) { @@ -35204,12 +36003,23 @@ var ts; if (!hasZeroOrOneAsteriskCharacter(key)) { programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, key)); } - for (var _i = 0, _a = options.paths[key]; _i < _a.length; _i++) { - var subst = _a[_i]; - if (!hasZeroOrOneAsteriskCharacter(subst)) { - programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character, subst, key)); + if (ts.isArray(options.paths[key])) { + for (var _i = 0, _a = options.paths[key]; _i < _a.length; _i++) { + var subst = _a[_i]; + var typeOfSubst = typeof subst; + if (typeOfSubst === "string") { + if (!hasZeroOrOneAsteriskCharacter(subst)) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character, subst, key)); + } + } + else { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2, subst, key, typeOfSubst)); + } } } + else { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substututions_for_pattern_0_should_be_an_array, key)); + } } } if (options.inlineSources) { @@ -35678,6 +36488,7 @@ var ts; "es2015": "lib.es2015.d.ts", "es7": "lib.es2016.d.ts", "es2016": "lib.es2016.d.ts", + "es2017": "lib.es2017.d.ts", "dom": "lib.dom.d.ts", "webworker": "lib.webworker.d.ts", "scripthost": "lib.scripthost.d.ts", @@ -35690,7 +36501,8 @@ var 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" + "es2016.array.include": "lib.es2016.array.include.d.ts", + "es2017.object": "lib.es2017.object.d.ts" } }, description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon @@ -35749,7 +36561,7 @@ var ts; } ts.createCompilerDiagnosticForInvalidCustomType = createCompilerDiagnosticForInvalidCustomType; function parseCustomTypeOption(opt, value, errors) { - var key = (value || "").trim().toLowerCase(); + var key = trimString((value || "")).toLowerCase(); var map = opt.type; if (ts.hasProperty(map, key)) { return map[key]; @@ -35760,7 +36572,7 @@ var ts; } ts.parseCustomTypeOption = parseCustomTypeOption; function parseListTypeOption(opt, value, errors) { - var values = (value || "").trim().split(","); + var values = trimString((value || "")).split(","); switch (opt.element.type) { case "number": return ts.map(values, parseInt); @@ -35910,6 +36722,7 @@ var ts; } return output; } + var IgnoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; function parseJsonConfigFileContent(json, host, basePath, existingOptions, configFileName) { if (existingOptions === void 0) { existingOptions = {}; } var errors = []; @@ -35922,6 +36735,7 @@ var ts; options: options, fileNames: fileNames, typingOptions: typingOptions, + raw: json, errors: errors }; function getFileNames(errors) { @@ -35941,11 +36755,11 @@ var ts; exclude = json["exclude"]; } else { - exclude = ["node_modules"]; - var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; - if (outDir) { - exclude.push(outDir); - } + exclude = ["node_modules", "bower_components", "jspm_packages"]; + } + var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + exclude.push(outDir); } exclude = ts.map(exclude, ts.normalizeSlashes); var supportedExtensions = ts.getSupportedExtensions(options); @@ -35958,7 +36772,7 @@ var ts; if (extension === ".ts" && ts.fileExtensionIs(fileName, ".d.ts")) { continue; } - if (/\.min\.js$/.test(fileName)) { + if (IgnoreFileNamePattern.test(fileName)) { continue; } if (extension === ".d.ts" || (options.allowJs && ts.contains(ts.supportedJavascriptExtensions, extension))) { @@ -36054,6 +36868,9 @@ var ts; 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, ""); + } })(ts || (ts = {})); var ts; (function (ts) { @@ -36083,10 +36900,8 @@ var ts; } var language = matchResult[1]; var territory = matchResult[3]; - if (!trySetLanguageAndTerritory(language, territory, errors) && - !trySetLanguageAndTerritory(language, undefined, errors)) { - errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unsupported_locale_0, locale)); - return false; + if (!trySetLanguageAndTerritory(language, territory, errors)) { + trySetLanguageAndTerritory(language, undefined, errors); } return true; } @@ -36365,9 +37180,16 @@ var ts; ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped); return; } - if (ts.isWatchSet(configParseResult.options) && !ts.sys.watchFile) { - reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--watch"), undefined); - ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped); + if (ts.isWatchSet(configParseResult.options)) { + if (!ts.sys.watchFile) { + reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--watch"), undefined); + ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped); + } + if (!directoryWatcher && ts.sys.watchDirectory && configFileName) { + var directory = ts.getDirectoryPath(configFileName); + directoryWatcher = ts.sys.watchDirectory(directory == "" ? "." : directory, watchedDirectoryChanged, true); + } + ; } return configParseResult; } diff --git a/lib/tsserver.js b/lib/tsserver.js index 7b671727da5..ecb7bfb5509 100644 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -124,11 +124,11 @@ var ts; return undefined; } ts.forEach = forEach; - function contains(array, value) { + function contains(array, value, areEqual) { if (array) { for (var _i = 0, array_1 = array; _i < array_1.length; _i++) { var v = array_1[_i]; - if (v === value) { + if (areEqual ? areEqual(v, value) : v === value) { return true; } } @@ -194,13 +194,13 @@ var ts; return array1.concat(array2); } ts.concatenate = concatenate; - function deduplicate(array) { + function deduplicate(array, areEqual) { var result; if (array) { result = []; for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { var item = array_5[_i]; - if (!contains(result, item)) { + if (!contains(result, item, areEqual)) { result.push(item); } } @@ -987,72 +987,7 @@ var ts; var _path = require("path"); var _os = require("os"); var _crypto = require("crypto"); - function createPollingWatchedFileSet(interval, chunkSize) { - if (interval === void 0) { interval = 2500; } - if (chunkSize === void 0) { chunkSize = 30; } - var watchedFiles = []; - var nextFileToCheck = 0; - var watchTimer; - function getModifiedTime(fileName) { - return _fs.statSync(fileName).mtime; - } - function poll(checkedIndex) { - var watchedFile = watchedFiles[checkedIndex]; - if (!watchedFile) { - return; - } - _fs.stat(watchedFile.fileName, function (err, stats) { - if (err) { - watchedFile.callback(watchedFile.fileName); - } - else if (watchedFile.mtime.getTime() !== stats.mtime.getTime()) { - watchedFile.mtime = getModifiedTime(watchedFile.fileName); - watchedFile.callback(watchedFile.fileName, watchedFile.mtime.getTime() === 0); - } - }); - } - function startWatchTimer() { - watchTimer = setInterval(function () { - var count = 0; - var nextToCheck = nextFileToCheck; - var firstCheck = -1; - while ((count < chunkSize) && (nextToCheck !== firstCheck)) { - poll(nextToCheck); - if (firstCheck < 0) { - firstCheck = nextToCheck; - } - nextToCheck++; - if (nextToCheck === watchedFiles.length) { - nextToCheck = 0; - } - count++; - } - nextFileToCheck = nextToCheck; - }, interval); - } - function addFile(fileName, callback) { - var file = { - fileName: fileName, - callback: callback, - mtime: getModifiedTime(fileName) - }; - watchedFiles.push(file); - if (watchedFiles.length === 1) { - startWatchTimer(); - } - return file; - } - function removeFile(file) { - watchedFiles = ts.copyListRemovingItem(file, watchedFiles); - } - return { - getModifiedTime: getModifiedTime, - poll: poll, - startWatchTimer: startWatchTimer, - addFile: addFile, - removeFile: removeFile - }; - } + var useNonPollingWatchers = process.env["TSC_NONPOLLING_WATCHER"]; function createWatchedFileSet() { var dirWatchers = {}; var fileWatcherCallbacks = {}; @@ -1119,7 +1054,6 @@ var ts; } } } - var pollingWatchedFileSet = createPollingWatchedFileSet(); var watchedFileSet = createWatchedFileSet(); function isNode4OrLater() { return parseInt(process.version.charAt(1)) >= 4; @@ -1227,11 +1161,24 @@ var ts; readFile: readFile, writeFile: writeFile, watchFile: function (fileName, callback) { - var watchSet = isNode4OrLater() ? watchedFileSet : pollingWatchedFileSet; - var watchedFile = watchSet.addFile(fileName, callback); - return { - close: function () { return watchSet.removeFile(watchedFile); } - }; + if (useNonPollingWatchers) { + var watchedFile_1 = watchedFileSet.addFile(fileName, callback); + return { + close: function () { return watchedFileSet.removeFile(watchedFile_1); } + }; + } + else { + _fs.watchFile(fileName, { persistent: true, interval: 250 }, fileChanged); + return { + close: function () { return _fs.unwatchFile(fileName, fileChanged); } + }; + } + function fileChanged(curr, prev) { + if (+curr.mtime <= +prev.mtime) { + return; + } + callback(fileName); + } }, watchDirectory: function (directoryName, callback, recursive) { var options; @@ -1286,10 +1233,14 @@ var ts; }, exit: function (exitCode) { process.exit(exitCode); + }, + realpath: function (path) { + return _fs.realpathSync(path); } }; } function getChakraSystem() { + var realpath = ChakraHost.realpath && (function (path) { return ChakraHost.realpath(path); }); return { newLine: ChakraHost.newLine || "\r\n", args: ChakraHost.args, @@ -1311,18 +1262,19 @@ var ts; getExecutingFilePath: function () { return ChakraHost.executingFile; }, getCurrentDirectory: function () { return ChakraHost.currentDirectory; }, readDirectory: ChakraHost.readDirectory, - exit: ChakraHost.quit + exit: ChakraHost.quit, + realpath: realpath }; } - if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { + if (typeof ChakraHost !== "undefined") { + return getChakraSystem(); + } + else if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { return getWScriptSystem(); } else if (typeof process !== "undefined" && process.nextTick && !process.browser && typeof require !== "undefined") { return getNodeSystem(); } - else if (typeof ChakraHost !== "undefined") { - return getChakraSystem(); - } else { return undefined; } @@ -1410,7 +1362,6 @@ var ts; A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: ts.DiagnosticCategory.Error, key: "A_return_statement_can_only_be_used_within_a_function_body_1108", message: "A 'return' statement can only be used within a function body." }, Expression_expected: { code: 1109, category: ts.DiagnosticCategory.Error, key: "Expression_expected_1109", message: "Expression expected." }, Type_expected: { code: 1110, category: ts.DiagnosticCategory.Error, key: "Type_expected_1110", message: "Type expected." }, - A_class_member_cannot_be_declared_optional: { code: 1112, category: ts.DiagnosticCategory.Error, key: "A_class_member_cannot_be_declared_optional_1112", message: "A class member cannot be declared optional." }, A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: ts.DiagnosticCategory.Error, key: "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113", message: "A 'default' clause cannot appear more than once in a 'switch' statement." }, Duplicate_label_0: { code: 1114, category: ts.DiagnosticCategory.Error, key: "Duplicate_label_0_1114", message: "Duplicate label '{0}'" }, A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: ts.DiagnosticCategory.Error, key: "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115", message: "A 'continue' statement can only jump to a label of an enclosing iteration statement." }, @@ -1534,6 +1485,9 @@ var ts; A_type_literal_property_cannot_have_an_initializer: { code: 1247, category: ts.DiagnosticCategory.Error, key: "A_type_literal_property_cannot_have_an_initializer_1247", message: "A type literal property cannot have an initializer." }, A_class_member_cannot_have_the_0_keyword: { code: 1248, category: ts.DiagnosticCategory.Error, key: "A_class_member_cannot_have_the_0_keyword_1248", message: "A class member cannot have the '{0}' keyword." }, A_decorator_can_only_decorate_a_method_implementation_not_an_overload: { code: 1249, category: ts.DiagnosticCategory.Error, key: "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249", message: "A decorator can only decorate a method implementation, not an overload." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5: { code: 1250, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode: { code: 1251, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode: { code: 1252, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Modules are automatically in strict mode." }, with_statements_are_not_allowed_in_an_async_function_block: { code: 1300, category: ts.DiagnosticCategory.Error, key: "with_statements_are_not_allowed_in_an_async_function_block_1300", message: "'with' statements are not allowed in an async function block." }, await_expression_is_only_allowed_within_an_async_function: { code: 1308, category: ts.DiagnosticCategory.Error, key: "await_expression_is_only_allowed_within_an_async_function_1308", message: "'await' expression is only allowed within an async function." }, Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1311, category: ts.DiagnosticCategory.Error, key: "Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher_1311", message: "Async functions are only available when targeting ECMAScript 6 and higher." }, @@ -1763,7 +1717,10 @@ var ts; A_module_cannot_have_multiple_default_exports: { code: 2528, category: ts.DiagnosticCategory.Error, key: "A_module_cannot_have_multiple_default_exports_2528", message: "A module cannot have multiple default exports." }, Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions: { code: 2529, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529", message: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions." }, Property_0_is_incompatible_with_index_signature: { code: 2530, category: ts.DiagnosticCategory.Error, key: "Property_0_is_incompatible_with_index_signature_2530", message: "Property '{0}' is incompatible with index signature." }, - Object_is_possibly_null_or_undefined: { code: 2531, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_or_undefined_2531", message: "Object is possibly 'null' or 'undefined'." }, + Object_is_possibly_null: { code: 2531, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_2531", message: "Object is possibly 'null'." }, + Object_is_possibly_undefined: { code: 2532, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_undefined_2532", message: "Object is possibly 'undefined'." }, + Object_is_possibly_null_or_undefined: { code: 2533, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_or_undefined_2533", message: "Object is possibly 'null' or 'undefined'." }, + A_function_returning_never_cannot_have_a_reachable_end_point: { code: 2534, category: ts.DiagnosticCategory.Error, key: "A_function_returning_never_cannot_have_a_reachable_end_point_2534", message: "A function returning 'never' cannot have a reachable end point." }, JSX_element_attributes_type_0_may_not_be_a_union_type: { code: 2600, category: ts.DiagnosticCategory.Error, key: "JSX_element_attributes_type_0_may_not_be_a_union_type_2600", message: "JSX element attributes type '{0}' may not be a union type." }, The_return_type_of_a_JSX_element_constructor_must_return_an_object_type: { code: 2601, category: ts.DiagnosticCategory.Error, key: "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601", message: "The return type of a JSX element constructor must return an object type." }, JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist: { code: 2602, category: ts.DiagnosticCategory.Error, key: "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602", message: "JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist." }, @@ -1783,11 +1740,10 @@ var ts; Type_0_provides_no_match_for_the_signature_1: { code: 2658, category: ts.DiagnosticCategory.Error, key: "Type_0_provides_no_match_for_the_signature_1_2658", message: "Type '{0}' provides no match for the signature '{1}'" }, super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher: { code: 2659, category: ts.DiagnosticCategory.Error, key: "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659", message: "'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher." }, super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions: { code: 2660, category: ts.DiagnosticCategory.Error, key: "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660", message: "'super' can only be referenced in members of derived classes or object literal expressions." }, - Cannot_re_export_name_that_is_not_defined_in_the_module: { code: 2661, category: ts.DiagnosticCategory.Error, key: "Cannot_re_export_name_that_is_not_defined_in_the_module_2661", message: "Cannot re-export name that is not defined in the module." }, + Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module: { code: 2661, category: ts.DiagnosticCategory.Error, key: "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661", message: "Cannot export '{0}'. Only local declarations can be exported from a module." }, Cannot_find_name_0_Did_you_mean_the_static_member_1_0: { code: 2662, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662", message: "Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?" }, Cannot_find_name_0_Did_you_mean_the_instance_member_this_0: { code: 2663, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663", message: "Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?" }, Invalid_module_name_in_augmentation_module_0_cannot_be_found: { code: 2664, category: ts.DiagnosticCategory.Error, key: "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664", message: "Invalid module name in augmentation, module '{0}' cannot be found." }, - Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope: { code: 2665, category: ts.DiagnosticCategory.Error, key: "Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope_2665", message: "Module augmentation cannot introduce new names in the top level scope." }, Exports_and_export_assignments_are_not_permitted_in_module_augmentations: { code: 2666, category: ts.DiagnosticCategory.Error, key: "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666", message: "Exports and export assignments are not permitted in module augmentations." }, Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module: { code: 2667, category: ts.DiagnosticCategory.Error, key: "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667", message: "Imports are not permitted in module augmentations. Consider moving them to the enclosing external module." }, export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible: { code: 2668, category: ts.DiagnosticCategory.Error, key: "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668", message: "'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible." }, @@ -1804,7 +1760,7 @@ var ts; A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void: { code: 2679, category: ts.DiagnosticCategory.Error, key: "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679", message: "A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'." }, A_this_parameter_must_be_the_first_parameter: { code: 2680, category: ts.DiagnosticCategory.Error, key: "A_this_parameter_must_be_the_first_parameter_2680", message: "A 'this' parameter must be the first parameter." }, A_constructor_cannot_have_a_this_parameter: { code: 2681, category: ts.DiagnosticCategory.Error, key: "A_constructor_cannot_have_a_this_parameter_2681", message: "A constructor cannot have a 'this' parameter." }, - A_setter_cannot_have_a_this_parameter: { code: 2682, category: ts.DiagnosticCategory.Error, key: "A_setter_cannot_have_a_this_parameter_2682", message: "A setter cannot have a 'this' parameter." }, + get_and_set_accessor_must_have_the_same_this_type: { code: 2682, category: ts.DiagnosticCategory.Error, key: "get_and_set_accessor_must_have_the_same_this_type_2682", message: "'get' and 'set' accessor must have the same 'this' type." }, this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation: { code: 2683, category: ts.DiagnosticCategory.Error, key: "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683", message: "'this' implicitly has type 'any' because it does not have a type annotation." }, The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1: { code: 2684, category: ts.DiagnosticCategory.Error, key: "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684", message: "The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'." }, The_this_types_of_each_signature_are_incompatible: { code: 2685, category: ts.DiagnosticCategory.Error, key: "The_this_types_of_each_signature_are_incompatible_2685", message: "The 'this' types of each signature are incompatible." }, @@ -1901,6 +1857,8 @@ var ts; Option_paths_cannot_be_used_without_specifying_baseUrl_option: { code: 5060, category: ts.DiagnosticCategory.Error, key: "Option_paths_cannot_be_used_without_specifying_baseUrl_option_5060", message: "Option 'paths' cannot be used without specifying '--baseUrl' option." }, Pattern_0_can_have_at_most_one_Asterisk_character: { code: 5061, category: ts.DiagnosticCategory.Error, key: "Pattern_0_can_have_at_most_one_Asterisk_character_5061", message: "Pattern '{0}' can have at most one '*' character" }, Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character: { code: 5062, category: ts.DiagnosticCategory.Error, key: "Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character_5062", message: "Substitution '{0}' in pattern '{1}' in can have at most one '*' character" }, + Substututions_for_pattern_0_should_be_an_array: { code: 5063, category: ts.DiagnosticCategory.Error, key: "Substututions_for_pattern_0_should_be_an_array_5063", message: "Substututions for pattern '{0}' should be an array." }, + Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2: { code: 5064, category: ts.DiagnosticCategory.Error, key: "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064", message: "Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'." }, Concatenate_and_emit_output_to_single_file: { code: 6001, category: ts.DiagnosticCategory.Message, key: "Concatenate_and_emit_output_to_single_file_6001", message: "Concatenate and emit output to single file." }, Generates_corresponding_d_ts_file: { code: 6002, category: ts.DiagnosticCategory.Message, key: "Generates_corresponding_d_ts_file_6002", message: "Generates corresponding '.d.ts' file." }, Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: ts.DiagnosticCategory.Message, key: "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", message: "Specify the location where debugger should locate map files instead of generated locations." }, @@ -2011,6 +1969,8 @@ var ts; Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder: { code: 6126, category: ts.DiagnosticCategory.Message, key: "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126", message: "Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder." }, Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1: { code: 6127, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127", message: "======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========" }, Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set: { code: 6128, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128", message: "======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========" }, + The_config_file_0_found_doesn_t_contain_any_source_files: { code: 6129, category: ts.DiagnosticCategory.Error, key: "The_config_file_0_found_doesn_t_contain_any_source_files_6129", message: "The config file '{0}' found doesn't contain any source files." }, + Resolving_real_path_for_0_result_1: { code: 6130, category: ts.DiagnosticCategory.Message, key: "Resolving_real_path_for_0_result_1_6130", message: "Resolving real path for '{0}', result '{1}'" }, Variable_0_implicitly_has_an_1_type: { code: 7005, category: ts.DiagnosticCategory.Error, key: "Variable_0_implicitly_has_an_1_type_7005", message: "Variable '{0}' implicitly has an '{1}' type." }, Parameter_0_implicitly_has_an_1_type: { code: 7006, category: ts.DiagnosticCategory.Error, key: "Parameter_0_implicitly_has_an_1_type_7006", message: "Parameter '{0}' implicitly has an '{1}' type." }, Member_0_implicitly_has_an_1_type: { code: 7008, category: ts.DiagnosticCategory.Error, key: "Member_0_implicitly_has_an_1_type_7008", message: "Member '{0}' implicitly has an '{1}' type." }, @@ -2095,7 +2055,7 @@ var ts; "false": 84, "finally": 85, "for": 86, - "from": 135, + "from": 136, "function": 87, "get": 123, "if": 88, @@ -2108,30 +2068,31 @@ var ts; "let": 108, "module": 125, "namespace": 126, + "never": 127, "new": 92, "null": 93, - "number": 129, + "number": 130, "package": 109, "private": 110, "protected": 111, "public": 112, - "readonly": 127, - "require": 128, - "global": 136, + "readonly": 128, + "require": 129, + "global": 137, "return": 94, - "set": 130, + "set": 131, "static": 113, - "string": 131, + "string": 132, "super": 95, "switch": 96, - "symbol": 132, + "symbol": 133, "this": 97, "throw": 98, "true": 99, "try": 100, - "type": 133, + "type": 134, "typeof": 101, - "undefined": 134, + "undefined": 135, "var": 102, "void": 103, "while": 104, @@ -2139,7 +2100,7 @@ var ts; "yield": 114, "async": 118, "await": 119, - "of": 137, + "of": 138, "{": 15, "}": 16, "(": 17, @@ -3402,7 +3363,7 @@ var ts; break; } } - return token = 243; + return token = 244; } function scanJsxIdentifier() { if (tokenIsIdentifierOrKeyword(token)) { @@ -3908,6 +3869,7 @@ var ts; "es2015": "lib.es2015.d.ts", "es7": "lib.es2016.d.ts", "es2016": "lib.es2016.d.ts", + "es2017": "lib.es2017.d.ts", "dom": "lib.dom.d.ts", "webworker": "lib.webworker.d.ts", "scripthost": "lib.scripthost.d.ts", @@ -3920,7 +3882,8 @@ var 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" + "es2016.array.include": "lib.es2016.array.include.d.ts", + "es2017.object": "lib.es2017.object.d.ts" } }, description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon @@ -3979,7 +3942,7 @@ var ts; } ts.createCompilerDiagnosticForInvalidCustomType = createCompilerDiagnosticForInvalidCustomType; function parseCustomTypeOption(opt, value, errors) { - var key = (value || "").trim().toLowerCase(); + var key = trimString((value || "")).toLowerCase(); var map = opt.type; if (ts.hasProperty(map, key)) { return map[key]; @@ -3990,7 +3953,7 @@ var ts; } ts.parseCustomTypeOption = parseCustomTypeOption; function parseListTypeOption(opt, value, errors) { - var values = (value || "").trim().split(","); + var values = trimString((value || "")).split(","); switch (opt.element.type) { case "number": return ts.map(values, parseInt); @@ -4140,6 +4103,7 @@ var ts; } return output; } + var IgnoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; function parseJsonConfigFileContent(json, host, basePath, existingOptions, configFileName) { if (existingOptions === void 0) { existingOptions = {}; } var errors = []; @@ -4152,6 +4116,7 @@ var ts; options: options, fileNames: fileNames, typingOptions: typingOptions, + raw: json, errors: errors }; function getFileNames(errors) { @@ -4171,11 +4136,11 @@ var ts; exclude = json["exclude"]; } else { - exclude = ["node_modules"]; - var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; - if (outDir) { - exclude.push(outDir); - } + exclude = ["node_modules", "bower_components", "jspm_packages"]; + } + var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + exclude.push(outDir); } exclude = ts.map(exclude, ts.normalizeSlashes); var supportedExtensions = ts.getSupportedExtensions(options); @@ -4188,7 +4153,7 @@ var ts; if (extension === ".ts" && ts.fileExtensionIs(fileName, ".d.ts")) { continue; } - if (/\.min\.js$/.test(fileName)) { + if (IgnoreFileNamePattern.test(fileName)) { continue; } if (extension === ".d.ts" || (options.allowJs && ts.contains(ts.supportedJavascriptExtensions, extension))) { @@ -4284,6 +4249,9 @@ var ts; 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, ""); + } })(ts || (ts = {})); var ts; (function (ts) { @@ -4334,6 +4302,24 @@ var ts; return node.end - node.pos; } ts.getFullWidth = getFullWidth; + function mapIsEqualTo(map1, map2) { + if (!map1 || !map2) { + return map1 === map2; + } + return containsAll(map1, map2) && containsAll(map2, map1); + } + ts.mapIsEqualTo = mapIsEqualTo; + function containsAll(map, other) { + for (var key in map) { + if (!ts.hasProperty(map, key)) { + continue; + } + if (!ts.hasProperty(other, key) || map[key] !== other[key]) { + return false; + } + } + return true; + } function arrayIsEqualTo(array1, array2, equaler) { if (!array1 || !array2) { return array1 === array2; @@ -4413,7 +4399,7 @@ var ts; } } function getSourceFileOfNode(node) { - while (node && node.kind !== 255) { + while (node && node.kind !== 256) { node = node.parent; } return node; @@ -4421,11 +4407,11 @@ var ts; ts.getSourceFileOfNode = getSourceFileOfNode; function isStatementWithLocals(node) { switch (node.kind) { - case 198: - case 226: - case 205: + case 199: + case 227: case 206: case 207: + case 208: return true; } return false; @@ -4529,13 +4515,13 @@ var ts; } ts.isBlockOrCatchScoped = isBlockOrCatchScoped; function isAmbientModule(node) { - return node && node.kind === 224 && + return node && node.kind === 225 && (node.name.kind === 9 || isGlobalScopeAugmentation(node)); } ts.isAmbientModule = isAmbientModule; function isBlockScopedContainerTopLevel(node) { - return node.kind === 255 || - node.kind === 224 || + return node.kind === 256 || + node.kind === 225 || isFunctionLike(node) || isFunctionBlock(node); } @@ -4549,9 +4535,9 @@ var ts; return false; } switch (node.parent.kind) { - case 255: + case 256: return ts.isExternalModule(node.parent); - case 225: + case 226: return isAmbientModule(node.parent.parent) && !ts.isExternalModule(node.parent.parent.parent); } return false; @@ -4564,15 +4550,15 @@ var ts; return current; } switch (current.kind) { - case 255: - case 226: - case 251: - case 224: - case 205: + case 256: + case 227: + case 252: + case 225: case 206: case 207: + case 208: return current; - case 198: + case 199: if (!isFunctionLike(current.parent)) { return current; } @@ -4583,9 +4569,9 @@ var ts; ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer; function isCatchClauseVariableDeclaration(declaration) { return declaration && - declaration.kind === 217 && + declaration.kind === 218 && declaration.parent && - declaration.parent.kind === 251; + declaration.parent.kind === 252; } ts.isCatchClauseVariableDeclaration = isCatchClauseVariableDeclaration; function declarationNameToString(name) { @@ -4620,7 +4606,7 @@ var ts; ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition; function getErrorSpanForArrowFunction(sourceFile, node) { var pos = ts.skipTrivia(sourceFile.text, node.pos); - if (node.body && node.body.kind === 198) { + if (node.body && node.body.kind === 199) { var startLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.pos).line; var endLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.end).line; if (startLine < endLine) { @@ -4632,29 +4618,29 @@ var ts; function getErrorSpanForNode(sourceFile, node) { var errorNode = node; switch (node.kind) { - case 255: + case 256: var pos_1 = ts.skipTrivia(sourceFile.text, 0, false); if (pos_1 === sourceFile.text.length) { return ts.createTextSpan(0, 0); } return getSpanOfTokenAtPosition(sourceFile, pos_1); - case 217: - case 168: - case 220: - case 191: + case 218: + case 169: case 221: - case 224: - case 223: - case 254: - case 219: - case 178: - case 146: - case 148: - case 149: + case 192: case 222: + case 225: + case 224: + case 255: + case 220: + case 179: + case 147: + case 149: + case 150: + case 223: errorNode = node.name; break; - case 179: + case 180: return getErrorSpanForArrowFunction(sourceFile, node); } if (errorNode === undefined) { @@ -4675,11 +4661,11 @@ var ts; } ts.isDeclarationFile = isDeclarationFile; function isConstEnumDeclaration(node) { - return node.kind === 223 && isConst(node); + return node.kind === 224 && isConst(node); } ts.isConstEnumDeclaration = isConstEnumDeclaration; function walkUpBindingElementsAndPatterns(node) { - while (node && (node.kind === 168 || isBindingPattern(node))) { + while (node && (node.kind === 169 || isBindingPattern(node))) { node = node.parent; } return node; @@ -4687,14 +4673,14 @@ var ts; function getCombinedNodeFlags(node) { node = walkUpBindingElementsAndPatterns(node); var flags = node.flags; - if (node.kind === 217) { + if (node.kind === 218) { node = node.parent; } - if (node && node.kind === 218) { + if (node && node.kind === 219) { flags |= node.flags; node = node.parent; } - if (node && node.kind === 199) { + if (node && node.kind === 200) { flags |= node.flags; } return flags; @@ -4709,11 +4695,11 @@ var ts; } ts.isLet = isLet; function isSuperCallExpression(n) { - return n.kind === 173 && n.expression.kind === 95; + return n.kind === 174 && n.expression.kind === 95; } ts.isSuperCallExpression = isSuperCallExpression; function isPrologueDirective(node) { - return node.kind === 201 && node.expression.kind === 9; + return node.kind === 202 && node.expression.kind === 9; } ts.isPrologueDirective = isPrologueDirective; function getLeadingCommentRangesOfNode(node, sourceFileOfNode) { @@ -4729,7 +4715,7 @@ var ts; } ts.getJsDocComments = getJsDocComments; function getJsDocCommentsFromText(node, text) { - var commentRanges = (node.kind === 141 || node.kind === 140) ? + var commentRanges = (node.kind === 142 || node.kind === 141) ? ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) : getLeadingCommentRangesOfNodeFromText(node, text); return ts.filter(commentRanges, isJsDocComment); @@ -4744,68 +4730,69 @@ var ts; ts.fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*/; ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*/; function isTypeNode(node) { - if (153 <= node.kind && node.kind <= 165) { + if (154 <= node.kind && node.kind <= 166) { return true; } switch (node.kind) { case 117: - case 129: - case 131: - case 120: + case 130: case 132: - case 134: + case 120: + case 133: + case 135: + case 127: return true; case 103: - return node.parent.kind !== 182; - case 193: + return node.parent.kind !== 183; + case 194: return !isExpressionWithTypeArgumentsInClassExtendsClause(node); case 69: - if (node.parent.kind === 138 && node.parent.right === node) { + if (node.parent.kind === 139 && node.parent.right === node) { node = node.parent; } - else if (node.parent.kind === 171 && node.parent.name === node) { + else if (node.parent.kind === 172 && node.parent.name === node) { node = node.parent; } - ts.Debug.assert(node.kind === 69 || node.kind === 138 || node.kind === 171, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'."); - case 138: - case 171: + ts.Debug.assert(node.kind === 69 || node.kind === 139 || node.kind === 172, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'."); + case 139: + case 172: case 97: var parent_1 = node.parent; - if (parent_1.kind === 157) { + if (parent_1.kind === 158) { return false; } - if (153 <= parent_1.kind && parent_1.kind <= 165) { + if (154 <= parent_1.kind && parent_1.kind <= 166) { return true; } switch (parent_1.kind) { - case 193: + case 194: return !isExpressionWithTypeArgumentsInClassExtendsClause(parent_1); - case 140: - return node === parent_1.constraint; - case 144: - case 143: case 141: - case 217: + return node === parent_1.constraint; + case 145: + case 144: + case 142: + case 218: return node === parent_1.type; - case 219: - case 178: + case 220: case 179: + case 180: + case 148: case 147: case 146: - case 145: - case 148: case 149: - return node === parent_1.type; case 150: + return node === parent_1.type; case 151: case 152: + case 153: return node === parent_1.type; - case 176: + case 177: return node === parent_1.type; - case 173: case 174: - return parent_1.typeArguments && ts.indexOf(parent_1.typeArguments, node) >= 0; case 175: + return parent_1.typeArguments && ts.indexOf(parent_1.typeArguments, node) >= 0; + case 176: return false; } } @@ -4816,23 +4803,23 @@ var ts; return traverse(body); function traverse(node) { switch (node.kind) { - case 210: + case 211: return visitor(node); - case 226: - case 198: - case 202: + case 227: + case 199: case 203: case 204: case 205: case 206: case 207: - case 211: + case 208: case 212: - case 248: - case 249: case 213: - case 215: - case 251: + case 249: + case 250: + case 214: + case 216: + case 252: return ts.forEachChild(node, traverse); } } @@ -4842,23 +4829,23 @@ var ts; return traverse(body); function traverse(node) { switch (node.kind) { - case 189: + case 190: visitor(node); var operand = node.expression; if (operand) { traverse(operand); } - case 223: - case 221: case 224: case 222: - case 220: - case 191: + case 225: + case 223: + case 221: + case 192: return; default: if (isFunctionLike(node)) { var name_5 = node.name; - if (name_5 && name_5.kind === 139) { + if (name_5 && name_5.kind === 140) { traverse(name_5.expression); return; } @@ -4873,14 +4860,14 @@ var ts; function isVariableLike(node) { if (node) { switch (node.kind) { - case 168: - case 254: - case 141: - case 252: - case 144: - case 143: + case 169: + case 255: + case 142: case 253: - case 217: + case 145: + case 144: + case 254: + case 218: return true; } } @@ -4888,11 +4875,11 @@ var ts; } ts.isVariableLike = isVariableLike; function isAccessor(node) { - return node && (node.kind === 148 || node.kind === 149); + return node && (node.kind === 149 || node.kind === 150); } ts.isAccessor = isAccessor; function isClassLike(node) { - return node && (node.kind === 220 || node.kind === 191); + return node && (node.kind === 221 || node.kind === 192); } ts.isClassLike = isClassLike; function isFunctionLike(node) { @@ -4901,32 +4888,32 @@ var ts; ts.isFunctionLike = isFunctionLike; function isFunctionLikeKind(kind) { switch (kind) { - case 147: - case 178: - case 219: - case 179: - case 146: - case 145: case 148: + case 179: + case 220: + case 180: + case 147: + case 146: case 149: case 150: case 151: case 152: - case 155: + case 153: case 156: + case 157: return true; } } ts.isFunctionLikeKind = isFunctionLikeKind; function introducesArgumentsExoticObject(node) { switch (node.kind) { - case 146: - case 145: case 147: + case 146: case 148: case 149: - case 219: - case 178: + case 150: + case 220: + case 179: return true; } return false; @@ -4934,24 +4921,24 @@ var ts; ts.introducesArgumentsExoticObject = introducesArgumentsExoticObject; function isIterationStatement(node, lookInLabeledStatements) { switch (node.kind) { - case 205: case 206: case 207: - case 203: + case 208: case 204: + case 205: return true; - case 213: + case 214: return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements); } return false; } ts.isIterationStatement = isIterationStatement; function isFunctionBlock(node) { - return node && node.kind === 198 && isFunctionLike(node.parent); + return node && node.kind === 199 && isFunctionLike(node.parent); } ts.isFunctionBlock = isFunctionBlock; function isObjectLiteralMethod(node) { - return node && node.kind === 146 && node.parent.kind === 170; + return node && node.kind === 147 && node.parent.kind === 171; } ts.isObjectLiteralMethod = isObjectLiteralMethod; function isIdentifierTypePredicate(predicate) { @@ -4971,6 +4958,15 @@ var ts; } } ts.getContainingFunction = getContainingFunction; + function getContainingFunctionOrModule(node) { + while (true) { + node = node.parent; + if (isFunctionLike(node) || node.kind === 225 || node.kind === 256) { + return node; + } + } + } + ts.getContainingFunctionOrModule = getContainingFunctionOrModule; function getContainingClass(node) { while (true) { node = node.parent; @@ -4987,39 +4983,39 @@ var ts; return undefined; } switch (node.kind) { - case 139: + case 140: if (isClassLike(node.parent.parent)) { return node; } node = node.parent; break; - case 142: - if (node.parent.kind === 141 && isClassElement(node.parent.parent)) { + case 143: + if (node.parent.kind === 142 && isClassElement(node.parent.parent)) { node = node.parent.parent; } else if (isClassElement(node.parent)) { node = node.parent; } break; - case 179: + case 180: if (!includeArrowFunctions) { continue; } - case 219: - case 178: - case 224: - case 144: - case 143: - case 146: + case 220: + case 179: + case 225: case 145: + case 144: case 147: + case 146: case 148: case 149: case 150: case 151: case 152: - case 223: - case 255: + case 153: + case 224: + case 256: return node; } } @@ -5032,25 +5028,25 @@ var ts; return node; } switch (node.kind) { - case 139: + case 140: node = node.parent; break; - case 219: - case 178: + case 220: case 179: + case 180: if (!stopOnFunctions) { continue; } - case 144: - case 143: - case 146: case 145: + case 144: case 147: + case 146: case 148: case 149: + case 150: return node; - case 142: - if (node.parent.kind === 141 && isClassElement(node.parent.parent)) { + case 143: + if (node.parent.kind === 142 && isClassElement(node.parent.parent)) { node = node.parent.parent; } else if (isClassElement(node.parent)) { @@ -5062,20 +5058,20 @@ var ts; } ts.getSuperContainer = getSuperContainer; function isSuperPropertyOrElementAccess(node) { - return (node.kind === 171 - || node.kind === 172) + return (node.kind === 172 + || node.kind === 173) && node.expression.kind === 95; } ts.isSuperPropertyOrElementAccess = isSuperPropertyOrElementAccess; function getEntityNameFromTypeNode(node) { if (node) { switch (node.kind) { - case 154: + case 155: return node.typeName; - case 193: + case 194: return node.expression; case 69: - case 138: + case 139: return node; } } @@ -5083,7 +5079,7 @@ var ts; } ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode; function getInvokedExpression(node) { - if (node.kind === 175) { + if (node.kind === 176) { return node.tag; } return node.expression; @@ -5091,21 +5087,21 @@ var ts; ts.getInvokedExpression = getInvokedExpression; function nodeCanBeDecorated(node) { switch (node.kind) { - case 220: + case 221: return true; - case 144: - return node.parent.kind === 220; - case 148: + case 145: + return node.parent.kind === 221; case 149: - case 146: + case 150: + case 147: return node.body !== undefined - && node.parent.kind === 220; - case 141: + && node.parent.kind === 221; + case 142: return node.parent.body !== undefined - && (node.parent.kind === 147 - || node.parent.kind === 146 - || node.parent.kind === 149) - && node.parent.parent.kind === 220; + && (node.parent.kind === 148 + || node.parent.kind === 147 + || node.parent.kind === 150) + && node.parent.parent.kind === 221; } return false; } @@ -5116,18 +5112,18 @@ var ts; } ts.nodeIsDecorated = nodeIsDecorated; function isPropertyAccessExpression(node) { - return node.kind === 171; + return node.kind === 172; } ts.isPropertyAccessExpression = isPropertyAccessExpression; function isElementAccessExpression(node) { - return node.kind === 172; + return node.kind === 173; } ts.isElementAccessExpression = isElementAccessExpression; function isJSXTagName(node) { var parent = node.parent; - if (parent.kind === 242 || - parent.kind === 241 || - parent.kind === 244) { + if (parent.kind === 243 || + parent.kind === 242 || + parent.kind === 245) { return parent.tagName === node; } return false; @@ -5135,48 +5131,49 @@ var ts; ts.isJSXTagName = isJSXTagName; function isExpression(node) { switch (node.kind) { + case 97: case 95: case 93: case 99: case 84: case 10: - case 169: case 170: case 171: case 172: case 173: case 174: case 175: - case 194: case 176: case 195: case 177: + case 196: case 178: - case 191: case 179: - case 182: + case 192: case 180: + case 183: case 181: - case 184: + case 182: case 185: case 186: case 187: - case 190: case 188: - case 11: - case 192: - case 240: - case 241: + case 191: case 189: - case 183: + case 11: + case 193: + case 241: + case 242: + case 190: + case 184: return true; - case 138: - while (node.parent.kind === 138) { + case 139: + while (node.parent.kind === 139) { node = node.parent; } - return node.parent.kind === 157 || isJSXTagName(node); + return node.parent.kind === 158 || isJSXTagName(node); case 69: - if (node.parent.kind === 157 || isJSXTagName(node)) { + if (node.parent.kind === 158 || isJSXTagName(node)) { return true; } case 8: @@ -5184,47 +5181,47 @@ var ts; case 97: var parent_2 = node.parent; switch (parent_2.kind) { - case 217: - case 141: + case 218: + case 142: + case 145: case 144: - case 143: - case 254: - case 252: - case 168: + case 255: + case 253: + case 169: return parent_2.initializer === node; - case 201: case 202: case 203: case 204: - case 210: + case 205: case 211: case 212: - case 248: - case 214: - case 212: + case 213: + case 249: + case 215: + case 213: return parent_2.expression === node; - case 205: + case 206: var forStatement = parent_2; - return (forStatement.initializer === node && forStatement.initializer.kind !== 218) || + return (forStatement.initializer === node && forStatement.initializer.kind !== 219) || forStatement.condition === node || forStatement.incrementor === node; - case 206: case 207: + case 208: var forInStatement = parent_2; - return (forInStatement.initializer === node && forInStatement.initializer.kind !== 218) || + return (forInStatement.initializer === node && forInStatement.initializer.kind !== 219) || forInStatement.expression === node; - case 176: - case 194: + case 177: + case 195: return node === parent_2.expression; - case 196: + case 197: return node === parent_2.expression; - case 139: + case 140: return node === parent_2.expression; - case 142: + case 143: + case 248: case 247: - case 246: return true; - case 193: + case 194: return parent_2.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent_2); default: if (isExpression(parent_2)) { @@ -5246,7 +5243,7 @@ var ts; } ts.isInstantiatedModule = isInstantiatedModule; function isExternalModuleImportEqualsDeclaration(node) { - return node.kind === 228 && node.moduleReference.kind === 239; + return node.kind === 229 && node.moduleReference.kind === 240; } ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration; function getExternalModuleImportEqualsDeclarationExpression(node) { @@ -5255,7 +5252,7 @@ var ts; } ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression; function isInternalModuleImportEqualsDeclaration(node) { - return node.kind === 228 && node.moduleReference.kind !== 239; + return node.kind === 229 && node.moduleReference.kind !== 240; } ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration; function isSourceFileJavaScript(file) { @@ -5267,22 +5264,26 @@ var ts; } ts.isInJavaScriptFile = isInJavaScriptFile; function isRequireCall(expression, checkArgumentIsStringLiteral) { - var isRequire = expression.kind === 173 && + var isRequire = expression.kind === 174 && expression.expression.kind === 69 && expression.expression.text === "require" && expression.arguments.length === 1; return isRequire && (!checkArgumentIsStringLiteral || expression.arguments[0].kind === 9); } ts.isRequireCall = isRequireCall; + function isSingleOrDoubleQuote(charCode) { + return charCode === 39 || charCode === 34; + } + ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; function getSpecialPropertyAssignmentKind(expression) { if (!isInJavaScriptFile(expression)) { return 0; } - if (expression.kind !== 186) { + if (expression.kind !== 187) { return 0; } var expr = expression; - if (expr.operatorToken.kind !== 56 || expr.left.kind !== 171) { + if (expr.operatorToken.kind !== 56 || expr.left.kind !== 172) { return 0; } var lhs = expr.left; @@ -5298,29 +5299,35 @@ var ts; else if (lhs.expression.kind === 97) { return 4; } - else if (lhs.expression.kind === 171) { + else if (lhs.expression.kind === 172) { var innerPropertyAccess = lhs.expression; - if (innerPropertyAccess.expression.kind === 69 && innerPropertyAccess.name.text === "prototype") { - return 3; + if (innerPropertyAccess.expression.kind === 69) { + var innerPropertyAccessIdentifier = innerPropertyAccess.expression; + if (innerPropertyAccessIdentifier.text === "module" && innerPropertyAccess.name.text === "exports") { + return 1; + } + if (innerPropertyAccess.name.text === "prototype") { + return 3; + } } } return 0; } ts.getSpecialPropertyAssignmentKind = getSpecialPropertyAssignmentKind; function getExternalModuleName(node) { - if (node.kind === 229) { + if (node.kind === 230) { return node.moduleSpecifier; } - if (node.kind === 228) { + if (node.kind === 229) { var reference = node.moduleReference; - if (reference.kind === 239) { + if (reference.kind === 240) { return reference.expression; } } - if (node.kind === 235) { + if (node.kind === 236) { return node.moduleSpecifier; } - if (node.kind === 224 && node.name.kind === 9) { + if (node.kind === 225 && node.name.kind === 9) { return node.name; } } @@ -5328,13 +5335,13 @@ var ts; function hasQuestionToken(node) { if (node) { switch (node.kind) { - case 141: + case 142: + case 147: case 146: - case 145: + case 254: case 253: - case 252: + case 145: case 144: - case 143: return node.questionToken !== undefined; } } @@ -5342,9 +5349,9 @@ var ts; } ts.hasQuestionToken = hasQuestionToken; function isJSDocConstructSignature(node) { - return node.kind === 268 && + return node.kind === 269 && node.parameters.length > 0 && - node.parameters[0].type.kind === 270; + node.parameters[0].type.kind === 271; } ts.isJSDocConstructSignature = isJSDocConstructSignature; function getJSDocTag(node, kind, checkParentVariableStatement) { @@ -5367,22 +5374,22 @@ var ts; return node.jsDocComment; } if (checkParentVariableStatement) { - var isInitializerOfVariableDeclarationInStatement = node.parent.kind === 217 && + var isInitializerOfVariableDeclarationInStatement = node.parent.kind === 218 && node.parent.initializer === node && - node.parent.parent.parent.kind === 199; + node.parent.parent.parent.kind === 200; var variableStatementNode = isInitializerOfVariableDeclarationInStatement ? node.parent.parent.parent : undefined; if (variableStatementNode) { return variableStatementNode.jsDocComment; } var parent_3 = node.parent; var isSourceOfAssignmentExpressionStatement = parent_3 && parent_3.parent && - parent_3.kind === 186 && + parent_3.kind === 187 && parent_3.operatorToken.kind === 56 && - parent_3.parent.kind === 201; + parent_3.parent.kind === 202; if (isSourceOfAssignmentExpressionStatement) { return parent_3.parent.jsDocComment; } - var isPropertyAssignmentExpression = parent_3 && parent_3.kind === 252; + var isPropertyAssignmentExpression = parent_3 && parent_3.kind === 253; if (isPropertyAssignmentExpression) { return parent_3.jsDocComment; } @@ -5390,15 +5397,15 @@ var ts; return undefined; } function getJSDocTypeTag(node) { - return getJSDocTag(node, 276, false); + return getJSDocTag(node, 277, false); } ts.getJSDocTypeTag = getJSDocTypeTag; function getJSDocReturnTag(node) { - return getJSDocTag(node, 275, true); + return getJSDocTag(node, 276, true); } ts.getJSDocReturnTag = getJSDocReturnTag; function getJSDocTemplateTag(node) { - return getJSDocTag(node, 277, false); + return getJSDocTag(node, 278, false); } ts.getJSDocTemplateTag = getJSDocTemplateTag; function getCorrespondingJSDocParameterTag(parameter) { @@ -5408,7 +5415,7 @@ var ts; if (jsDocComment) { for (var _i = 0, _a = jsDocComment.tags; _i < _a.length; _i++) { var tag = _a[_i]; - if (tag.kind === 274) { + if (tag.kind === 275) { var parameterTag = tag; var name_6 = parameterTag.preParameterName || parameterTag.postParameterName; if (name_6.text === parameterName) { @@ -5425,22 +5432,27 @@ var ts; return isRestParameter(ts.lastOrUndefined(s.parameters)); } ts.hasRestParameter = hasRestParameter; + function hasDeclaredRestParameter(s) { + return isDeclaredRestParam(ts.lastOrUndefined(s.parameters)); + } + ts.hasDeclaredRestParameter = hasDeclaredRestParameter; function isRestParameter(node) { - if (node) { - if (node.flags & 134217728) { - if (node.type && node.type.kind === 269) { - return true; - } - var paramTag = getCorrespondingJSDocParameterTag(node); - if (paramTag && paramTag.typeExpression) { - return paramTag.typeExpression.type.kind === 269; - } + if (node && (node.flags & 134217728)) { + if (node.type && node.type.kind === 270) { + return true; + } + var paramTag = getCorrespondingJSDocParameterTag(node); + if (paramTag && paramTag.typeExpression) { + return paramTag.typeExpression.type.kind === 270; } - return node.dotDotDotToken !== undefined; } - return false; + return isDeclaredRestParam(node); } ts.isRestParameter = isRestParameter; + function isDeclaredRestParam(node) { + return node && node.dotDotDotToken !== undefined; + } + ts.isDeclaredRestParam = isDeclaredRestParam; function isLiteralKind(kind) { return 8 <= kind && kind <= 11; } @@ -5454,9 +5466,31 @@ var ts; } ts.isTemplateLiteralKind = isTemplateLiteralKind; function isBindingPattern(node) { - return !!node && (node.kind === 167 || node.kind === 166); + return !!node && (node.kind === 168 || node.kind === 167); } ts.isBindingPattern = isBindingPattern; + function isAssignmentTarget(node) { + while (node.parent.kind === 178) { + node = node.parent; + } + while (true) { + var parent_4 = node.parent; + if (parent_4.kind === 170 || parent_4.kind === 191) { + node = parent_4; + continue; + } + if (parent_4.kind === 253 || parent_4.kind === 254) { + node = parent_4.parent; + continue; + } + return parent_4.kind === 187 && + parent_4.operatorToken.kind === 56 && + parent_4.left === node || + (parent_4.kind === 207 || parent_4.kind === 208) && + parent_4.initializer === node; + } + } + ts.isAssignmentTarget = isAssignmentTarget; function isNodeDescendentOf(node, ancestor) { while (node) { if (node === ancestor) @@ -5468,7 +5502,7 @@ var ts; ts.isNodeDescendentOf = isNodeDescendentOf; function isInAmbientContext(node) { while (node) { - if (node.flags & 2 || (node.kind === 255 && node.isDeclarationFile)) { + if (node.flags & 2 || (node.kind === 256 && node.isDeclarationFile)) { return true; } node = node.parent; @@ -5478,34 +5512,34 @@ var ts; ts.isInAmbientContext = isInAmbientContext; function isDeclaration(node) { switch (node.kind) { - case 179: - case 168: - case 220: - case 191: - case 147: - case 223: - case 254: - case 237: - case 219: - case 178: - case 148: - case 230: - case 228: - case 233: + case 180: + case 169: case 221: - case 146: - case 145: + case 192: + case 148: case 224: - case 231: - case 141: - case 252: - case 144: - case 143: + case 255: + case 238: + case 220: + case 179: case 149: - case 253: + case 231: + case 229: + case 234: case 222: - case 140: - case 217: + case 147: + case 146: + case 225: + case 232: + case 142: + case 253: + case 145: + case 144: + case 150: + case 254: + case 223: + case 141: + case 218: return true; } return false; @@ -5513,25 +5547,25 @@ var ts; ts.isDeclaration = isDeclaration; function isStatement(n) { switch (n.kind) { - case 209: - case 208: - case 216: - case 203: - case 201: - case 200: - case 206: - case 207: - case 205: - case 202: - case 213: case 210: - case 212: - case 214: - case 215: - case 199: + case 209: + case 217: case 204: + case 202: + case 201: + case 207: + case 208: + case 206: + case 203: + case 214: case 211: - case 234: + case 213: + case 215: + case 216: + case 200: + case 205: + case 212: + case 235: return true; default: return false; @@ -5540,13 +5574,13 @@ var ts; ts.isStatement = isStatement; function isClassElement(n) { switch (n.kind) { - case 147: - case 144: - case 146: case 148: - case 149: case 145: - case 152: + case 147: + case 149: + case 150: + case 146: + case 153: return true; default: return false; @@ -5558,7 +5592,7 @@ var ts; return false; } var parent = name.parent; - if (parent.kind === 233 || parent.kind === 237) { + if (parent.kind === 234 || parent.kind === 238) { if (parent.propertyName) { return true; } @@ -5569,44 +5603,50 @@ var ts; return false; } ts.isDeclarationName = isDeclarationName; + function isLiteralComputedPropertyDeclarationName(node) { + return (node.kind === 9 || node.kind === 8) && + node.parent.kind === 140 && + isDeclaration(node.parent.parent); + } + ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName; function isIdentifierName(node) { var parent = node.parent; switch (parent.kind) { - case 144: - case 143: - case 146: case 145: - case 148: + case 144: + case 147: + case 146: case 149: - case 254: - case 252: - case 171: + case 150: + case 255: + case 253: + case 172: return parent.name === node; - case 138: + case 139: if (parent.right === node) { - while (parent.kind === 138) { + while (parent.kind === 139) { parent = parent.parent; } - return parent.kind === 157; + return parent.kind === 158; } return false; - case 168: - case 233: + case 169: + case 234: return parent.propertyName === node; - case 237: + case 238: return true; } return false; } ts.isIdentifierName = isIdentifierName; function isAliasSymbolDeclaration(node) { - return node.kind === 228 || - node.kind === 227 || - node.kind === 230 && !!node.name || - node.kind === 231 || - node.kind === 233 || - node.kind === 237 || - node.kind === 234 && node.expression.kind === 69; + return node.kind === 229 || + node.kind === 228 || + node.kind === 231 && !!node.name || + node.kind === 232 || + node.kind === 234 || + node.kind === 238 || + node.kind === 235 && node.expression.kind === 69; } ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration; function getClassExtendsHeritageClauseElement(node) { @@ -5688,7 +5728,7 @@ var ts; } ts.getFileReferenceFromReferencePath = getFileReferenceFromReferencePath; function isKeyword(token) { - return 70 <= token && token <= 137; + return 70 <= token && token <= 138; } ts.isKeyword = isKeyword; function isTrivia(token) { @@ -5708,7 +5748,7 @@ var ts; } ts.hasDynamicName = hasDynamicName; function isDynamicName(name) { - return name.kind === 139 && + return name.kind === 140 && !isStringOrNumericLiteral(name.expression.kind) && !isWellKnownSymbolSyntactically(name.expression); } @@ -5721,12 +5761,15 @@ var ts; if (name.kind === 69 || name.kind === 9 || name.kind === 8) { return name.text; } - if (name.kind === 139) { + if (name.kind === 140) { var nameExpression = name.expression; if (isWellKnownSymbolSyntactically(nameExpression)) { var rightHandSideName = nameExpression.name.text; return getPropertyNameForKnownSymbolName(rightHandSideName); } + else if (nameExpression.kind === 9 || nameExpression.kind === 8) { + return nameExpression.text; + } } return undefined; } @@ -5750,7 +5793,7 @@ var ts; case 112: case 110: case 111: - case 127: + case 128: case 113: return true; } @@ -5759,18 +5802,18 @@ var ts; ts.isModifierKind = isModifierKind; function isParameterDeclaration(node) { var root = getRootDeclaration(node); - return root.kind === 141; + return root.kind === 142; } ts.isParameterDeclaration = isParameterDeclaration; function getRootDeclaration(node) { - while (node.kind === 168) { + while (node.kind === 169) { node = node.parent.parent; } return node; } ts.getRootDeclaration = getRootDeclaration; function nodeStartsNewLexicalEnvironment(n) { - return isFunctionLike(n) || n.kind === 224 || n.kind === 255; + return isFunctionLike(n) || n.kind === 225 || n.kind === 256; } ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment; function cloneNode(node, location, flags, parent) { @@ -5803,7 +5846,7 @@ var ts; } ts.cloneEntityName = cloneEntityName; function isQualifiedName(node) { - return node.kind === 138; + return node.kind === 139; } ts.isQualifiedName = isQualifiedName; function nodeIsSynthesized(node) { @@ -6136,14 +6179,19 @@ var ts; ts.getLineOfLocalPositionFromLineMap = getLineOfLocalPositionFromLineMap; function getFirstConstructorWithBody(node) { return ts.forEach(node.members, function (member) { - if (member.kind === 147 && nodeIsPresent(member.body)) { + if (member.kind === 148 && nodeIsPresent(member.body)) { return member; } }); } ts.getFirstConstructorWithBody = getFirstConstructorWithBody; function getSetAccessorTypeAnnotationNode(accessor) { - return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type; + if (accessor && accessor.parameters.length > 0) { + var hasThis = accessor.parameters.length === 2 && + accessor.parameters[0].name.kind === 69 && + accessor.parameters[0].name.originalKeywordKind === 97; + return accessor.parameters[hasThis ? 1 : 0].type; + } } ts.getSetAccessorTypeAnnotationNode = getSetAccessorTypeAnnotationNode; function getAllAccessorDeclarations(declarations, accessor) { @@ -6153,10 +6201,10 @@ var ts; var setAccessor; if (hasDynamicName(accessor)) { firstAccessor = accessor; - if (accessor.kind === 148) { + if (accessor.kind === 149) { getAccessor = accessor; } - else if (accessor.kind === 149) { + else if (accessor.kind === 150) { setAccessor = accessor; } else { @@ -6165,7 +6213,7 @@ var ts; } else { ts.forEach(declarations, function (member) { - if ((member.kind === 148 || member.kind === 149) + if ((member.kind === 149 || member.kind === 150) && (member.flags & 32) === (accessor.flags & 32)) { var memberName = getPropertyNameForPropertyNameNode(member.name); var accessorName = getPropertyNameForPropertyNameNode(accessor.name); @@ -6176,10 +6224,10 @@ var ts; else if (!secondAccessor) { secondAccessor = member; } - if (member.kind === 148 && !getAccessor) { + if (member.kind === 149 && !getAccessor) { getAccessor = member; } - if (member.kind === 149 && !setAccessor) { + if (member.kind === 150 && !setAccessor) { setAccessor = member; } } @@ -6338,7 +6386,7 @@ var ts; case 74: return 2048; case 77: return 512; case 118: return 256; - case 127: return 64; + case 128: return 64; } return 0; } @@ -6346,25 +6394,25 @@ var ts; function isLeftHandSideExpression(expr) { if (expr) { switch (expr.kind) { - case 171: case 172: - case 174: case 173: - case 195: - case 240: - case 241: case 175: - case 169: - case 177: + case 174: + case 196: + case 241: + case 242: + case 176: case 170: - case 191: case 178: + case 171: + case 192: + case 179: case 69: case 10: case 8: case 9: case 11: - case 188: + case 189: case 84: case 93: case 97: @@ -6381,7 +6429,7 @@ var ts; } ts.isAssignmentOperator = isAssignmentOperator; function isExpressionWithTypeArgumentsInClassExtendsClause(node) { - return node.kind === 193 && + return node.kind === 194 && node.parent.token === 83 && isClassLike(node.parent.parent); } @@ -6402,16 +6450,16 @@ var ts; } } function isRightSideOfQualifiedNameOrPropertyAccess(node) { - return (node.parent.kind === 138 && node.parent.right === node) || - (node.parent.kind === 171 && node.parent.name === node); + return (node.parent.kind === 139 && node.parent.right === node) || + (node.parent.kind === 172 && node.parent.name === node); } ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess; function isEmptyObjectLiteralOrArrayLiteral(expression) { var kind = expression.kind; - if (kind === 170) { + if (kind === 171) { return expression.properties.length === 0; } - if (kind === 169) { + if (kind === 170) { return expression.elements.length === 0; } return false; @@ -6659,9 +6707,9 @@ var ts; } ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions; function getTypeParameterOwner(d) { - if (d && d.kind === 140) { + if (d && d.kind === 141) { for (var current = d; current; current = current.parent) { - if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 221) { + if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 222) { return current; } } @@ -6669,7 +6717,7 @@ var ts; } ts.getTypeParameterOwner = getTypeParameterOwner; function isParameterPropertyDeclaration(node) { - return node.flags & 28 && node.parent.kind === 147 && ts.isClassLike(node.parent.parent); + return node.flags & 92 && node.parent.kind === 148 && ts.isClassLike(node.parent.parent); } ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration; function startsWith(str, prefix) { @@ -6688,7 +6736,7 @@ var ts; var NodeConstructor; var SourceFileConstructor; function createNode(kind, pos, end) { - if (kind === 255) { + if (kind === 256) { return new (SourceFileConstructor || (SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor()))(kind, pos, end); } else { @@ -6724,26 +6772,26 @@ var ts; var visitNodes = cbNodeArray ? visitNodeArray : visitEachNode; var cbNodes = cbNodeArray || cbNode; switch (node.kind) { - case 138: + case 139: return visitNode(cbNode, node.left) || visitNode(cbNode, node.right); - case 140: + case 141: return visitNode(cbNode, node.name) || visitNode(cbNode, node.constraint) || visitNode(cbNode, node.expression); - case 253: + case 254: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.equalsToken) || visitNode(cbNode, node.objectAssignmentInitializer); - case 141: + case 142: + case 145: case 144: - case 143: - case 252: - case 217: - case 168: + case 253: + case 218: + case 169: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.propertyName) || @@ -6752,24 +6800,24 @@ var ts; visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.type) || visitNode(cbNode, node.initializer); - case 155: case 156: - case 150: + case 157: case 151: case 152: + case 153: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNodes(cbNodes, node.typeParameters) || visitNodes(cbNodes, node.parameters) || visitNode(cbNode, node.type); - case 146: - case 145: case 147: + case 146: case 148: case 149: - case 178: - case 219: + case 150: case 179: + case 220: + case 180: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.asteriskToken) || @@ -6780,162 +6828,155 @@ var ts; visitNode(cbNode, node.type) || visitNode(cbNode, node.equalsGreaterThanToken) || visitNode(cbNode, node.body); - case 154: + case 155: return visitNode(cbNode, node.typeName) || visitNodes(cbNodes, node.typeArguments); - case 153: + case 154: return visitNode(cbNode, node.parameterName) || visitNode(cbNode, node.type); - case 157: - return visitNode(cbNode, node.exprName); case 158: - return visitNodes(cbNodes, node.members); + return visitNode(cbNode, node.exprName); case 159: - return visitNode(cbNode, node.elementType); + return visitNodes(cbNodes, node.members); case 160: - return visitNodes(cbNodes, node.elementTypes); + return visitNode(cbNode, node.elementType); case 161: + return visitNodes(cbNodes, node.elementTypes); case 162: - return visitNodes(cbNodes, node.types); case 163: + return visitNodes(cbNodes, node.types); + case 164: return visitNode(cbNode, node.type); - case 166: case 167: - return visitNodes(cbNodes, node.elements); - case 169: + case 168: return visitNodes(cbNodes, node.elements); case 170: - return visitNodes(cbNodes, node.properties); + return visitNodes(cbNodes, node.elements); case 171: + return visitNodes(cbNodes, node.properties); + case 172: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.dotToken) || visitNode(cbNode, node.name); - case 172: + case 173: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.argumentExpression); - case 173: case 174: + case 175: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.typeArguments) || visitNodes(cbNodes, node.arguments); - case 175: + case 176: return visitNode(cbNode, node.tag) || visitNode(cbNode, node.template); - case 176: + case 177: return visitNode(cbNode, node.type) || visitNode(cbNode, node.expression); - case 177: - return visitNode(cbNode, node.expression); - case 180: + case 178: return visitNode(cbNode, node.expression); case 181: return visitNode(cbNode, node.expression); case 182: return visitNode(cbNode, node.expression); - case 184: - return visitNode(cbNode, node.operand); - case 189: - return visitNode(cbNode, node.asteriskToken) || - visitNode(cbNode, node.expression); case 183: return visitNode(cbNode, node.expression); case 185: return visitNode(cbNode, node.operand); + case 190: + return visitNode(cbNode, node.asteriskToken) || + visitNode(cbNode, node.expression); + case 184: + return visitNode(cbNode, node.expression); case 186: + return visitNode(cbNode, node.operand); + case 187: return visitNode(cbNode, node.left) || visitNode(cbNode, node.operatorToken) || visitNode(cbNode, node.right); - case 194: + case 195: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.type); - case 195: + case 196: return visitNode(cbNode, node.expression); - case 187: + case 188: return visitNode(cbNode, node.condition) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.whenTrue) || visitNode(cbNode, node.colonToken) || visitNode(cbNode, node.whenFalse); - case 190: + case 191: return visitNode(cbNode, node.expression); - case 198: - case 225: + case 199: + case 226: return visitNodes(cbNodes, node.statements); - case 255: + case 256: return visitNodes(cbNodes, node.statements) || visitNode(cbNode, node.endOfFileToken); - case 199: + case 200: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.declarationList); - case 218: + case 219: return visitNodes(cbNodes, node.declarations); - case 201: - return visitNode(cbNode, node.expression); case 202: + return visitNode(cbNode, node.expression); + case 203: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.thenStatement) || visitNode(cbNode, node.elseStatement); - case 203: + case 204: return visitNode(cbNode, node.statement) || visitNode(cbNode, node.expression); - case 204: - return visitNode(cbNode, node.expression) || - visitNode(cbNode, node.statement); case 205: - return visitNode(cbNode, node.initializer) || - visitNode(cbNode, node.condition) || - visitNode(cbNode, node.incrementor) || + return visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); case 206: return visitNode(cbNode, node.initializer) || - visitNode(cbNode, node.expression) || + visitNode(cbNode, node.condition) || + visitNode(cbNode, node.incrementor) || visitNode(cbNode, node.statement); case 207: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); case 208: - case 209: - return visitNode(cbNode, node.label); - case 210: - return visitNode(cbNode, node.expression); - case 211: - return visitNode(cbNode, node.expression) || + return visitNode(cbNode, node.initializer) || + visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); + case 209: + case 210: + return visitNode(cbNode, node.label); + case 211: + return visitNode(cbNode, node.expression); case 212: + return visitNode(cbNode, node.expression) || + visitNode(cbNode, node.statement); + case 213: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.caseBlock); - case 226: + case 227: return visitNodes(cbNodes, node.clauses); - case 248: + case 249: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.statements); - case 249: + case 250: return visitNodes(cbNodes, node.statements); - case 213: + case 214: return visitNode(cbNode, node.label) || visitNode(cbNode, node.statement); - case 214: - return visitNode(cbNode, node.expression); case 215: + return visitNode(cbNode, node.expression); + case 216: return visitNode(cbNode, node.tryBlock) || visitNode(cbNode, node.catchClause) || visitNode(cbNode, node.finallyBlock); - case 251: + case 252: return visitNode(cbNode, node.variableDeclaration) || visitNode(cbNode, node.block); - case 142: + case 143: return visitNode(cbNode, node.expression); - case 220: - case 191: - return visitNodes(cbNodes, node.decorators) || - visitNodes(cbNodes, node.modifiers) || - visitNode(cbNode, node.name) || - visitNodes(cbNodes, node.typeParameters) || - visitNodes(cbNodes, node.heritageClauses) || - visitNodes(cbNodes, node.members); case 221: + case 192: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || @@ -6947,127 +6988,134 @@ var ts; visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeParameters) || - visitNode(cbNode, node.type); + visitNodes(cbNodes, node.heritageClauses) || + visitNodes(cbNodes, node.members); case 223: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || - visitNodes(cbNodes, node.members); - case 254: - return visitNode(cbNode, node.name) || - visitNode(cbNode, node.initializer); + visitNodes(cbNodes, node.typeParameters) || + visitNode(cbNode, node.type); case 224: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.name) || + visitNodes(cbNodes, node.members); + case 255: + return visitNode(cbNode, node.name) || + visitNode(cbNode, node.initializer); + case 225: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.body); - case 228: + case 229: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.moduleReference); - case 229: + case 230: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.importClause) || visitNode(cbNode, node.moduleSpecifier); - case 230: + case 231: return visitNode(cbNode, node.name) || visitNode(cbNode, node.namedBindings); - case 227: - return visitNode(cbNode, node.name); - case 231: + case 228: return visitNode(cbNode, node.name); case 232: - case 236: + return visitNode(cbNode, node.name); + case 233: + case 237: return visitNodes(cbNodes, node.elements); - case 235: + case 236: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.exportClause) || visitNode(cbNode, node.moduleSpecifier); - case 233: - case 237: + case 234: + case 238: return visitNode(cbNode, node.propertyName) || visitNode(cbNode, node.name); - case 234: + case 235: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.expression); - case 188: + case 189: return visitNode(cbNode, node.head) || visitNodes(cbNodes, node.templateSpans); - case 196: + case 197: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal); - case 139: + case 140: return visitNode(cbNode, node.expression); - case 250: + case 251: return visitNodes(cbNodes, node.types); - case 193: + case 194: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.typeArguments); - case 239: - return visitNode(cbNode, node.expression); - case 238: - return visitNodes(cbNodes, node.decorators); case 240: + return visitNode(cbNode, node.expression); + case 239: + return visitNodes(cbNodes, node.decorators); + case 241: return visitNode(cbNode, node.openingElement) || visitNodes(cbNodes, node.children) || visitNode(cbNode, node.closingElement); - case 241: case 242: + case 243: return visitNode(cbNode, node.tagName) || visitNodes(cbNodes, node.attributes); - case 245: + case 246: return visitNode(cbNode, node.name) || visitNode(cbNode, node.initializer); - case 246: - return visitNode(cbNode, node.expression); case 247: return visitNode(cbNode, node.expression); - case 244: + case 248: + return visitNode(cbNode, node.expression); + case 245: return visitNode(cbNode, node.tagName); - case 256: + case 257: return visitNode(cbNode, node.type); - case 260: - return visitNodes(cbNodes, node.types); case 261: return visitNodes(cbNodes, node.types); - case 259: + case 262: + return visitNodes(cbNodes, node.types); + case 260: return visitNode(cbNode, node.elementType); + case 264: + return visitNode(cbNode, node.type); case 263: return visitNode(cbNode, node.type); - case 262: - return visitNode(cbNode, node.type); - case 264: + case 265: return visitNodes(cbNodes, node.members); - case 266: + case 267: return visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeArguments); - case 267: - return visitNode(cbNode, node.type); case 268: + return visitNode(cbNode, node.type); + case 269: return visitNodes(cbNodes, node.parameters) || visitNode(cbNode, node.type); - case 269: - return visitNode(cbNode, node.type); case 270: return visitNode(cbNode, node.type); case 271: return visitNode(cbNode, node.type); - case 265: + case 272: + return visitNode(cbNode, node.type); + case 266: return visitNode(cbNode, node.name) || visitNode(cbNode, node.type); - case 272: + case 273: return visitNodes(cbNodes, node.tags); - case 274: + case 275: return visitNode(cbNode, node.preParameterName) || visitNode(cbNode, node.typeExpression) || visitNode(cbNode, node.postParameterName); - case 275: - return visitNode(cbNode, node.typeExpression); case 276: return visitNode(cbNode, node.typeExpression); case 277: + return visitNode(cbNode, node.typeExpression); + case 278: return visitNodes(cbNodes, node.typeParameters); } } @@ -7199,7 +7247,7 @@ var ts; } Parser.fixupParentReferences = fixupParentReferences; function createSourceFile(fileName, languageVersion, scriptKind) { - var sourceFile = new SourceFileConstructor(255, 0, sourceText.length); + var sourceFile = new SourceFileConstructor(256, 0, sourceText.length); nodeCount++; sourceFile.text = sourceText; sourceFile.bindDiagnostics = []; @@ -7491,7 +7539,7 @@ var ts; return token === 9 || token === 8 || ts.tokenIsIdentifierOrKeyword(token); } function parseComputedPropertyName() { - var node = createNode(139); + var node = createNode(140); parseExpected(19); node.expression = allowInAnd(parseExpression); parseExpected(20); @@ -7790,14 +7838,14 @@ var ts; function isReusableClassMember(node) { if (node) { switch (node.kind) { - case 147: - case 152: case 148: + case 153: case 149: - case 144: - case 197: + case 150: + case 145: + case 198: return true; - case 146: + case 147: var methodDeclaration = node; var nameIsConstructor = methodDeclaration.name.kind === 69 && methodDeclaration.name.originalKeywordKind === 121; @@ -7809,8 +7857,8 @@ var ts; function isReusableSwitchClause(node) { if (node) { switch (node.kind) { - case 248: case 249: + case 250: return true; } } @@ -7819,65 +7867,65 @@ var ts; function isReusableStatement(node) { if (node) { switch (node.kind) { - case 219: + case 220: + case 200: case 199: - case 198: + case 203: case 202: - case 201: - case 214: + case 215: + case 211: + case 213: case 210: - case 212: case 209: + case 207: case 208: case 206: - case 207: case 205: - case 204: - case 211: - case 200: - case 215: - case 213: - case 203: + case 212: + case 201: case 216: + case 214: + case 204: + case 217: + case 230: case 229: - case 228: + case 236: case 235: - case 234: - case 224: - case 220: + case 225: case 221: - case 223: case 222: + case 224: + case 223: return true; } } return false; } function isReusableEnumMember(node) { - return node.kind === 254; + return node.kind === 255; } function isReusableTypeMember(node) { if (node) { switch (node.kind) { - case 151: - case 145: case 152: - case 143: - case 150: + case 146: + case 153: + case 144: + case 151: return true; } } return false; } function isReusableVariableDeclaration(node) { - if (node.kind !== 217) { + if (node.kind !== 218) { return false; } var variableDeclarator = node; return variableDeclarator.initializer === undefined; } function isReusableParameter(node) { - if (node.kind !== 141) { + if (node.kind !== 142) { return false; } var parameter = node; @@ -7977,7 +8025,7 @@ var ts; function parseEntityName(allowReservedWords, diagnosticMessage) { var entity = parseIdentifier(diagnosticMessage); while (parseOptional(21)) { - var node = createNode(138, entity.pos); + var node = createNode(139, entity.pos); node.left = entity; node.right = parseRightSideOfDot(allowReservedWords); entity = finishNode(node); @@ -7994,7 +8042,7 @@ var ts; return allowIdentifierNames ? parseIdentifierName() : parseIdentifier(); } function parseTemplateExpression() { - var template = createNode(188); + var template = createNode(189); template.head = parseTemplateLiteralFragment(); ts.Debug.assert(template.head.kind === 12, "Template head has wrong token kind"); var templateSpans = []; @@ -8007,7 +8055,7 @@ var ts; return finishNode(template); } function parseTemplateSpan() { - var span = createNode(196); + var span = createNode(197); span.expression = allowInAnd(parseExpression); var literal; if (token === 16) { @@ -8021,7 +8069,7 @@ var ts; return finishNode(span); } function parseStringLiteralTypeNode() { - return parseLiteralLikeNode(165, true); + return parseLiteralLikeNode(166, true); } function parseLiteralNode(internName) { return parseLiteralLikeNode(token, internName); @@ -8051,7 +8099,7 @@ var ts; } function parseTypeReference() { var typeName = parseEntityName(false, ts.Diagnostics.Type_expected); - var node = createNode(154, typeName.pos); + var node = createNode(155, typeName.pos); node.typeName = typeName; if (!scanner.hasPrecedingLineBreak() && token === 25) { node.typeArguments = parseBracketedList(18, parseType, 25, 27); @@ -8060,24 +8108,24 @@ var ts; } function parseThisTypePredicate(lhs) { nextToken(); - var node = createNode(153, lhs.pos); + var node = createNode(154, lhs.pos); node.parameterName = lhs; node.type = parseType(); return finishNode(node); } function parseThisTypeNode() { - var node = createNode(164); + var node = createNode(165); nextToken(); return finishNode(node); } function parseTypeQuery() { - var node = createNode(157); + var node = createNode(158); parseExpected(101); node.exprName = parseEntityName(true); return finishNode(node); } function parseTypeParameter() { - var node = createNode(140); + var node = createNode(141); node.name = parseIdentifier(); if (parseOptional(83)) { if (isStartOfType() || !isStartOfExpression()) { @@ -8110,7 +8158,7 @@ var ts; } } function parseParameter() { - var node = createNode(141); + var node = createNode(142); if (token === 97) { node.name = createIdentifier(true, undefined); node.type = parseParameterType(); @@ -8170,7 +8218,7 @@ var ts; } function parseSignatureMember(kind) { var node = createNode(kind); - if (kind === 151) { + if (kind === 152) { parseExpected(92); } fillSignature(54, false, false, false, node); @@ -8210,7 +8258,7 @@ var ts; return token === 54 || token === 24 || token === 20; } function parseIndexSignatureDeclaration(fullStart, decorators, modifiers) { - var node = createNode(152, fullStart); + var node = createNode(153, fullStart); node.decorators = decorators; setModifiers(node, modifiers); node.parameters = parseBracketedList(16, parseParameter, 19, 20); @@ -8222,7 +8270,7 @@ var ts; var name = parsePropertyName(); var questionToken = parseOptionalToken(53); if (token === 17 || token === 25) { - var method = createNode(145, fullStart); + var method = createNode(146, fullStart); setModifiers(method, modifiers); method.name = name; method.questionToken = questionToken; @@ -8231,7 +8279,7 @@ var ts; return finishNode(method); } else { - var property = createNode(143, fullStart); + var property = createNode(144, fullStart); setModifiers(property, modifiers); property.name = name; property.questionToken = questionToken; @@ -8270,10 +8318,10 @@ var ts; } function parseTypeMember() { if (token === 17 || token === 25) { - return parseSignatureMember(150); + return parseSignatureMember(151); } if (token === 92 && lookAhead(isStartOfConstructSignature)) { - return parseSignatureMember(151); + return parseSignatureMember(152); } var fullStart = getNodePos(); var modifiers = parseModifiers(); @@ -8287,7 +8335,7 @@ var ts; return token === 17 || token === 25; } function parseTypeLiteral() { - var node = createNode(158); + var node = createNode(159); node.members = parseObjectTypeMembers(); return finishNode(node); } @@ -8303,12 +8351,12 @@ var ts; return members; } function parseTupleType() { - var node = createNode(160); + var node = createNode(161); node.elementTypes = parseBracketedList(19, parseType, 19, 20); return finishNode(node); } function parseParenthesizedType() { - var node = createNode(163); + var node = createNode(164); parseExpected(17); node.type = parseType(); parseExpected(18); @@ -8316,7 +8364,7 @@ var ts; } function parseFunctionOrConstructorType(kind) { var node = createNode(kind); - if (kind === 156) { + if (kind === 157) { parseExpected(92); } fillSignature(34, false, false, false, node); @@ -8329,11 +8377,12 @@ var ts; function parseNonArrayType() { switch (token) { case 117: - case 131: - case 129: - case 120: case 132: - case 134: + case 130: + case 120: + case 133: + case 135: + case 127: var node = tryParse(parseKeywordAndNoDot); return node || parseTypeReference(); case 9: @@ -8365,15 +8414,16 @@ var ts; function isStartOfType() { switch (token) { case 117: - case 131: - case 129: - case 120: case 132: + case 130: + case 120: + case 133: case 103: - case 134: + case 135: case 93: case 97: case 101: + case 127: case 15: case 19: case 25: @@ -8394,7 +8444,7 @@ var ts; var type = parseNonArrayType(); while (!scanner.hasPrecedingLineBreak() && parseOptional(19)) { parseExpected(20); - var node = createNode(159, type.pos); + var node = createNode(160, type.pos); node.elementType = type; type = finishNode(node); } @@ -8416,10 +8466,10 @@ var ts; return type; } function parseIntersectionTypeOrHigher() { - return parseUnionOrIntersectionType(162, parseArrayTypeOrHigher, 46); + return parseUnionOrIntersectionType(163, parseArrayTypeOrHigher, 46); } function parseUnionTypeOrHigher() { - return parseUnionOrIntersectionType(161, parseIntersectionTypeOrHigher, 47); + return parseUnionOrIntersectionType(162, parseIntersectionTypeOrHigher, 47); } function isStartOfFunctionType() { if (token === 25) { @@ -8465,7 +8515,7 @@ var ts; var typePredicateVariable = isIdentifier() && tryParse(parseTypePredicatePrefix); var type = parseType(); if (typePredicateVariable) { - var node = createNode(153, typePredicateVariable.pos); + var node = createNode(154, typePredicateVariable.pos); node.parameterName = typePredicateVariable; node.type = type; return finishNode(node); @@ -8486,10 +8536,10 @@ var ts; } function parseTypeWorker() { if (isStartOfFunctionType()) { - return parseFunctionOrConstructorType(155); + return parseFunctionOrConstructorType(156); } if (token === 92) { - return parseFunctionOrConstructorType(156); + return parseFunctionOrConstructorType(157); } return parseUnionTypeOrHigher(); } @@ -8581,7 +8631,7 @@ var ts; if (isYieldExpression()) { return parseYieldExpression(); } - var arrowExpression = tryParseParenthesizedArrowFunctionExpression(); + var arrowExpression = tryParseParenthesizedArrowFunctionExpression() || tryParseAsyncSimpleArrowFunctionExpression(); if (arrowExpression) { return arrowExpression; } @@ -8608,7 +8658,7 @@ var ts; return !scanner.hasPrecedingLineBreak() && isIdentifier(); } function parseYieldExpression() { - var node = createNode(189); + var node = createNode(190); nextToken(); if (!scanner.hasPrecedingLineBreak() && (token === 37 || isStartOfExpression())) { @@ -8620,17 +8670,24 @@ var ts; return finishNode(node); } } - function parseSimpleArrowFunctionExpression(identifier) { + function parseSimpleArrowFunctionExpression(identifier, asyncModifier) { ts.Debug.assert(token === 34, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); - var node = createNode(179, identifier.pos); - var parameter = createNode(141, identifier.pos); + var node; + if (asyncModifier) { + node = createNode(180, asyncModifier.pos); + setModifiers(node, asyncModifier); + } + else { + node = createNode(180, identifier.pos); + } + var parameter = createNode(142, identifier.pos); parameter.name = identifier; finishNode(parameter); node.parameters = [parameter]; node.parameters.pos = parameter.pos; node.parameters.end = parameter.end; node.equalsGreaterThanToken = parseExpectedToken(34, false, ts.Diagnostics._0_expected, "=>"); - node.body = parseArrowFunctionExpressionBody(false); + node.body = parseArrowFunctionExpressionBody(!!asyncModifier); return finishNode(node); } function tryParseParenthesizedArrowFunctionExpression() { @@ -8733,8 +8790,32 @@ var ts; function parsePossibleParenthesizedArrowFunctionExpressionHead() { return parseParenthesizedArrowFunctionExpressionHead(false); } + function tryParseAsyncSimpleArrowFunctionExpression() { + if (token === 118) { + var isUnParenthesizedAsyncArrowFunction = lookAhead(isUnParenthesizedAsyncArrowFunctionWorker); + if (isUnParenthesizedAsyncArrowFunction === 1) { + var asyncModifier = parseModifiersForArrowFunction(); + var expr = parseBinaryExpressionOrHigher(0); + return parseSimpleArrowFunctionExpression(expr, asyncModifier); + } + } + return undefined; + } + function isUnParenthesizedAsyncArrowFunctionWorker() { + if (token === 118) { + nextToken(); + if (scanner.hasPrecedingLineBreak() || token === 34) { + return 0; + } + var expr = parseBinaryExpressionOrHigher(0); + if (!scanner.hasPrecedingLineBreak() && expr.kind === 69 && token === 34) { + return 1; + } + } + return 0; + } function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) { - var node = createNode(179); + var node = createNode(180); setModifiers(node, parseModifiersForArrowFunction()); var isAsync = !!(node.flags & 256); fillSignature(54, false, isAsync, !allowAmbiguity, node); @@ -8766,7 +8847,7 @@ var ts; if (!questionToken) { return leftOperand; } - var node = createNode(187, leftOperand.pos); + var node = createNode(188, leftOperand.pos); node.condition = leftOperand; node.questionToken = questionToken; node.whenTrue = doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher); @@ -8779,7 +8860,7 @@ var ts; return parseBinaryExpressionRest(precedence, leftOperand); } function isInOrOfKeyword(t) { - return t === 90 || t === 137; + return t === 90 || t === 138; } function parseBinaryExpressionRest(precedence, leftOperand) { while (true) { @@ -8857,43 +8938,43 @@ var ts; return -1; } function makeBinaryExpression(left, operatorToken, right) { - var node = createNode(186, left.pos); + var node = createNode(187, left.pos); node.left = left; node.operatorToken = operatorToken; node.right = right; return finishNode(node); } function makeAsExpression(left, right) { - var node = createNode(194, left.pos); + var node = createNode(195, left.pos); node.expression = left; node.type = right; return finishNode(node); } function parsePrefixUnaryExpression() { - var node = createNode(184); + var node = createNode(185); node.operator = token; nextToken(); node.operand = parseSimpleUnaryExpression(); return finishNode(node); } function parseDeleteExpression() { - var node = createNode(180); - nextToken(); - node.expression = parseSimpleUnaryExpression(); - return finishNode(node); - } - function parseTypeOfExpression() { var node = createNode(181); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } - function parseVoidExpression() { + function parseTypeOfExpression() { var node = createNode(182); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } + function parseVoidExpression() { + var node = createNode(183); + nextToken(); + node.expression = parseSimpleUnaryExpression(); + return finishNode(node); + } function isAwaitExpression() { if (token === 119) { if (inAwaitContext()) { @@ -8904,7 +8985,7 @@ var ts; return false; } function parseAwaitExpression() { - var node = createNode(183); + var node = createNode(184); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); @@ -8923,7 +9004,7 @@ var ts; var simpleUnaryExpression = parseSimpleUnaryExpression(); if (token === 38) { var start = ts.skipTrivia(sourceText, simpleUnaryExpression.pos); - if (simpleUnaryExpression.kind === 176) { + if (simpleUnaryExpression.kind === 177) { 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 { @@ -8971,7 +9052,7 @@ var ts; } function parseIncrementExpression() { if (token === 41 || token === 42) { - var node = createNode(184); + var node = createNode(185); node.operator = token; nextToken(); node.operand = parseLeftHandSideExpressionOrHigher(); @@ -8983,7 +9064,7 @@ var ts; var expression = parseLeftHandSideExpressionOrHigher(); ts.Debug.assert(ts.isLeftHandSideExpression(expression)); if ((token === 41 || token === 42) && !scanner.hasPrecedingLineBreak()) { - var node = createNode(185, expression.pos); + var node = createNode(186, expression.pos); node.operand = expression; node.operator = token; nextToken(); @@ -9006,7 +9087,7 @@ var ts; if (token === 17 || token === 21 || token === 19) { return expression; } - var node = createNode(171, expression.pos); + var node = createNode(172, expression.pos); node.expression = expression; node.dotToken = parseExpectedToken(21, false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); node.name = parseRightSideOfDot(true); @@ -9025,8 +9106,8 @@ var ts; function parseJsxElementOrSelfClosingElement(inExpressionContext) { var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext); var result; - if (opening.kind === 242) { - var node = createNode(240, opening.pos); + if (opening.kind === 243) { + var node = createNode(241, opening.pos); node.openingElement = opening; node.children = parseJsxChildren(node.openingElement.tagName); node.closingElement = parseJsxClosingElement(inExpressionContext); @@ -9036,14 +9117,14 @@ var ts; result = finishNode(node); } else { - ts.Debug.assert(opening.kind === 241); + ts.Debug.assert(opening.kind === 242); result = opening; } if (inExpressionContext && token === 25) { var invalidElement = tryParse(function () { return parseJsxElementOrSelfClosingElement(true); }); if (invalidElement) { parseErrorAtCurrentToken(ts.Diagnostics.JSX_expressions_must_have_one_parent_element); - var badNode = createNode(186, result.pos); + var badNode = createNode(187, result.pos); badNode.end = invalidElement.end; badNode.left = result; badNode.right = invalidElement; @@ -9055,13 +9136,13 @@ var ts; return result; } function parseJsxText() { - var node = createNode(243, scanner.getStartPos()); + var node = createNode(244, scanner.getStartPos()); token = scanner.scanJsxToken(); return finishNode(node); } function parseJsxChild() { switch (token) { - case 243: + case 244: return parseJsxText(); case 15: return parseJsxExpression(false); @@ -9097,7 +9178,7 @@ var ts; var attributes = parseList(13, parseJsxAttribute); var node; if (token === 27) { - node = createNode(242, fullStart); + node = createNode(243, fullStart); scanJsxText(); } else { @@ -9109,7 +9190,7 @@ var ts; parseExpected(27, undefined, false); scanJsxText(); } - node = createNode(241, fullStart); + node = createNode(242, fullStart); } node.tagName = tagName; node.attributes = attributes; @@ -9120,7 +9201,7 @@ var ts; var elementName = parseIdentifierName(); while (parseOptional(21)) { scanJsxIdentifier(); - var node = createNode(138, elementName.pos); + var node = createNode(139, elementName.pos); node.left = elementName; node.right = parseIdentifierName(); elementName = finishNode(node); @@ -9128,7 +9209,7 @@ var ts; return elementName; } function parseJsxExpression(inExpressionContext) { - var node = createNode(247); + var node = createNode(248); parseExpected(15); if (token !== 16) { node.expression = parseAssignmentExpressionOrHigher(); @@ -9147,7 +9228,7 @@ var ts; return parseJsxSpreadAttribute(); } scanJsxIdentifier(); - var node = createNode(245); + var node = createNode(246); node.name = parseIdentifierName(); if (parseOptional(56)) { switch (token) { @@ -9162,7 +9243,7 @@ var ts; return finishNode(node); } function parseJsxSpreadAttribute() { - var node = createNode(246); + var node = createNode(247); parseExpected(15); parseExpected(22); node.expression = parseExpression(); @@ -9170,7 +9251,7 @@ var ts; return finishNode(node); } function parseJsxClosingElement(inExpressionContext) { - var node = createNode(244); + var node = createNode(245); parseExpected(26); node.tagName = parseJsxElementName(); if (inExpressionContext) { @@ -9183,7 +9264,7 @@ var ts; return finishNode(node); } function parseTypeAssertion() { - var node = createNode(176); + var node = createNode(177); parseExpected(25); node.type = parseType(); parseExpected(27); @@ -9194,7 +9275,7 @@ var ts; while (true) { var dotToken = parseOptionalToken(21); if (dotToken) { - var propertyAccess = createNode(171, expression.pos); + var propertyAccess = createNode(172, expression.pos); propertyAccess.expression = expression; propertyAccess.dotToken = dotToken; propertyAccess.name = parseRightSideOfDot(true); @@ -9203,13 +9284,13 @@ var ts; } if (token === 49 && !scanner.hasPrecedingLineBreak()) { nextToken(); - var nonNullExpression = createNode(195, expression.pos); + var nonNullExpression = createNode(196, expression.pos); nonNullExpression.expression = expression; expression = finishNode(nonNullExpression); continue; } if (!inDecoratorContext() && parseOptional(19)) { - var indexedAccess = createNode(172, expression.pos); + var indexedAccess = createNode(173, expression.pos); indexedAccess.expression = expression; if (token !== 20) { indexedAccess.argumentExpression = allowInAnd(parseExpression); @@ -9223,7 +9304,7 @@ var ts; continue; } if (token === 11 || token === 12) { - var tagExpression = createNode(175, expression.pos); + var tagExpression = createNode(176, expression.pos); tagExpression.tag = expression; tagExpression.template = token === 11 ? parseLiteralNode() @@ -9242,7 +9323,7 @@ var ts; if (!typeArguments) { return expression; } - var callExpr = createNode(173, expression.pos); + var callExpr = createNode(174, expression.pos); callExpr.expression = expression; callExpr.typeArguments = typeArguments; callExpr.arguments = parseArgumentList(); @@ -9250,7 +9331,7 @@ var ts; continue; } else if (token === 17) { - var callExpr = createNode(173, expression.pos); + var callExpr = createNode(174, expression.pos); callExpr.expression = expression; callExpr.arguments = parseArgumentList(); expression = finishNode(callExpr); @@ -9345,28 +9426,28 @@ var ts; return parseIdentifier(ts.Diagnostics.Expression_expected); } function parseParenthesizedExpression() { - var node = createNode(177); + var node = createNode(178); parseExpected(17); node.expression = allowInAnd(parseExpression); parseExpected(18); return finishNode(node); } function parseSpreadElement() { - var node = createNode(190); + var node = createNode(191); parseExpected(22); node.expression = parseAssignmentExpressionOrHigher(); return finishNode(node); } function parseArgumentOrArrayLiteralElement() { return token === 22 ? parseSpreadElement() : - token === 24 ? createNode(192) : + token === 24 ? createNode(193) : parseAssignmentExpressionOrHigher(); } function parseArgumentExpression() { return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement); } function parseArrayLiteralExpression() { - var node = createNode(169); + var node = createNode(170); parseExpected(19); if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; @@ -9377,10 +9458,10 @@ var ts; } function tryParseAccessorDeclaration(fullStart, decorators, modifiers) { if (parseContextualModifier(123)) { - return addJSDocComment(parseAccessorDeclaration(148, fullStart, decorators, modifiers)); + return addJSDocComment(parseAccessorDeclaration(149, fullStart, decorators, modifiers)); } - else if (parseContextualModifier(130)) { - return parseAccessorDeclaration(149, fullStart, decorators, modifiers); + else if (parseContextualModifier(131)) { + return parseAccessorDeclaration(150, fullStart, decorators, modifiers); } return undefined; } @@ -9401,7 +9482,7 @@ var ts; } var isShorthandPropertyAssignment = tokenIsIdentifier && (token === 24 || token === 16 || token === 56); if (isShorthandPropertyAssignment) { - var shorthandDeclaration = createNode(253, fullStart); + var shorthandDeclaration = createNode(254, fullStart); shorthandDeclaration.name = propertyName; shorthandDeclaration.questionToken = questionToken; var equalsToken = parseOptionalToken(56); @@ -9412,7 +9493,7 @@ var ts; return addJSDocComment(finishNode(shorthandDeclaration)); } else { - var propertyAssignment = createNode(252, fullStart); + var propertyAssignment = createNode(253, fullStart); propertyAssignment.modifiers = modifiers; propertyAssignment.name = propertyName; propertyAssignment.questionToken = questionToken; @@ -9422,7 +9503,7 @@ var ts; } } function parseObjectLiteralExpression() { - var node = createNode(170); + var node = createNode(171); parseExpected(15); if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; @@ -9436,7 +9517,7 @@ var ts; if (saveDecoratorContext) { setDecoratorContext(false); } - var node = createNode(178); + var node = createNode(179); setModifiers(node, parseModifiers()); parseExpected(87); node.asteriskToken = parseOptionalToken(37); @@ -9458,7 +9539,7 @@ var ts; return isIdentifier() ? parseIdentifier() : undefined; } function parseNewExpression() { - var node = createNode(174); + var node = createNode(175); parseExpected(92); node.expression = parseMemberExpressionOrHigher(); node.typeArguments = tryParse(parseTypeArgumentsInExpression); @@ -9468,7 +9549,7 @@ var ts; return finishNode(node); } function parseBlock(ignoreMissingOpenBrace, diagnosticMessage) { - var node = createNode(198); + var node = createNode(199); if (parseExpected(15, diagnosticMessage) || ignoreMissingOpenBrace) { node.statements = parseList(1, parseStatement); parseExpected(16); @@ -9496,12 +9577,12 @@ var ts; return block; } function parseEmptyStatement() { - var node = createNode(200); + var node = createNode(201); parseExpected(23); return finishNode(node); } function parseIfStatement() { - var node = createNode(202); + var node = createNode(203); parseExpected(88); parseExpected(17); node.expression = allowInAnd(parseExpression); @@ -9511,7 +9592,7 @@ var ts; return finishNode(node); } function parseDoStatement() { - var node = createNode(203); + var node = createNode(204); parseExpected(79); node.statement = parseStatement(); parseExpected(104); @@ -9522,7 +9603,7 @@ var ts; return finishNode(node); } function parseWhileStatement() { - var node = createNode(204); + var node = createNode(205); parseExpected(104); parseExpected(17); node.expression = allowInAnd(parseExpression); @@ -9545,21 +9626,21 @@ var ts; } var forOrForInOrForOfStatement; if (parseOptional(90)) { - var forInStatement = createNode(206, pos); + var forInStatement = createNode(207, pos); forInStatement.initializer = initializer; forInStatement.expression = allowInAnd(parseExpression); parseExpected(18); forOrForInOrForOfStatement = forInStatement; } - else if (parseOptional(137)) { - var forOfStatement = createNode(207, pos); + else if (parseOptional(138)) { + var forOfStatement = createNode(208, pos); forOfStatement.initializer = initializer; forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher); parseExpected(18); forOrForInOrForOfStatement = forOfStatement; } else { - var forStatement = createNode(205, pos); + var forStatement = createNode(206, pos); forStatement.initializer = initializer; parseExpected(23); if (token !== 23 && token !== 18) { @@ -9577,7 +9658,7 @@ var ts; } function parseBreakOrContinueStatement(kind) { var node = createNode(kind); - parseExpected(kind === 209 ? 70 : 75); + parseExpected(kind === 210 ? 70 : 75); if (!canParseSemicolon()) { node.label = parseIdentifier(); } @@ -9585,7 +9666,7 @@ var ts; return finishNode(node); } function parseReturnStatement() { - var node = createNode(210); + var node = createNode(211); parseExpected(94); if (!canParseSemicolon()) { node.expression = allowInAnd(parseExpression); @@ -9594,7 +9675,7 @@ var ts; return finishNode(node); } function parseWithStatement() { - var node = createNode(211); + var node = createNode(212); parseExpected(105); parseExpected(17); node.expression = allowInAnd(parseExpression); @@ -9603,7 +9684,7 @@ var ts; return finishNode(node); } function parseCaseClause() { - var node = createNode(248); + var node = createNode(249); parseExpected(71); node.expression = allowInAnd(parseExpression); parseExpected(54); @@ -9611,7 +9692,7 @@ var ts; return finishNode(node); } function parseDefaultClause() { - var node = createNode(249); + var node = createNode(250); parseExpected(77); parseExpected(54); node.statements = parseList(3, parseStatement); @@ -9621,12 +9702,12 @@ var ts; return token === 71 ? parseCaseClause() : parseDefaultClause(); } function parseSwitchStatement() { - var node = createNode(212); + var node = createNode(213); parseExpected(96); parseExpected(17); node.expression = allowInAnd(parseExpression); parseExpected(18); - var caseBlock = createNode(226, scanner.getStartPos()); + var caseBlock = createNode(227, scanner.getStartPos()); parseExpected(15); caseBlock.clauses = parseList(2, parseCaseOrDefaultClause); parseExpected(16); @@ -9634,14 +9715,14 @@ var ts; return finishNode(node); } function parseThrowStatement() { - var node = createNode(214); + var node = createNode(215); parseExpected(98); node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression); parseSemicolon(); return finishNode(node); } function parseTryStatement() { - var node = createNode(215); + var node = createNode(216); parseExpected(100); node.tryBlock = parseBlock(false); node.catchClause = token === 72 ? parseCatchClause() : undefined; @@ -9652,7 +9733,7 @@ var ts; return finishNode(node); } function parseCatchClause() { - var result = createNode(251); + var result = createNode(252); parseExpected(72); if (parseExpected(17)) { result.variableDeclaration = parseVariableDeclaration(); @@ -9662,7 +9743,7 @@ var ts; return finishNode(result); } function parseDebuggerStatement() { - var node = createNode(216); + var node = createNode(217); parseExpected(76); parseSemicolon(); return finishNode(node); @@ -9671,13 +9752,13 @@ var ts; var fullStart = scanner.getStartPos(); var expression = allowInAnd(parseExpression); if (expression.kind === 69 && parseOptional(54)) { - var labeledStatement = createNode(213, fullStart); + var labeledStatement = createNode(214, fullStart); labeledStatement.label = expression; labeledStatement.statement = parseStatement(); return addJSDocComment(finishNode(labeledStatement)); } else { - var expressionStatement = createNode(201, fullStart); + var expressionStatement = createNode(202, fullStart); expressionStatement.expression = expression; parseSemicolon(); return addJSDocComment(finishNode(expressionStatement)); @@ -9706,7 +9787,7 @@ var ts; case 81: return true; case 107: - case 133: + case 134: return nextTokenIsIdentifierOnSameLine(); case 125: case 126: @@ -9717,13 +9798,13 @@ var ts; case 110: case 111: case 112: - case 127: + case 128: nextToken(); if (scanner.hasPrecedingLineBreak()) { return false; } continue; - case 136: + case 137: nextToken(); return token === 15 || token === 69 || token === 82; case 89: @@ -9783,14 +9864,14 @@ var ts; case 107: case 125: case 126: - case 133: - case 136: + case 134: + case 137: return true; case 112: case 110: case 111: case 113: - case 127: + case 128: return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); default: return isStartOfExpression(); @@ -9829,9 +9910,9 @@ var ts; case 86: return parseForOrForInOrForOfStatement(); case 75: - return parseBreakOrContinueStatement(208); - case 70: return parseBreakOrContinueStatement(209); + case 70: + return parseBreakOrContinueStatement(210); case 94: return parseReturnStatement(); case 105: @@ -9850,7 +9931,7 @@ var ts; return parseDeclaration(); case 118: case 107: - case 133: + case 134: case 125: case 126: case 122: @@ -9863,8 +9944,8 @@ var ts; case 112: case 115: case 113: - case 127: - case 136: + case 128: + case 137: if (isStartOfDeclaration()) { return parseDeclaration(); } @@ -9887,11 +9968,11 @@ var ts; return parseClassDeclaration(fullStart, decorators, modifiers); case 107: return parseInterfaceDeclaration(fullStart, decorators, modifiers); - case 133: + case 134: return parseTypeAliasDeclaration(fullStart, decorators, modifiers); case 81: return parseEnumDeclaration(fullStart, decorators, modifiers); - case 136: + case 137: case 125: case 126: return parseModuleDeclaration(fullStart, decorators, modifiers); @@ -9910,7 +9991,7 @@ var ts; } default: if (decorators || modifiers) { - var node = createMissingNode(238, true, ts.Diagnostics.Declaration_expected); + var node = createMissingNode(239, true, ts.Diagnostics.Declaration_expected); node.pos = fullStart; node.decorators = decorators; setModifiers(node, modifiers); @@ -9931,16 +10012,16 @@ var ts; } function parseArrayBindingElement() { if (token === 24) { - return createNode(192); + return createNode(193); } - var node = createNode(168); + var node = createNode(169); node.dotDotDotToken = parseOptionalToken(22); node.name = parseIdentifierOrPattern(); node.initializer = parseBindingElementInitializer(false); return finishNode(node); } function parseObjectBindingElement() { - var node = createNode(168); + var node = createNode(169); var tokenIsIdentifier = isIdentifier(); var propertyName = parsePropertyName(); if (tokenIsIdentifier && token !== 54) { @@ -9955,14 +10036,14 @@ var ts; return finishNode(node); } function parseObjectBindingPattern() { - var node = createNode(166); + var node = createNode(167); parseExpected(15); node.elements = parseDelimitedList(9, parseObjectBindingElement); parseExpected(16); return finishNode(node); } function parseArrayBindingPattern() { - var node = createNode(167); + var node = createNode(168); parseExpected(19); node.elements = parseDelimitedList(10, parseArrayBindingElement); parseExpected(20); @@ -9981,7 +10062,7 @@ var ts; return parseIdentifier(); } function parseVariableDeclaration() { - var node = createNode(217); + var node = createNode(218); node.name = parseIdentifierOrPattern(); node.type = parseTypeAnnotation(); if (!isInOrOfKeyword(token)) { @@ -9990,7 +10071,7 @@ var ts; return finishNode(node); } function parseVariableDeclarationList(inForStatementInitializer) { - var node = createNode(218); + var node = createNode(219); switch (token) { case 102: break; @@ -10004,7 +10085,7 @@ var ts; ts.Debug.fail(); } nextToken(); - if (token === 137 && lookAhead(canFollowContextualOfKeyword)) { + if (token === 138 && lookAhead(canFollowContextualOfKeyword)) { node.declarations = createMissingList(); } else { @@ -10019,7 +10100,7 @@ var ts; return nextTokenIsIdentifier() && nextToken() === 18; } function parseVariableStatement(fullStart, decorators, modifiers) { - var node = createNode(199, fullStart); + var node = createNode(200, fullStart); node.decorators = decorators; setModifiers(node, modifiers); node.declarationList = parseVariableDeclarationList(false); @@ -10027,7 +10108,7 @@ var ts; return addJSDocComment(finishNode(node)); } function parseFunctionDeclaration(fullStart, decorators, modifiers) { - var node = createNode(219, fullStart); + var node = createNode(220, fullStart); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(87); @@ -10040,7 +10121,7 @@ var ts; return addJSDocComment(finishNode(node)); } function parseConstructorDeclaration(pos, decorators, modifiers) { - var node = createNode(147, pos); + var node = createNode(148, pos); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(121); @@ -10049,7 +10130,7 @@ var ts; return addJSDocComment(finishNode(node)); } function parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, diagnosticMessage) { - var method = createNode(146, fullStart); + var method = createNode(147, fullStart); method.decorators = decorators; setModifiers(method, modifiers); method.asteriskToken = asteriskToken; @@ -10062,7 +10143,7 @@ var ts; return addJSDocComment(finishNode(method)); } function parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken) { - var property = createNode(144, fullStart); + var property = createNode(145, fullStart); property.decorators = decorators; setModifiers(property, modifiers); property.name = name; @@ -10103,7 +10184,7 @@ var ts; case 110: case 111: case 113: - case 127: + case 128: return true; default: return false; @@ -10132,7 +10213,7 @@ var ts; return true; } if (idToken !== undefined) { - if (!ts.isKeyword(idToken) || idToken === 130 || idToken === 123) { + if (!ts.isKeyword(idToken) || idToken === 131 || idToken === 123) { return true; } switch (token) { @@ -10159,7 +10240,7 @@ var ts; decorators = []; decorators.pos = decoratorStart; } - var decorator = createNode(142, decoratorStart); + var decorator = createNode(143, decoratorStart); decorator.expression = doInDecoratorContext(parseLeftHandSideExpressionOrHigher); decorators.push(finishNode(decorator)); } @@ -10215,7 +10296,7 @@ var ts; } function parseClassElement() { if (token === 23) { - var result = createNode(197); + var result = createNode(198); nextToken(); return finishNode(result); } @@ -10246,10 +10327,10 @@ var ts; ts.Debug.fail("Should not have attempted to parse class member declaration."); } function parseClassExpression() { - return parseClassDeclarationOrExpression(scanner.getStartPos(), undefined, undefined, 191); + return parseClassDeclarationOrExpression(scanner.getStartPos(), undefined, undefined, 192); } function parseClassDeclaration(fullStart, decorators, modifiers) { - return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 220); + return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 221); } function parseClassDeclarationOrExpression(fullStart, decorators, modifiers, kind) { var node = createNode(kind, fullStart); @@ -10284,7 +10365,7 @@ var ts; } function parseHeritageClause() { if (token === 83 || token === 106) { - var node = createNode(250); + var node = createNode(251); node.token = token; nextToken(); node.types = parseDelimitedList(7, parseExpressionWithTypeArguments); @@ -10293,7 +10374,7 @@ var ts; return undefined; } function parseExpressionWithTypeArguments() { - var node = createNode(193); + var node = createNode(194); node.expression = parseLeftHandSideExpressionOrHigher(); if (token === 25) { node.typeArguments = parseBracketedList(18, parseType, 25, 27); @@ -10307,7 +10388,7 @@ var ts; return parseList(5, parseClassElement); } function parseInterfaceDeclaration(fullStart, decorators, modifiers) { - var node = createNode(221, fullStart); + var node = createNode(222, fullStart); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(107); @@ -10318,10 +10399,10 @@ var ts; return finishNode(node); } function parseTypeAliasDeclaration(fullStart, decorators, modifiers) { - var node = createNode(222, fullStart); + var node = createNode(223, fullStart); node.decorators = decorators; setModifiers(node, modifiers); - parseExpected(133); + parseExpected(134); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); parseExpected(56); @@ -10330,13 +10411,13 @@ var ts; return finishNode(node); } function parseEnumMember() { - var node = createNode(254, scanner.getStartPos()); + var node = createNode(255, scanner.getStartPos()); node.name = parsePropertyName(); node.initializer = allowInAnd(parseNonParameterInitializer); return finishNode(node); } function parseEnumDeclaration(fullStart, decorators, modifiers) { - var node = createNode(223, fullStart); + var node = createNode(224, fullStart); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(81); @@ -10351,7 +10432,7 @@ var ts; return finishNode(node); } function parseModuleBlock() { - var node = createNode(225, scanner.getStartPos()); + var node = createNode(226, scanner.getStartPos()); if (parseExpected(15)) { node.statements = parseList(1, parseStatement); parseExpected(16); @@ -10362,7 +10443,7 @@ var ts; return finishNode(node); } function parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags) { - var node = createNode(224, fullStart); + var node = createNode(225, fullStart); var namespaceFlag = flags & 4096; node.decorators = decorators; setModifiers(node, modifiers); @@ -10374,10 +10455,10 @@ var ts; return finishNode(node); } function parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers) { - var node = createNode(224, fullStart); + var node = createNode(225, fullStart); node.decorators = decorators; setModifiers(node, modifiers); - if (token === 136) { + if (token === 137) { node.name = parseIdentifier(); node.flags |= 131072; } @@ -10389,7 +10470,7 @@ var ts; } function parseModuleDeclaration(fullStart, decorators, modifiers) { var flags = modifiers ? modifiers.flags : 0; - if (token === 136) { + if (token === 137) { return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers); } else if (parseOptional(126)) { @@ -10404,7 +10485,7 @@ var ts; return parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags); } function isExternalModuleReference() { - return token === 128 && + return token === 129 && lookAhead(nextTokenIsOpenParen); } function nextTokenIsOpenParen() { @@ -10414,7 +10495,7 @@ var ts; return nextToken() === 39; } function parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers) { - var exportDeclaration = createNode(227, fullStart); + var exportDeclaration = createNode(228, fullStart); exportDeclaration.decorators = decorators; exportDeclaration.modifiers = modifiers; parseExpected(116); @@ -10429,8 +10510,8 @@ var ts; var identifier; if (isIdentifier()) { identifier = parseIdentifier(); - if (token !== 24 && token !== 135) { - var importEqualsDeclaration = createNode(228, fullStart); + if (token !== 24 && token !== 136) { + var importEqualsDeclaration = createNode(229, fullStart); importEqualsDeclaration.decorators = decorators; setModifiers(importEqualsDeclaration, modifiers); importEqualsDeclaration.name = identifier; @@ -10440,27 +10521,27 @@ var ts; return finishNode(importEqualsDeclaration); } } - var importDeclaration = createNode(229, fullStart); + var importDeclaration = createNode(230, fullStart); importDeclaration.decorators = decorators; setModifiers(importDeclaration, modifiers); if (identifier || token === 37 || token === 15) { importDeclaration.importClause = parseImportClause(identifier, afterImportPos); - parseExpected(135); + parseExpected(136); } importDeclaration.moduleSpecifier = parseModuleSpecifier(); parseSemicolon(); return finishNode(importDeclaration); } function parseImportClause(identifier, fullStart) { - var importClause = createNode(230, fullStart); + var importClause = createNode(231, fullStart); if (identifier) { importClause.name = identifier; } if (!importClause.name || parseOptional(24)) { - importClause.namedBindings = token === 37 ? parseNamespaceImport() : parseNamedImportsOrExports(232); + importClause.namedBindings = token === 37 ? parseNamespaceImport() : parseNamedImportsOrExports(233); } return finishNode(importClause); } @@ -10470,8 +10551,8 @@ var ts; : parseEntityName(false); } function parseExternalModuleReference() { - var node = createNode(239); - parseExpected(128); + var node = createNode(240); + parseExpected(129); parseExpected(17); node.expression = parseModuleSpecifier(); parseExpected(18); @@ -10488,7 +10569,7 @@ var ts; } } function parseNamespaceImport() { - var namespaceImport = createNode(231); + var namespaceImport = createNode(232); parseExpected(37); parseExpected(116); namespaceImport.name = parseIdentifier(); @@ -10496,14 +10577,14 @@ var ts; } function parseNamedImportsOrExports(kind) { var node = createNode(kind); - node.elements = parseBracketedList(21, kind === 232 ? parseImportSpecifier : parseExportSpecifier, 15, 16); + node.elements = parseBracketedList(21, kind === 233 ? parseImportSpecifier : parseExportSpecifier, 15, 16); return finishNode(node); } function parseExportSpecifier() { - return parseImportOrExportSpecifier(237); + return parseImportOrExportSpecifier(238); } function parseImportSpecifier() { - return parseImportOrExportSpecifier(233); + return parseImportOrExportSpecifier(234); } function parseImportOrExportSpecifier(kind) { var node = createNode(kind); @@ -10522,23 +10603,23 @@ var ts; else { node.name = identifierName; } - if (kind === 233 && checkIdentifierIsKeyword) { + if (kind === 234 && checkIdentifierIsKeyword) { parseErrorAtPosition(checkIdentifierStart, checkIdentifierEnd - checkIdentifierStart, ts.Diagnostics.Identifier_expected); } return finishNode(node); } function parseExportDeclaration(fullStart, decorators, modifiers) { - var node = createNode(235, fullStart); + var node = createNode(236, fullStart); node.decorators = decorators; setModifiers(node, modifiers); if (parseOptional(37)) { - parseExpected(135); + parseExpected(136); node.moduleSpecifier = parseModuleSpecifier(); } else { - node.exportClause = parseNamedImportsOrExports(236); - if (token === 135 || (token === 9 && !scanner.hasPrecedingLineBreak())) { - parseExpected(135); + node.exportClause = parseNamedImportsOrExports(237); + if (token === 136 || (token === 9 && !scanner.hasPrecedingLineBreak())) { + parseExpected(136); node.moduleSpecifier = parseModuleSpecifier(); } } @@ -10546,7 +10627,7 @@ var ts; return finishNode(node); } function parseExportAssignment(fullStart, decorators, modifiers) { - var node = createNode(234, fullStart); + var node = createNode(235, fullStart); node.decorators = decorators; setModifiers(node, modifiers); if (parseOptional(56)) { @@ -10625,10 +10706,10 @@ var ts; function setExternalModuleIndicator(sourceFile) { sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, function (node) { return node.flags & 1 - || node.kind === 228 && node.moduleReference.kind === 239 - || node.kind === 229 - || node.kind === 234 + || node.kind === 229 && node.moduleReference.kind === 240 + || node.kind === 230 || node.kind === 235 + || node.kind === 236 ? node : undefined; }); @@ -10663,7 +10744,7 @@ var ts; } JSDocParser.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests; function parseJSDocTypeExpression() { - var result = createNode(256, scanner.getTokenPos()); + var result = createNode(257, scanner.getTokenPos()); parseExpected(15); result.type = parseJSDocTopLevelType(); parseExpected(16); @@ -10674,12 +10755,12 @@ var ts; function parseJSDocTopLevelType() { var type = parseJSDocType(); if (token === 47) { - var unionType = createNode(260, type.pos); + var unionType = createNode(261, type.pos); unionType.types = parseJSDocTypeList(type); type = finishNode(unionType); } if (token === 56) { - var optionalType = createNode(267, type.pos); + var optionalType = createNode(268, type.pos); nextToken(); optionalType.type = type; type = finishNode(optionalType); @@ -10690,20 +10771,20 @@ var ts; var type = parseBasicTypeExpression(); while (true) { if (token === 19) { - var arrayType = createNode(259, type.pos); + var arrayType = createNode(260, type.pos); arrayType.elementType = type; nextToken(); parseExpected(20); type = finishNode(arrayType); } else if (token === 53) { - var nullableType = createNode(262, type.pos); + var nullableType = createNode(263, type.pos); nullableType.type = type; nextToken(); type = finishNode(nullableType); } else if (token === 49) { - var nonNullableType = createNode(263, type.pos); + var nonNullableType = createNode(264, type.pos); nonNullableType.type = type; nextToken(); type = finishNode(nonNullableType); @@ -10737,37 +10818,37 @@ var ts; case 97: return parseJSDocThisType(); case 117: - case 131: - case 129: - case 120: case 132: + case 130: + case 120: + case 133: case 103: return parseTokenNode(); } return parseJSDocTypeReference(); } function parseJSDocThisType() { - var result = createNode(271); + var result = createNode(272); nextToken(); parseExpected(54); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocConstructorType() { - var result = createNode(270); + var result = createNode(271); nextToken(); parseExpected(54); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocVariadicType() { - var result = createNode(269); + var result = createNode(270); nextToken(); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocFunctionType() { - var result = createNode(268); + var result = createNode(269); nextToken(); parseExpected(17); result.parameters = parseDelimitedList(22, parseJSDocParameter); @@ -10780,7 +10861,7 @@ var ts; return finishNode(result); } function parseJSDocParameter() { - var parameter = createNode(141); + var parameter = createNode(142); parameter.type = parseJSDocType(); if (parseOptional(56)) { parameter.questionToken = createNode(56); @@ -10788,7 +10869,7 @@ var ts; return finishNode(parameter); } function parseJSDocTypeReference() { - var result = createNode(266); + var result = createNode(267); result.name = parseSimplePropertyName(); if (token === 25) { result.typeArguments = parseTypeArguments(); @@ -10822,13 +10903,13 @@ var ts; } } function parseQualifiedName(left) { - var result = createNode(138, left.pos); + var result = createNode(139, left.pos); result.left = left; result.right = parseIdentifierName(); return finishNode(result); } function parseJSDocRecordType() { - var result = createNode(264); + var result = createNode(265); nextToken(); result.members = parseDelimitedList(24, parseJSDocRecordMember); checkForTrailingComma(result.members); @@ -10836,7 +10917,7 @@ var ts; return finishNode(result); } function parseJSDocRecordMember() { - var result = createNode(265); + var result = createNode(266); result.name = parseSimplePropertyName(); if (token === 54) { nextToken(); @@ -10845,13 +10926,13 @@ var ts; return finishNode(result); } function parseJSDocNonNullableType() { - var result = createNode(263); + var result = createNode(264); nextToken(); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocTupleType() { - var result = createNode(261); + var result = createNode(262); nextToken(); result.types = parseDelimitedList(25, parseJSDocType); checkForTrailingComma(result.types); @@ -10865,7 +10946,7 @@ var ts; } } function parseJSDocUnionType() { - var result = createNode(260); + var result = createNode(261); nextToken(); result.types = parseJSDocTypeList(parseJSDocType()); parseExpected(18); @@ -10883,7 +10964,7 @@ var ts; return types; } function parseJSDocAllType() { - var result = createNode(257); + var result = createNode(258); nextToken(); return finishNode(result); } @@ -10896,11 +10977,11 @@ var ts; token === 27 || token === 56 || token === 47) { - var result = createNode(258, pos); + var result = createNode(259, pos); return finishNode(result); } else { - var result = createNode(262, pos); + var result = createNode(263, pos); result.type = parseJSDocType(); return finishNode(result); } @@ -10980,7 +11061,7 @@ var ts; if (!tags) { return undefined; } - var result = createNode(272, start); + var result = createNode(273, start); result.tags = tags; return finishNode(result, end); } @@ -10994,7 +11075,7 @@ var ts; var atToken = createNode(55, scanner.getTokenPos()); atToken.end = scanner.getTextPos(); nextJSDocToken(); - var tagName = parseJSDocIdentifier(); + var tagName = parseJSDocIdentifierName(); if (!tagName) { return; } @@ -11018,7 +11099,7 @@ var ts; return undefined; } function handleUnknownTag(atToken, tagName) { - var result = createNode(273, atToken.pos); + var result = createNode(274, atToken.pos); result.atToken = atToken; result.tagName = tagName; return finishNode(result); @@ -11046,15 +11127,15 @@ var ts; var name; var isBracketed; if (parseOptionalToken(19)) { - name = parseJSDocIdentifier(); + name = parseJSDocIdentifierName(); isBracketed = true; if (parseOptionalToken(56)) { parseExpression(); } parseExpected(20); } - else if (token === 69) { - name = parseJSDocIdentifier(); + else if (ts.tokenIsIdentifierOrKeyword(token)) { + name = parseJSDocIdentifierName(); } if (!name) { parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); @@ -11070,7 +11151,7 @@ var ts; if (!typeExpression) { typeExpression = tryParseTypeExpression(); } - var result = createNode(274, atToken.pos); + var result = createNode(275, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.preParameterName = preName; @@ -11080,16 +11161,6 @@ var ts; return finishNode(result); } function handleReturnTag(atToken, tagName) { - if (ts.forEach(tags, function (t) { return t.kind === 275; })) { - parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); - } - var result = createNode(275, atToken.pos); - result.atToken = atToken; - result.tagName = tagName; - result.typeExpression = tryParseTypeExpression(); - return finishNode(result); - } - function handleTypeTag(atToken, tagName) { if (ts.forEach(tags, function (t) { return t.kind === 276; })) { parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); } @@ -11099,19 +11170,29 @@ var ts; result.typeExpression = tryParseTypeExpression(); return finishNode(result); } - function handleTemplateTag(atToken, tagName) { + function handleTypeTag(atToken, tagName) { if (ts.forEach(tags, function (t) { return t.kind === 277; })) { parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); } + var result = createNode(277, atToken.pos); + result.atToken = atToken; + result.tagName = tagName; + result.typeExpression = tryParseTypeExpression(); + return finishNode(result); + } + function handleTemplateTag(atToken, tagName) { + if (ts.forEach(tags, function (t) { return t.kind === 278; })) { + parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); + } var typeParameters = []; typeParameters.pos = scanner.getStartPos(); while (true) { - var name_8 = parseJSDocIdentifier(); + var name_8 = parseJSDocIdentifierName(); if (!name_8) { parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); return undefined; } - var typeParameter = createNode(140, name_8.pos); + var typeParameter = createNode(141, name_8.pos); typeParameter.name = name_8; finishNode(typeParameter); typeParameters.push(typeParameter); @@ -11122,7 +11203,7 @@ var ts; break; } } - var result = createNode(277, atToken.pos); + var result = createNode(278, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.typeParameters = typeParameters; @@ -11133,8 +11214,11 @@ var ts; function nextJSDocToken() { return token = scanner.scanJSDocToken(); } - function parseJSDocIdentifier() { - if (token !== 69) { + function parseJSDocIdentifierName() { + return createJSDocIdentifier(ts.tokenIsIdentifierOrKeyword(token)); + } + function createJSDocIdentifier(isIdentifier) { + if (!isIdentifier) { parseErrorAtCurrentToken(ts.Diagnostics.Identifier_expected); return undefined; } @@ -11435,24 +11519,17 @@ var ts; var ts; (function (ts) { ts.bindTime = 0; - function or(state1, state2) { - return (state1 | state2) & 2 - ? 2 - : (state1 & state2) & 8 - ? 8 - : 4; - } function getModuleInstanceState(node) { - if (node.kind === 221 || node.kind === 222) { + if (node.kind === 222 || node.kind === 223) { return 0; } else if (ts.isConstEnumDeclaration(node)) { return 2; } - else if ((node.kind === 229 || node.kind === 228) && !(node.flags & 1)) { + else if ((node.kind === 230 || node.kind === 229) && !(node.flags & 1)) { return 0; } - else if (node.kind === 225) { + else if (node.kind === 226) { var state_1 = 0; ts.forEachChild(node, function (n) { switch (getModuleInstanceState(n)) { @@ -11468,7 +11545,7 @@ var ts; }); return state_1; } - else if (node.kind === 224) { + else if (node.kind === 225) { return getModuleInstanceState(node.body); } else { @@ -11486,16 +11563,20 @@ var ts; function createBinder() { var file; var options; + var languageVersion; var parent; var container; var blockScopeContainer; var lastContainer; var seenThisKeyword; var hasExplicitReturn; - var currentReachabilityState; - var labelStack; - var labelIndexMap; - var implicitLabels; + var currentFlow; + var currentBreakTarget; + var currentContinueTarget; + var currentTrueTarget; + var currentFalseTarget; + var preSwitchCaseFlow; + var activeLabels; var hasClassExtends; var hasAsyncFunctions; var hasDecorators; @@ -11505,11 +11586,15 @@ var ts; var symbolCount = 0; var Symbol; var classifiableNames; + var unreachableFlow = { flags: 1 }; + var reportedUnreachableFlow = { flags: 1 }; function bindSourceFile(f, opts) { file = f; options = opts; + languageVersion = ts.getEmitScriptTarget(options); inStrictMode = !!file.externalModuleIndicator; classifiableNames = {}; + symbolCount = 0; Symbol = ts.objectAllocator.getSymbolConstructor(); if (!file.locals) { bind(file); @@ -11518,15 +11603,19 @@ var ts; } file = undefined; options = undefined; + languageVersion = undefined; parent = undefined; container = undefined; blockScopeContainer = undefined; lastContainer = undefined; seenThisKeyword = false; hasExplicitReturn = false; - labelStack = undefined; - labelIndexMap = undefined; - implicitLabels = undefined; + currentFlow = undefined; + currentBreakTarget = undefined; + currentContinueTarget = undefined; + currentTrueTarget = undefined; + currentFalseTarget = undefined; + activeLabels = undefined; hasClassExtends = false; hasAsyncFunctions = false; hasDecorators = false; @@ -11554,7 +11643,7 @@ var ts; if (symbolFlags & 107455) { var valueDeclaration = symbol.valueDeclaration; if (!valueDeclaration || - (valueDeclaration.kind !== node.kind && valueDeclaration.kind === 224)) { + (valueDeclaration.kind !== node.kind && valueDeclaration.kind === 225)) { symbol.valueDeclaration = node; } } @@ -11564,7 +11653,7 @@ var ts; if (ts.isAmbientModule(node)) { return ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + node.name.text + "\""; } - if (node.name.kind === 139) { + if (node.name.kind === 140) { var nameExpression = node.name.expression; if (ts.isStringOrNumericLiteral(nameExpression.kind)) { return nameExpression.text; @@ -11575,21 +11664,21 @@ var ts; return node.name.text; } switch (node.kind) { - case 147: + case 148: return "__constructor"; - case 155: - case 150: - return "__call"; case 156: case 151: - return "__new"; + return "__call"; + case 157: case 152: + return "__new"; + case 153: return "__index"; - case 235: + case 236: return "__export"; - case 234: + case 235: return node.isExportEquals ? "export=" : "default"; - case 186: + case 187: switch (ts.getSpecialPropertyAssignmentKind(node)) { case 2: return "export="; @@ -11601,13 +11690,13 @@ var ts; } ts.Debug.fail("Unknown binary declaration kind"); break; - case 219: case 220: + case 221: return node.flags & 512 ? "default" : undefined; - case 268: + case 269: return ts.isJSDocConstructSignature(node) ? "__new" : "__call"; - case 141: - ts.Debug.assert(node.parent.kind === 268); + case 142: + ts.Debug.assert(node.parent.kind === 269); var functionType = node.parent; var index = ts.indexOf(functionType.parameters, node); return "p" + index; @@ -11657,7 +11746,7 @@ var ts; function declareModuleMember(node, symbolFlags, symbolExcludes) { var hasExportModifier = ts.getCombinedNodeFlags(node) & 1; if (symbolFlags & 8388608) { - if (node.kind === 237 || (node.kind === 228 && hasExportModifier)) { + if (node.kind === 238 || (node.kind === 229 && hasExportModifier)) { return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); } else { @@ -11696,43 +11785,45 @@ var ts; blockScopeContainer = node; blockScopeContainer.locals = undefined; } - var savedReachabilityState; - var savedLabelStack; - var savedLabels; - var savedImplicitLabels; var savedHasExplicitReturn; + var savedCurrentFlow; + var savedBreakTarget; + var savedContinueTarget; + var savedActiveLabels; var kind = node.kind; var flags = node.flags; flags &= ~98304; flags &= ~3932160; - if (kind === 221) { + if (kind === 222) { seenThisKeyword = false; } - var saveState = kind === 255 || kind === 225 || ts.isFunctionLikeKind(kind); + var saveState = kind === 256 || kind === 226 || ts.isFunctionLikeKind(kind); if (saveState) { - savedReachabilityState = currentReachabilityState; - savedLabelStack = labelStack; - savedLabels = labelIndexMap; - savedImplicitLabels = implicitLabels; savedHasExplicitReturn = hasExplicitReturn; - currentReachabilityState = 2; + savedCurrentFlow = currentFlow; + savedBreakTarget = currentBreakTarget; + savedContinueTarget = currentContinueTarget; + savedActiveLabels = activeLabels; hasExplicitReturn = false; - labelStack = labelIndexMap = implicitLabels = undefined; + currentFlow = { flags: 2 }; + currentBreakTarget = undefined; + currentContinueTarget = undefined; + activeLabels = undefined; } if (ts.isInJavaScriptFile(node) && node.jsDocComment) { bind(node.jsDocComment); } bindReachableStatement(node); - if (currentReachabilityState === 2 && ts.isFunctionLikeKind(kind) && ts.nodeIsPresent(node.body)) { + if (!(currentFlow.flags & 1) && ts.isFunctionLikeKind(kind) && ts.nodeIsPresent(node.body)) { flags |= 32768; if (hasExplicitReturn) { flags |= 65536; } } - if (kind === 221) { + if (kind === 222) { flags = seenThisKeyword ? flags | 16384 : flags & ~16384; } - if (kind === 255) { + if (kind === 256) { if (hasClassExtends) { flags |= 262144; } @@ -11752,10 +11843,10 @@ var ts; node.flags = flags; if (saveState) { hasExplicitReturn = savedHasExplicitReturn; - currentReachabilityState = savedReachabilityState; - labelStack = savedLabelStack; - labelIndexMap = savedLabels; - implicitLabels = savedImplicitLabels; + currentFlow = savedCurrentFlow; + currentBreakTarget = savedBreakTarget; + currentContinueTarget = savedContinueTarget; + activeLabels = savedActiveLabels; } container = saveContainer; parent = saveParent; @@ -11767,190 +11858,562 @@ var ts; return; } switch (node.kind) { - case 204: + case 205: bindWhileStatement(node); break; - case 203: + case 204: bindDoStatement(node); break; - case 205: + case 206: bindForStatement(node); break; - case 206: case 207: + case 208: bindForInOrForOfStatement(node); break; - case 202: + case 203: bindIfStatement(node); break; - case 210: - case 214: + case 211: + case 215: bindReturnOrThrow(node); break; + case 210: case 209: - case 208: bindBreakOrContinueStatement(node); break; - case 215: + case 216: bindTryStatement(node); break; - case 212: + case 213: bindSwitchStatement(node); break; - case 226: + case 227: bindCaseBlock(node); break; - case 213: + case 214: bindLabeledStatement(node); break; + case 185: + bindPrefixUnaryExpressionFlow(node); + break; + case 187: + bindBinaryExpressionFlow(node); + break; + case 181: + bindDeleteExpressionFlow(node); + break; + case 188: + bindConditionalExpressionFlow(node); + break; + case 218: + bindVariableDeclarationFlow(node); + break; default: ts.forEachChild(node, bind); break; } } - function bindWhileStatement(n) { - var preWhileState = n.expression.kind === 84 ? 4 : currentReachabilityState; - var postWhileState = n.expression.kind === 99 ? 4 : currentReachabilityState; - bind(n.expression); - currentReachabilityState = preWhileState; - var postWhileLabel = pushImplicitLabel(); - bind(n.statement); - popImplicitLabel(postWhileLabel, postWhileState); + function isNarrowableReference(expr) { + return expr.kind === 69 || + expr.kind === 97 || + expr.kind === 172 && isNarrowableReference(expr.expression); } - function bindDoStatement(n) { - var preDoState = currentReachabilityState; - var postDoLabel = pushImplicitLabel(); - bind(n.statement); - var postDoState = n.expression.kind === 99 ? 4 : preDoState; - popImplicitLabel(postDoLabel, postDoState); - bind(n.expression); - } - function bindForStatement(n) { - var preForState = currentReachabilityState; - var postForLabel = pushImplicitLabel(); - bind(n.initializer); - bind(n.condition); - bind(n.incrementor); - bind(n.statement); - var isInfiniteLoop = (!n.condition || n.condition.kind === 99); - var postForState = isInfiniteLoop ? 4 : preForState; - popImplicitLabel(postForLabel, postForState); - } - function bindForInOrForOfStatement(n) { - var preStatementState = currentReachabilityState; - var postStatementLabel = pushImplicitLabel(); - bind(n.initializer); - bind(n.expression); - bind(n.statement); - popImplicitLabel(postStatementLabel, preStatementState); - } - function bindIfStatement(n) { - var ifTrueState = n.expression.kind === 84 ? 4 : currentReachabilityState; - var ifFalseState = n.expression.kind === 99 ? 4 : currentReachabilityState; - currentReachabilityState = ifTrueState; - bind(n.expression); - bind(n.thenStatement); - if (n.elseStatement) { - var preElseState = currentReachabilityState; - currentReachabilityState = ifFalseState; - bind(n.elseStatement); - currentReachabilityState = or(currentReachabilityState, preElseState); + function isNarrowingExpression(expr) { + switch (expr.kind) { + case 69: + case 97: + case 172: + return isNarrowableReference(expr); + case 174: + return true; + case 178: + return isNarrowingExpression(expr.expression); + case 187: + return isNarrowingBinaryExpression(expr); + case 185: + return expr.operator === 49 && isNarrowingExpression(expr.operand); } - else { - currentReachabilityState = or(currentReachabilityState, ifFalseState); + return false; + } + function isNarrowingBinaryExpression(expr) { + switch (expr.operatorToken.kind) { + case 56: + return isNarrowableReference(expr.left); + case 30: + case 31: + case 32: + case 33: + if (isNarrowingExpression(expr.left) && (expr.right.kind === 93 || expr.right.kind === 69)) { + return true; + } + if (expr.left.kind === 182 && isNarrowingExpression(expr.left.expression) && expr.right.kind === 9) { + return true; + } + return false; + case 91: + return isNarrowingExpression(expr.left); + case 24: + return isNarrowingExpression(expr.right); + } + return false; + } + function createBranchLabel() { + return { + flags: 4, + antecedents: undefined + }; + } + function createLoopLabel() { + return { + flags: 8, + antecedents: undefined + }; + } + function setFlowNodeReferenced(flow) { + flow.flags |= flow.flags & 128 ? 256 : 128; + } + function addAntecedent(label, antecedent) { + if (!(antecedent.flags & 1) && !ts.contains(label.antecedents, antecedent)) { + (label.antecedents || (label.antecedents = [])).push(antecedent); + setFlowNodeReferenced(antecedent); } } - function bindReturnOrThrow(n) { - bind(n.expression); - if (n.kind === 210) { - hasExplicitReturn = true; + function createFlowCondition(flags, antecedent, expression) { + if (antecedent.flags & 1) { + return antecedent; } - currentReachabilityState = 4; - } - function bindBreakOrContinueStatement(n) { - bind(n.label); - var isValidJump = jumpToLabel(n.label, n.kind === 209 ? currentReachabilityState : 4); - if (isValidJump) { - currentReachabilityState = 4; + if (!expression) { + return flags & 32 ? antecedent : unreachableFlow; } + if (expression.kind === 99 && flags & 64 || + expression.kind === 84 && flags & 32) { + return unreachableFlow; + } + if (!isNarrowingExpression(expression)) { + return antecedent; + } + setFlowNodeReferenced(antecedent); + return { + flags: flags, + antecedent: antecedent, + expression: expression + }; } - function bindTryStatement(n) { - var preTryState = currentReachabilityState; - bind(n.tryBlock); - var postTryState = currentReachabilityState; - currentReachabilityState = preTryState; - bind(n.catchClause); - var postCatchState = currentReachabilityState; - currentReachabilityState = preTryState; - bind(n.finallyBlock); - currentReachabilityState = n.catchClause ? or(postTryState, postCatchState) : postTryState; + function createFlowAssignment(antecedent, node) { + setFlowNodeReferenced(antecedent); + return { + flags: 16, + antecedent: antecedent, + node: node + }; } - function bindSwitchStatement(n) { - var preSwitchState = currentReachabilityState; - var postSwitchLabel = pushImplicitLabel(); - bind(n.expression); - bind(n.caseBlock); - var hasDefault = ts.forEach(n.caseBlock.clauses, function (c) { return c.kind === 249; }); - var postSwitchState = hasDefault && currentReachabilityState !== 2 ? 4 : preSwitchState; - popImplicitLabel(postSwitchLabel, postSwitchState); + function finishFlowLabel(flow) { + var antecedents = flow.antecedents; + if (!antecedents) { + return unreachableFlow; + } + if (antecedents.length === 1) { + return antecedents[0]; + } + return flow; } - function bindCaseBlock(n) { - var startState = currentReachabilityState; - for (var i = 0; i < n.clauses.length; i++) { - var clause = n.clauses[i]; - currentReachabilityState = startState; - bind(clause); - if (clause.statements.length && - i !== n.clauses.length - 1 && - currentReachabilityState === 2 && - options.noFallthroughCasesInSwitch) { - errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); + function isStatementCondition(node) { + var parent = node.parent; + switch (parent.kind) { + case 203: + case 205: + case 204: + return parent.expression === node; + case 206: + case 188: + return parent.condition === node; + } + return false; + } + function isLogicalExpression(node) { + while (true) { + if (node.kind === 178) { + node = node.expression; + } + else if (node.kind === 185 && node.operator === 49) { + node = node.operand; + } + else { + return node.kind === 187 && (node.operatorToken.kind === 51 || + node.operatorToken.kind === 52); } } } - function bindLabeledStatement(n) { - bind(n.label); - var ok = pushNamedLabel(n.label); - bind(n.statement); - if (ok) { - popNamedLabel(n.label, currentReachabilityState); + function isTopLevelLogicalExpression(node) { + while (node.parent.kind === 178 || + node.parent.kind === 185 && + node.parent.operator === 49) { + node = node.parent; + } + return !isStatementCondition(node) && !isLogicalExpression(node.parent); + } + function bindCondition(node, trueTarget, falseTarget) { + var saveTrueTarget = currentTrueTarget; + var saveFalseTarget = currentFalseTarget; + currentTrueTarget = trueTarget; + currentFalseTarget = falseTarget; + bind(node); + currentTrueTarget = saveTrueTarget; + currentFalseTarget = saveFalseTarget; + if (!node || !isLogicalExpression(node)) { + addAntecedent(trueTarget, createFlowCondition(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 preConditionLabel = createBranchLabel(); + var postDoLabel = createBranchLabel(); + addAntecedent(preDoLabel, currentFlow); + currentFlow = preDoLabel; + bindIterativeStatement(node.statement, postDoLabel, preConditionLabel); + addAntecedent(preConditionLabel, currentFlow); + currentFlow = finishFlowLabel(preConditionLabel); + bindCondition(node.expression, preDoLabel, postDoLabel); + currentFlow = finishFlowLabel(postDoLabel); + } + function bindForStatement(node) { + var preLoopLabel = 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; + bind(node.expression); + addAntecedent(postLoopLabel, currentFlow); + bind(node.initializer); + if (node.initializer.kind !== 219) { + 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 === 211) { + hasExplicitReturn = true; + } + currentFlow = unreachableFlow; + } + function findActiveLabel(name) { + if (activeLabels) { + for (var _i = 0, activeLabels_1 = activeLabels; _i < activeLabels_1.length; _i++) { + var label = activeLabels_1[_i]; + if (label.name === name) { + return label; + } + } + } + return undefined; + } + function bindbreakOrContinueFlow(node, breakTarget, continueTarget) { + var flowLabel = node.kind === 210 ? breakTarget : continueTarget; + if (flowLabel) { + addAntecedent(flowLabel, currentFlow); + currentFlow = unreachableFlow; + } + } + function bindBreakOrContinueStatement(node) { + bind(node.label); + if (node.label) { + var activeLabel = findActiveLabel(node.label.text); + if (activeLabel) { + activeLabel.referenced = true; + bindbreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget); + } + } + else { + bindbreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget); + } + } + function bindTryStatement(node) { + var postFinallyLabel = createBranchLabel(); + var preTryFlow = currentFlow; + bind(node.tryBlock); + addAntecedent(postFinallyLabel, currentFlow); + if (node.catchClause) { + currentFlow = preTryFlow; + bind(node.catchClause); + addAntecedent(postFinallyLabel, currentFlow); + } + if (node.finallyBlock) { + currentFlow = preTryFlow; + bind(node.finallyBlock); + } + currentFlow = finishFlowLabel(postFinallyLabel); + } + function bindSwitchStatement(node) { + var postSwitchLabel = 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 === 250; }); + if (!hasDefault) { + addAntecedent(postSwitchLabel, preSwitchCaseFlow); + } + currentBreakTarget = saveBreakTarget; + preSwitchCaseFlow = savePreSwitchCaseFlow; + currentFlow = finishFlowLabel(postSwitchLabel); + } + function bindCaseBlock(node) { + var clauses = node.clauses; + for (var i = 0; i < clauses.length; i++) { + var clause = clauses[i]; + if (clause.statements.length) { + if (currentFlow.flags & 1) { + currentFlow = preSwitchCaseFlow; + } + else { + var preCaseLabel = createBranchLabel(); + addAntecedent(preCaseLabel, preSwitchCaseFlow); + addAntecedent(preCaseLabel, currentFlow); + currentFlow = finishFlowLabel(preCaseLabel); + } + bind(clause); + if (!(currentFlow.flags & 1) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); + } + } + else { + bind(clause); + } + } + } + function pushActiveLabel(name, breakTarget, continueTarget) { + var activeLabel = { + name: name, + breakTarget: breakTarget, + continueTarget: continueTarget, + referenced: false + }; + (activeLabels || (activeLabels = [])).push(activeLabel); + return activeLabel; + } + function popActiveLabel() { + activeLabels.pop(); + } + function bindLabeledStatement(node) { + var preStatementLabel = createLoopLabel(); + var postStatementLabel = createBranchLabel(); + bind(node.label); + addAntecedent(preStatementLabel, currentFlow); + var activeLabel = pushActiveLabel(node.label.text, postStatementLabel, preStatementLabel); + bind(node.statement); + popActiveLabel(); + if (!activeLabel.referenced && !options.allowUnusedLabels) { + file.bindDiagnostics.push(ts.createDiagnosticForNode(node.label, ts.Diagnostics.Unused_label)); + } + addAntecedent(postStatementLabel, currentFlow); + currentFlow = finishFlowLabel(postStatementLabel); + } + function bindDestructuringTargetFlow(node) { + if (node.kind === 187 && node.operatorToken.kind === 56) { + bindAssignmentTargetFlow(node.left); + } + else { + bindAssignmentTargetFlow(node); + } + } + function bindAssignmentTargetFlow(node) { + if (isNarrowableReference(node)) { + currentFlow = createFlowAssignment(currentFlow, node); + } + else if (node.kind === 170) { + for (var _i = 0, _a = node.elements; _i < _a.length; _i++) { + var e = _a[_i]; + if (e.kind === 191) { + bindAssignmentTargetFlow(e.expression); + } + else { + bindDestructuringTargetFlow(e); + } + } + } + else if (node.kind === 171) { + for (var _b = 0, _c = node.properties; _b < _c.length; _b++) { + var p = _c[_b]; + if (p.kind === 253) { + bindDestructuringTargetFlow(p.initializer); + } + else if (p.kind === 254) { + bindAssignmentTargetFlow(p.name); + } + } + } + } + function bindLogicalExpression(node, trueTarget, falseTarget) { + var preRightLabel = createBranchLabel(); + if (node.operatorToken.kind === 51) { + bindCondition(node.left, preRightLabel, falseTarget); + } + else { + bindCondition(node.left, trueTarget, preRightLabel); + } + currentFlow = finishFlowLabel(preRightLabel); + bind(node.operatorToken); + bindCondition(node.right, trueTarget, falseTarget); + } + function bindPrefixUnaryExpressionFlow(node) { + if (node.operator === 49) { + var saveTrueTarget = currentTrueTarget; + currentTrueTarget = currentFalseTarget; + currentFalseTarget = saveTrueTarget; + ts.forEachChild(node, bind); + currentFalseTarget = currentTrueTarget; + currentTrueTarget = saveTrueTarget; + } + else { + ts.forEachChild(node, bind); + } + } + function bindBinaryExpressionFlow(node) { + var operator = node.operatorToken.kind; + if (operator === 51 || operator === 52) { + if (isTopLevelLogicalExpression(node)) { + var postExpressionLabel = createBranchLabel(); + bindLogicalExpression(node, postExpressionLabel, postExpressionLabel); + currentFlow = finishFlowLabel(postExpressionLabel); + } + else { + bindLogicalExpression(node, currentTrueTarget, currentFalseTarget); + } + } + else { + ts.forEachChild(node, bind); + if (operator === 56 && !ts.isAssignmentTarget(node)) { + bindAssignmentTargetFlow(node.left); + } + } + } + function bindDeleteExpressionFlow(node) { + ts.forEachChild(node, bind); + if (node.expression.kind === 172) { + 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.whenTrue); + addAntecedent(postExpressionLabel, currentFlow); + currentFlow = finishFlowLabel(falseLabel); + bind(node.whenFalse); + addAntecedent(postExpressionLabel, currentFlow); + currentFlow = finishFlowLabel(postExpressionLabel); + } + function bindInitializedVariableFlow(node) { + var name = node.name; + if (ts.isBindingPattern(name)) { + for (var _i = 0, _a = name.elements; _i < _a.length; _i++) { + var child = _a[_i]; + bindInitializedVariableFlow(child); + } + } + else { + currentFlow = createFlowAssignment(currentFlow, node); + } + } + function bindVariableDeclarationFlow(node) { + ts.forEachChild(node, bind); + if (node.initializer || node.parent.parent.kind === 207 || node.parent.parent.kind === 208) { + bindInitializedVariableFlow(node); } } function getContainerFlags(node) { switch (node.kind) { - case 191: - case 220: + case 192: case 221: - case 223: - case 170: - case 158: - case 264: + case 222: + case 224: + case 171: + case 159: + case 265: return 1; - case 150: case 151: case 152: - case 146: - case 145: - case 219: + case 153: case 147: + case 146: + case 220: case 148: case 149: - case 155: - case 268: + case 150: case 156: - case 178: + case 269: + case 157: case 179: - case 224: - case 255: - case 222: + case 180: + case 225: + case 256: + case 223: return 5; - case 251: - case 205: + case 252: case 206: case 207: - case 226: + case 208: + case 227: return 2; - case 198: + case 199: return ts.isFunctionLike(node.parent) ? 0 : 2; } return 0; @@ -11966,35 +12429,35 @@ var ts; } function declareSymbolAndAddToSymbolTableWorker(node, symbolFlags, symbolExcludes) { switch (container.kind) { - case 224: + case 225: return declareModuleMember(node, symbolFlags, symbolExcludes); - case 255: + case 256: return declareSourceFileMember(node, symbolFlags, symbolExcludes); - case 191: - case 220: - return declareClassMember(node, symbolFlags, symbolExcludes); - case 223: - return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); - case 158: - case 170: + case 192: case 221: - case 264: + return declareClassMember(node, symbolFlags, symbolExcludes); + case 224: + return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); + case 159: + case 171: + case 222: + case 265: return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes); - case 155: case 156: - case 150: + case 157: case 151: case 152: - case 146: - case 145: + case 153: case 147: + case 146: case 148: case 149: - case 219: - case 178: + case 150: + case 220: case 179: - case 268: - case 222: + case 180: + case 269: + case 223: return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes); } } @@ -12009,11 +12472,11 @@ var ts; : declareSymbol(file.locals, undefined, node, symbolFlags, symbolExcludes); } function hasExportDeclarations(node) { - var body = node.kind === 255 ? node : node.body; - if (body.kind === 255 || body.kind === 225) { + var body = node.kind === 256 ? node : node.body; + if (body.kind === 256 || body.kind === 226) { for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { var stat = _a[_i]; - if (stat.kind === 235 || stat.kind === 234) { + if (stat.kind === 236 || stat.kind === 235) { return true; } } @@ -12080,7 +12543,7 @@ var ts; continue; } var identifier = prop.name; - var currentKind = prop.kind === 252 || prop.kind === 253 || prop.kind === 146 + var currentKind = prop.kind === 253 || prop.kind === 254 || prop.kind === 147 ? 1 : 2; var existingKind = seen[identifier.text]; @@ -12102,10 +12565,10 @@ var ts; } function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) { switch (blockScopeContainer.kind) { - case 224: + case 225: declareModuleMember(node, symbolFlags, symbolExcludes); break; - case 255: + case 256: if (ts.isExternalModule(container)) { declareModuleMember(node, symbolFlags, symbolExcludes); break; @@ -12125,7 +12588,8 @@ var ts; if (inStrictMode && node.originalKeywordKind >= 106 && node.originalKeywordKind <= 114 && - !ts.isIdentifierName(node)) { + !ts.isIdentifierName(node) && + !ts.isInAmbientContext(node)) { if (!file.parseDiagnostics.length) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node))); } @@ -12183,6 +12647,25 @@ var ts; 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 !== 256 && + blockScopeContainer.kind !== 225 && + !ts.isFunctionLike(blockScopeContainer)) { + var errorSpan = ts.getErrorSpanForNode(file, node); + file.bindDiagnostics.push(ts.createFileDiagnostic(file, errorSpan.start, errorSpan.length, getStrictModeBlockScopeFunctionDeclarationMessage(node))); + } + } + } function checkStrictModeNumericLiteral(node) { if (inStrictMode && node.isOctalLiteral) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode)); @@ -12227,17 +12710,17 @@ var ts; } function updateStrictMode(node) { switch (node.kind) { - case 255: - case 225: + case 256: + case 226: updateStrictModeStatementList(node.statements); return; - case 198: + case 199: if (ts.isFunctionLike(node.parent)) { updateStrictModeStatementList(node.statements); } return; - case 220: - case 191: + case 221: + case 192: inStrictMode = true; return; } @@ -12261,8 +12744,17 @@ var ts; function bindWorker(node) { switch (node.kind) { case 69: + case 97: + if (currentFlow && (ts.isExpression(node) || parent.kind === 254)) { + node.flowNode = currentFlow; + } return checkStrictModeIdentifier(node); - case 186: + case 172: + if (currentFlow && isNarrowableReference(node)) { + node.flowNode = currentFlow; + } + break; + case 187: if (ts.isInJavaScriptFile(node)) { var specialKind = ts.getSpecialPropertyAssignmentKind(node); switch (specialKind) { @@ -12285,99 +12777,99 @@ var ts; } } return checkStrictModeBinaryExpression(node); - case 251: + case 252: return checkStrictModeCatchClause(node); - case 180: + case 181: return checkStrictModeDeleteExpression(node); case 8: return checkStrictModeNumericLiteral(node); - case 185: + case 186: return checkStrictModePostfixUnaryExpression(node); - case 184: + case 185: return checkStrictModePrefixUnaryExpression(node); - case 211: + case 212: return checkStrictModeWithStatement(node); - case 164: + case 165: seenThisKeyword = true; return; - case 153: + case 154: return checkTypePredicate(node); - case 140: - return declareSymbolAndAddToSymbolTable(node, 262144, 530912); case 141: + return declareSymbolAndAddToSymbolTable(node, 262144, 530912); + case 142: return bindParameter(node); - case 217: - case 168: + case 218: + case 169: return bindVariableDeclarationOrBindingElement(node); + case 145: case 144: - case 143: - case 265: + case 266: return bindPropertyOrMethodOrAccessor(node, 4 | (node.questionToken ? 536870912 : 0), 107455); - case 252: case 253: - return bindPropertyOrMethodOrAccessor(node, 4, 107455); case 254: + return bindPropertyOrMethodOrAccessor(node, 4, 107455); + case 255: return bindPropertyOrMethodOrAccessor(node, 8, 107455); - case 246: + case 247: hasJsxSpreadAttribute = true; return; - case 150: case 151: case 152: + case 153: return declareSymbolAndAddToSymbolTable(node, 131072, 0); - case 146: - case 145: - return bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 536870912 : 0), ts.isObjectLiteralMethod(node) ? 107455 : 99263); - case 219: - return bindFunctionDeclaration(node); case 147: - return declareSymbolAndAddToSymbolTable(node, 16384, 0); + case 146: + return bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 536870912 : 0), ts.isObjectLiteralMethod(node) ? 107455 : 99263); + case 220: + return bindFunctionDeclaration(node); case 148: - return bindPropertyOrMethodOrAccessor(node, 32768, 41919); + return declareSymbolAndAddToSymbolTable(node, 16384, 0); case 149: + return bindPropertyOrMethodOrAccessor(node, 32768, 41919); + case 150: return bindPropertyOrMethodOrAccessor(node, 65536, 74687); - case 155: case 156: - case 268: + case 157: + case 269: return bindFunctionOrConstructorType(node); - case 158: - case 264: + case 159: + case 265: return bindAnonymousDeclaration(node, 2048, "__type"); - case 170: + case 171: return bindObjectLiteralExpression(node); - case 178: case 179: + case 180: return bindFunctionExpression(node); - case 173: + case 174: if (ts.isInJavaScriptFile(node)) { bindCallExpression(node); } break; - case 191: - case 220: - return bindClassLikeDeclaration(node); + case 192: case 221: - return bindBlockScopedDeclaration(node, 64, 792960); + return bindClassLikeDeclaration(node); case 222: - return bindBlockScopedDeclaration(node, 524288, 793056); + return bindBlockScopedDeclaration(node, 64, 792960); case 223: - return bindEnumDeclaration(node); + return bindBlockScopedDeclaration(node, 524288, 793056); case 224: + return bindEnumDeclaration(node); + case 225: return bindModuleDeclaration(node); - case 228: - case 231: - case 233: - case 237: - return declareSymbolAndAddToSymbolTable(node, 8388608, 8388608); - case 227: - return bindGlobalModuleExportDeclaration(node); - case 230: - return bindImportClause(node); - case 235: - return bindExportDeclaration(node); + case 229: + case 232: case 234: + case 238: + return declareSymbolAndAddToSymbolTable(node, 8388608, 8388608); + case 228: + return bindGlobalModuleExportDeclaration(node); + case 231: + return bindImportClause(node); + case 236: + return bindExportDeclaration(node); + case 235: return bindExportAssignment(node); - case 255: + case 256: return bindSourceFileIfExternalModule(); } } @@ -12386,7 +12878,7 @@ var ts; if (parameterName && parameterName.kind === 69) { checkStrictModeIdentifier(parameterName); } - if (parameterName && parameterName.kind === 164) { + if (parameterName && parameterName.kind === 165) { seenThisKeyword = true; } bind(type); @@ -12401,11 +12893,11 @@ var ts; bindAnonymousDeclaration(file, 512, "\"" + ts.removeFileExtension(file.fileName) + "\""); } function bindExportAssignment(node) { - var boundExpression = node.kind === 234 ? node.expression : node.right; + var boundExpression = node.kind === 235 ? node.expression : node.right; if (!container.symbol || !container.symbol.exports) { bindAnonymousDeclaration(node, 8388608, getDeclarationName(node)); } - else if (boundExpression.kind === 69 && node.kind === 234) { + else if (boundExpression.kind === 69 && node.kind === 235) { declareSymbol(container.symbol.exports, container.symbol, node, 8388608, 107455 | 8388608); } else { @@ -12416,17 +12908,17 @@ var ts; if (node.modifiers && node.modifiers.length) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Modifiers_cannot_appear_here)); } - if (node.parent.kind !== 255) { + if (node.parent.kind !== 256) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_at_top_level)); return; } else { - var parent_4 = node.parent; - if (!ts.isExternalModule(parent_4)) { + var parent_5 = node.parent; + if (!ts.isExternalModule(parent_5)) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_module_files)); return; } - if (!parent_4.isDeclarationFile) { + if (!parent_5.isDeclarationFile) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_declaration_files)); return; } @@ -12462,7 +12954,7 @@ var ts; declareSymbol(file.symbol.exports, file.symbol, node, 4 | 7340032 | 512, 0); } function bindThisPropertyAssignment(node) { - if (container.kind === 178 || container.kind === 219) { + if (container.kind === 179 || container.kind === 220) { container.symbol.members = container.symbol.members || {}; declareSymbol(container.symbol.members, container.symbol, node, 4, 107455 & ~4); } @@ -12497,7 +12989,7 @@ var ts; hasDecorators = true; } } - if (node.kind === 220) { + if (node.kind === 221) { bindBlockScopedDeclaration(node, 32, 899519); } else { @@ -12567,7 +13059,13 @@ var ts; } } checkStrictModeFunctionName(node); - return declareSymbolAndAddToSymbolTable(node, 16, 106927); + if (inStrictMode) { + checkStrictModeFunctionDeclaration(node); + return bindBlockScopedDeclaration(node, 16, 106927); + } + else { + return declareSymbolAndAddToSymbolTable(node, 16, 106927); + } } function bindFunctionExpression(node) { if (!ts.isDeclarationFile(file) && !ts.isInAmbientContext(node)) { @@ -12592,94 +13090,32 @@ var ts; ? bindAnonymousDeclaration(node, symbolFlags, "__computed") : declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes); } - function pushNamedLabel(name) { - initializeReachabilityStateIfNecessary(); - if (ts.hasProperty(labelIndexMap, name.text)) { - return false; - } - labelIndexMap[name.text] = labelStack.push(1) - 1; - return true; - } - function pushImplicitLabel() { - initializeReachabilityStateIfNecessary(); - var index = labelStack.push(1) - 1; - implicitLabels.push(index); - return index; - } - function popNamedLabel(label, outerState) { - var index = labelIndexMap[label.text]; - ts.Debug.assert(index !== undefined); - ts.Debug.assert(labelStack.length == index + 1); - labelIndexMap[label.text] = undefined; - setCurrentStateAtLabel(labelStack.pop(), outerState, label); - } - function popImplicitLabel(implicitLabelIndex, outerState) { - if (labelStack.length !== implicitLabelIndex + 1) { - ts.Debug.assert(false, "Label stack: " + labelStack.length + ", index:" + implicitLabelIndex); - } - var i = implicitLabels.pop(); - if (implicitLabelIndex !== i) { - ts.Debug.assert(false, "i: " + i + ", index: " + implicitLabelIndex); - } - setCurrentStateAtLabel(labelStack.pop(), outerState, undefined); - } - function setCurrentStateAtLabel(innerMergedState, outerState, label) { - if (innerMergedState === 1) { - if (label && !options.allowUnusedLabels) { - file.bindDiagnostics.push(ts.createDiagnosticForNode(label, ts.Diagnostics.Unused_label)); - } - currentReachabilityState = outerState; - } - else { - currentReachabilityState = or(innerMergedState, outerState); - } - } - function jumpToLabel(label, outerState) { - initializeReachabilityStateIfNecessary(); - var index = label ? labelIndexMap[label.text] : ts.lastOrUndefined(implicitLabels); - if (index === undefined) { - return false; - } - var stateAtLabel = labelStack[index]; - labelStack[index] = stateAtLabel === 1 ? outerState : or(stateAtLabel, outerState); - return true; + function shouldReportErrorOnModuleDeclaration(node) { + var instanceState = getModuleInstanceState(node); + return instanceState === 1 || (instanceState === 2 && options.preserveConstEnums); } function checkUnreachable(node) { - switch (currentReachabilityState) { - case 4: - var reportError = (ts.isStatement(node) && node.kind !== 200) || - node.kind === 220 || - (node.kind === 224 && shouldReportErrorOnModuleDeclaration(node)) || - (node.kind === 223 && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums)); - if (reportError) { - currentReachabilityState = 8; - var reportUnreachableCode = !options.allowUnreachableCode && - !ts.isInAmbientContext(node) && - (node.kind !== 199 || - ts.getCombinedNodeFlags(node.declarationList) & 3072 || - ts.forEach(node.declarationList.declarations, function (d) { return d.initializer; })); - if (reportUnreachableCode) { - errorOnFirstToken(node, ts.Diagnostics.Unreachable_code_detected); - } + if (!(currentFlow.flags & 1)) { + return false; + } + if (currentFlow === unreachableFlow) { + var reportError = (ts.isStatement(node) && node.kind !== 201) || + node.kind === 221 || + (node.kind === 225 && shouldReportErrorOnModuleDeclaration(node)) || + (node.kind === 224 && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums)); + if (reportError) { + currentFlow = reportedUnreachableFlow; + var reportUnreachableCode = !options.allowUnreachableCode && + !ts.isInAmbientContext(node) && + (node.kind !== 200 || + ts.getCombinedNodeFlags(node.declarationList) & 3072 || + ts.forEach(node.declarationList.declarations, function (d) { return d.initializer; })); + if (reportUnreachableCode) { + errorOnFirstToken(node, ts.Diagnostics.Unreachable_code_detected); } - case 8: - return true; - default: - return false; + } } - function shouldReportErrorOnModuleDeclaration(node) { - var instanceState = getModuleInstanceState(node); - return instanceState === 1 || (instanceState === 2 && options.preserveConstEnums); - } - } - function initializeReachabilityStateIfNecessary() { - if (labelIndexMap) { - return; - } - currentReachabilityState = 2; - labelIndexMap = {}; - labelStack = []; - implicitLabels = []; + return true; } } })(ts || (ts = {})); @@ -12688,6 +13124,7 @@ var ts; var nextSymbolId = 1; var nextNodeId = 1; var nextMergeId = 1; + var nextFlowId = 1; function getNodeId(node) { if (!node.id) { node.id = nextNodeId; @@ -12742,11 +13179,13 @@ var ts; getIndexTypeOfType: getIndexTypeOfType, getBaseTypes: getBaseTypes, getReturnTypeOfSignature: getReturnTypeOfSignature, + getNonNullableType: getNonNullableType, getSymbolsInScope: getSymbolsInScope, getSymbolAtLocation: getSymbolAtLocation, getShorthandAssignmentValueSymbol: getShorthandAssignmentValueSymbol, getExportSpecifierLocalTargetSymbol: getExportSpecifierLocalTargetSymbol, getTypeAtLocation: getTypeOfNode, + getPropertySymbolOfDestructuringAssignment: getPropertySymbolOfDestructuringAssignment, typeToString: typeToString, getSymbolDisplayBuilder: getSymbolDisplayBuilder, symbolToString: symbolToString, @@ -12779,8 +13218,8 @@ var ts; var nullType = createIntrinsicType(64 | nullableWideningFlags, "null"); var emptyArrayElementType = createIntrinsicType(32 | 2097152, "undefined"); var unknownType = createIntrinsicType(1, "unknown"); + var neverType = createIntrinsicType(134217728, "never"); var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); - var emptyUnionType = emptyObjectType; var emptyGenericType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); emptyGenericType.instantiations = {}; var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); @@ -12820,6 +13259,9 @@ var ts; var getGlobalThenableType; var jsxElementClassType; var deferredNodes; + var flowLoopStart = 0; + var flowLoopCount = 0; + var visitedFlowCount = 0; var tupleTypes = {}; var unionTypes = {}; var intersectionTypes = {}; @@ -12830,30 +13272,39 @@ var ts; var mergedSymbols = []; var symbolLinks = []; var nodeLinks = []; + var flowLoopCaches = []; + var flowLoopNodes = []; + var flowLoopKeys = []; + var flowLoopTypes = []; + var visitedFlowNodes = []; + var visitedFlowTypes = []; var potentialThisCollisions = []; var awaitedTypeStack = []; var diagnostics = ts.createDiagnosticCollection(); - var primitiveTypeInfo = { - "string": { - type: stringType, - flags: 258 - }, - "number": { - type: numberType, - flags: 132 - }, - "boolean": { - type: booleanType, - flags: 8 - }, - "symbol": { - type: esSymbolType, - flags: 16777216 - }, - "undefined": { - type: undefinedType, - flags: 2097152 - } + var typeofEQFacts = { + "string": 1, + "number": 2, + "boolean": 4, + "symbol": 8, + "undefined": 16384, + "object": 16, + "function": 32 + }; + var typeofNEFacts = { + "string": 128, + "number": 256, + "boolean": 512, + "symbol": 1024, + "undefined": 131072, + "object": 2048, + "function": 4096 + }; + var typeofTypesByName = { + "string": stringType, + "number": numberType, + "boolean": booleanType, + "symbol": esSymbolType, + "undefined": undefinedType }; var jsxElementType; var jsxTypes = {}; @@ -12957,7 +13408,7 @@ var ts; target.flags |= source.flags; if (source.valueDeclaration && (!target.valueDeclaration || - (target.valueDeclaration.kind === 224 && source.valueDeclaration.kind !== 224))) { + (target.valueDeclaration.kind === 225 && source.valueDeclaration.kind !== 225))) { target.valueDeclaration = source.valueDeclaration; } ts.forEach(source.declarations, function (node) { @@ -13021,7 +13472,10 @@ var ts; mergeSymbolTable(globals, moduleAugmentation.symbol.exports); } else { - var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found); + var moduleNotFoundError = !ts.isInAmbientContext(moduleName.parent.parent) + ? ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found + : undefined; + var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, moduleNotFoundError); if (!mainModule) { return; } @@ -13061,7 +13515,7 @@ var ts; return nodeLinks[nodeId] || (nodeLinks[nodeId] = {}); } function isGlobalSourceFile(node) { - return node.kind === 255 && !ts.isExternalOrCommonJsModule(node); + return node.kind === 256 && !ts.isExternalOrCommonJsModule(node); } function getSymbol(symbols, name, meaning) { if (meaning && ts.hasProperty(symbols, name)) { @@ -13099,21 +13553,29 @@ var ts; return ts.indexOf(sourceFiles, declarationFile) <= ts.indexOf(sourceFiles, useFile); } if (declaration.pos <= usage.pos) { - return declaration.kind !== 217 || + return declaration.kind !== 218 || !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage); } return isUsedInFunctionOrNonStaticProperty(declaration, usage); function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) { var container = ts.getEnclosingBlockScopeContainer(declaration); - if (declaration.parent.parent.kind === 199 || - declaration.parent.parent.kind === 205) { - return isSameScopeDescendentOf(usage, declaration, container); + switch (declaration.parent.parent.kind) { + case 200: + case 206: + case 208: + if (isSameScopeDescendentOf(usage, declaration, container)) { + return true; + } + break; } - else if (declaration.parent.parent.kind === 207 || - declaration.parent.parent.kind === 206) { - var expression = declaration.parent.parent.expression; - return isSameScopeDescendentOf(usage, expression, container); + switch (declaration.parent.parent.kind) { + case 207: + case 208: + if (isSameScopeDescendentOf(usage, declaration.parent.parent.expression, container)) { + return true; + } } + return false; } function isUsedInFunctionOrNonStaticProperty(declaration, usage) { var container = ts.getEnclosingBlockScopeContainer(declaration); @@ -13126,7 +13588,7 @@ var ts; return true; } var initializerOfNonStaticProperty = current.parent && - current.parent.kind === 144 && + current.parent.kind === 145 && (current.parent.flags & 32) === 0 && current.parent.initializer === current; if (initializerOfNonStaticProperty) { @@ -13148,18 +13610,18 @@ var ts; if (result = getSymbol(location.locals, name, meaning)) { var useResult = true; if (ts.isFunctionLike(location) && lastLocation && lastLocation !== location.body) { - if (meaning & result.flags & 793056 && lastLocation.kind !== 272) { + if (meaning & result.flags & 793056 && lastLocation.kind !== 273) { useResult = result.flags & 262144 ? lastLocation === location.type || - lastLocation.kind === 141 || - lastLocation.kind === 140 + lastLocation.kind === 142 || + lastLocation.kind === 141 : false; } if (meaning & 107455 && result.flags & 1) { useResult = - lastLocation.kind === 141 || + lastLocation.kind === 142 || (lastLocation === location.type && - result.valueDeclaration.kind === 141); + result.valueDeclaration.kind === 142); } } if (useResult) { @@ -13171,12 +13633,12 @@ var ts; } } switch (location.kind) { - case 255: + case 256: if (!ts.isExternalOrCommonJsModule(location)) break; - case 224: + case 225: var moduleExports = getSymbolOfNode(location).exports; - if (location.kind === 255 || ts.isAmbientModule(location)) { + if (location.kind === 256 || ts.isAmbientModule(location)) { if (result = moduleExports["default"]) { var localSymbol = ts.getLocalSymbolForExportDefault(result); if (localSymbol && (result.flags & meaning) && localSymbol.name === name) { @@ -13186,7 +13648,7 @@ var ts; } if (ts.hasProperty(moduleExports, name) && moduleExports[name].flags === 8388608 && - ts.getDeclarationOfKind(moduleExports[name], 237)) { + ts.getDeclarationOfKind(moduleExports[name], 238)) { break; } } @@ -13194,13 +13656,13 @@ var ts; break loop; } break; - case 223: + case 224: if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8)) { break loop; } break; + case 145: case 144: - case 143: if (ts.isClassLike(location.parent) && !(location.flags & 32)) { var ctor = findConstructorDeclaration(location.parent); if (ctor && ctor.locals) { @@ -13210,9 +13672,9 @@ var ts; } } break; - case 220: - case 191: case 221: + case 192: + case 222: if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & 793056)) { if (lastLocation && lastLocation.flags & 32) { error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters); @@ -13220,7 +13682,7 @@ var ts; } break loop; } - if (location.kind === 191 && meaning & 32) { + if (location.kind === 192 && meaning & 32) { var className = location.name; if (className && name === className.text) { result = location.symbol; @@ -13228,28 +13690,28 @@ var ts; } } break; - case 139: + case 140: grandparent = location.parent.parent; - if (ts.isClassLike(grandparent) || grandparent.kind === 221) { + if (ts.isClassLike(grandparent) || grandparent.kind === 222) { if (result = getSymbol(getSymbolOfNode(grandparent).members, name, meaning & 793056)) { error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type); return undefined; } } break; - case 146: - case 145: case 147: + case 146: case 148: case 149: - case 219: - case 179: + case 150: + case 220: + case 180: if (meaning & 3 && name === "arguments") { result = argumentsSymbol; break loop; } break; - case 178: + case 179: if (meaning & 3 && name === "arguments") { result = argumentsSymbol; break loop; @@ -13262,8 +13724,8 @@ var ts; } } break; - case 142: - if (location.parent && location.parent.kind === 141) { + case 143: + if (location.parent && location.parent.kind === 142) { location = location.parent; } if (location.parent && ts.isClassElement(location.parent)) { @@ -13333,7 +13795,7 @@ var ts; ts.Debug.assert((result.flags & 2) !== 0); var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) ? d : undefined; }); ts.Debug.assert(declaration !== undefined, "Block-scoped variable declaration is undefined"); - if (!isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 217), errorLocation)) { + if (!isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 218), errorLocation)) { error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(declaration.name)); } } @@ -13350,10 +13812,10 @@ var ts; } function getAnyImportSyntax(node) { if (ts.isAliasSymbolDeclaration(node)) { - if (node.kind === 228) { + if (node.kind === 229) { return node; } - while (node && node.kind !== 229) { + while (node && node.kind !== 230) { node = node.parent; } return node; @@ -13363,7 +13825,7 @@ var ts; return ts.forEach(symbol.declarations, function (d) { return ts.isAliasSymbolDeclaration(d) ? d : undefined; }); } function getTargetOfImportEqualsDeclaration(node) { - if (node.moduleReference.kind === 239) { + if (node.moduleReference.kind === 240) { return resolveExternalModuleSymbol(resolveExternalModuleName(node, ts.getExternalModuleImportEqualsDeclarationExpression(node))); } return getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, node); @@ -13431,6 +13893,7 @@ var ts; else { symbolFromVariable = getPropertyOfVariable(targetSymbol, name_9.text); } + symbolFromVariable = resolveSymbol(symbolFromVariable); var symbolFromModule = getExportOfModule(targetSymbol, name_9.text); var symbol = symbolFromModule && symbolFromVariable ? combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) : @@ -13458,19 +13921,19 @@ var ts; } function getTargetOfAliasDeclaration(node) { switch (node.kind) { - case 228: + case 229: return getTargetOfImportEqualsDeclaration(node); - case 230: - return getTargetOfImportClause(node); case 231: + return getTargetOfImportClause(node); + case 232: return getTargetOfNamespaceImport(node); - case 233: - return getTargetOfImportSpecifier(node); - case 237: - return getTargetOfExportSpecifier(node); case 234: + return getTargetOfImportSpecifier(node); + case 238: + return getTargetOfExportSpecifier(node); + case 235: return getTargetOfExportAssignment(node); - case 227: + case 228: return getTargetOfGlobalModuleExportDeclaration(node); } } @@ -13500,8 +13963,8 @@ var ts; var symbol = getSymbolOfNode(node); var target = resolveAlias(symbol); if (target) { - var markAlias = (target === unknownSymbol && compilerOptions.isolatedModules) || - (target !== unknownSymbol && (target.flags & 107455) && !isConstEnumOrConstEnumOnlyModule(target)); + var markAlias = target === unknownSymbol || + ((target.flags & 107455) && !isConstEnumOrConstEnumOnlyModule(target)); if (markAlias) { markAliasSymbolAsReferenced(symbol); } @@ -13512,10 +13975,10 @@ var ts; if (!links.referenced) { links.referenced = true; var node = getDeclarationOfAliasSymbol(symbol); - if (node.kind === 234) { + if (node.kind === 235) { checkExpressionCached(node.expression); } - else if (node.kind === 237) { + else if (node.kind === 238) { checkExpressionCached(node.propertyName || node.name); } else if (ts.isInternalModuleImportEqualsDeclaration(node)) { @@ -13525,17 +13988,17 @@ var ts; } function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, importDeclaration) { if (!importDeclaration) { - importDeclaration = ts.getAncestor(entityName, 228); + importDeclaration = ts.getAncestor(entityName, 229); ts.Debug.assert(importDeclaration !== undefined); } if (entityName.kind === 69 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { entityName = entityName.parent; } - if (entityName.kind === 69 || entityName.parent.kind === 138) { + if (entityName.kind === 69 || entityName.parent.kind === 139) { return resolveEntityName(entityName, 1536); } else { - ts.Debug.assert(entityName.parent.kind === 228); + ts.Debug.assert(entityName.parent.kind === 229); return resolveEntityName(entityName, 107455 | 793056 | 1536); } } @@ -13554,9 +14017,9 @@ var ts; return undefined; } } - else if (name.kind === 138 || name.kind === 171) { - var left = name.kind === 138 ? name.left : name.expression; - var right = name.kind === 138 ? name.right : name.name; + else if (name.kind === 139 || name.kind === 172) { + var left = name.kind === 139 ? name.left : name.expression; + var right = name.kind === 139 ? name.right : name.name; var namespace = resolveEntityName(left, 1536, ignoreErrors); if (!namespace || namespace === unknownSymbol || ts.nodeIsMissing(right)) { return undefined; @@ -13719,7 +14182,7 @@ var ts; var members = node.members; for (var _i = 0, members_1 = members; _i < members_1.length; _i++) { var member = members_1[_i]; - if (member.kind === 147 && ts.nodeIsPresent(member.body)) { + if (member.kind === 148 && ts.nodeIsPresent(member.body)) { return member; } } @@ -13785,11 +14248,11 @@ var ts; } } switch (location_1.kind) { - case 255: + case 256: if (!ts.isExternalOrCommonJsModule(location_1)) { break; } - case 224: + case 225: if (result = callback(getSymbolOfNode(location_1).exports)) { return result; } @@ -13822,7 +14285,7 @@ var ts; return ts.forEachValue(symbols, function (symbolFromSymbolTable) { if (symbolFromSymbolTable.flags & 8388608 && symbolFromSymbolTable.name !== "export=" - && !ts.getDeclarationOfKind(symbolFromSymbolTable, 237)) { + && !ts.getDeclarationOfKind(symbolFromSymbolTable, 238)) { if (!useOnlyExternalAliasing || ts.forEach(symbolFromSymbolTable.declarations, ts.isExternalModuleImportEqualsDeclaration)) { var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable); @@ -13853,7 +14316,7 @@ var ts; if (symbolFromSymbolTable === symbol) { return true; } - symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608 && !ts.getDeclarationOfKind(symbolFromSymbolTable, 237)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable; + symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608 && !ts.getDeclarationOfKind(symbolFromSymbolTable, 238)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable; if (symbolFromSymbolTable.flags & meaning) { qualify = true; return true; @@ -13867,10 +14330,10 @@ var ts; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; switch (declaration.kind) { - case 144: - case 146: - case 148: + case 145: + case 147: case 149: + case 150: continue; default: return false; @@ -13926,7 +14389,7 @@ var ts; } } function hasExternalModuleSymbol(declaration) { - return ts.isAmbientModule(declaration) || (declaration.kind === 255 && ts.isExternalOrCommonJsModule(declaration)); + return ts.isAmbientModule(declaration) || (declaration.kind === 256 && ts.isExternalOrCommonJsModule(declaration)); } function hasVisibleDeclarations(symbol) { var aliasesToMakeVisible; @@ -13958,11 +14421,11 @@ var ts; } function isEntityNameVisible(entityName, enclosingDeclaration) { var meaning; - if (entityName.parent.kind === 157 || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { + if (entityName.parent.kind === 158 || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { meaning = 107455 | 1048576; } - else if (entityName.kind === 138 || entityName.kind === 171 || - entityName.parent.kind === 228) { + else if (entityName.kind === 139 || entityName.kind === 172 || + entityName.parent.kind === 229) { meaning = 1536; } else { @@ -14029,10 +14492,10 @@ var ts; function getTypeAliasForTypeLiteral(type) { if (type.symbol && type.symbol.flags & 2048) { var node = type.symbol.declarations[0].parent; - while (node.kind === 163) { + while (node.kind === 164) { node = node.parent; } - if (node.kind === 222) { + if (node.kind === 223) { return getSymbolOfNode(node); } } @@ -14040,7 +14503,7 @@ var ts; } function isTopLevelInExternalModuleAugmentation(node) { return node && node.parent && - node.parent.kind === 225 && + node.parent.kind === 226 && ts.isExternalModuleAugmentation(node.parent.parent); } function getSymbolDisplayBuilder() { @@ -14051,10 +14514,10 @@ var ts; return ts.declarationNameToString(declaration.name); } switch (declaration.kind) { - case 191: + case 192: return "(Anonymous class)"; - case 178: case 179: + case 180: return "(Anonymous function)"; } } @@ -14063,6 +14526,25 @@ var ts; function appendSymbolNameOnly(symbol, writer) { writer.writeSymbol(getNameOfSymbol(symbol), symbol); } + function appendPropertyOrElementAccessForSymbol(symbol, writer) { + var symbolName = getNameOfSymbol(symbol); + var firstChar = symbolName.charCodeAt(0); + var needsElementAccess = !ts.isIdentifierStart(firstChar, languageVersion); + if (needsElementAccess) { + writePunctuation(writer, 19); + if (ts.isSingleOrDoubleQuote(firstChar)) { + writer.writeStringLiteral(symbolName); + } + else { + writer.writeSymbol(symbolName, symbol); + } + writePunctuation(writer, 20); + } + else { + writePunctuation(writer, 21); + writer.writeSymbol(symbolName, symbol); + } + } function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags, typeFlags) { var parentSymbol; function appendParentTypeArgumentsAndSymbolName(symbol) { @@ -14075,10 +14557,12 @@ var ts; buildTypeParameterDisplayFromSymbol(parentSymbol, writer, enclosingDeclaration); } } - writePunctuation(writer, 21); + appendPropertyOrElementAccessForSymbol(symbol, writer); + } + else { + appendSymbolNameOnly(symbol, writer); } parentSymbol = symbol; - appendSymbolNameOnly(symbol, writer); } writer.trackSymbol(symbol, enclosingDeclaration, meaning); function walkSymbol(symbol, meaning) { @@ -14118,7 +14602,7 @@ var ts; var inObjectTypeLiteral = false; return writeType(type, globalFlags); function writeType(type, flags) { - if (type.flags & 16777343) { + if (type.flags & 150995071) { writer.writeKeyword(!(globalFlags & 16) && isTypeAny(type) ? "any" : type.intrinsicName); @@ -14173,7 +14657,7 @@ var ts; } if (pos < end) { writePunctuation(writer, 25); - writeType(typeArguments[pos], 0); + writeType(typeArguments[pos], 256); pos++; while (pos < end) { writePunctuation(writer, 24); @@ -14198,12 +14682,12 @@ var ts; var length_1 = outerTypeParameters.length; while (i < length_1) { var start = i; - var parent_5 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); + var parent_6 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); do { i++; - } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_5); + } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_6); if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) { - writeSymbolTypeReference(parent_5, typeArguments, start, i, flags); + writeSymbolTypeReference(parent_6, typeArguments, start, i, flags); writePunctuation(writer, 21); } } @@ -14230,10 +14714,10 @@ var ts; var symbol = type.symbol; if (symbol) { if (symbol.flags & (32 | 384 | 512)) { - writeTypeofSymbol(type, flags); + writeTypeOfSymbol(type, flags); } else if (shouldWriteTypeOfFunctionSymbol()) { - writeTypeofSymbol(type, flags); + writeTypeOfSymbol(type, flags); } else if (ts.contains(symbolStack, symbol)) { var typeAlias = getTypeAliasForTypeLiteral(type); @@ -14262,7 +14746,7 @@ var ts; var isNonLocalFunctionSymbol = !!(symbol.flags & 16) && (symbol.parent || ts.forEach(symbol.declarations, function (declaration) { - return declaration.parent.kind === 255 || declaration.parent.kind === 225; + return declaration.parent.kind === 256 || declaration.parent.kind === 226; })); if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { return !!(flags & 2) || @@ -14270,7 +14754,7 @@ var ts; } } } - function writeTypeofSymbol(type, typeFormatFlags) { + function writeTypeOfSymbol(type, typeFormatFlags) { writeKeyword(writer, 101); writeSpace(writer); buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455, 0, typeFormatFlags); @@ -14278,7 +14762,7 @@ var ts; function writeIndexSignature(info, keyword) { if (info) { if (info.isReadonly) { - writeKeyword(writer, 127); + writeKeyword(writer, 128); writeSpace(writer); } writePunctuation(writer, 19); @@ -14296,7 +14780,7 @@ var ts; } function writePropertyWithModifiers(prop) { if (isReadonlySymbol(prop)) { - writeKeyword(writer, 127); + writeKeyword(writer, 128); writeSpace(writer); } buildSymbolDisplay(prop, writer); @@ -14304,6 +14788,17 @@ var ts; writePunctuation(writer, 53); } } + function shouldAddParenthesisAroundFunctionType(callSignature, flags) { + if (flags & 64) { + return true; + } + else if (flags & 256) { + var typeParameters = callSignature.target && (flags & 32) ? + callSignature.target.typeParameters : callSignature.typeParameters; + return typeParameters && typeParameters.length !== 0; + } + return false; + } function writeLiteralType(type, flags) { var resolved = resolveStructuredTypeMembers(type); if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) { @@ -14313,11 +14808,12 @@ var ts; return; } if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { - if (flags & 64) { + var parenthesizeSignature = shouldAddParenthesisAroundFunctionType(resolved.callSignatures[0], flags); + if (parenthesizeSignature) { writePunctuation(writer, 17); } buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, undefined, symbolStack); - if (flags & 64) { + if (parenthesizeSignature) { writePunctuation(writer, 18); } return; @@ -14352,8 +14848,8 @@ var ts; writePunctuation(writer, 23); writer.writeLine(); } - writeIndexSignature(resolved.stringIndexInfo, 131); - writeIndexSignature(resolved.numberIndexInfo, 129); + writeIndexSignature(resolved.stringIndexInfo, 132); + writeIndexSignature(resolved.numberIndexInfo, 130); for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) { var p = _e[_d]; var t = getTypeOfSymbol(p); @@ -14416,12 +14912,12 @@ var ts; buildTypeDisplay(getTypeOfSymbol(p), writer, enclosingDeclaration, flags, symbolStack); } function buildBindingPatternDisplay(bindingPattern, writer, enclosingDeclaration, flags, symbolStack) { - if (bindingPattern.kind === 166) { + if (bindingPattern.kind === 167) { writePunctuation(writer, 15); buildDisplayForCommaSeparatedList(bindingPattern.elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); }); writePunctuation(writer, 16); } - else if (bindingPattern.kind === 167) { + else if (bindingPattern.kind === 168) { writePunctuation(writer, 19); var elements = bindingPattern.elements; buildDisplayForCommaSeparatedList(elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); }); @@ -14432,10 +14928,10 @@ var ts; } } function buildBindingElementDisplay(bindingElement, writer, enclosingDeclaration, flags, symbolStack) { - if (bindingElement.kind === 192) { + if (bindingElement.kind === 193) { return; } - ts.Debug.assert(bindingElement.kind === 168); + ts.Debug.assert(bindingElement.kind === 169); if (bindingElement.propertyName) { writer.writeSymbol(ts.getTextOfNode(bindingElement.propertyName), bindingElement.symbol); writePunctuation(writer, 54); @@ -14470,12 +14966,14 @@ var ts; function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration, flags, symbolStack) { if (typeParameters && typeParameters.length) { writePunctuation(writer, 25); + var flags_1 = 256; for (var i = 0; i < typeParameters.length; i++) { if (i > 0) { writePunctuation(writer, 24); writeSpace(writer); + flags_1 = 0; } - buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, 0); + buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, flags_1); } writePunctuation(writer, 27); } @@ -14564,63 +15062,63 @@ var ts; return false; function determineIfDeclarationIsVisible() { switch (node.kind) { - case 168: + case 169: return isDeclarationVisible(node.parent.parent); - case 217: + case 218: if (ts.isBindingPattern(node.name) && !node.name.elements.length) { return false; } - case 224: - case 220: + case 225: case 221: case 222: - case 219: case 223: - case 228: + case 220: + case 224: + case 229: if (ts.isExternalModuleAugmentation(node)) { return true; } - var parent_6 = getDeclarationContainer(node); + var parent_7 = getDeclarationContainer(node); if (!(ts.getCombinedNodeFlags(node) & 1) && - !(node.kind !== 228 && parent_6.kind !== 255 && ts.isInAmbientContext(parent_6))) { - return isGlobalSourceFile(parent_6); + !(node.kind !== 229 && parent_7.kind !== 256 && ts.isInAmbientContext(parent_7))) { + return isGlobalSourceFile(parent_7); } - return isDeclarationVisible(parent_6); - case 144: - case 143: - case 148: - case 149: - case 146: + return isDeclarationVisible(parent_7); case 145: + case 144: + case 149: + case 150: + case 147: + case 146: if (node.flags & (8 | 16)) { return false; } - case 147: - case 151: - case 150: + case 148: case 152: - case 141: - case 225: - case 155: + case 151: + case 153: + case 142: + case 226: case 156: - case 158: - case 154: + case 157: case 159: + case 155: case 160: case 161: case 162: case 163: + case 164: return isDeclarationVisible(node.parent); - case 230: case 231: - case 233: - return false; - case 140: - case 255: - return true; + case 232: case 234: return false; + case 141: + case 256: + return true; + case 235: + return false; default: return false; } @@ -14628,10 +15126,10 @@ var ts; } function collectLinkedAliases(node) { var exportSymbol; - if (node.parent && node.parent.kind === 234) { + if (node.parent && node.parent.kind === 235) { exportSymbol = resolveName(node.parent, node.text, 107455 | 793056 | 1536 | 8388608, ts.Diagnostics.Cannot_find_name_0, node); } - else if (node.parent.kind === 237) { + else if (node.parent.kind === 238) { var exportSpecifier = node.parent; exportSymbol = exportSpecifier.parent.parent.moduleSpecifier ? getExternalModuleMember(exportSpecifier.parent.parent, exportSpecifier) : @@ -14652,7 +15150,7 @@ var ts; if (ts.isInternalModuleImportEqualsDeclaration(declaration)) { var internalModuleReference = declaration.moduleReference; var firstIdentifier = getFirstIdentifier(internalModuleReference); - var importSymbol = resolveName(declaration, firstIdentifier.text, 107455 | 793056 | 1536, ts.Diagnostics.Cannot_find_name_0, firstIdentifier); + var importSymbol = resolveName(declaration, firstIdentifier.text, 107455 | 793056 | 1536, undefined, undefined); if (importSymbol) { buildVisibleNodeList(importSymbol.declarations); } @@ -14710,12 +15208,12 @@ var ts; node = ts.getRootDeclaration(node); while (node) { switch (node.kind) { - case 217: case 218: + case 219: + case 234: case 233: case 232: case 231: - case 230: node = node.parent; break; default: @@ -14745,7 +15243,7 @@ var ts; case 9: case 8: return name.text; - case 139: + case 140: if (ts.isStringOrNumericLiteral(name.expression.kind)) { return name.expression.text; } @@ -14753,7 +15251,7 @@ var ts; return undefined; } function isComputedNonLiteralName(name) { - return name.kind === 139 && !ts.isStringOrNumericLiteral(name.expression.kind); + return name.kind === 140 && !ts.isStringOrNumericLiteral(name.expression.kind); } function getTypeForBindingElement(declaration) { var pattern = declaration.parent; @@ -14768,7 +15266,7 @@ var ts; return parentType; } var type; - if (pattern.kind === 166) { + if (pattern.kind === 167) { var name_10 = declaration.propertyName || declaration.name; if (isComputedNonLiteralName(name_10)) { return anyType; @@ -14807,7 +15305,7 @@ var ts; } } if (strictNullChecks && declaration.initializer && !(getNullableKind(checkExpressionCached(declaration.initializer)) & 32)) { - type = removeNullableKind(type, 32); + type = getTypeWithFacts(type, 131072); } return type; } @@ -14822,15 +15320,15 @@ var ts; if (typeTag && typeTag.typeExpression) { return typeTag.typeExpression.type; } - if (declaration.kind === 217 && - declaration.parent.kind === 218 && - declaration.parent.parent.kind === 199) { + if (declaration.kind === 218 && + declaration.parent.kind === 219 && + declaration.parent.parent.kind === 200) { var annotation = ts.getJSDocTypeTag(declaration.parent.parent); if (annotation && annotation.typeExpression) { return annotation.typeExpression.type; } } - else if (declaration.kind === 141) { + else if (declaration.kind === 142) { var paramTag = ts.getCorrespondingJSDocParameterTag(declaration); if (paramTag && paramTag.typeExpression) { return paramTag.typeExpression.type; @@ -14838,6 +15336,9 @@ var ts; } return undefined; } + function addOptionality(type, optional) { + return strictNullChecks && optional ? addNullableKind(type, 32) : type; + } function getTypeForVariableLikeDeclaration(declaration) { if (declaration.flags & 134217728) { var type = getTypeForVariableLikeDeclarationFromJSDocComment(declaration); @@ -14845,38 +15346,42 @@ var ts; return type; } } - if (declaration.parent.parent.kind === 206) { + if (declaration.parent.parent.kind === 207) { return stringType; } - if (declaration.parent.parent.kind === 207) { + if (declaration.parent.parent.kind === 208) { return checkRightHandSideOfForOf(declaration.parent.parent.expression) || anyType; } if (ts.isBindingPattern(declaration.parent)) { return getTypeForBindingElement(declaration); } if (declaration.type) { - var type = getTypeFromTypeNode(declaration.type); - return strictNullChecks && declaration.questionToken ? addNullableKind(type, 32) : type; + return addOptionality(getTypeFromTypeNode(declaration.type), !!declaration.questionToken); } - if (declaration.kind === 141) { + if (declaration.kind === 142) { var func = declaration.parent; - if (func.kind === 149 && !ts.hasDynamicName(func)) { - var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 148); + if (func.kind === 150 && !ts.hasDynamicName(func)) { + var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 149); if (getter) { - return getReturnTypeOfSignature(getSignatureFromDeclaration(getter)); + var signature = getSignatureFromDeclaration(getter); + var thisParameter = getAccessorThisParameter(func); + if (thisParameter && declaration === thisParameter) { + return signature.thisType; + } + return getReturnTypeOfSignature(signature); } } var type = declaration.symbol.name === "this" ? getContextuallyTypedThisType(func) : getContextuallyTypedParameterType(declaration); if (type) { - return strictNullChecks && declaration.questionToken ? addNullableKind(type, 32) : type; + return addOptionality(type, !!declaration.questionToken); } } if (declaration.initializer) { - return checkExpressionCached(declaration.initializer); + return addOptionality(checkExpressionCached(declaration.initializer), !!declaration.questionToken); } - if (declaration.kind === 253) { + if (declaration.kind === 254) { return checkIdentifier(declaration.name); } if (ts.isBindingPattern(declaration.name)) { @@ -14893,7 +15398,7 @@ var ts; if (ts.isBindingPattern(element.name)) { return getTypeFromBindingPattern(element.name, includePatternInType); } - if (compilerOptions.noImplicitAny) { + if (compilerOptions.noImplicitAny && !declarationBelongsToPrivateAmbientMember(element)) { reportImplicitAnyError(element, anyType); } return anyType; @@ -14928,7 +15433,7 @@ var ts; if (elements.length === 0 || elements[elements.length - 1].dotDotDotToken) { return languageVersion >= 2 ? createIterableType(anyType) : anyArrayType; } - var elementTypes = ts.map(elements, function (e) { return e.kind === 192 ? anyType : getTypeFromBindingElement(e, includePatternInType); }); + var elementTypes = ts.map(elements, function (e) { return e.kind === 193 ? anyType : getTypeFromBindingElement(e, includePatternInType); }); if (includePatternInType) { var result = createNewTupleType(elementTypes); result.pattern = pattern; @@ -14937,7 +15442,7 @@ var ts; return createTupleType(elementTypes); } function getTypeFromBindingPattern(pattern, includePatternInType) { - return pattern.kind === 166 + return pattern.kind === 167 ? getTypeFromObjectBindingPattern(pattern, includePatternInType) : getTypeFromArrayBindingPattern(pattern, includePatternInType); } @@ -14947,20 +15452,24 @@ var ts; if (reportErrors) { reportErrorsFromWidening(declaration, type); } - if (declaration.kind === 252) { + if (declaration.kind === 253) { return type; } return getWidenedType(type); } type = declaration.dotDotDotToken ? anyArrayType : anyType; if (reportErrors && compilerOptions.noImplicitAny) { - var root = ts.getRootDeclaration(declaration); - if (!isPrivateWithinAmbient(root) && !(root.kind === 141 && isPrivateWithinAmbient(root.parent))) { + if (!declarationBelongsToPrivateAmbientMember(declaration)) { reportImplicitAnyError(declaration, type); } } return type; } + function declarationBelongsToPrivateAmbientMember(declaration) { + var root = ts.getRootDeclaration(declaration); + var memberDeclaration = root.kind === 142 ? root.parent : root; + return isPrivateWithinAmbient(memberDeclaration); + } function getTypeOfVariableOrParameterOrProperty(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { @@ -14968,17 +15477,17 @@ var ts; return links.type = getTypeOfPrototypeProperty(symbol); } var declaration = symbol.valueDeclaration; - if (declaration.parent.kind === 251) { + if (declaration.parent.kind === 252) { return links.type = anyType; } - if (declaration.kind === 234) { + if (declaration.kind === 235) { return links.type = checkExpression(declaration.expression); } - if (declaration.kind === 186) { + if (declaration.kind === 187) { return links.type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); } - if (declaration.kind === 171) { - if (declaration.parent.kind === 186) { + if (declaration.kind === 172) { + if (declaration.parent.kind === 187) { return links.type = checkExpressionCached(declaration.parent.right); } } @@ -15004,7 +15513,7 @@ var ts; } function getAnnotatedAccessorType(accessor) { if (accessor) { - if (accessor.kind === 148) { + if (accessor.kind === 149) { return accessor.type && getTypeFromTypeNode(accessor.type); } else { @@ -15014,11 +15523,20 @@ var ts; } return undefined; } + function getAnnotatedAccessorThisType(accessor) { + if (accessor) { + var parameter = getAccessorThisParameter(accessor); + if (parameter && parameter.type) { + return getTypeFromTypeNode(accessor.parameters[0].type); + } + } + return undefined; + } function getTypeOfAccessors(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - var getter = ts.getDeclarationOfKind(symbol, 148); - var setter = ts.getDeclarationOfKind(symbol, 149); + var getter = ts.getDeclarationOfKind(symbol, 149); + var setter = ts.getDeclarationOfKind(symbol, 150); if (getter && getter.flags & 134217728) { var jsDocType = getTypeForVariableLikeDeclarationFromJSDocComment(getter); if (jsDocType) { @@ -15053,7 +15571,7 @@ var ts; if (!popTypeResolution()) { type = anyType; if (compilerOptions.noImplicitAny) { - var getter_1 = ts.getDeclarationOfKind(symbol, 148); + var getter_1 = ts.getDeclarationOfKind(symbol, 149); 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)); } } @@ -15064,7 +15582,9 @@ var ts; function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - links.type = createObjectType(65536, symbol); + var type = createObjectType(65536, symbol); + links.type = strictNullChecks && symbol.flags & 536870912 ? + addNullableKind(type, 32) : type; } return links.type; } @@ -15142,9 +15662,9 @@ var ts; if (!node) { return typeParameters; } - if (node.kind === 220 || node.kind === 191 || - node.kind === 219 || node.kind === 178 || - node.kind === 146 || node.kind === 179) { + if (node.kind === 221 || node.kind === 192 || + node.kind === 220 || node.kind === 179 || + node.kind === 147 || node.kind === 180) { var declarations = node.typeParameters; if (declarations) { return appendTypeParameters(appendOuterTypeParameters(typeParameters, node), declarations); @@ -15153,15 +15673,15 @@ var ts; } } function getOuterTypeParametersOfClassOrInterface(symbol) { - var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 221); + var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 222); return appendOuterTypeParameters(undefined, declaration); } function getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) { var result; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var node = _a[_i]; - if (node.kind === 221 || node.kind === 220 || - node.kind === 191 || node.kind === 222) { + if (node.kind === 222 || node.kind === 221 || + node.kind === 192 || node.kind === 223) { var declaration = node; if (declaration.typeParameters) { result = appendTypeParameters(result, declaration.typeParameters); @@ -15284,7 +15804,7 @@ var ts; type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray; for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 221 && ts.getInterfaceBaseTypeNodes(declaration)) { + if (declaration.kind === 222 && ts.getInterfaceBaseTypeNodes(declaration)) { for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) { var node = _c[_b]; var baseType = getTypeFromTypeNode(node); @@ -15313,7 +15833,7 @@ var ts; function isIndependentInterface(symbol) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 221) { + if (declaration.kind === 222) { if (declaration.flags & 16384) { return false; } @@ -15362,7 +15882,7 @@ var ts; if (!pushTypeResolution(symbol, 2)) { return unknownType; } - var declaration = ts.getDeclarationOfKind(symbol, 222); + var declaration = ts.getDeclarationOfKind(symbol, 223); var type = getTypeFromTypeNode(declaration.type); if (popTypeResolution()) { links.typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); @@ -15393,7 +15913,7 @@ var ts; if (!links.declaredType) { var type = createType(512); type.symbol = symbol; - if (!ts.getDeclarationOfKind(symbol, 140).constraint) { + if (!ts.getDeclarationOfKind(symbol, 141).constraint) { type.constraint = noConstraintType; } links.declaredType = type; @@ -15440,18 +15960,19 @@ var ts; function isIndependentType(node) { switch (node.kind) { case 117: - case 131: - case 129: - case 120: case 132: + case 130: + case 120: + case 133: case 103: - case 134: + case 135: case 93: - case 165: + case 127: + case 166: return true; - case 159: + case 160: return isIndependentType(node.elementType); - case 154: + case 155: return isIndependentTypeReference(node); } return false; @@ -15460,7 +15981,7 @@ var ts; return node.type && isIndependentType(node.type) || !node.type && !node.initializer; } function isIndependentFunctionLikeDeclaration(node) { - if (node.kind !== 147 && (!node.type || !isIndependentType(node.type))) { + if (node.kind !== 148 && (!node.type || !isIndependentType(node.type))) { return false; } for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) { @@ -15476,12 +15997,12 @@ var ts; var declaration = symbol.declarations[0]; if (declaration) { switch (declaration.kind) { - case 144: - case 143: - return isIndependentVariableLikeDeclaration(declaration); - case 146: case 145: + case 144: + return isIndependentVariableLikeDeclaration(declaration); case 147: + case 146: + case 148: return isIndependentFunctionLikeDeclaration(declaration); } } @@ -15968,7 +16489,9 @@ var ts; propTypes.push(getTypeOfSymbol(prop)); } } - return getUnionType(propTypes); + if (propTypes.length) { + return getUnionType(propTypes); + } } return undefined; } @@ -16002,7 +16525,7 @@ var ts; } function isOptionalParameter(node) { if (node.flags & 134217728) { - if (node.type && node.type.kind === 267) { + if (node.type && node.type.kind === 268) { return true; } var paramTag = ts.getCorrespondingJSDocParameterTag(node); @@ -16011,7 +16534,7 @@ var ts; return true; } if (paramTag.typeExpression) { - return paramTag.typeExpression.type.kind === 267; + return paramTag.typeExpression.type.kind === 268; } } } @@ -16047,20 +16570,12 @@ var ts; function getSignatureFromDeclaration(declaration) { var links = getNodeLinks(declaration); if (!links.resolvedSignature) { - var classType = declaration.kind === 147 ? - getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol)) - : undefined; - var typeParameters = classType ? classType.localTypeParameters : - declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : - getTypeParametersFromJSDocTemplate(declaration); var parameters = []; var hasStringLiterals = false; var minArgumentCount = -1; var thisType = undefined; var hasThisParameter = void 0; var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); - var returnType = undefined; - var typePredicate = undefined; for (var i = isJSConstructSignature ? 1 : 0, n = declaration.parameters.length; i < n; i++) { var param = declaration.parameters[i]; var paramSymbol = param.symbol; @@ -16075,7 +16590,7 @@ var ts; else { parameters.push(paramSymbol); } - if (param.type && param.type.kind === 165) { + if (param.type && param.type.kind === 166) { hasStringLiterals = true; } if (param.initializer || param.questionToken || param.dotDotDotToken) { @@ -16087,41 +16602,57 @@ var ts; minArgumentCount = -1; } } + if ((declaration.kind === 149 || declaration.kind === 150) && + !ts.hasDynamicName(declaration) && + (!hasThisParameter || thisType === unknownType)) { + var otherKind = declaration.kind === 149 ? 150 : 149; + var setter = ts.getDeclarationOfKind(declaration.symbol, otherKind); + thisType = getAnnotatedAccessorThisType(setter); + } if (minArgumentCount < 0) { minArgumentCount = declaration.parameters.length - (hasThisParameter ? 1 : 0); } if (isJSConstructSignature) { minArgumentCount--; - returnType = getTypeFromTypeNode(declaration.parameters[0].type); - } - else if (classType) { - returnType = classType; - } - else if (declaration.type) { - returnType = getTypeFromTypeNode(declaration.type); - if (declaration.type.kind === 153) { - typePredicate = createTypePredicateFromTypePredicateNode(declaration.type); - } - } - else { - if (declaration.flags & 134217728) { - var type = getReturnTypeFromJSDocComment(declaration); - if (type && type !== unknownType) { - returnType = type; - } - } - if (declaration.kind === 148 && !ts.hasDynamicName(declaration)) { - var setter = ts.getDeclarationOfKind(declaration.symbol, 149); - returnType = getAnnotatedAccessorType(setter); - } - if (!returnType && ts.nodeIsMissing(declaration.body)) { - returnType = anyType; - } } + var classType = declaration.kind === 148 ? + getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol)) + : undefined; + var typeParameters = classType ? classType.localTypeParameters : + declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : + getTypeParametersFromJSDocTemplate(declaration); + var returnType = getSignatureReturnTypeFromDeclaration(declaration, minArgumentCount, isJSConstructSignature, classType); + var typePredicate = declaration.type && declaration.type.kind === 154 ? + createTypePredicateFromTypePredicateNode(declaration.type) : + undefined; links.resolvedSignature = createSignature(declaration, typeParameters, thisType, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); } return links.resolvedSignature; } + function getSignatureReturnTypeFromDeclaration(declaration, minArgumentCount, isJSConstructSignature, classType) { + if (isJSConstructSignature) { + return getTypeFromTypeNode(declaration.parameters[0].type); + } + else if (classType) { + return classType; + } + else if (declaration.type) { + return getTypeFromTypeNode(declaration.type); + } + if (declaration.flags & 134217728) { + var type = getReturnTypeFromJSDocComment(declaration); + if (type && type !== unknownType) { + return type; + } + } + if (declaration.kind === 149 && !ts.hasDynamicName(declaration)) { + var setter = ts.getDeclarationOfKind(declaration.symbol, 150); + return getAnnotatedAccessorType(setter); + } + if (ts.nodeIsMissing(declaration.body)) { + return anyType; + } + } function getSignaturesOfSymbol(symbol) { if (!symbol) return emptyArray; @@ -16129,20 +16660,20 @@ var ts; for (var i = 0, len = symbol.declarations.length; i < len; i++) { var node = symbol.declarations[i]; switch (node.kind) { - case 155: case 156: - case 219: - case 146: - case 145: + case 157: + case 220: case 147: - case 150: + case 146: + case 148: case 151: case 152: - case 148: + case 153: case 149: - case 178: + case 150: case 179: - case 268: + case 180: + case 269: if (i > 0 && node.body) { var previous = symbol.declarations[i - 1]; if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) { @@ -16211,18 +16742,13 @@ var ts; if (!signature.typeParameters) return signature; if (!signature.erasedSignatureCache) { - if (signature.target) { - signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper); - } - else { - signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true); - } + signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true); } return signature.erasedSignatureCache; } function getOrCreateTypeFromSignature(signature) { if (!signature.isolatedSignatureType) { - var isConstructor = signature.declaration.kind === 147 || signature.declaration.kind === 151; + var isConstructor = signature.declaration.kind === 148 || signature.declaration.kind === 152; var type = createObjectType(65536 | 262144); type.members = emptySymbols; type.properties = emptyArray; @@ -16236,7 +16762,7 @@ var ts; return symbol.members["__index"]; } function getIndexDeclarationOfSymbol(symbol, kind) { - var syntaxKind = kind === 1 ? 129 : 131; + var syntaxKind = kind === 1 ? 130 : 132; var indexSymbol = getIndexSymbol(symbol); if (indexSymbol) { for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) { @@ -16263,7 +16789,7 @@ var ts; return undefined; } function getConstraintDeclaration(type) { - return ts.getDeclarationOfKind(type.symbol, 140).constraint; + return ts.getDeclarationOfKind(type.symbol, 141).constraint; } function hasConstraintReferenceTo(type, target) { var checked; @@ -16296,7 +16822,7 @@ var ts; return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint; } function getParentSymbolOfTypeParameter(typeParameter) { - return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 140).parent); + return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 141).parent); } function getTypeListId(types) { if (types) { @@ -16384,11 +16910,11 @@ var ts; } function getTypeReferenceName(node) { switch (node.kind) { - case 154: + case 155: return node.typeName; - case 266: + case 267: return node.name; - case 193: + case 194: if (ts.isSupportedExpressionWithTypeArguments(node)) { return node.expression; } @@ -16411,7 +16937,7 @@ var ts; if (symbol.flags & 524288) { return getTypeFromTypeAliasReference(node, symbol); } - if (symbol.flags & 107455 && node.kind === 266) { + if (symbol.flags & 107455 && node.kind === 267) { return getTypeOfSymbol(symbol); } return getTypeFromNonGenericTypeReference(node, symbol); @@ -16421,7 +16947,7 @@ var ts; if (!links.resolvedType) { var symbol = void 0; var type = void 0; - if (node.kind === 266) { + if (node.kind === 267) { var typeReferenceName = getTypeReferenceName(node); symbol = resolveTypeReferenceName(node, typeReferenceName); type = getTypeReferenceType(node, symbol); @@ -16429,7 +16955,7 @@ var ts; links.resolvedType = type; } else { - var typeNameOrExpression = node.kind === 154 ? node.typeName : + var typeNameOrExpression = node.kind === 155 ? node.typeName : ts.isSupportedExpressionWithTypeArguments(node) ? node.expression : undefined; symbol = typeNameOrExpression && resolveEntityName(typeNameOrExpression, 793056) || unknownSymbol; @@ -16456,9 +16982,9 @@ var ts; for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) { var declaration = declarations_3[_i]; switch (declaration.kind) { - case 220: case 221: - case 223: + case 222: + case 224: return declaration; } } @@ -16549,7 +17075,7 @@ var ts; if (type.flags & 64) typeSet.containsNull = true; } - else if (!ts.contains(typeSet, type)) { + else if (type !== neverType && !ts.contains(typeSet, type)) { typeSet.push(type); } } @@ -16578,7 +17104,10 @@ var ts; } function getUnionType(types, noSubtypeReduction) { if (types.length === 0) { - return emptyUnionType; + return neverType; + } + if (types.length === 1) { + return types[0]; } var typeSet = []; addTypesToSet(typeSet, types, 16384); @@ -16595,7 +17124,9 @@ var ts; removeSubtypes(typeSet); } if (typeSet.length === 0) { - return typeSet.containsNull ? nullType : undefinedType; + return typeSet.containsNull ? nullType : + typeSet.containsUndefined ? undefinedType : + neverType; } else if (typeSet.length === 1) { return typeSet[0]; @@ -16668,7 +17199,7 @@ var ts; function getTypeFromStringLiteralTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { - links.resolvedType = getStringLiteralTypeForText(node.text); + links.resolvedType = getStringLiteralTypeForText(ts.unescapeIdentifier(node.text)); } return links.resolvedType; } @@ -16691,9 +17222,9 @@ var ts; function getThisType(node) { var container = ts.getThisContainer(node, false); var parent = container && container.parent; - if (parent && (ts.isClassLike(parent) || parent.kind === 221)) { + if (parent && (ts.isClassLike(parent) || parent.kind === 222)) { if (!(container.flags & 32) && - (container.kind !== 147 || ts.isNodeDescendentOf(node, container.body))) { + (container.kind !== 148 || ts.isNodeDescendentOf(node, container.body))) { return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType; } } @@ -16710,66 +17241,69 @@ var ts; function getTypeFromTypeNode(node) { switch (node.kind) { case 117: - case 257: case 258: + case 259: return anyType; - case 131: + case 132: return stringType; - case 129: + case 130: return numberType; case 120: return booleanType; - case 132: + case 133: return esSymbolType; case 103: return voidType; - case 134: + case 135: return undefinedType; case 93: return nullType; - case 164: - return getTypeFromThisTypeNode(node); + case 127: + return neverType; case 165: + case 97: + return getTypeFromThisTypeNode(node); + case 166: return getTypeFromStringLiteralTypeNode(node); - case 154: - case 266: - return getTypeFromTypeReference(node); - case 153: - return booleanType; - case 193: - return getTypeFromTypeReference(node); - case 157: - return getTypeFromTypeQueryNode(node); - case 159: - case 259: - return getTypeFromArrayTypeNode(node); - case 160: - return getTypeFromTupleTypeNode(node); - case 161: - case 260: - return getTypeFromUnionTypeNode(node); - case 162: - return getTypeFromIntersectionTypeNode(node); - case 163: - case 262: - case 263: - case 270: - case 271: - case 267: - return getTypeFromTypeNode(node.type); case 155: - case 156: + case 267: + return getTypeFromTypeReference(node); + case 154: + return booleanType; + case 194: + return getTypeFromTypeReference(node); case 158: - case 268: + return getTypeFromTypeQueryNode(node); + case 160: + case 260: + return getTypeFromArrayTypeNode(node); + case 161: + return getTypeFromTupleTypeNode(node); + case 162: + case 261: + return getTypeFromUnionTypeNode(node); + case 163: + return getTypeFromIntersectionTypeNode(node); + case 164: + case 263: case 264: + case 271: + case 272: + case 268: + return getTypeFromTypeNode(node.type); + case 156: + case 157: + case 159: + case 269: + case 265: return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); case 69: - case 138: + case 139: var symbol = getSymbolAtLocation(node); return symbol && getDeclaredTypeOfSymbol(symbol); - case 261: + case 262: return getTypeFromJSDocTupleType(node); - case 269: + case 270: return getTypeFromJSDocVariadicType(node); default: return unknownType; @@ -16917,41 +17451,41 @@ var ts; var node = symbol.declarations[0].parent; while (node) { switch (node.kind) { - case 155: case 156: - case 219: - case 146: - case 145: + case 157: + case 220: case 147: - case 150: + case 146: + case 148: case 151: case 152: - case 148: + case 153: case 149: - case 178: + case 150: case 179: - case 220: - case 191: + case 180: case 221: + case 192: case 222: + case 223: var declaration = node; if (declaration.typeParameters) { for (var _i = 0, _a = declaration.typeParameters; _i < _a.length; _i++) { var d = _a[_i]; - if (ts.contains(mappedTypes, getDeclaredTypeOfTypeParameter(d.symbol))) { + if (ts.contains(mappedTypes, getDeclaredTypeOfTypeParameter(getSymbolOfNode(d)))) { return true; } } } - if (ts.isClassLike(node) || node.kind === 221) { + if (ts.isClassLike(node) || node.kind === 222) { var thisType = getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType; if (thisType && ts.contains(mappedTypes, thisType)) { return true; } } break; - case 224: - case 255: + case 225: + case 256: return false; } node = node.parent; @@ -16988,36 +17522,39 @@ var ts; return info && createIndexInfo(instantiateType(info.type, mapper), info.isReadonly, info.declaration); } function isContextSensitive(node) { - ts.Debug.assert(node.kind !== 146 || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 147 || ts.isObjectLiteralMethod(node)); switch (node.kind) { - case 178: case 179: + case 180: return isContextSensitiveFunctionLikeDeclaration(node); - case 170: + case 171: return ts.forEach(node.properties, isContextSensitive); - case 169: + case 170: return ts.forEach(node.elements, isContextSensitive); - case 187: + case 188: return isContextSensitive(node.whenTrue) || isContextSensitive(node.whenFalse); - case 186: + case 187: return node.operatorToken.kind === 52 && (isContextSensitive(node.left) || isContextSensitive(node.right)); - case 252: + case 253: return isContextSensitive(node.initializer); + case 147: case 146: - case 145: return isContextSensitiveFunctionLikeDeclaration(node); - case 177: + case 178: return isContextSensitive(node.expression); } return false; } function isContextSensitiveFunctionLikeDeclaration(node) { var areAllParametersUntyped = !ts.forEach(node.parameters, function (p) { return p.type; }); - var isNullaryArrow = node.kind === 179 && !node.parameters.length; + var isNullaryArrow = node.kind === 180 && !node.parameters.length; return !node.typeParameters && areAllParametersUntyped && !isNullaryArrow; } + function isContextSensitiveFunctionOrObjectLiteralMethod(func) { + return (isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) && isContextSensitiveFunctionLikeDeclaration(func); + } function getTypeWithoutSignatures(type) { if (type.flags & 80896) { var resolved = resolveStructuredTypeMembers(type); @@ -17226,33 +17763,35 @@ var ts; if (relation === identityRelation) { return isIdenticalTo(source, target); } - if (isTypeAny(target)) - return -1; - if (source.flags & 32) { - if (!strictNullChecks || target.flags & (32 | 16) || source === emptyArrayElementType) + if (!(target.flags & 134217728)) { + if (target.flags & 1) return -1; - } - if (source.flags & 64) { - if (!strictNullChecks || target.flags & 64) - return -1; - } - if (source.flags & 128 && target === numberType) - return -1; - if (source.flags & 128 && target.flags & 128) { - if (result = enumRelatedTo(source, target, reportErrors)) { - return result; + if (source.flags & 32) { + if (!strictNullChecks || target.flags & (32 | 16) || source === emptyArrayElementType) + return -1; } - } - if (source.flags & 256 && target === stringType) - return -1; - if (relation === assignableRelation || relation === comparableRelation) { - if (isTypeAny(source)) + if (source.flags & 64) { + if (!strictNullChecks || target.flags & 64) + return -1; + } + if (source.flags & 128 && target === numberType) return -1; - if (source === numberType && target.flags & 128) + if (source.flags & 128 && target.flags & 128) { + if (result = enumRelatedTo(source, target, reportErrors)) { + return result; + } + } + if (source.flags & 256 && target === stringType) return -1; - } - if (source.flags & 8 && target.flags & 8) { - return -1; + if (relation === assignableRelation || relation === comparableRelation) { + if (source.flags & (1 | 134217728)) + return -1; + if (source === numberType && target.flags & 128) + return -1; + } + if (source.flags & 8 && target.flags & 8) { + return -1; + } } if (source.flags & 1048576) { if (hasExcessProperties(source, target, reportErrors)) { @@ -17300,6 +17839,7 @@ var ts; if (!constraint || constraint.flags & 1) { constraint = emptyObjectType; } + constraint = getTypeWithThisArgument(constraint, source); var reportConstraintErrors = reportErrors && constraint !== emptyObjectType; if (result = isRelatedTo(constraint, target, reportConstraintErrors)) { errorInfo = saveErrorInfo; @@ -17350,7 +17890,7 @@ var ts; if (type.flags & 80896) { var resolved = resolveStructuredTypeMembers(type); if ((relation === assignableRelation || relation === comparableRelation) && - (type === globalObjectType || resolved.properties.length === 0) || + (type === globalObjectType || isEmptyObjectType(resolved)) || resolved.stringIndexInfo || resolved.numberIndexInfo || getPropertyOfType(type, name)) { return true; } @@ -17365,6 +17905,13 @@ var ts; } return false; } + function isEmptyObjectType(t) { + return t.properties.length === 0 && + t.callSignatures.length === 0 && + t.constructSignatures.length === 0 && + !t.stringIndexInfo && + !t.numberIndexInfo; + } function hasExcessProperties(source, target, reportErrors) { if (!(target.flags & 67108864) && maybeTypeOfKind(target, 80896)) { for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) { @@ -17993,10 +18540,6 @@ var ts; } return flags & 96; } - function getNullableTypeOfKind(kind) { - return kind & 64 ? kind & 32 ? - getUnionType([nullType, undefinedType]) : nullType : undefinedType; - } function addNullableKind(type, kind) { if ((getNullableKind(type) & kind) !== kind) { var types = [type]; @@ -18010,32 +18553,8 @@ var ts; } return type; } - function removeNullableKind(type, kind) { - if (type.flags & 16384 && getNullableKind(type) & kind) { - var firstType = void 0; - var types = void 0; - for (var _i = 0, _a = type.types; _i < _a.length; _i++) { - var t = _a[_i]; - if (!(t.flags & kind)) { - if (!firstType) { - firstType = t; - } - else { - if (!types) { - types = [firstType]; - } - types.push(t); - } - } - } - if (firstType) { - type = types ? getUnionType(types) : firstType; - } - } - return type; - } function getNonNullableType(type) { - return strictNullChecks ? removeNullableKind(type, 96) : type; + return strictNullChecks ? getTypeWithFacts(type, 524288) : type; } function isObjectLiteralType(type) { return type.symbol && (type.symbol.flags & (4096 | 2048)) !== 0 && @@ -18144,25 +18663,25 @@ var ts; var typeAsString = typeToString(getWidenedType(type)); var diagnostic; switch (declaration.kind) { + case 145: case 144: - case 143: diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type; break; - case 141: + case 142: diagnostic = declaration.dotDotDotToken ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type; break; - case 168: + case 169: diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type; break; - case 219: + case 220: + case 147: case 146: - case 145: - case 148: case 149: - case 178: + case 150: case 179: + case 180: if (!declaration.name) { error(declaration, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString); return; @@ -18449,18 +18968,7 @@ var ts; } return context.inferredTypes; } - function createTransientIdentifier(symbol, location) { - var result = ts.createNode(69); - result.text = symbol.name; - result.resolvedSymbol = symbol; - result.parent = location; - result.id = -1; - return result; - } function getResolvedSymbol(node) { - if (node.id === -1) { - return node.resolvedSymbol; - } var links = getNodeLinks(node); if (!links.resolvedSymbol) { links.resolvedSymbol = !ts.nodeIsMissing(node) && resolveName(node, node.text, 107455 | 1048576, ts.Diagnostics.Cannot_find_name_0, node) || unknownSymbol; @@ -18470,10 +18978,10 @@ var ts; function isInTypeQuery(node) { while (node) { switch (node.kind) { - case 157: + case 158: return true; case 69: - case 138: + case 139: node = node.parent; continue; default: @@ -18482,7 +18990,7 @@ var ts; } ts.Debug.fail("should not get here"); } - function getAssignmentKey(node) { + function getFlowCacheKey(node) { if (node.kind === 69) { var symbol = getResolvedSymbol(node); return symbol !== unknownSymbol ? "" + getSymbolId(symbol) : undefined; @@ -18490,116 +18998,12 @@ var ts; if (node.kind === 97) { return "0"; } - if (node.kind === 171) { - var key = getAssignmentKey(node.expression); + if (node.kind === 172) { + var key = getFlowCacheKey(node.expression); return key && key + "." + node.name.text; } return undefined; } - function hasInitializer(node) { - return !!(node.initializer || ts.isBindingPattern(node.parent) && hasInitializer(node.parent.parent)); - } - function getAssignmentMap(node) { - var assignmentMap = {}; - visit(node); - return assignmentMap; - function visitReference(node) { - if (isAssignmentTarget(node) || isCompoundAssignmentTarget(node)) { - var key = getAssignmentKey(node); - if (key) { - assignmentMap[key] = true; - } - } - ts.forEachChild(node, visit); - } - function visitVariableDeclaration(node) { - if (!ts.isBindingPattern(node.name) && hasInitializer(node)) { - assignmentMap[getSymbolId(getSymbolOfNode(node))] = true; - } - ts.forEachChild(node, visit); - } - function visit(node) { - switch (node.kind) { - case 69: - case 171: - visitReference(node); - break; - case 217: - case 168: - visitVariableDeclaration(node); - break; - case 186: - case 166: - case 167: - case 169: - case 170: - case 172: - case 173: - case 174: - case 176: - case 194: - case 195: - case 177: - case 184: - case 180: - case 183: - case 181: - case 182: - case 185: - case 189: - case 187: - case 190: - case 198: - case 199: - case 201: - case 202: - case 203: - case 204: - case 205: - case 206: - case 207: - case 210: - case 211: - case 212: - case 226: - case 248: - case 249: - case 213: - case 214: - case 215: - case 251: - case 240: - case 241: - case 245: - case 246: - case 242: - case 247: - ts.forEachChild(node, visit); - break; - } - } - } - function isReferenceAssignedWithin(reference, node) { - if (reference.kind !== 97) { - var key = getAssignmentKey(reference); - if (key) { - var links = getNodeLinks(node); - return (links.assignmentMap || (links.assignmentMap = getAssignmentMap(node)))[key]; - } - } - return false; - } - function isAnyPartOfReferenceAssignedWithin(reference, node) { - while (true) { - if (isReferenceAssignedWithin(reference, node)) { - return true; - } - if (reference.kind !== 171) { - return false; - } - reference = reference.expression; - } - } function isNullOrUndefinedLiteral(node) { return node.kind === 93 || node.kind === 69 && getResolvedSymbol(node) === undefinedSymbol; @@ -18609,7 +19013,7 @@ var ts; case 69: case 97: return node; - case 171: + case 172: return getLeftmostIdentifierOrThis(node.expression); } return undefined; @@ -18621,95 +19025,359 @@ var ts; return getResolvedSymbol(source) === getResolvedSymbol(target); case 97: return true; - case 171: + case 172: return source.name.text === target.name.text && isMatchingReference(source.expression, target.expression); } } return false; } - function getNarrowedTypeOfReference(type, reference) { - if (!(type.flags & (1 | 80896 | 16384 | 512))) { - return type; - } - var leftmostNode = getLeftmostIdentifierOrThis(reference); - if (!leftmostNode) { - return type; - } - var top; - if (leftmostNode.kind === 69) { - var leftmostSymbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(leftmostNode)); - if (!leftmostSymbol) { - return type; + function containsMatchingReference(source, target) { + while (source.kind === 172) { + source = source.expression; + if (isMatchingReference(source, target)) { + return true; } - var declaration = leftmostSymbol.valueDeclaration; - if (!declaration || declaration.kind !== 217 && declaration.kind !== 141 && declaration.kind !== 168) { - return type; - } - top = getDeclarationContainer(declaration); } - var originalType = type; - var nodeStack = []; - var node = reference; - loop: while (node.parent) { - var child = node; - node = node.parent; - switch (node.kind) { - case 202: - case 187: - case 186: - nodeStack.push({ node: node, child: child }); - break; - case 255: - case 224: - break loop; - default: - if (node === top || ts.isFunctionLikeKind(node.kind)) { - break loop; + return false; + } + 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 === 172 && + 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 & 16384)) { + 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 && declaredType.flags & 16384) { + var reducedTypes = ts.filter(declaredType.types, function (t) { return typeMaybeAssignableTo(assignedType, t); }); + if (reducedTypes.length) { + return reducedTypes.length === 1 ? reducedTypes[0] : getUnionType(reducedTypes); + } + } + return declaredType; + } + function getTypeFacts(type) { + var flags = type.flags; + if (flags & 258) { + return strictNullChecks ? 4079361 : 4194049; + } + if (flags & 132) { + return strictNullChecks ? 4079234 : 4193922; + } + if (flags & 8) { + return strictNullChecks ? 4078980 : 4193668; + } + if (flags & 80896) { + var resolved = resolveStructuredTypeMembers(type); + return resolved.callSignatures.length || resolved.constructSignatures.length || isTypeSubtypeOf(type, globalFunctionType) ? + strictNullChecks ? 1970144 : 4181984 : + strictNullChecks ? 1972176 : 4184016; + } + if (flags & (16 | 32)) { + return 2457472; + } + if (flags & 64) { + return 2340752; + } + if (flags & 16777216) { + return strictNullChecks ? 1981320 : 4193160; + } + if (flags & 512) { + var constraint = getConstraintOfTypeParameter(type); + return constraint ? getTypeFacts(constraint) : 4194303; + } + if (flags & 32768) { + return ts.reduceLeft(type.types, function (flags, type) { return flags |= getTypeFacts(type); }, 0); + } + return 4194303; + } + function getTypeWithFacts(type, include) { + if (!(type.flags & 16384)) { + return getTypeFacts(type) & include ? type : neverType; + } + var firstType; + var types; + for (var _i = 0, _a = type.types; _i < _a.length; _i++) { + var t = _a[_i]; + if (getTypeFacts(t) & include) { + if (!firstType) { + firstType = t; + } + else { + if (!types) { + types = [firstType]; } - break; + types.push(t); + } } } - var nodes; - while (nodes = nodeStack.pop()) { - var node_1 = nodes.node, child = nodes.child; - switch (node_1.kind) { - case 202: - if (child !== node_1.expression) { - type = narrowType(type, node_1.expression, child === node_1.thenStatement); - } - break; - case 187: - if (child !== node_1.condition) { - type = narrowType(type, node_1.condition, child === node_1.whenTrue); - } - break; - case 186: - if (child === node_1.right) { - if (node_1.operatorToken.kind === 51) { - type = narrowType(type, node_1.left, true); - } - else if (node_1.operatorToken.kind === 52) { - type = narrowType(type, node_1.left, false); - } - } - break; - default: - ts.Debug.fail("Unreachable!"); - } - if (type !== originalType && isAnyPartOfReferenceAssignedWithin(reference, node_1)) { - type = originalType; - } - } - if (type === emptyUnionType) { - type = originalType; + return firstType ? types ? getUnionType(types, true) : firstType : neverType; + } + function getTypeWithDefault(type, defaultExpression) { + if (defaultExpression) { + var defaultType = checkExpression(defaultExpression); + return getUnionType([getTypeWithFacts(type, 131072), defaultType]); } return type; + } + function getTypeOfDestructuredProperty(type, name) { + var text = 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) || + unknownType; + } + function getTypeOfDestructuredSpreadElement(type) { + return createArrayType(checkIteratedTypeOrElementType(type, undefined, false) || unknownType); + } + function getAssignedTypeOfBinaryExpression(node) { + return node.parent.kind === 170 || node.parent.kind === 253 ? + getTypeWithDefault(getAssignedType(node), node.right) : + checkExpression(node.right); + } + function getAssignedTypeOfArrayLiteralElement(node, element) { + return getTypeOfDestructuredArrayElement(getAssignedType(node), ts.indexOf(node.elements, element)); + } + function getAssignedTypeOfSpreadElement(node) { + return getTypeOfDestructuredSpreadElement(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 207: + return stringType; + case 208: + return checkRightHandSideOfForOf(parent.expression) || unknownType; + case 187: + return getAssignedTypeOfBinaryExpression(parent); + case 181: + return undefinedType; + case 170: + return getAssignedTypeOfArrayLiteralElement(parent, node); + case 191: + return getAssignedTypeOfSpreadElement(parent); + case 253: + return getAssignedTypeOfPropertyAssignment(parent); + case 254: + return getAssignedTypeOfShorthandPropertyAssignment(parent); + } + return unknownType; + } + function getInitialTypeOfBindingElement(node) { + var pattern = node.parent; + var parentType = getInitialType(pattern.parent); + var type = pattern.kind === 167 ? + getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) : + !node.dotDotDotToken ? + getTypeOfDestructuredArrayElement(parentType, ts.indexOf(pattern.elements, node)) : + getTypeOfDestructuredSpreadElement(parentType); + return getTypeWithDefault(type, node.initializer); + } + function getTypeOfInitializer(node) { + var links = getNodeLinks(node); + return links.resolvedType || checkExpression(node); + } + function getInitialTypeOfVariableDeclaration(node) { + if (node.initializer) { + return getTypeOfInitializer(node.initializer); + } + if (node.parent.parent.kind === 207) { + return stringType; + } + if (node.parent.parent.kind === 208) { + return checkRightHandSideOfForOf(node.parent.parent.expression) || unknownType; + } + return unknownType; + } + function getInitialType(node) { + return node.kind === 218 ? + getInitialTypeOfVariableDeclaration(node) : + getInitialTypeOfBindingElement(node); + } + function getFlowTypeOfReference(reference, declaredType, assumeInitialized) { + var key; + if (!reference.flowNode || assumeInitialized && !(declaredType.flags & 97793)) { + return declaredType; + } + var initialType = assumeInitialized ? declaredType : addNullableKind(declaredType, 32); + var visitedFlowStart = visitedFlowCount; + var result = getTypeAtFlowNode(reference.flowNode); + visitedFlowCount = visitedFlowStart; + if (reference.parent.kind === 196 && getTypeWithFacts(result, 524288) === neverType) { + return declaredType; + } + return result; + function getTypeAtFlowNode(flow) { + while (true) { + if (flow.flags & 256) { + for (var i = visitedFlowStart; i < visitedFlowCount; i++) { + if (visitedFlowNodes[i] === flow) { + return visitedFlowTypes[i]; + } + } + } + var type = void 0; + if (flow.flags & 16) { + type = getTypeAtFlowAssignment(flow); + if (!type) { + flow = flow.antecedent; + continue; + } + } + else if (flow.flags & 96) { + type = getTypeAtFlowCondition(flow); + } + else if (flow.flags & 12) { + if (flow.antecedents.length === 1) { + flow = flow.antecedents[0]; + continue; + } + type = flow.flags & 4 ? + getTypeAtFlowBranchLabel(flow) : + getTypeAtFlowLoopLabel(flow); + } + else if (flow.flags & 1) { + type = declaredType; + } + else { + type = initialType; + } + if (flow.flags & 256) { + visitedFlowNodes[visitedFlowCount] = flow; + visitedFlowTypes[visitedFlowCount] = type; + visitedFlowCount++; + } + return type; + } + } + function getTypeAtFlowAssignment(flow) { + var node = flow.node; + if ((node.kind === 218 || node.kind === 169) && + reference.kind === 69 && + getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(reference)) === getSymbolOfNode(node)) { + return declaredType.flags & 16384 ? + getAssignmentReducedType(declaredType, getInitialType(node)) : + declaredType; + } + if (isMatchingReference(reference, node)) { + return declaredType.flags & 16384 ? + getAssignmentReducedType(declaredType, getAssignedType(node)) : + declaredType; + } + if (containsMatchingReference(reference, node)) { + return declaredType; + } + return undefined; + } + function getTypeAtFlowCondition(flow) { + var type = getTypeAtFlowNode(flow.antecedent); + if (type !== neverType) { + var assumeTrue = (flow.flags & 32) !== 0; + type = narrowType(type, flow.expression, assumeTrue); + if (type === neverType) { + type = narrowType(declaredType, flow.expression, assumeTrue); + } + } + return type; + } + function getTypeAtFlowBranchLabel(flow) { + var antecedentTypes = []; + for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { + var antecedent = _a[_i]; + var type = getTypeAtFlowNode(antecedent); + if (type === declaredType && declaredType === initialType) { + return type; + } + if (!ts.contains(antecedentTypes, type)) { + antecedentTypes.push(type); + } + } + return getUnionType(antecedentTypes); + } + function getTypeAtFlowLoopLabel(flow) { + var id = getFlowNodeId(flow); + var cache = flowLoopCaches[id] || (flowLoopCaches[id] = {}); + if (!key) { + key = getFlowCacheKey(reference); + } + if (cache[key]) { + return cache[key]; + } + for (var i = flowLoopStart; i < flowLoopCount; i++) { + if (flowLoopNodes[i] === flow && flowLoopKeys[i] === key) { + return getUnionType(flowLoopTypes[i]); + } + } + var antecedentTypes = []; + 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 type = getTypeAtFlowNode(antecedent); + flowLoopCount--; + if (cache[key]) { + return cache[key]; + } + if (!ts.contains(antecedentTypes, type)) { + antecedentTypes.push(type); + } + if (type === declaredType) { + break; + } + } + return cache[key] = getUnionType(antecedentTypes); + } function narrowTypeByTruthiness(type, expr, assumeTrue) { - return strictNullChecks && assumeTrue && isMatchingReference(expr, reference) ? getNonNullableType(type) : type; + return isMatchingReference(reference, expr) ? getTypeWithFacts(type, assumeTrue ? 1048576 : 2097152) : type; } function narrowTypeByBinaryExpression(type, expr, assumeTrue) { switch (expr.operatorToken.kind) { + case 56: + return narrowTypeByTruthiness(type, expr.left, assumeTrue); case 30: case 31: case 32: @@ -18717,16 +19385,14 @@ var ts; if (isNullOrUndefinedLiteral(expr.right)) { return narrowTypeByNullCheck(type, expr, assumeTrue); } - if (expr.left.kind === 181 && expr.right.kind === 9) { + if (expr.left.kind === 182 && expr.right.kind === 9) { return narrowTypeByTypeof(type, expr, assumeTrue); } break; - case 51: - return narrowTypeByAnd(type, expr, assumeTrue); - case 52: - return narrowTypeByOr(type, expr, assumeTrue); case 91: return narrowTypeByInstanceof(type, expr, assumeTrue); + case 24: + return narrowType(type, expr.right, assumeTrue); } return type; } @@ -18735,75 +19401,49 @@ var ts; if (operator === 31 || operator === 33) { assumeTrue = !assumeTrue; } - if (!strictNullChecks || !isMatchingReference(expr.left, reference)) { + if (!strictNullChecks || !isMatchingReference(reference, expr.left)) { return type; } var doubleEquals = operator === 30 || operator === 31; - var exprNullableKind = doubleEquals ? 96 : - expr.right.kind === 93 ? 64 : 32; - if (assumeTrue) { - var nullableKind = getNullableKind(type) & exprNullableKind; - return nullableKind ? getNullableTypeOfKind(nullableKind) : type; - } - return removeNullableKind(type, exprNullableKind); + var facts = doubleEquals ? + assumeTrue ? 65536 : 524288 : + expr.right.kind === 93 ? + assumeTrue ? 32768 : 262144 : + assumeTrue ? 16384 : 131072; + return getTypeWithFacts(type, facts); } function narrowTypeByTypeof(type, expr, assumeTrue) { var left = expr.left; var right = expr.right; - if (!isMatchingReference(left.expression, reference)) { + if (!isMatchingReference(reference, left.expression)) { + if (containsMatchingReference(reference, left.expression)) { + return declaredType; + } return type; } if (expr.operatorToken.kind === 31 || expr.operatorToken.kind === 33) { assumeTrue = !assumeTrue; } - var typeInfo = primitiveTypeInfo[right.text]; - if (typeInfo && typeInfo.type === undefinedType) { - return type; - } - var flags; - if (typeInfo) { - flags = typeInfo.flags; - } - else { - assumeTrue = !assumeTrue; - flags = 132 | 258 | 16777216 | 8; - } - if (!(type.flags & 16384)) { - if (assumeTrue && typeInfo && isTypeSubtypeOf(typeInfo.type, type)) { - return typeInfo.type; + if (assumeTrue && !(type.flags & 16384)) { + var targetType = ts.getProperty(typeofTypesByName, right.text); + if (targetType && isTypeSubtypeOf(targetType, type)) { + return targetType; } - return filterUnion(type) ? type : emptyUnionType; - } - return getUnionType(ts.filter(type.types, filterUnion), true); - function filterUnion(type) { - return assumeTrue === !!(type.flags & flags); - } - } - function narrowTypeByAnd(type, expr, assumeTrue) { - if (assumeTrue) { - return narrowType(narrowType(type, expr.left, true), expr.right, true); - } - else { - return getUnionType([ - narrowType(type, expr.left, false), - narrowType(type, expr.right, false) - ]); - } - } - function narrowTypeByOr(type, expr, assumeTrue) { - if (assumeTrue) { - return getUnionType([ - narrowType(type, expr.left, true), - narrowType(type, expr.right, true) - ]); - } - else { - return narrowType(narrowType(type, expr.left, false), expr.right, false); } + var facts = assumeTrue ? + ts.getProperty(typeofEQFacts, right.text) || 64 : + ts.getProperty(typeofNEFacts, right.text) || 8192; + return getTypeWithFacts(type, facts); } function narrowTypeByInstanceof(type, expr, assumeTrue) { - if (isTypeAny(type) || !isMatchingReference(expr.left, reference)) { + if (!isMatchingReference(reference, expr.left)) { + if (containsMatchingReference(reference, expr.left)) { + return declaredType; + } + return type; + } + if (isTypeAny(type)) { return type; } var rightType = checkExpression(expr.right); @@ -18835,27 +19475,25 @@ var ts; } return type; } - function getNarrowedType(originalType, narrowedTypeCandidate, assumeTrue) { + function getNarrowedType(type, candidate, assumeTrue) { if (!assumeTrue) { - if (originalType.flags & 16384) { - return getUnionType(ts.filter(originalType.types, function (t) { return !isTypeSubtypeOf(t, narrowedTypeCandidate); })); - } - return originalType; + return type.flags & 16384 ? + getUnionType(ts.filter(type.types, function (t) { return !isTypeSubtypeOf(t, candidate); })) : + type; } - if (originalType.flags & 16384) { - var assignableConstituents = ts.filter(originalType.types, function (t) { return isTypeAssignableTo(t, narrowedTypeCandidate); }); + if (type.flags & 16384) { + var assignableConstituents = ts.filter(type.types, function (t) { return isTypeAssignableTo(t, candidate); }); if (assignableConstituents.length) { return getUnionType(assignableConstituents); } } - var targetType = originalType.flags & 512 ? getApparentType(originalType) : originalType; - if (isTypeAssignableTo(narrowedTypeCandidate, targetType)) { - return narrowedTypeCandidate; - } - return originalType; + var targetType = type.flags & 512 ? getApparentType(type) : type; + return isTypeAssignableTo(candidate, targetType) ? candidate : + isTypeAssignableTo(type, candidate) ? type : + neverType; } function narrowTypeByTypePredicate(type, callExpression, assumeTrue) { - if (type.flags & 1) { + if (type.flags & 1 || !hasMatchingArgument(callExpression, reference)) { return type; } var signature = getResolvedSignature(callExpression); @@ -18865,18 +19503,26 @@ var ts; } if (ts.isIdentifierTypePredicate(predicate)) { var predicateArgument = callExpression.arguments[predicate.parameterIndex]; - if (predicateArgument && isMatchingReference(predicateArgument, reference)) { - return getNarrowedType(type, predicate.type, assumeTrue); + if (predicateArgument) { + if (isMatchingReference(reference, predicateArgument)) { + return getNarrowedType(type, predicate.type, assumeTrue); + } + if (containsMatchingReference(reference, predicateArgument)) { + return declaredType; + } } } else { var invokedExpression = skipParenthesizedNodes(callExpression.expression); - if (invokedExpression.kind === 172 || invokedExpression.kind === 171) { + if (invokedExpression.kind === 173 || invokedExpression.kind === 172) { var accessExpression = invokedExpression; var possibleReference = skipParenthesizedNodes(accessExpression.expression); - if (isMatchingReference(possibleReference, reference)) { + if (isMatchingReference(reference, possibleReference)) { return getNarrowedType(type, predicate.type, assumeTrue); } + if (containsMatchingReference(reference, possibleReference)) { + return declaredType; + } } } return type; @@ -18885,15 +19531,15 @@ var ts; switch (expr.kind) { case 69: case 97: - case 171: + case 172: return narrowTypeByTruthiness(type, expr, assumeTrue); - case 173: + case 174: return narrowTypeByTypePredicate(type, expr, assumeTrue); - case 177: + case 178: return narrowType(type, expr.expression, assumeTrue); - case 186: + case 187: return narrowTypeByBinaryExpression(type, expr, assumeTrue); - case 184: + case 185: if (expr.operator === 49) { return narrowType(type, expr.operand, !assumeTrue); } @@ -18903,120 +19549,30 @@ var ts; } } function getTypeOfSymbolAtLocation(symbol, location) { - var type = getTypeOfSymbol(symbol); if (location.kind === 69) { if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) { location = location.parent; } - if (ts.isExpression(location)) { - checkExpression(location); - if (getNodeLinks(location).resolvedSymbol === symbol) { - return getNarrowedTypeOfReference(type, location); + if (ts.isExpression(location) && !ts.isAssignmentTarget(location)) { + var type = checkExpression(location); + if (getExportSymbolOfValueSymbolIfExported(getNodeLinks(location).resolvedSymbol) === symbol) { + return type; } } } - return getNarrowedTypeOfReference(type, createTransientIdentifier(symbol, location)); + return getTypeOfSymbol(symbol); } function skipParenthesizedNodes(expression) { - while (expression.kind === 177) { + while (expression.kind === 178) { expression = expression.expression; } return expression; } - function findFirstAssignment(symbol, container) { - return visit(ts.isFunctionLike(container) ? container.body : container); - function visit(node) { - switch (node.kind) { - case 69: - var assignment = getAssignmentRoot(node); - return assignment && getResolvedSymbol(node) === symbol ? assignment : undefined; - case 186: - case 217: - case 168: - case 166: - case 167: - case 169: - case 170: - case 171: - case 172: - case 173: - case 174: - case 176: - case 194: - case 195: - case 177: - case 184: - case 180: - case 183: - case 181: - case 182: - case 185: - case 189: - case 187: - case 190: - case 199: - case 201: - case 202: - case 203: - case 204: - case 205: - case 206: - case 207: - case 210: - case 211: - case 212: - case 226: - case 248: - case 249: - case 213: - case 214: - case 215: - case 251: - case 240: - case 241: - case 245: - case 246: - case 242: - case 247: - case 198: - case 255: - return ts.forEachChild(node, visit); - } - return undefined; - } - } - function checkVariableAssignedBefore(symbol, reference) { - if (!(symbol.flags & 3)) { - return; - } - var declaration = symbol.valueDeclaration; - if (!declaration || declaration.kind !== 217 || declaration.initializer || ts.isInAmbientContext(declaration)) { - return; - } - var parentParentKind = declaration.parent.parent.kind; - if (parentParentKind === 207 || parentParentKind === 206) { - return; - } - var declarationContainer = ts.getContainingFunction(declaration) || ts.getSourceFileOfNode(declaration); - var referenceContainer = ts.getContainingFunction(reference) || ts.getSourceFileOfNode(reference); - if (declarationContainer !== referenceContainer) { - return; - } - var links = getSymbolLinks(symbol); - if (!links.firstAssignmentChecked) { - links.firstAssignmentChecked = true; - links.firstAssignment = findFirstAssignment(symbol, declarationContainer); - } - if (links.firstAssignment && links.firstAssignment.end <= reference.pos) { - return; - } - error(reference, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); - } function checkIdentifier(node) { var symbol = getResolvedSymbol(node); if (symbol === argumentsSymbol) { var container = ts.getContainingFunction(node); - if (container.kind === 179) { + if (container.kind === 180) { if (languageVersion < 2) { error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression); } @@ -19031,7 +19587,7 @@ var ts; var localOrExportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); if (languageVersion === 2 && localOrExportSymbol.flags & 32 - && localOrExportSymbol.valueDeclaration.kind === 220 + && localOrExportSymbol.valueDeclaration.kind === 221 && ts.nodeIsDecorated(localOrExportSymbol.valueDeclaration)) { var container = ts.getContainingClass(node); while (container !== undefined) { @@ -19047,10 +19603,19 @@ var ts; checkCollisionWithCapturedThisVariable(node, node); checkNestedBlockScopedBinding(node, symbol); var type = getTypeOfSymbol(localOrExportSymbol); - if (strictNullChecks && !isAssignmentTarget(node) && !(type.flags & 1) && !(getNullableKind(type) & 32)) { - checkVariableAssignedBefore(symbol, node); + if (!(localOrExportSymbol.flags & 3) || ts.isAssignmentTarget(node)) { + return type; } - return getNarrowedTypeOfReference(type, node); + var declaration = localOrExportSymbol.valueDeclaration; + var assumeInitialized = !strictNullChecks || (type.flags & 1) !== 0 || !declaration || + ts.getRootDeclaration(declaration).kind === 142 || ts.isInAmbientContext(declaration) || + ts.getContainingFunctionOrModule(declaration) !== ts.getContainingFunctionOrModule(node); + var flowType = getFlowTypeOfReference(node, type, assumeInitialized); + if (!assumeInitialized && !(getNullableKind(type) & 32) && getNullableKind(flowType) & 32) { + error(node, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); + return type; + } + return flowType; } function isInsideFunction(node, threshold) { var current = node; @@ -19065,7 +19630,7 @@ var ts; function checkNestedBlockScopedBinding(node, symbol) { if (languageVersion >= 2 || (symbol.flags & (2 | 32)) === 0 || - symbol.valueDeclaration.parent.kind === 251) { + symbol.valueDeclaration.parent.kind === 252) { return; } var container = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration); @@ -19083,8 +19648,8 @@ var ts; if (usedInFunction) { getNodeLinks(current).flags |= 65536; } - if (container.kind === 205 && - ts.getAncestor(symbol.valueDeclaration, 218).parent === container && + if (container.kind === 206 && + ts.getAncestor(symbol.valueDeclaration, 219).parent === container && isAssignedInBodyOfForStatement(node, container)) { getNodeLinks(symbol.valueDeclaration).flags |= 2097152; } @@ -19096,14 +19661,14 @@ var ts; } function isAssignedInBodyOfForStatement(node, container) { var current = node; - while (current.parent.kind === 177) { + while (current.parent.kind === 178) { current = current.parent; } var isAssigned = false; - if (isAssignmentTarget(current)) { + if (ts.isAssignmentTarget(current)) { isAssigned = true; } - else if ((current.parent.kind === 184 || current.parent.kind === 185)) { + else if ((current.parent.kind === 185 || current.parent.kind === 186)) { var expr = current.parent; isAssigned = expr.operator === 41 || expr.operator === 42; } @@ -19122,7 +19687,7 @@ var ts; } function captureLexicalThis(node, container) { getNodeLinks(node).flags |= 2; - if (container.kind === 144 || container.kind === 147) { + if (container.kind === 145 || container.kind === 148) { var classNode = container.parent; getNodeLinks(classNode).flags |= 4; } @@ -19156,7 +19721,7 @@ var ts; function checkThisExpression(node) { var container = ts.getThisContainer(node, true); var needToCaptureLexicalThis = false; - if (container.kind === 147) { + if (container.kind === 148) { var containingClassDecl = container.parent; var baseTypeNode = ts.getClassExtendsHeritageClauseElement(containingClassDecl); if (baseTypeNode && !classDeclarationExtendsNull(containingClassDecl)) { @@ -19166,29 +19731,29 @@ var ts; } } } - if (container.kind === 179) { + if (container.kind === 180) { container = ts.getThisContainer(container, false); needToCaptureLexicalThis = (languageVersion < 2); } switch (container.kind) { - case 224: + case 225: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body); break; - case 223: + case 224: error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location); break; - case 147: + case 148: if (isInConstructorArgumentInitializer(node, container)) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments); } break; + case 145: case 144: - case 143: if (container.flags & 32) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); } break; - case 139: + case 140: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name); break; } @@ -19196,6 +19761,18 @@ var ts; captureLexicalThis(node, container); } if (ts.isFunctionLike(container)) { + if (container.kind === 179 && + ts.isInJavaScriptFile(container.parent) && + 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 type = getContextuallyTypedThisType(container); if (type) { return type; @@ -19204,35 +19781,17 @@ var ts; if (signature.thisType) { return signature.thisType; } - if (container.parent && container.parent.kind === 170) { - var type_1 = checkExpressionCached(container.parent); - if (type_1) { - return type_1; - } - } } if (ts.isClassLike(container.parent)) { var symbol = getSymbolOfNode(container.parent); var type = container.flags & 32 ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType; - return getNarrowedTypeOfReference(type, node); + return getFlowTypeOfReference(node, type, true); } if (ts.isInJavaScriptFile(node)) { var type = getTypeForThisExpressionFromJSDoc(container); if (type && type !== unknownType) { return type; } - if (container.kind === 178) { - if (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); - } - } - } } if (compilerOptions.noImplicitThis) { error(node, ts.Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation); @@ -19241,27 +19800,27 @@ var ts; } function getTypeForThisExpressionFromJSDoc(node) { var typeTag = ts.getJSDocTypeTag(node); - if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === 268) { + if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === 269) { var jsDocFunctionType = typeTag.typeExpression.type; - if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === 271) { + if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === 272) { return getTypeFromTypeNode(jsDocFunctionType.parameters[0].type); } } } function isInConstructorArgumentInitializer(node, constructorDecl) { for (var n = node; n && n !== constructorDecl; n = n.parent) { - if (n.kind === 141) { + if (n.kind === 142) { return true; } } return false; } function checkSuperExpression(node) { - var isCallExpression = node.parent.kind === 173 && node.parent.expression === node; + var isCallExpression = node.parent.kind === 174 && node.parent.expression === node; var container = ts.getSuperContainer(node, true); var needToCaptureLexicalThis = false; if (!isCallExpression) { - while (container && container.kind === 179) { + while (container && container.kind === 180) { container = ts.getSuperContainer(container, true); needToCaptureLexicalThis = languageVersion < 2; } @@ -19270,16 +19829,16 @@ var ts; var nodeCheckFlag = 0; if (!canUseSuperExpression) { var current = node; - while (current && current !== container && current.kind !== 139) { + while (current && current !== container && current.kind !== 140) { current = current.parent; } - if (current && current.kind === 139) { + if (current && current.kind === 140) { 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 === 170)) { + else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 171)) { error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions); } else { @@ -19294,8 +19853,8 @@ var ts; nodeCheckFlag = 256; } getNodeLinks(node).flags |= nodeCheckFlag; - if (container.kind === 146 && container.flags & 256) { - if (ts.isSuperPropertyOrElementAccess(node.parent) && isAssignmentTarget(node.parent)) { + if (container.kind === 147 && container.flags & 256) { + if (ts.isSuperPropertyOrElementAccess(node.parent) && ts.isAssignmentTarget(node.parent)) { getNodeLinks(container).flags |= 4096; } else { @@ -19305,7 +19864,7 @@ var ts; if (needToCaptureLexicalThis) { captureLexicalThis(node.parent, container); } - if (container.parent.kind === 170) { + if (container.parent.kind === 171) { 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; @@ -19323,7 +19882,7 @@ var ts; } return unknownType; } - if (container.kind === 147 && isInConstructorArgumentInitializer(node, container)) { + if (container.kind === 148 && isInConstructorArgumentInitializer(node, container)) { error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments); return unknownType; } @@ -19335,24 +19894,24 @@ var ts; return false; } if (isCallExpression) { - return container.kind === 147; + return container.kind === 148; } else { - if (ts.isClassLike(container.parent) || container.parent.kind === 170) { + if (ts.isClassLike(container.parent) || container.parent.kind === 171) { if (container.flags & 32) { - return container.kind === 146 || - container.kind === 145 || - container.kind === 148 || - container.kind === 149; + return container.kind === 147 || + container.kind === 146 || + container.kind === 149 || + container.kind === 150; } else { - return container.kind === 146 || - container.kind === 145 || - container.kind === 148 || + return container.kind === 147 || + container.kind === 146 || container.kind === 149 || + container.kind === 150 || + container.kind === 145 || container.kind === 144 || - container.kind === 143 || - container.kind === 147; + container.kind === 148; } } } @@ -19360,9 +19919,7 @@ var ts; } } function getContextuallyTypedThisType(func) { - if ((isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) && - isContextSensitive(func) && - func.kind !== 179) { + if (isContextSensitiveFunctionOrObjectLiteralMethod(func) && func.kind !== 180) { var contextualSignature = getContextualSignature(func); if (contextualSignature) { return contextualSignature.thisType; @@ -19372,33 +19929,63 @@ var ts; } function getContextuallyTypedParameterType(parameter) { var func = parameter.parent; - if (isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) { - if (isContextSensitive(func)) { - 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 (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)); + if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) { + var iife = getImmediatelyInvokedFunctionExpression(func); + if (iife) { + var indexOfParameter = ts.indexOf(func.parameters, parameter); + if (iife.arguments && indexOfParameter < iife.arguments.length) { + if (parameter.dotDotDotToken) { + var restTypes = []; + for (var i = indexOfParameter; i < iife.arguments.length; i++) { + restTypes.push(getTypeOfExpression(iife.arguments[i])); + } + return createArrayType(getUnionType(restTypes)); } + var links = getNodeLinks(iife); + var cached = links.resolvedSignature; + links.resolvedSignature = anySignature; + var type = checkExpression(iife.arguments[indexOfParameter]); + 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 (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 getImmediatelyInvokedFunctionExpression(func) { + if (isFunctionExpressionOrArrowFunction(func)) { + var prev = func; + var parent_8 = func.parent; + while (parent_8.kind === 178) { + prev = parent_8; + parent_8 = parent_8.parent; + } + if (parent_8.kind === 174 && parent_8.expression === prev) { + return parent_8; + } + } + } function getContextualTypeForInitializerExpression(node) { var declaration = node.parent; if (node === declaration.initializer) { if (declaration.type) { return getTypeFromTypeNode(declaration.type); } - if (declaration.kind === 141) { + if (declaration.kind === 142) { var type = getContextuallyTypedParameterType(declaration); if (type) { return type; @@ -19443,7 +20030,7 @@ var ts; } function isInParameterInitializerBeforeContainingFunction(node) { while (node.parent && !ts.isFunctionLike(node.parent)) { - if (node.parent.kind === 141 && node.parent.initializer === node) { + if (node.parent.kind === 142 && node.parent.initializer === node) { return true; } node = node.parent; @@ -19452,8 +20039,8 @@ var ts; } function getContextualReturnType(functionDecl) { if (functionDecl.type || - functionDecl.kind === 147 || - functionDecl.kind === 148 && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(functionDecl.symbol, 149))) { + functionDecl.kind === 148 || + functionDecl.kind === 149 && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(functionDecl.symbol, 150))) { return getReturnTypeOfSignature(getSignatureFromDeclaration(functionDecl)); } var signature = getContextualSignatureForFunctionLikeDeclaration(functionDecl); @@ -19466,13 +20053,13 @@ var ts; var args = getEffectiveCallArguments(callTarget); var argIndex = ts.indexOf(args, arg); if (argIndex >= 0) { - var signature = getResolvedSignature(callTarget); + var signature = getResolvedOrAnySignature(callTarget); return getTypeAtPosition(signature, argIndex); } return undefined; } function getContextualTypeForSubstitutionExpression(template, substitutionExpression) { - if (template.parent.kind === 175) { + if (template.parent.kind === 176) { return getContextualTypeForArgument(template.parent, substitutionExpression); } return undefined; @@ -19580,13 +20167,13 @@ var ts; var kind = attribute.kind; var jsxElement = attribute.parent; var attrsType = getJsxElementAttributesType(jsxElement); - if (attribute.kind === 245) { + if (attribute.kind === 246) { if (!attrsType || isTypeAny(attrsType)) { return undefined; } return getTypeOfPropertyOfType(attrsType, attribute.name.text); } - else if (attribute.kind === 246) { + else if (attribute.kind === 247) { return attrsType; } ts.Debug.fail("Expected JsxAttribute or JsxSpreadAttribute, got ts.SyntaxKind[" + kind + "]"); @@ -19604,40 +20191,40 @@ var ts; } var parent = node.parent; switch (parent.kind) { - case 217: - case 141: + case 218: + case 142: + case 145: case 144: - case 143: - case 168: - return getContextualTypeForInitializerExpression(node); - case 179: - case 210: - return getContextualTypeForReturnExpression(node); - case 189: - return getContextualTypeForYieldOperand(parent); - case 173: - case 174: - return getContextualTypeForArgument(parent, node); - case 176: - case 194: - return getTypeFromTypeNode(parent.type); - case 186: - return getContextualTypeForBinaryOperand(node); - case 252: - return getContextualTypeForObjectLiteralElement(parent); case 169: - return getContextualTypeForElementExpression(node); - case 187: - return getContextualTypeForConditionalOperand(node); - case 196: - ts.Debug.assert(parent.parent.kind === 188); - return getContextualTypeForSubstitutionExpression(parent.parent, node); + return getContextualTypeForInitializerExpression(node); + case 180: + case 211: + return getContextualTypeForReturnExpression(node); + case 190: + return getContextualTypeForYieldOperand(parent); + case 174: + case 175: + return getContextualTypeForArgument(parent, node); case 177: + case 195: + return getTypeFromTypeNode(parent.type); + case 187: + return getContextualTypeForBinaryOperand(node); + case 253: + return getContextualTypeForObjectLiteralElement(parent); + case 170: + return getContextualTypeForElementExpression(node); + case 188: + return getContextualTypeForConditionalOperand(node); + case 197: + ts.Debug.assert(parent.parent.kind === 189); + return getContextualTypeForSubstitutionExpression(parent.parent, node); + case 178: return getContextualType(parent); - case 247: + case 248: return getContextualType(parent); - case 245: case 246: + case 247: return getContextualTypeForJsxAttribute(parent); } return undefined; @@ -19652,18 +20239,21 @@ var ts; } } function isFunctionExpressionOrArrowFunction(node) { - return node.kind === 178 || node.kind === 179; + return node.kind === 179 || node.kind === 180; } 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 !== 146 || ts.isObjectLiteralMethod(node)); - var type = ts.isObjectLiteralMethod(node) - ? getContextualTypeForObjectLiteralMethod(node) - : getApparentTypeOfContextualType(node); + ts.Debug.assert(node.kind !== 147 || ts.isObjectLiteralMethod(node)); + var type = getContextualTypeForFunctionLikeDeclaration(node); if (!type) { return undefined; } @@ -19698,53 +20288,22 @@ var ts; function isInferentialContext(mapper) { return mapper && mapper.context; } - function getAssignmentRoot(node) { - while (node.parent.kind === 177) { - node = node.parent; - } - while (true) { - if (node.parent.kind === 252) { - node = node.parent.parent; - } - else if (node.parent.kind === 169) { - node = node.parent; - } - else { - break; - } - } - var parent = node.parent; - return parent.kind === 186 && - parent.operatorToken.kind === 56 && - parent.left === node ? parent : undefined; - } - function isAssignmentTarget(node) { - return !!getAssignmentRoot(node); - } - function isCompoundAssignmentTarget(node) { - var parent = node.parent; - if (parent.kind === 186 && parent.left === node) { - var operator = parent.operatorToken.kind; - return operator >= 56 && operator <= 68; - } - return false; - } function checkSpreadElementExpression(node, contextualMapper) { var arrayOrIterableType = checkExpressionCached(node.expression, contextualMapper); return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, false); } function hasDefaultValue(node) { - return (node.kind === 168 && !!node.initializer) || - (node.kind === 186 && node.operatorToken.kind === 56); + return (node.kind === 169 && !!node.initializer) || + (node.kind === 187 && node.operatorToken.kind === 56); } function checkArrayLiteral(node, contextualMapper) { var elements = node.elements; var hasSpreadElement = false; var elementTypes = []; - var inDestructuringPattern = isAssignmentTarget(node); + var inDestructuringPattern = ts.isAssignmentTarget(node); for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) { var e = elements_1[_i]; - if (inDestructuringPattern && e.kind === 190) { + if (inDestructuringPattern && e.kind === 191) { var restArrayType = checkExpression(e.expression, contextualMapper); var restElementType = getIndexTypeOfType(restArrayType, 1) || (languageVersion >= 2 ? getElementTypeOfIterable(restArrayType, undefined) : undefined); @@ -19756,7 +20315,7 @@ var ts; var type = checkExpression(e, contextualMapper); elementTypes.push(type); } - hasSpreadElement = hasSpreadElement || e.kind === 190; + hasSpreadElement = hasSpreadElement || e.kind === 191; } if (!hasSpreadElement) { if (inDestructuringPattern && elementTypes.length) { @@ -19767,7 +20326,7 @@ var ts; var contextualType = getApparentTypeOfContextualType(node); if (contextualType && contextualTypeIsTupleLikeType(contextualType)) { var pattern = contextualType.pattern; - if (pattern && (pattern.kind === 167 || pattern.kind === 169)) { + if (pattern && (pattern.kind === 168 || pattern.kind === 170)) { var patternElements = pattern.elements; for (var i = elementTypes.length; i < patternElements.length; i++) { var patternElement = patternElements[i]; @@ -19775,7 +20334,7 @@ var ts; elementTypes.push(contextualType.elementTypes[i]); } else { - if (patternElement.kind !== 192) { + if (patternElement.kind !== 193) { error(patternElement, ts.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value); } elementTypes.push(unknownType); @@ -19790,7 +20349,7 @@ var ts; return createArrayType(elementTypes.length ? getUnionType(elementTypes) : emptyArrayElementType); } function isNumericName(name) { - return name.kind === 139 ? isNumericComputedName(name) : isNumericLiteralName(name.text); + return name.kind === 140 ? isNumericComputedName(name) : isNumericLiteralName(name.text); } function isNumericComputedName(name) { return isTypeAnyOrAllConstituentTypesHaveKind(checkComputedPropertyName(name), 132); @@ -19825,13 +20384,13 @@ var ts; return createIndexInfo(unionType, false); } function checkObjectLiteral(node, contextualMapper) { - var inDestructuringPattern = isAssignmentTarget(node); + var inDestructuringPattern = ts.isAssignmentTarget(node); checkGrammarObjectLiteralExpression(node, inDestructuringPattern); var propertiesTable = {}; var propertiesArray = []; var contextualType = getApparentTypeOfContextualType(node); var contextualTypeHasPattern = contextualType && contextualType.pattern && - (contextualType.pattern.kind === 166 || contextualType.pattern.kind === 170); + (contextualType.pattern.kind === 167 || contextualType.pattern.kind === 171); var typeFlags = 0; var patternWithComputedProperties = false; var hasComputedStringProperty = false; @@ -19839,25 +20398,25 @@ var ts; for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { var memberDecl = _a[_i]; var member = memberDecl.symbol; - if (memberDecl.kind === 252 || - memberDecl.kind === 253 || + if (memberDecl.kind === 253 || + memberDecl.kind === 254 || ts.isObjectLiteralMethod(memberDecl)) { var type = void 0; - if (memberDecl.kind === 252) { + if (memberDecl.kind === 253) { type = checkPropertyAssignment(memberDecl, contextualMapper); } - else if (memberDecl.kind === 146) { + else if (memberDecl.kind === 147) { type = checkObjectLiteralMethod(memberDecl, contextualMapper); } else { - ts.Debug.assert(memberDecl.kind === 253); + ts.Debug.assert(memberDecl.kind === 254); type = checkExpression(memberDecl.name, contextualMapper); } typeFlags |= type.flags; var prop = createSymbol(4 | 67108864 | member.flags, member.name); if (inDestructuringPattern) { - var isOptional = (memberDecl.kind === 252 && hasDefaultValue(memberDecl.initializer)) || - (memberDecl.kind === 253 && memberDecl.objectAssignmentInitializer); + var isOptional = (memberDecl.kind === 253 && hasDefaultValue(memberDecl.initializer)) || + (memberDecl.kind === 254 && memberDecl.objectAssignmentInitializer); if (isOptional) { prop.flags |= 536870912; } @@ -19884,7 +20443,7 @@ var ts; member = prop; } else { - ts.Debug.assert(memberDecl.kind === 148 || memberDecl.kind === 149); + ts.Debug.assert(memberDecl.kind === 149 || memberDecl.kind === 150); checkAccessorDeclaration(memberDecl); } if (ts.hasDynamicName(memberDecl)) { @@ -19937,13 +20496,13 @@ var ts; for (var _i = 0, _a = node.children; _i < _a.length; _i++) { var child = _a[_i]; switch (child.kind) { - case 247: + case 248: checkJsxExpression(child); break; - case 240: + case 241: checkJsxElement(child); break; - case 241: + case 242: checkJsxSelfClosingElement(child); break; } @@ -19954,7 +20513,7 @@ var ts; return name.indexOf("-") < 0; } function isJsxIntrinsicIdentifier(tagName) { - if (tagName.kind === 138) { + if (tagName.kind === 139) { return false; } else { @@ -20044,8 +20603,8 @@ var ts; } return links.resolvedSymbol; } - function getJsxElementInstanceType(node) { - var valueType = checkExpression(node.tagName); + function getJsxElementInstanceType(node, valueType) { + ts.Debug.assert(!(valueType.flags & 16384)); if (isTypeAny(valueType)) { return anyType; } @@ -20080,6 +20639,79 @@ var ts; return undefined; } } + function getResolvedJsxType(node, elemType, elemClassType) { + if (!elemType) { + elemType = checkExpression(node.tagName); + } + if (elemType.flags & 16384) { + var types = elemType.types; + return getUnionType(types.map(function (type) { + return getResolvedJsxType(node, type, elemClassType); + })); + } + var elemInstanceType = getJsxElementInstanceType(node, elemType); + if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { + if (jsxElementType) { + var callSignatures = elemType && getSignaturesOfType(elemType, 0); + var callSignature = callSignatures && callSignatures.length > 0 && callSignatures[0]; + var callReturnType = callSignature && getReturnTypeOfSignature(callSignature); + var paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0])); + if (callReturnType && isTypeAssignableTo(callReturnType, jsxElementType)) { + var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes); + if (intrinsicAttributes !== unknownType) { + paramType = intersectTypes(intrinsicAttributes, paramType); + } + return paramType; + } + } + } + if (elemClassType) { + checkTypeRelatedTo(elemInstanceType, elemClassType, assignableRelation, node, 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 if (attributesType.flags & 16384) { + error(node.tagName, ts.Diagnostics.JSX_element_attributes_type_0_may_not_be_a_union_type, typeToString(attributesType)); + return anyType; + } + 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 getJsxElementAttributesType(node) { var links = getNodeLinks(node); if (!links.resolvedJsxType) { @@ -20091,74 +20723,14 @@ var ts; else if (links.jsxFlags & 2) { return links.resolvedJsxType = getIndexInfoOfSymbol(symbol, 0).type; } + else { + return links.resolvedJsxType = unknownType; + } } else { - var elemInstanceType = getJsxElementInstanceType(node); var elemClassType = getJsxGlobalElementClassType(); - if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { - if (jsxElementType) { - var elemType = checkExpression(node.tagName); - var callSignatures = elemType && getSignaturesOfType(elemType, 0); - var callSignature = callSignatures && callSignatures.length > 0 && callSignatures[0]; - var callReturnType = callSignature && getReturnTypeOfSignature(callSignature); - var paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0])); - if (callReturnType && isTypeAssignableTo(callReturnType, jsxElementType)) { - var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes); - if (intrinsicAttributes !== unknownType) { - paramType = intersectTypes(intrinsicAttributes, paramType); - } - return links.resolvedJsxType = paramType; - } - } - } - if (elemClassType) { - checkTypeRelatedTo(elemInstanceType, elemClassType, assignableRelation, node, ts.Diagnostics.JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements); - } - if (isTypeAny(elemInstanceType)) { - return links.resolvedJsxType = elemInstanceType; - } - var propsName = getJsxElementPropertiesName(); - if (propsName === undefined) { - return links.resolvedJsxType = anyType; - } - else if (propsName === "") { - return links.resolvedJsxType = elemInstanceType; - } - else { - var attributesType = getTypeOfPropertyOfType(elemInstanceType, propsName); - if (!attributesType) { - return links.resolvedJsxType = emptyObjectType; - } - else if (isTypeAny(attributesType) || (attributesType === unknownType)) { - return links.resolvedJsxType = attributesType; - } - else if (attributesType.flags & 16384) { - error(node.tagName, ts.Diagnostics.JSX_element_attributes_type_0_may_not_be_a_union_type, typeToString(attributesType)); - return links.resolvedJsxType = anyType; - } - 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 links.resolvedJsxType = apparentAttributesType; - } - } + return links.resolvedJsxType = getResolvedJsxType(node, undefined, elemClassType); } - return links.resolvedJsxType = unknownType; } return links.resolvedJsxType; } @@ -20200,11 +20772,11 @@ var ts; var nameTable = {}; var sawSpreadedAny = false; for (var i = node.attributes.length - 1; i >= 0; i--) { - if (node.attributes[i].kind === 245) { + if (node.attributes[i].kind === 246) { checkJsxAttribute((node.attributes[i]), targetAttributesType, nameTable); } else { - ts.Debug.assert(node.attributes[i].kind === 246); + ts.Debug.assert(node.attributes[i].kind === 247); var spreadType = checkJsxSpreadAttribute((node.attributes[i]), targetAttributesType, nameTable); if (isTypeAny(spreadType)) { sawSpreadedAny = true; @@ -20230,7 +20802,7 @@ var ts; } } function getDeclarationKindFromSymbol(s) { - return s.valueDeclaration ? s.valueDeclaration.kind : 144; + return s.valueDeclaration ? s.valueDeclaration.kind : 145; } function getDeclarationFlagsFromSymbol(s) { return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : s.flags & 134217728 ? 4 | 32 : 0; @@ -20238,11 +20810,11 @@ var ts; function checkClassPropertyAccess(node, left, type, prop) { var flags = getDeclarationFlagsFromSymbol(prop); var declaringClass = getDeclaredTypeOfSymbol(getParentOfSymbol(prop)); - var errorNode = node.kind === 171 || node.kind === 217 ? + var errorNode = node.kind === 172 || node.kind === 218 ? node.name : node.right; if (left.kind === 95) { - if (languageVersion < 2 && getDeclarationKindFromSymbol(prop) !== 146) { + if (languageVersion < 2 && getDeclarationKindFromSymbol(prop) !== 147) { error(errorNode, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword); return false; } @@ -20287,8 +20859,14 @@ var ts; } function checkNonNullExpression(node) { var type = checkExpression(node); - if (strictNullChecks && getNullableKind(type)) { - error(node, ts.Diagnostics.Object_is_possibly_null_or_undefined); + if (strictNullChecks) { + var kind = getNullableKind(type); + if (kind) { + error(node, kind & 32 ? kind & 64 ? + ts.Diagnostics.Object_is_possibly_null_or_undefined : + ts.Diagnostics.Object_is_possibly_undefined : + ts.Diagnostics.Object_is_possibly_null); + } return getNonNullableType(type); } return type; @@ -20320,11 +20898,28 @@ var ts; checkClassPropertyAccess(node, left, apparentType, prop); } var propType = getTypeOfSymbol(prop); - return node.kind === 171 && prop.flags & 4 ? - getNarrowedTypeOfReference(propType, node) : propType; + if (node.kind !== 172 || ts.isAssignmentTarget(node) || + !(propType.flags & 16384) && !(prop.flags & (3 | 4 | 98304))) { + return propType; + } + var leftmostNode = getLeftmostIdentifierOrThis(node); + if (!leftmostNode) { + return propType; + } + if (leftmostNode.kind === 69) { + var leftmostSymbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(leftmostNode)); + if (!leftmostSymbol) { + return propType; + } + var declaration = leftmostSymbol.valueDeclaration; + if (!declaration || declaration.kind !== 218 && declaration.kind !== 142 && declaration.kind !== 169) { + return propType; + } + } + return getFlowTypeOfReference(node, propType, true); } function isValidPropertyAccess(node, propertyName) { - var left = node.kind === 171 + var left = node.kind === 172 ? node.expression : node.left; var type = checkExpression(left); @@ -20338,7 +20933,7 @@ var ts; } function getForInVariableSymbol(node) { var initializer = node.initializer; - if (initializer.kind === 218) { + if (initializer.kind === 219) { var variable = initializer.declarations[0]; if (variable && !ts.isBindingPattern(variable.name)) { return getSymbolOfNode(variable); @@ -20360,7 +20955,7 @@ var ts; var child = expr; var node = expr.parent; while (node) { - if (node.kind === 206 && + if (node.kind === 207 && child === node.statement && getForInVariableSymbol(node) === symbol && hasNumericPropertyNames(checkExpression(node.expression))) { @@ -20376,7 +20971,7 @@ var ts; function checkIndexedAccess(node) { if (!node.argumentExpression) { var sourceFile = ts.getSourceFileOfNode(node); - if (node.parent.kind === 174 && node.parent.expression === node) { + if (node.parent.kind === 175 && 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); @@ -20439,7 +21034,7 @@ var ts; if (indexArgumentExpression.kind === 9 || indexArgumentExpression.kind === 8) { return indexArgumentExpression.text; } - if (indexArgumentExpression.kind === 172 || indexArgumentExpression.kind === 171) { + if (indexArgumentExpression.kind === 173 || indexArgumentExpression.kind === 172) { var value = getConstantValue(indexArgumentExpression); if (value !== undefined) { return value.toString(); @@ -20482,10 +21077,10 @@ var ts; return true; } function resolveUntypedCall(node) { - if (node.kind === 175) { + if (node.kind === 176) { checkExpression(node.template); } - else if (node.kind !== 142) { + else if (node.kind !== 143) { ts.forEach(node.arguments, function (argument) { checkExpression(argument); }); @@ -20507,19 +21102,19 @@ var ts; for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) { var signature = signatures_2[_i]; var symbol = signature.declaration && getSymbolOfNode(signature.declaration); - var parent_7 = signature.declaration && signature.declaration.parent; + var parent_9 = signature.declaration && signature.declaration.parent; if (!lastSymbol || symbol === lastSymbol) { - if (lastParent && parent_7 === lastParent) { + if (lastParent && parent_9 === lastParent) { index++; } else { - lastParent = parent_7; + lastParent = parent_9; index = cutoffIndex; } } else { index = cutoffIndex = result.length; - lastParent = parent_7; + lastParent = parent_9; } lastSymbol = symbol; if (signature.hasStringLiterals) { @@ -20536,7 +21131,7 @@ var ts; function getSpreadArgumentIndex(args) { for (var i = 0; i < args.length; i++) { var arg = args[i]; - if (arg && arg.kind === 190) { + if (arg && arg.kind === 191) { return i; } } @@ -20548,11 +21143,11 @@ var ts; var callIsIncomplete; var isDecorator; var spreadArgIndex = -1; - if (node.kind === 175) { + if (node.kind === 176) { var tagExpression = node; adjustedArgCount = args.length; typeArguments = undefined; - if (tagExpression.template.kind === 188) { + if (tagExpression.template.kind === 189) { var templateExpression = tagExpression.template; var lastSpan = ts.lastOrUndefined(templateExpression.templateSpans); ts.Debug.assert(lastSpan !== undefined); @@ -20564,7 +21159,7 @@ var ts; callIsIncomplete = !!templateLiteral.isUnterminated; } } - else if (node.kind === 142) { + else if (node.kind === 143) { isDecorator = true; typeArguments = undefined; adjustedArgCount = getEffectiveArgumentCount(node, undefined, signature); @@ -20572,7 +21167,7 @@ var ts; else { var callExpression = node; if (!callExpression.arguments) { - ts.Debug.assert(callExpression.kind === 174); + ts.Debug.assert(callExpression.kind === 175); return signature.minArgumentCount === 0; } adjustedArgCount = callExpression.arguments.hasTrailingComma ? args.length + 1 : args.length; @@ -20630,7 +21225,7 @@ var ts; var argCount = getEffectiveArgumentCount(node, args, signature); for (var i = 0; i < argCount; i++) { var arg = getEffectiveArgument(node, args, i); - if (arg === undefined || arg.kind !== 192) { + if (arg === undefined || arg.kind !== 193) { var paramType = getTypeAtPosition(signature, i); var argType = getEffectiveArgumentType(node, i, arg); if (argType === undefined) { @@ -20676,7 +21271,7 @@ var ts; return typeArgumentsAreAssignable; } function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) { - if (signature.thisType && signature.thisType !== voidType && node.kind !== 174) { + if (signature.thisType && signature.thisType !== voidType && node.kind !== 175) { var thisArgumentNode = getThisArgumentOfCall(node); var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; var errorNode = reportErrors ? (thisArgumentNode || node) : undefined; @@ -20689,7 +21284,7 @@ var ts; var argCount = getEffectiveArgumentCount(node, args, signature); for (var i = 0; i < argCount; i++) { var arg = getEffectiveArgument(node, args, i); - if (arg === undefined || arg.kind !== 192) { + if (arg === undefined || arg.kind !== 193) { var paramType = getTypeAtPosition(signature, i); var argType = getEffectiveArgumentType(node, i, arg); if (argType === undefined) { @@ -20706,28 +21301,28 @@ var ts; return true; } function getThisArgumentOfCall(node) { - if (node.kind === 173) { + if (node.kind === 174) { var callee = node.expression; - if (callee.kind === 171) { + if (callee.kind === 172) { return callee.expression; } - else if (callee.kind === 172) { + else if (callee.kind === 173) { return callee.expression; } } } function getEffectiveCallArguments(node) { var args; - if (node.kind === 175) { + if (node.kind === 176) { var template = node.template; args = [undefined]; - if (template.kind === 188) { + if (template.kind === 189) { ts.forEach(template.templateSpans, function (span) { args.push(span.expression); }); } } - else if (node.kind === 142) { + else if (node.kind === 143) { return undefined; } else { @@ -20736,21 +21331,21 @@ var ts; return args; } function getEffectiveArgumentCount(node, args, signature) { - if (node.kind === 142) { + if (node.kind === 143) { switch (node.parent.kind) { - case 220: - case 191: + case 221: + case 192: return 1; - case 144: + case 145: return 2; - case 146: - case 148: + case 147: case 149: + case 150: if (languageVersion === 0) { return 2; } return signature.parameters.length >= 3 ? 3 : 2; - case 141: + case 142: return 3; } } @@ -20759,48 +21354,48 @@ var ts; } } function getEffectiveDecoratorFirstArgumentType(node) { - if (node.kind === 220) { + if (node.kind === 221) { var classSymbol = getSymbolOfNode(node); return getTypeOfSymbol(classSymbol); } - if (node.kind === 141) { + if (node.kind === 142) { node = node.parent; - if (node.kind === 147) { + if (node.kind === 148) { var classSymbol = getSymbolOfNode(node); return getTypeOfSymbol(classSymbol); } } - if (node.kind === 144 || - node.kind === 146 || - node.kind === 148 || - node.kind === 149) { + if (node.kind === 145 || + node.kind === 147 || + node.kind === 149 || + node.kind === 150) { return getParentTypeOfClassElement(node); } ts.Debug.fail("Unsupported decorator target."); return unknownType; } function getEffectiveDecoratorSecondArgumentType(node) { - if (node.kind === 220) { + if (node.kind === 221) { ts.Debug.fail("Class decorators should not have a second synthetic argument."); return unknownType; } - if (node.kind === 141) { + if (node.kind === 142) { node = node.parent; - if (node.kind === 147) { + if (node.kind === 148) { return anyType; } } - if (node.kind === 144 || - node.kind === 146 || - node.kind === 148 || - node.kind === 149) { + if (node.kind === 145 || + node.kind === 147 || + node.kind === 149 || + node.kind === 150) { var element = node; switch (element.name.kind) { case 69: case 8: case 9: return getStringLiteralTypeForText(element.name.text); - case 139: + case 140: var nameType = checkComputedPropertyName(element.name); if (isTypeOfKind(nameType, 16777216)) { return nameType; @@ -20817,20 +21412,20 @@ var ts; return unknownType; } function getEffectiveDecoratorThirdArgumentType(node) { - if (node.kind === 220) { + if (node.kind === 221) { ts.Debug.fail("Class decorators should not have a third synthetic argument."); return unknownType; } - if (node.kind === 141) { + if (node.kind === 142) { return numberType; } - if (node.kind === 144) { + if (node.kind === 145) { ts.Debug.fail("Property decorators should not have a third synthetic argument."); return unknownType; } - if (node.kind === 146 || - node.kind === 148 || - node.kind === 149) { + if (node.kind === 147 || + node.kind === 149 || + node.kind === 150) { var propertyType = getTypeOfNode(node); return createTypedPropertyDescriptorType(propertyType); } @@ -20851,26 +21446,26 @@ var ts; return unknownType; } function getEffectiveArgumentType(node, argIndex, arg) { - if (node.kind === 142) { + if (node.kind === 143) { return getEffectiveDecoratorArgumentType(node, argIndex); } - else if (argIndex === 0 && node.kind === 175) { + else if (argIndex === 0 && node.kind === 176) { return getGlobalTemplateStringsArrayType(); } return undefined; } function getEffectiveArgument(node, args, argIndex) { - if (node.kind === 142 || - (argIndex === 0 && node.kind === 175)) { + if (node.kind === 143 || + (argIndex === 0 && node.kind === 176)) { return undefined; } return args[argIndex]; } function getEffectiveArgumentErrorNode(node, argIndex, arg) { - if (node.kind === 142) { + if (node.kind === 143) { return node.expression; } - else if (argIndex === 0 && node.kind === 175) { + else if (argIndex === 0 && node.kind === 176) { return node.template; } else { @@ -20878,8 +21473,8 @@ var ts; } } function resolveCall(node, signatures, candidatesOutArray, headMessage) { - var isTaggedTemplate = node.kind === 175; - var isDecorator = node.kind === 142; + var isTaggedTemplate = node.kind === 176; + var isDecorator = node.kind === 143; var typeArguments; if (!isTaggedTemplate && !isDecorator) { typeArguments = node.typeArguments; @@ -21141,16 +21736,16 @@ var ts; } function getDiagnosticHeadMessageForDecoratorResolution(node) { switch (node.parent.kind) { - case 220: - case 191: + case 221: + case 192: return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression; - case 141: + case 142: return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression; - case 144: + case 145: return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression; - case 146: - case 148: + case 147: case 149: + case 150: return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression; } } @@ -21174,27 +21769,32 @@ var ts; } return resolveCall(node, callSignatures, candidatesOutArray, headMessage); } + function resolveSignature(node, candidatesOutArray) { + switch (node.kind) { + case 174: + return resolveCallExpression(node, candidatesOutArray); + case 175: + return resolveNewExpression(node, candidatesOutArray); + case 176: + return resolveTaggedTemplateExpression(node, candidatesOutArray); + case 143: + return resolveDecorator(node, candidatesOutArray); + } + ts.Debug.fail("Branch in 'resolveSignature' should be unreachable."); + } function getResolvedSignature(node, candidatesOutArray) { var links = getNodeLinks(node); - if (!links.resolvedSignature || candidatesOutArray) { - links.resolvedSignature = anySignature; - if (node.kind === 173) { - links.resolvedSignature = resolveCallExpression(node, candidatesOutArray); - } - else if (node.kind === 174) { - links.resolvedSignature = resolveNewExpression(node, candidatesOutArray); - } - else if (node.kind === 175) { - links.resolvedSignature = resolveTaggedTemplateExpression(node, candidatesOutArray); - } - else if (node.kind === 142) { - links.resolvedSignature = resolveDecorator(node, candidatesOutArray); - } - else { - ts.Debug.fail("Branch in 'getResolvedSignature' should be unreachable."); - } + var cached = links.resolvedSignature; + if (cached && cached !== anySignature && !candidatesOutArray) { + return cached; } - return links.resolvedSignature; + links.resolvedSignature = anySignature; + var result = resolveSignature(node, candidatesOutArray); + links.resolvedSignature = flowLoopStart === flowLoopCount ? result : cached; + return result; + } + function getResolvedOrAnySignature(node) { + return getNodeLinks(node).resolvedSignature === anySignature ? anySignature : getResolvedSignature(node); } function getInferredClassType(symbol) { var links = getSymbolLinks(symbol); @@ -21209,12 +21809,12 @@ var ts; if (node.expression.kind === 95) { return voidType; } - if (node.kind === 174) { + if (node.kind === 175) { var declaration = signature.declaration; if (declaration && - declaration.kind !== 147 && - declaration.kind !== 151 && - declaration.kind !== 156 && + declaration.kind !== 148 && + declaration.kind !== 152 && + declaration.kind !== 157 && !ts.isJSDocConstructSignature(declaration)) { var funcSymbol = checkExpression(node.expression).symbol; if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16)) { @@ -21280,7 +21880,7 @@ var ts; if (ts.isBindingPattern(node.name)) { for (var _i = 0, _a = node.name.elements; _i < _a.length; _i++) { var element = _a[_i]; - if (element.kind !== 192) { + if (element.kind !== 193) { if (element.name.kind === 69) { getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element); } @@ -21293,6 +21893,11 @@ var ts; var links = getSymbolLinks(parameter); if (!links.type) { links.type = instantiateType(contextualType, mapper); + if (links.type === emptyObjectType && + (parameter.valueDeclaration.name.kind === 167 || + parameter.valueDeclaration.name.kind === 168)) { + links.type = getTypeFromBindingPattern(parameter.valueDeclaration.name); + } assignBindingElementTypes(parameter.valueDeclaration); } else if (isInferentialContext(mapper)) { @@ -21321,7 +21926,7 @@ var ts; } var isAsync = ts.isAsyncFunctionLike(func); var type; - if (func.body.kind !== 198) { + if (func.body.kind !== 199) { type = checkExpressionCached(func.body, contextualMapper); if (isAsync) { type = checkAwaitedType(type, func, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member); @@ -21343,6 +21948,9 @@ var ts; else { var hasImplicitReturn = !!(func.flags & 32768); types = checkAndAggregateReturnExpressionTypes(func.body, contextualMapper, isAsync, hasImplicitReturn); + if (!types) { + return neverType; + } if (types.length === 0) { if (isAsync) { var promiseType = createPromiseType(voidType); @@ -21352,9 +21960,7 @@ var ts; } return promiseType; } - else { - return voidType; - } + return voidType; } } type = contextualSignature ? getUnionType(types) : getCommonSupertype(types); @@ -21414,7 +22020,7 @@ var ts; if (isAsync) { type = checkAwaitedType(type, body.parent, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member); } - if (!ts.contains(aggregatedTypes, type)) { + if (type !== neverType && !ts.contains(aggregatedTypes, type)) { aggregatedTypes.push(type); } } @@ -21422,6 +22028,9 @@ var ts; hasOmittedExpressions = true; } }); + if (aggregatedTypes.length === 0 && !hasOmittedExpressions && !hasImplicitReturn) { + return undefined; + } if (strictNullChecks && aggregatedTypes.length && (hasOmittedExpressions || hasImplicitReturn)) { if (!ts.contains(aggregatedTypes, undefinedType)) { aggregatedTypes.push(undefinedType); @@ -21436,11 +22045,14 @@ var ts; if (returnType && maybeTypeOfKind(returnType, 1 | 16)) { return; } - if (ts.nodeIsMissing(func.body) || func.body.kind !== 198 || !(func.flags & 32768)) { + if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 || !(func.flags & 32768)) { return; } var hasExplicitReturn = func.flags & 65536; - if (returnType && !hasExplicitReturn) { + if (returnType === neverType) { + error(func.type, ts.Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point); + } + else if (returnType && !hasExplicitReturn) { error(func.type, ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value); } else if (returnType && strictNullChecks && !isTypeAssignableTo(undefinedType, returnType)) { @@ -21460,9 +22072,9 @@ var ts; } } function checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper) { - ts.Debug.assert(node.kind !== 146 || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 147 || ts.isObjectLiteralMethod(node)); var hasGrammarError = checkGrammarFunctionLikeDeclaration(node); - if (!hasGrammarError && node.kind === 178) { + if (!hasGrammarError && node.kind === 179) { checkGrammarForGenerator(node); } if (contextualMapper === identityMapper && isContextSensitive(node)) { @@ -21496,14 +22108,14 @@ var ts; } } } - if (produceDiagnostics && node.kind !== 146 && node.kind !== 145) { + if (produceDiagnostics && node.kind !== 147 && node.kind !== 146) { checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); } return type; } function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) { - ts.Debug.assert(node.kind !== 146 || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 147 || ts.isObjectLiteralMethod(node)); var isAsync = ts.isAsyncFunctionLike(node); var returnOrPromisedType = node.type && (isAsync ? checkAsyncFunctionReturnType(node) : getTypeFromTypeNode(node.type)); if (!node.asteriskToken) { @@ -21513,7 +22125,7 @@ var ts; if (!node.type) { getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } - if (node.body.kind === 198) { + if (node.body.kind === 199) { checkSourceElement(node.body); } else { @@ -21546,23 +22158,23 @@ var ts; function isReferenceToReadonlyEntity(expr, symbol) { if (isReadonlySymbol(symbol)) { if (symbol.flags & 4 && - (expr.kind === 171 || expr.kind === 172) && + (expr.kind === 172 || expr.kind === 173) && expr.expression.kind === 97) { var func = ts.getContainingFunction(expr); - return !(func && func.kind === 147 && func.parent === symbol.valueDeclaration.parent); + return !(func && func.kind === 148 && func.parent === symbol.valueDeclaration.parent); } return true; } return false; } function isReferenceThroughNamespaceImport(expr) { - if (expr.kind === 171 || expr.kind === 172) { + if (expr.kind === 172 || expr.kind === 173) { var node = skipParenthesizedNodes(expr.expression); if (node.kind === 69) { var symbol = getNodeLinks(node).resolvedSymbol; if (symbol.flags & 8388608) { var declaration = getDeclarationOfAliasSymbol(symbol); - return declaration && declaration.kind === 231; + return declaration && declaration.kind === 232; } } } @@ -21570,7 +22182,7 @@ var ts; } function checkReferenceExpression(expr, invalidReferenceMessage, constantVariableMessage) { var node = skipParenthesizedNodes(expr); - if (node.kind !== 69 && node.kind !== 171 && node.kind !== 172) { + if (node.kind !== 69 && node.kind !== 172 && node.kind !== 173) { error(expr, invalidReferenceMessage); return false; } @@ -21588,7 +22200,7 @@ var ts; } } } - else if (node.kind === 172) { + else if (node.kind === 173) { if (links.resolvedIndexInfo && links.resolvedIndexInfo.isReadonly) { error(expr, constantVariableMessage); return false; @@ -21718,84 +22330,92 @@ var ts; var properties = node.properties; for (var _i = 0, properties_3 = properties; _i < properties_3.length; _i++) { var p = properties_3[_i]; - if (p.kind === 252 || p.kind === 253) { - var name_13 = p.name; - if (name_13.kind === 139) { - checkComputedPropertyName(name_13); - } - if (isComputedNonLiteralName(name_13)) { - continue; - } - var text = getTextOfPropertyName(name_13); - var type = isTypeAny(sourceType) - ? sourceType - : getTypeOfPropertyOfType(sourceType, text) || - isNumericLiteralName(text) && getIndexTypeOfType(sourceType, 1) || - getIndexTypeOfType(sourceType, 0); - if (type) { - if (p.kind === 253) { - checkDestructuringAssignment(p, type); - } - else { - checkDestructuringAssignment(p.initializer, type); - } + checkObjectLiteralDestructuringPropertyAssignment(sourceType, p, contextualMapper); + } + return sourceType; + } + function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType, property, contextualMapper) { + if (property.kind === 253 || property.kind === 254) { + var name_13 = property.name; + if (name_13.kind === 140) { + checkComputedPropertyName(name_13); + } + if (isComputedNonLiteralName(name_13)) { + return undefined; + } + var text = getTextOfPropertyName(name_13); + var type = isTypeAny(objectLiteralType) + ? objectLiteralType + : getTypeOfPropertyOfType(objectLiteralType, text) || + isNumericLiteralName(text) && getIndexTypeOfType(objectLiteralType, 1) || + getIndexTypeOfType(objectLiteralType, 0); + if (type) { + if (property.kind === 254) { + return checkDestructuringAssignment(property, type); } else { - error(name_13, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(sourceType), ts.declarationNameToString(name_13)); + return checkDestructuringAssignment(property.initializer, type); } } else { - error(p, ts.Diagnostics.Property_assignment_expected); + error(name_13, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name_13)); } } - return sourceType; + else { + error(property, ts.Diagnostics.Property_assignment_expected); + } } function checkArrayLiteralAssignment(node, sourceType, contextualMapper) { var elementType = checkIteratedTypeOrElementType(sourceType, node, false) || unknownType; var elements = node.elements; for (var i = 0; i < elements.length; i++) { - var e = elements[i]; - if (e.kind !== 192) { - if (e.kind !== 190) { - var propName = "" + i; - var type = isTypeAny(sourceType) - ? sourceType - : isTupleLikeType(sourceType) - ? getTypeOfPropertyOfType(sourceType, propName) - : elementType; - if (type) { - checkDestructuringAssignment(e, type, contextualMapper); - } - else { - if (isTupleType(sourceType)) { - error(e, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), sourceType.elementTypes.length, elements.length); - } - else { - error(e, ts.Diagnostics.Type_0_has_no_property_1, typeToString(sourceType), propName); - } - } + checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, elementType, contextualMapper); + } + return sourceType; + } + function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, contextualMapper) { + var elements = node.elements; + var element = elements[elementIndex]; + if (element.kind !== 193) { + if (element.kind !== 191) { + var propName = "" + elementIndex; + var type = isTypeAny(sourceType) + ? sourceType + : isTupleLikeType(sourceType) + ? getTypeOfPropertyOfType(sourceType, propName) + : elementType; + if (type) { + return checkDestructuringAssignment(element, type, contextualMapper); } else { - if (i < elements.length - 1) { - error(e, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern); + if (isTupleType(sourceType)) { + error(element, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), sourceType.elementTypes.length, elements.length); } else { - var restExpression = e.expression; - if (restExpression.kind === 186 && restExpression.operatorToken.kind === 56) { - error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); - } - else { - checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper); - } + 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_an_array_destructuring_pattern); + } + else { + var restExpression = element.expression; + if (restExpression.kind === 187 && restExpression.operatorToken.kind === 56) { + error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); + } + else { + return checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper); } } } } - return sourceType; + return undefined; } function checkDestructuringAssignment(exprOrAssignment, sourceType, contextualMapper) { var target; - if (exprOrAssignment.kind === 253) { + if (exprOrAssignment.kind === 254) { var prop = exprOrAssignment; if (prop.objectAssignmentInitializer) { checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, contextualMapper); @@ -21805,14 +22425,14 @@ var ts; else { target = exprOrAssignment; } - if (target.kind === 186 && target.operatorToken.kind === 56) { + if (target.kind === 187 && target.operatorToken.kind === 56) { checkBinaryExpression(target, contextualMapper); target = target.left; } - if (target.kind === 170) { + if (target.kind === 171) { return checkObjectLiteralAssignment(target, sourceType, contextualMapper); } - if (target.kind === 169) { + if (target.kind === 170) { return checkArrayLiteralAssignment(target, sourceType, contextualMapper); } return checkReferenceAssignment(target, sourceType, contextualMapper); @@ -21824,12 +22444,15 @@ var ts; } return sourceType; } + function isTypeEqualityComparableTo(source, target) { + return (target.flags & 96) !== 0 || isTypeComparableTo(source, target); + } function checkBinaryExpression(node, contextualMapper) { return checkBinaryLikeExpression(node.left, node.operatorToken, node.right, contextualMapper, node); } function checkBinaryLikeExpression(left, operatorToken, right, contextualMapper, errorNode) { var operator = operatorToken.kind; - if (operator === 56 && (left.kind === 170 || left.kind === 169)) { + if (operator === 56 && (left.kind === 171 || left.kind === 170)) { return checkDestructuringAssignment(left, checkExpression(right, contextualMapper), contextualMapper); } var leftType = checkExpression(left, contextualMapper); @@ -21912,14 +22535,17 @@ var ts; case 27: case 28: case 29: - if (!checkForDisallowedESSymbolOperand(operator)) { - return booleanType; + if (checkForDisallowedESSymbolOperand(operator)) { + if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) { + reportOperatorError(); + } } + return booleanType; case 30: case 31: case 32: case 33: - if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) { + if (!isTypeEqualityComparableTo(leftType, rightType) && !isTypeEqualityComparableTo(rightType, leftType)) { reportOperatorError(); } return booleanType; @@ -22049,19 +22675,22 @@ var ts; function checkExpressionCached(node, contextualMapper) { var links = getNodeLinks(node); if (!links.resolvedType) { + var saveFlowLoopStart = flowLoopStart; + flowLoopStart = flowLoopCount; links.resolvedType = checkExpression(node, contextualMapper); + flowLoopStart = saveFlowLoopStart; } return links.resolvedType; } function checkPropertyAssignment(node, contextualMapper) { - if (node.name.kind === 139) { + if (node.name.kind === 140) { checkComputedPropertyName(node.name); } return checkExpression(node.initializer, contextualMapper); } function checkObjectLiteralMethod(node, contextualMapper) { checkGrammarMethod(node); - if (node.name.kind === 139) { + if (node.name.kind === 140) { checkComputedPropertyName(node.name); } var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); @@ -22084,7 +22713,7 @@ var ts; } function checkExpression(node, contextualMapper) { var type; - if (node.kind === 138) { + if (node.kind === 139) { type = checkQualifiedName(node); } else { @@ -22092,9 +22721,9 @@ var ts; type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper); } if (isConstEnumObjectType(type)) { - var ok = (node.parent.kind === 171 && node.parent.expression === node) || - (node.parent.kind === 172 && node.parent.expression === node) || - ((node.kind === 69 || node.kind === 138) && isInRightSideOfImportOrExportAssignment(node)); + var ok = (node.parent.kind === 172 && node.parent.expression === node) || + (node.parent.kind === 173 && node.parent.expression === node) || + ((node.kind === 69 || node.kind === 139) && 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); } @@ -22120,7 +22749,7 @@ var ts; return booleanType; case 8: return checkNumericLiteral(node); - case 188: + case 189: return checkTemplateExpression(node); case 9: return checkStringLiteralExpression(node); @@ -22128,60 +22757,60 @@ var ts; return stringType; case 10: return globalRegExpType; - case 169: - return checkArrayLiteral(node, contextualMapper); case 170: - return checkObjectLiteral(node, contextualMapper); + return checkArrayLiteral(node, contextualMapper); case 171: - return checkPropertyAccessExpression(node); + return checkObjectLiteral(node, contextualMapper); case 172: - return checkIndexedAccess(node); + return checkPropertyAccessExpression(node); case 173: + return checkIndexedAccess(node); case 174: - return checkCallExpression(node); case 175: - return checkTaggedTemplateExpression(node); - case 177: - return checkExpression(node.expression, contextualMapper); - case 191: - return checkClassExpression(node); - case 178: - case 179: - return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); - case 181: - return checkTypeOfExpression(node); + return checkCallExpression(node); case 176: - case 194: - return checkAssertion(node); - case 195: - return checkNonNullAssertion(node); - case 180: - return checkDeleteExpression(node); - case 182: - return checkVoidExpression(node); - case 183: - return checkAwaitExpression(node); - case 184: - return checkPrefixUnaryExpression(node); - case 185: - return checkPostfixUnaryExpression(node); - case 186: - return checkBinaryExpression(node, contextualMapper); - case 187: - return checkConditionalExpression(node, contextualMapper); - case 190: - return checkSpreadElementExpression(node, contextualMapper); + return checkTaggedTemplateExpression(node); + case 178: + return checkExpression(node.expression, contextualMapper); case 192: + return checkClassExpression(node); + case 179: + case 180: + return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); + case 182: + return checkTypeOfExpression(node); + case 177: + case 195: + return checkAssertion(node); + case 196: + return checkNonNullAssertion(node); + case 181: + return checkDeleteExpression(node); + case 183: + return checkVoidExpression(node); + case 184: + return checkAwaitExpression(node); + case 185: + return checkPrefixUnaryExpression(node); + case 186: + return checkPostfixUnaryExpression(node); + case 187: + return checkBinaryExpression(node, contextualMapper); + case 188: + return checkConditionalExpression(node, contextualMapper); + case 191: + return checkSpreadElementExpression(node, contextualMapper); + case 193: return undefinedType; - case 189: + case 190: return checkYieldExpression(node); - case 247: + case 248: return checkJsxExpression(node); - case 240: - return checkJsxElement(node); case 241: - return checkJsxSelfClosingElement(node); + return checkJsxElement(node); case 242: + return checkJsxSelfClosingElement(node); + case 243: ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement"); } return unknownType; @@ -22200,9 +22829,9 @@ var ts; checkGrammarDecorators(node) || checkGrammarModifiers(node); checkVariableLikeDeclaration(node); var func = ts.getContainingFunction(node); - if (node.flags & 28) { + if (node.flags & 92) { func = ts.getContainingFunction(node); - if (!(func.kind === 147 && ts.nodeIsPresent(func.body))) { + if (!(func.kind === 148 && ts.nodeIsPresent(func.body))) { error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); } } @@ -22213,12 +22842,9 @@ var ts; if (ts.indexOf(func.parameters, node) !== 0) { error(node, ts.Diagnostics.A_this_parameter_must_be_the_first_parameter); } - if (func.kind === 147 || func.kind === 151 || func.kind === 156) { + if (func.kind === 148 || func.kind === 152 || func.kind === 157) { error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter); } - if (func.kind === 149) { - error(node, ts.Diagnostics.A_setter_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); @@ -22228,9 +22854,9 @@ var ts; if (!node.asteriskToken || !node.body) { return false; } - return node.kind === 146 || - node.kind === 219 || - node.kind === 178; + return node.kind === 147 || + node.kind === 220 || + node.kind === 179; } function getTypePredicateParameterIndex(parameterList, parameter) { if (parameterList) { @@ -22286,16 +22912,16 @@ var ts; } function getTypePredicateParent(node) { switch (node.parent.kind) { + case 180: + case 151: + case 220: case 179: - case 150: - case 219: - case 178: - case 155: + case 156: + case 147: case 146: - case 145: - var parent_8 = node.parent; - if (node === parent_8.type) { - return parent_8; + var parent_10 = node.parent; + if (node === parent_10.type) { + return parent_10; } } } @@ -22307,8 +22933,8 @@ var ts; error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName); return true; } - else if (name_15.kind === 167 || - name_15.kind === 166) { + else if (name_15.kind === 168 || + name_15.kind === 167) { if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_15, predicateVariableNode, predicateVariableName)) { return true; } @@ -22316,12 +22942,12 @@ var ts; } } function checkSignatureDeclaration(node) { - if (node.kind === 152) { + if (node.kind === 153) { checkGrammarIndexSignature(node); } - else if (node.kind === 155 || node.kind === 219 || node.kind === 156 || - node.kind === 150 || node.kind === 147 || - node.kind === 151) { + else if (node.kind === 156 || node.kind === 220 || node.kind === 157 || + node.kind === 151 || node.kind === 148 || + node.kind === 152) { checkGrammarFunctionLikeDeclaration(node); } checkTypeParameters(node.typeParameters); @@ -22333,10 +22959,10 @@ var ts; checkCollisionWithArgumentsInGeneratedCode(node); if (compilerOptions.noImplicitAny && !node.type) { switch (node.kind) { - case 151: + case 152: error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; - case 150: + case 151: error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; } @@ -22360,7 +22986,7 @@ var ts; } } function checkTypeForDuplicateIndexSignatures(node) { - if (node.kind === 221) { + if (node.kind === 222) { var nodeSymbol = getSymbolOfNode(node); if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) { return; @@ -22375,7 +23001,7 @@ var ts; var declaration = decl; if (declaration.parameters.length === 1 && declaration.parameters[0].type) { switch (declaration.parameters[0].type.kind) { - case 131: + case 132: if (!seenStringIndexer) { seenStringIndexer = true; } @@ -22383,7 +23009,7 @@ var ts; error(declaration, ts.Diagnostics.Duplicate_string_index_signature); } break; - case 129: + case 130: if (!seenNumericIndexer) { seenNumericIndexer = true; } @@ -22441,12 +23067,12 @@ var ts; if (n.kind === 97) { error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location); } - else if (n.kind !== 178 && n.kind !== 219) { + else if (n.kind !== 179 && n.kind !== 220) { ts.forEachChild(n, markThisReferencesAsErrors); } } function isInstancePropertyWithInitializer(n) { - return n.kind === 144 && + return n.kind === 145 && !(n.flags & 32) && !!n.initializer; } @@ -22459,13 +23085,13 @@ var ts; error(superCall, ts.Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null); } var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) || - ts.forEach(node.parameters, function (p) { return p.flags & (4 | 8 | 16); }); + ts.forEach(node.parameters, function (p) { return p.flags & 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 === 201 && ts.isSuperCallExpression(statement.expression)) { + if (statement.kind === 202 && ts.isSuperCallExpression(statement.expression)) { superCallStatement = statement; break; } @@ -22488,7 +23114,7 @@ var ts; checkGrammarFunctionLikeDeclaration(node) || checkGrammarAccessor(node) || checkGrammarComputedPropertyName(node.name); checkDecorators(node); checkSignatureDeclaration(node); - if (node.kind === 148) { + if (node.kind === 149) { if (!ts.isInAmbientContext(node) && ts.nodeIsPresent(node.body) && (node.flags & 32768)) { if (node.flags & 65536) { if (compilerOptions.noImplicitReturns) { @@ -22500,11 +23126,11 @@ var ts; } } } - if (node.name.kind === 139) { + if (node.name.kind === 140) { checkComputedPropertyName(node.name); } if (!ts.hasDynamicName(node)) { - var otherKind = node.kind === 148 ? 149 : 148; + var otherKind = node.kind === 149 ? 150 : 149; var otherAccessor = ts.getDeclarationOfKind(node.symbol, otherKind); if (otherAccessor) { if (((node.flags & 28) !== (otherAccessor.flags & 28))) { @@ -22513,24 +23139,26 @@ var ts; if (((node.flags & 128) !== (otherAccessor.flags & 128))) { error(node.name, ts.Diagnostics.Accessors_must_both_be_abstract_or_non_abstract); } - var currentAccessorType = getAnnotatedAccessorType(node); - var otherAccessorType = getAnnotatedAccessorType(otherAccessor); - if (currentAccessorType && otherAccessorType) { - if (!isTypeIdenticalTo(currentAccessorType, otherAccessorType)) { - error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); - } - } + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getAnnotatedAccessorType, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getAnnotatedAccessorThisType, ts.Diagnostics.get_and_set_accessor_must_have_the_same_this_type); } } getTypeOfAccessors(getSymbolOfNode(node)); } - if (node.parent.kind !== 170) { + if (node.parent.kind !== 171) { checkSourceElement(node.body); } else { checkNodeDeferred(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 checkAccessorDeferred(node) { checkSourceElement(node.body); } @@ -22595,9 +23223,9 @@ var ts; } function getEffectiveDeclarationFlags(n, flagsToCheck) { var flags = ts.getCombinedNodeFlags(n); - if (n.parent.kind !== 221 && - n.parent.kind !== 220 && - n.parent.kind !== 191 && + if (n.parent.kind !== 222 && + n.parent.kind !== 221 && + n.parent.kind !== 192 && ts.isInAmbientContext(n)) { if (!(flags & 2)) { flags |= 1; @@ -22674,7 +23302,7 @@ var ts; if (subsequentNode.kind === node.kind) { var errorNode_1 = subsequentNode.name || subsequentNode; if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) { - var reportError = (node.kind === 146 || node.kind === 145) && + var reportError = (node.kind === 147 || node.kind === 146) && (node.flags & 32) !== (subsequentNode.flags & 32); if (reportError) { var diagnostic = node.flags & 32 ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static; @@ -22708,11 +23336,11 @@ var ts; var current = declarations_4[_i]; var node = current; var inAmbientContext = ts.isInAmbientContext(node); - var inAmbientContextOrInterface = node.parent.kind === 221 || node.parent.kind === 158 || inAmbientContext; + var inAmbientContextOrInterface = node.parent.kind === 222 || node.parent.kind === 159 || inAmbientContext; if (inAmbientContextOrInterface) { previousDeclaration = undefined; } - if (node.kind === 219 || node.kind === 146 || node.kind === 145 || node.kind === 147) { + if (node.kind === 220 || node.kind === 147 || node.kind === 146 || node.kind === 148) { var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck); someNodeFlags |= currentNodeFlags; allNodeFlags &= currentNodeFlags; @@ -22754,7 +23382,7 @@ var ts; }); } if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && - !(lastSeenNonAmbientDeclaration.flags & 128)) { + !(lastSeenNonAmbientDeclaration.flags & 128) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } if (hasOverloads) { @@ -22823,16 +23451,16 @@ var ts; } function getDeclarationSpaces(d) { switch (d.kind) { - case 221: + case 222: return 2097152; - case 224: + case 225: return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0 ? 4194304 | 1048576 : 4194304; - case 220: - case 223: + case 221: + case 224: return 2097152 | 1048576; - case 228: + case 229: var result_1 = 0; var target = resolveAlias(getSymbolOfNode(d)); ts.forEach(target.declarations, function (d) { result_1 |= getDeclarationSpaces(d); }); @@ -22874,7 +23502,7 @@ var ts; if (thenSignatures.length === 0) { return undefined; } - var onfulfilledParameterType = getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)); + var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 131072); if (onfulfilledParameterType.flags & 1) { return undefined; } @@ -22979,22 +23607,22 @@ var ts; var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node); var errorInfo; switch (node.parent.kind) { - case 220: + case 221: var classSymbol = getSymbolOfNode(node.parent); var classConstructorType = getTypeOfSymbol(classSymbol); expectedReturnType = getUnionType([classConstructorType, voidType]); break; - case 141: + case 142: expectedReturnType = voidType; errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any); break; - case 144: + case 145: expectedReturnType = voidType; errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any); break; - case 146: - case 148: + case 147: case 149: + case 150: var methodType = getTypeOfNode(node.parent); var descriptorType = createTypedPropertyDescriptorType(methodType); expectedReturnType = getUnionType([descriptorType, voidType]); @@ -23003,9 +23631,9 @@ var ts; checkTypeAssignableTo(returnType, expectedReturnType, node, headMessage, errorInfo); } function checkTypeNodeAsExpression(node) { - if (node && node.kind === 154) { + if (node && node.kind === 155) { var root = getFirstIdentifier(node.typeName); - var meaning = root.parent.kind === 154 ? 793056 : 1536; + var meaning = root.parent.kind === 155 ? 793056 : 1536; var rootSymbol = resolveName(root, root.text, meaning | 8388608, undefined, undefined); if (rootSymbol && rootSymbol.flags & 8388608) { var aliasTarget = resolveAlias(rootSymbol); @@ -23039,20 +23667,20 @@ var ts; } if (compilerOptions.emitDecoratorMetadata) { switch (node.kind) { - case 220: + case 221: var constructor = ts.getFirstConstructorWithBody(node); if (constructor) { checkParameterTypeAnnotationsAsExpressions(constructor); } break; - case 146: - case 148: + case 147: case 149: + case 150: checkParameterTypeAnnotationsAsExpressions(node); checkReturnTypeAnnotationAsExpression(node); break; - case 144: - case 141: + case 145: + case 142: checkTypeAnnotationAsExpression(node); break; } @@ -23072,7 +23700,7 @@ var ts; checkDecorators(node); checkSignatureDeclaration(node); var isAsync = ts.isAsyncFunctionLike(node); - if (node.name && node.name.kind === 139) { + if (node.name && node.name.kind === 140) { checkComputedPropertyName(node.name); } if (!ts.hasDynamicName(node)) { @@ -23104,13 +23732,13 @@ var ts; } } function checkBlock(node) { - if (node.kind === 198) { + if (node.kind === 199) { checkGrammarStatementInAmbientContext(node); } ts.forEach(node.statements, checkSourceElement); } function checkCollisionWithArgumentsInGeneratedCode(node) { - if (!ts.hasRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) { + if (!ts.hasDeclaredRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) { return; } ts.forEach(node.parameters, function (p) { @@ -23123,19 +23751,19 @@ var ts; if (!(identifier && identifier.text === name)) { return false; } - if (node.kind === 144 || - node.kind === 143 || + if (node.kind === 145 || + node.kind === 144 || + node.kind === 147 || node.kind === 146 || - node.kind === 145 || - node.kind === 148 || - node.kind === 149) { + node.kind === 149 || + node.kind === 150) { return false; } if (ts.isInAmbientContext(node)) { return false; } var root = ts.getRootDeclaration(node); - if (root.kind === 141 && ts.nodeIsMissing(root.parent.body)) { + if (root.kind === 142 && ts.nodeIsMissing(root.parent.body)) { return false; } return true; @@ -23183,11 +23811,11 @@ var ts; if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { return; } - if (node.kind === 224 && ts.getModuleInstanceState(node) !== 1) { + if (node.kind === 225 && ts.getModuleInstanceState(node) !== 1) { return; } var parent = getDeclarationContainer(node); - if (parent.kind === 255 && ts.isExternalOrCommonJsModule(parent)) { + if (parent.kind === 256 && 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)); } } @@ -23195,11 +23823,11 @@ var ts; if (!needCollisionCheckForIdentifier(node, name, "Promise")) { return; } - if (node.kind === 224 && ts.getModuleInstanceState(node) !== 1) { + if (node.kind === 225 && ts.getModuleInstanceState(node) !== 1) { return; } var parent = getDeclarationContainer(node); - if (parent.kind === 255 && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2097152) { + if (parent.kind === 256 && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2097152) { 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)); } } @@ -23207,7 +23835,7 @@ var ts; if ((ts.getCombinedNodeFlags(node) & 3072) !== 0 || ts.isParameterDeclaration(node)) { return; } - if (node.kind === 217 && !node.initializer) { + if (node.kind === 218 && !node.initializer) { return; } var symbol = getSymbolOfNode(node); @@ -23217,15 +23845,15 @@ var ts; localDeclarationSymbol !== symbol && localDeclarationSymbol.flags & 2) { if (getDeclarationFlagsFromSymbol(localDeclarationSymbol) & 3072) { - var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 218); - var container = varDeclList.parent.kind === 199 && varDeclList.parent.parent + var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 219); + var container = varDeclList.parent.kind === 200 && varDeclList.parent.parent ? varDeclList.parent.parent : undefined; var namesShareScope = container && - (container.kind === 198 && ts.isFunctionLike(container.parent) || + (container.kind === 199 && ts.isFunctionLike(container.parent) || + container.kind === 226 || container.kind === 225 || - container.kind === 224 || - container.kind === 255); + container.kind === 256); if (!namesShareScope) { var name_16 = symbolToString(localDeclarationSymbol); error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name_16, name_16); @@ -23235,62 +23863,84 @@ var ts; } } function checkParameterInitializer(node) { - if (ts.getRootDeclaration(node).kind !== 141) { + if (ts.getRootDeclaration(node).kind !== 142) { return; } var func = ts.getContainingFunction(node); visit(node.initializer); function visit(n) { - if (n.kind === 69) { - var referencedSymbol = getNodeLinks(n).resolvedSymbol; - if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(func.locals, referencedSymbol.name, 107455) === referencedSymbol) { - if (referencedSymbol.valueDeclaration.kind === 141) { - if (referencedSymbol.valueDeclaration === node) { - error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.declarationNameToString(node.name)); + if (ts.isTypeNode(n) || ts.isDeclarationName(n)) { + return; + } + if (n.kind === 172) { + return visit(n.expression); + } + else if (n.kind === 69) { + var symbol = resolveName(n, n.text, 107455 | 8388608, undefined, undefined); + 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 === 142) { + if (symbol.valueDeclaration.pos < node.pos) { return; } - if (referencedSymbol.valueDeclaration.pos < node.pos) { - return; + var current = n; + while (current !== node.initializer) { + if (ts.isFunctionLike(current.parent)) { + return; + } + if (current.parent.kind === 145 && + !(current.parent.flags & 32) && + ts.isClassLike(current.parent.parent)) { + return; + } + current = current.parent; } } error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.declarationNameToString(node.name), ts.declarationNameToString(n)); } } else { - ts.forEachChild(n, visit); + return ts.forEachChild(n, visit); } } } function checkVariableLikeDeclaration(node) { checkDecorators(node); checkSourceElement(node.type); - if (node.name.kind === 139) { + if (node.name.kind === 140) { checkComputedPropertyName(node.name); if (node.initializer) { checkExpressionCached(node.initializer); } } - if (node.kind === 168) { - if (node.propertyName && node.propertyName.kind === 139) { + if (node.kind === 169) { + if (node.propertyName && node.propertyName.kind === 140) { checkComputedPropertyName(node.propertyName); } - var parent_9 = node.parent.parent; - var parentType = getTypeForBindingElementParent(parent_9); + var parent_11 = node.parent.parent; + var parentType = getTypeForBindingElementParent(parent_11); var name_17 = node.propertyName || node.name; var property = getPropertyOfType(parentType, getTextOfPropertyName(name_17)); - if (parent_9.initializer && property && getParentOfSymbol(property)) { - checkClassPropertyAccess(parent_9, parent_9.initializer, parentType, property); + if (parent_11.initializer && property && getParentOfSymbol(property)) { + checkClassPropertyAccess(parent_11, parent_11.initializer, parentType, property); } } if (ts.isBindingPattern(node.name)) { ts.forEach(node.name.elements, checkSourceElement); } - if (node.initializer && ts.getRootDeclaration(node).kind === 141 && ts.nodeIsMissing(ts.getContainingFunction(node).body)) { + if (node.initializer && ts.getRootDeclaration(node).kind === 142 && 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 !== 206) { + if (node.initializer && node.parent.parent.kind !== 207) { checkTypeAssignableTo(checkExpressionCached(node.initializer), getWidenedTypeForVariableLikeDeclaration(node), node, undefined); checkParameterInitializer(node); } @@ -23299,7 +23949,7 @@ var ts; var symbol = getSymbolOfNode(node); var type = getTypeOfVariableOrParameterOrProperty(symbol); if (node === symbol.valueDeclaration) { - if (node.initializer && node.parent.parent.kind !== 206) { + if (node.initializer && node.parent.parent.kind !== 207) { checkTypeAssignableTo(checkExpressionCached(node.initializer), type, node, undefined); checkParameterInitializer(node); } @@ -23313,9 +23963,9 @@ var ts; checkTypeAssignableTo(checkExpressionCached(node.initializer), declarationType, node, undefined); } } - if (node.kind !== 144 && node.kind !== 143) { + if (node.kind !== 145 && node.kind !== 144) { checkExportsOnMergedDeclarations(node); - if (node.kind === 217 || node.kind === 168) { + if (node.kind === 218 || node.kind === 169) { checkVarDeclaredNamesNotShadowed(node); } checkCollisionWithCapturedSuperVariable(node, node.name); @@ -23337,7 +23987,7 @@ var ts; ts.forEach(node.declarationList.declarations, checkSourceElement); } function checkGrammarDisallowedModifiersOnObjectLiteralExpressionMethod(node) { - if (node.modifiers && node.parent.kind === 170) { + if (node.modifiers && node.parent.kind === 171) { if (ts.isAsyncFunctionLike(node)) { if (node.modifiers.length > 1) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); @@ -23356,7 +24006,7 @@ var ts; checkGrammarStatementInAmbientContext(node); checkExpression(node.expression); checkSourceElement(node.thenStatement); - if (node.thenStatement.kind === 200) { + if (node.thenStatement.kind === 201) { error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement); } checkSourceElement(node.elseStatement); @@ -23373,12 +24023,12 @@ var ts; } function checkForStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) { - if (node.initializer && node.initializer.kind === 218) { + if (node.initializer && node.initializer.kind === 219) { checkGrammarVariableDeclarationList(node.initializer); } } if (node.initializer) { - if (node.initializer.kind === 218) { + if (node.initializer.kind === 219) { ts.forEach(node.initializer.declarations, checkVariableDeclaration); } else { @@ -23393,13 +24043,13 @@ var ts; } function checkForOfStatement(node) { checkGrammarForInOrForOfStatement(node); - if (node.initializer.kind === 218) { + if (node.initializer.kind === 219) { checkForInOrForOfVariableDeclaration(node); } else { var varExpr = node.initializer; var iteratedType = checkRightHandSideOfForOf(node.expression); - if (varExpr.kind === 169 || varExpr.kind === 170) { + if (varExpr.kind === 170 || varExpr.kind === 171) { checkDestructuringAssignment(varExpr, iteratedType || unknownType); } else { @@ -23414,7 +24064,7 @@ var ts; } function checkForInStatement(node) { checkGrammarForInOrForOfStatement(node); - if (node.initializer.kind === 218) { + if (node.initializer.kind === 219) { 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); @@ -23424,7 +24074,7 @@ var ts; else { var varExpr = node.initializer; var leftType = checkExpression(varExpr); - if (varExpr.kind === 169 || varExpr.kind === 170) { + if (varExpr.kind === 170 || varExpr.kind === 171) { error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern); } else if (!isTypeAnyOrAllConstituentTypesHaveKind(leftType, 258)) { @@ -23467,7 +24117,9 @@ var ts; return indexType; } } - error(errorNode, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(inputType)); + if (errorNode) { + error(errorNode, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(inputType)); + } return unknownType; } function checkElementTypeOfIterable(iterable, errorNode) { @@ -23557,7 +24209,7 @@ var ts; arrayType = getUnionType(ts.filter(arrayOrStringType.types, function (t) { return !(t.flags & 258); })); } else if (arrayOrStringType.flags & 258) { - arrayType = emptyUnionType; + arrayType = neverType; } var hasStringConstituent = arrayOrStringType !== arrayType; var reportedError = false; @@ -23566,7 +24218,7 @@ var ts; error(errorNode, ts.Diagnostics.Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher); reportedError = true; } - if (arrayType === emptyObjectType) { + if (arrayType === neverType) { return stringType; } } @@ -23592,7 +24244,7 @@ var ts; checkGrammarStatementInAmbientContext(node) || checkGrammarBreakOrContinueStatement(node); } function isGetAccessorWithAnnotatedSetAccessor(node) { - return !!(node.kind === 148 && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 149))); + return !!(node.kind === 149 && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 150))); } function isUnwrappedReturnTypeVoidOrAny(func, returnType) { var unwrappedReturnType = ts.isAsyncFunctionLike(func) ? getPromisedType(returnType) : returnType; @@ -23609,17 +24261,17 @@ var ts; if (func) { var signature = getSignatureFromDeclaration(func); var returnType = getReturnTypeOfSignature(signature); - if (strictNullChecks || node.expression) { + if (strictNullChecks || node.expression || returnType === neverType) { var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType; if (func.asteriskToken) { return; } - if (func.kind === 149) { + if (func.kind === 150) { if (node.expression) { error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value); } } - else if (func.kind === 147) { + else if (func.kind === 148) { if (node.expression && !checkTypeAssignableTo(exprType, returnType, node.expression)) { error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); } @@ -23637,7 +24289,7 @@ var ts; } } } - else if (func.kind !== 147 && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { + else if (func.kind !== 148 && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { error(node, ts.Diagnostics.Not_all_code_paths_return_a_value); } } @@ -23657,7 +24309,7 @@ var ts; var hasDuplicateDefaultClause = false; var expressionType = checkExpression(node.expression); ts.forEach(node.caseBlock.clauses, function (clause) { - if (clause.kind === 249 && !hasDuplicateDefaultClause) { + if (clause.kind === 250 && !hasDuplicateDefaultClause) { if (firstDefaultClause === undefined) { firstDefaultClause = clause; } @@ -23669,7 +24321,7 @@ var ts; hasDuplicateDefaultClause = true; } } - if (produceDiagnostics && clause.kind === 248) { + if (produceDiagnostics && clause.kind === 249) { var caseClause = clause; var caseType = checkExpression(caseClause.expression); if (!isTypeComparableTo(expressionType, caseType)) { @@ -23686,7 +24338,7 @@ var ts; if (ts.isFunctionLike(current)) { break; } - if (current.kind === 213 && current.label.text === node.label.text) { + if (current.kind === 214 && current.label.text === node.label.text) { var sourceFile = ts.getSourceFileOfNode(node); grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNodeFromSourceText(sourceFile.text, node.label)); break; @@ -23780,7 +24432,7 @@ var ts; return; } var errorNode; - if (prop.valueDeclaration.name.kind === 139 || prop.parent === containingType.symbol) { + if (prop.valueDeclaration.name.kind === 140 || prop.parent === containingType.symbol) { errorNode = prop.valueDeclaration; } else if (indexDeclaration) { @@ -23831,7 +24483,7 @@ var ts; var firstDecl; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 220 || declaration.kind === 221) { + if (declaration.kind === 221 || declaration.kind === 222) { if (!firstDecl) { firstDecl = declaration; } @@ -23960,7 +24612,7 @@ var ts; if (derived === base) { var derivedClassDecl = getClassLikeDeclarationOfSymbol(type.symbol); if (baseDeclarationFlags & 128 && (!derivedClassDecl || !(derivedClassDecl.flags & 128))) { - if (derivedClassDecl.kind === 191) { + if (derivedClassDecl.kind === 192) { error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType)); } else { @@ -24004,7 +24656,7 @@ var ts; } } function isAccessor(kind) { - return kind === 148 || kind === 149; + return kind === 149 || kind === 150; } function areTypeParametersIdentical(list1, list2) { if (!list1 && !list2) { @@ -24071,7 +24723,7 @@ var ts; checkExportsOnMergedDeclarations(node); var symbol = getSymbolOfNode(node); checkTypeParameterListsIdentical(node, symbol); - var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 221); + var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 222); if (node === firstInterfaceDecl) { var type = getDeclaredTypeOfSymbol(symbol); var typeWithThis = getTypeWithThisArgument(type); @@ -24164,7 +24816,7 @@ var ts; return value; function evalConstant(e) { switch (e.kind) { - case 184: + case 185: var value_1 = evalConstant(e.operand); if (value_1 === undefined) { return undefined; @@ -24175,7 +24827,7 @@ var ts; case 50: return ~value_1; } return undefined; - case 186: + case 187: var left = evalConstant(e.left); if (left === undefined) { return undefined; @@ -24200,11 +24852,11 @@ var ts; return undefined; case 8: return +e.text; - case 177: + case 178: return evalConstant(e.expression); case 69: + case 173: case 172: - case 171: var member = initializer.parent; var currentType = getTypeOfSymbol(getSymbolOfNode(member.parent)); var enumType_1; @@ -24215,7 +24867,7 @@ var ts; } else { var expression = void 0; - if (e.kind === 172) { + if (e.kind === 173) { if (e.argumentExpression === undefined || e.argumentExpression.kind !== 9) { return undefined; @@ -24232,7 +24884,7 @@ var ts; if (current.kind === 69) { break; } - else if (current.kind === 171) { + else if (current.kind === 172) { current = current.expression; } else { @@ -24292,7 +24944,7 @@ var ts; } var seenEnumMissingInitialInitializer_1 = false; ts.forEach(enumSymbol.declarations, function (declaration) { - if (declaration.kind !== 223) { + if (declaration.kind !== 224) { return false; } var enumDeclaration = declaration; @@ -24315,8 +24967,8 @@ var ts; var declarations = symbol.declarations; for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) { var declaration = declarations_5[_i]; - if ((declaration.kind === 220 || - (declaration.kind === 219 && ts.nodeIsPresent(declaration.body))) && + if ((declaration.kind === 221 || + (declaration.kind === 220 && ts.nodeIsPresent(declaration.body))) && !ts.isInAmbientContext(declaration)) { return declaration; } @@ -24373,7 +25025,7 @@ var ts; 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, 220); + var mergedClass = ts.getDeclarationOfKind(symbol, 221); if (mergedClass && inSameLexicalScope(node, mergedClass)) { getNodeLinks(node).flags |= 32768; @@ -24411,26 +25063,22 @@ var ts; } function checkModuleAugmentationElement(node, isGlobalAugmentation) { switch (node.kind) { - case 199: + case 200: for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var decl = _a[_i]; checkModuleAugmentationElement(decl, isGlobalAugmentation); } break; - case 234: case 235: + case 236: grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations); break; - case 228: - if (node.moduleReference.kind !== 9) { - error(node.name, ts.Diagnostics.Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope); - break; - } case 229: + case 230: grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module); break; - case 168: - case 217: + case 169: + case 218: var name_18 = node.name; if (ts.isBindingPattern(name_18)) { for (var _b = 0, _c = name_18.elements; _b < _c.length; _b++) { @@ -24439,25 +25087,20 @@ var ts; } break; } - case 220: - case 223: - case 219: case 221: case 224: + case 220: case 222: + case 225: + case 223: + if (isGlobalAugmentation) { + return; + } var symbol = getSymbolOfNode(node); if (symbol) { var reportError = !(symbol.flags & 33554432); if (!reportError) { - if (isGlobalAugmentation) { - reportError = symbol.parent !== undefined; - } - else { - reportError = ts.isExternalModuleAugmentation(symbol.parent.declarations[0]); - } - } - if (reportError) { - error(node, ts.Diagnostics.Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope); + reportError = ts.isExternalModuleAugmentation(symbol.parent.declarations[0]); } } break; @@ -24465,10 +25108,10 @@ var ts; } function getFirstIdentifier(node) { while (true) { - if (node.kind === 138) { + if (node.kind === 139) { node = node.left; } - else if (node.kind === 171) { + else if (node.kind === 172) { node = node.expression; } else { @@ -24484,9 +25127,9 @@ var ts; error(moduleName, ts.Diagnostics.String_literal_expected); return false; } - var inAmbientExternalModule = node.parent.kind === 225 && ts.isAmbientModule(node.parent.parent); - if (node.parent.kind !== 255 && !inAmbientExternalModule) { - error(moduleName, node.kind === 235 ? + var inAmbientExternalModule = node.parent.kind === 226 && ts.isAmbientModule(node.parent.parent); + if (node.parent.kind !== 256 && !inAmbientExternalModule) { + error(moduleName, node.kind === 236 ? ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace : ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module); return false; @@ -24507,7 +25150,7 @@ var ts; (symbol.flags & 793056 ? 793056 : 0) | (symbol.flags & 1536 ? 1536 : 0); if (target.flags & excludedMeanings) { - var message = node.kind === 237 ? + var message = node.kind === 238 ? 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)); @@ -24524,7 +25167,7 @@ var ts; if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module)) { return; } - if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 959)) { + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_import_declaration_cannot_have_modifiers); } if (checkExternalImportOrExportDeclaration(node)) { @@ -24534,7 +25177,7 @@ var ts; checkImportBinding(importClause); } if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 231) { + if (importClause.namedBindings.kind === 232) { checkImportBinding(importClause.namedBindings); } else { @@ -24579,14 +25222,14 @@ var ts; if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_declaration_can_only_be_used_in_a_module)) { return; } - if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 959)) { + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023)) { 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 === 225 && ts.isAmbientModule(node.parent.parent); - if (node.parent.kind !== 255 && !inAmbientExternalModule) { + var inAmbientExternalModule = node.parent.kind === 226 && ts.isAmbientModule(node.parent.parent); + if (node.parent.kind !== 256 && !inAmbientExternalModule) { error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace); } } @@ -24599,7 +25242,7 @@ var ts; } } function checkGrammarModuleElementContext(node, errorMessage) { - if (node.parent.kind !== 255 && node.parent.kind !== 225 && node.parent.kind !== 224) { + if (node.parent.kind !== 256 && node.parent.kind !== 226 && node.parent.kind !== 225) { return grammarErrorOnFirstToken(node, errorMessage); } } @@ -24609,7 +25252,7 @@ var ts; var exportedName = node.propertyName || node.name; var symbol = resolveName(exportedName, exportedName.text, 107455 | 793056 | 1536 | 8388608, undefined, undefined); if (symbol && (symbol === undefinedSymbol || isGlobalSourceFile(getDeclarationContainer(symbol.declarations[0])))) { - error(exportedName, ts.Diagnostics.Cannot_re_export_name_that_is_not_defined_in_the_module); + error(exportedName, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, exportedName.text); } else { markExportAsReferenced(node); @@ -24620,12 +25263,12 @@ var ts; if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_assignment_can_only_be_used_in_a_module)) { return; } - var container = node.parent.kind === 255 ? node.parent : node.parent.parent; - if (container.kind === 224 && !ts.isAmbientModule(container)) { + var container = node.parent.kind === 256 ? node.parent : node.parent.parent; + if (container.kind === 225 && !ts.isAmbientModule(container)) { error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace); return; } - if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 959)) { + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); } if (node.expression.kind === 69) { @@ -24688,7 +25331,7 @@ var ts; links.exportsChecked = true; } function isNotOverload(declaration) { - return declaration.kind !== 219 || !!declaration.body; + return declaration.kind !== 220 || !!declaration.body; } } function checkSourceElement(node) { @@ -24698,118 +25341,118 @@ var ts; var kind = node.kind; if (cancellationToken) { switch (kind) { - case 224: - case 220: + case 225: case 221: - case 219: + case 222: + case 220: cancellationToken.throwIfCancellationRequested(); } } switch (kind) { - case 140: - return checkTypeParameter(node); case 141: + return checkTypeParameter(node); + case 142: return checkParameter(node); + case 145: case 144: - case 143: return checkPropertyDeclaration(node); - case 155: case 156: - case 150: + case 157: case 151: - return checkSignatureDeclaration(node); case 152: return checkSignatureDeclaration(node); - case 146: - case 145: - return checkMethodDeclaration(node); - case 147: - return checkConstructorDeclaration(node); - case 148: - case 149: - return checkAccessorDeclaration(node); - case 154: - return checkTypeReferenceNode(node); case 153: + return checkSignatureDeclaration(node); + case 147: + case 146: + return checkMethodDeclaration(node); + case 148: + return checkConstructorDeclaration(node); + case 149: + case 150: + return checkAccessorDeclaration(node); + case 155: + return checkTypeReferenceNode(node); + case 154: return checkTypePredicate(node); - case 157: - return checkTypeQuery(node); case 158: - return checkTypeLiteral(node); + return checkTypeQuery(node); case 159: - return checkArrayType(node); + return checkTypeLiteral(node); case 160: - return checkTupleType(node); + return checkArrayType(node); case 161: + return checkTupleType(node); case 162: - return checkUnionOrIntersectionType(node); case 163: + return checkUnionOrIntersectionType(node); + case 164: return checkSourceElement(node.type); - case 219: - return checkFunctionDeclaration(node); - case 198: - case 225: - return checkBlock(node); - case 199: - return checkVariableStatement(node); - case 201: - return checkExpressionStatement(node); - case 202: - return checkIfStatement(node); - case 203: - return checkDoStatement(node); - case 204: - return checkWhileStatement(node); - case 205: - return checkForStatement(node); - case 206: - return checkForInStatement(node); - case 207: - return checkForOfStatement(node); - case 208: - case 209: - return checkBreakOrContinueStatement(node); - case 210: - return checkReturnStatement(node); - case 211: - return checkWithStatement(node); - case 212: - return checkSwitchStatement(node); - case 213: - return checkLabeledStatement(node); - case 214: - return checkThrowStatement(node); - case 215: - return checkTryStatement(node); - case 217: - return checkVariableDeclaration(node); - case 168: - return checkBindingElement(node); case 220: - return checkClassDeclaration(node); - case 221: - return checkInterfaceDeclaration(node); - case 222: - return checkTypeAliasDeclaration(node); - case 223: - return checkEnumDeclaration(node); - case 224: - return checkModuleDeclaration(node); - case 229: - return checkImportDeclaration(node); - case 228: - return checkImportEqualsDeclaration(node); - case 235: - return checkExportDeclaration(node); - case 234: - return checkExportAssignment(node); + return checkFunctionDeclaration(node); + case 199: + case 226: + return checkBlock(node); case 200: - checkGrammarStatementInAmbientContext(node); - return; + return checkVariableStatement(node); + case 202: + return checkExpressionStatement(node); + case 203: + return checkIfStatement(node); + case 204: + return checkDoStatement(node); + case 205: + return checkWhileStatement(node); + case 206: + return checkForStatement(node); + case 207: + return checkForInStatement(node); + case 208: + return checkForOfStatement(node); + case 209: + case 210: + return checkBreakOrContinueStatement(node); + case 211: + return checkReturnStatement(node); + case 212: + return checkWithStatement(node); + case 213: + return checkSwitchStatement(node); + case 214: + return checkLabeledStatement(node); + case 215: + return checkThrowStatement(node); case 216: + return checkTryStatement(node); + case 218: + return checkVariableDeclaration(node); + case 169: + return checkBindingElement(node); + case 221: + return checkClassDeclaration(node); + case 222: + return checkInterfaceDeclaration(node); + case 223: + return checkTypeAliasDeclaration(node); + case 224: + return checkEnumDeclaration(node); + case 225: + return checkModuleDeclaration(node); + case 230: + return checkImportDeclaration(node); + case 229: + return checkImportEqualsDeclaration(node); + case 236: + return checkExportDeclaration(node); + case 235: + return checkExportAssignment(node); + case 201: checkGrammarStatementInAmbientContext(node); return; - case 238: + case 217: + checkGrammarStatementInAmbientContext(node); + return; + case 239: return checkMissingDeclaration(node); } } @@ -24822,17 +25465,17 @@ var ts; for (var _i = 0, deferredNodes_1 = deferredNodes; _i < deferredNodes_1.length; _i++) { var node = deferredNodes_1[_i]; switch (node.kind) { - case 178: case 179: + case 180: + case 147: case 146: - case 145: checkFunctionExpressionOrObjectLiteralMethodDeferred(node); break; - case 148: case 149: + case 150: checkAccessorDeferred(node); break; - case 191: + case 192: checkClassExpressionDeferred(node); break; } @@ -24897,7 +25540,7 @@ var ts; function isInsideWithStatementBody(node) { if (node) { while (node.parent) { - if (node.parent.kind === 211 && node.parent.statement === node) { + if (node.parent.kind === 212 && node.parent.statement === node) { return true; } node = node.parent; @@ -24919,28 +25562,28 @@ var ts; copySymbols(location.locals, meaning); } switch (location.kind) { - case 255: + case 256: if (!ts.isExternalOrCommonJsModule(location)) { break; } - case 224: + case 225: copySymbols(getSymbolOfNode(location).exports, meaning & 8914931); break; - case 223: + case 224: copySymbols(getSymbolOfNode(location).exports, meaning & 8); break; - case 191: + case 192: var className = location.name; if (className) { copySymbol(location.symbol, meaning); } - case 220: case 221: + case 222: if (!(memberFlags & 32)) { copySymbols(getSymbolOfNode(location).members, meaning & 793056); } break; - case 178: + case 179: var funcName = location.name; if (funcName) { copySymbol(location.symbol, meaning); @@ -24979,27 +25622,27 @@ var ts; } function isTypeDeclaration(node) { switch (node.kind) { - case 140: - case 220: + case 141: case 221: case 222: case 223: + case 224: return true; } } function isTypeReferenceIdentifier(entityName) { var node = entityName; - while (node.parent && node.parent.kind === 138) { + while (node.parent && node.parent.kind === 139) { node = node.parent; } - return node.parent && node.parent.kind === 154; + return node.parent && node.parent.kind === 155; } function isHeritageClauseElementIdentifier(entityName) { var node = entityName; - while (node.parent && node.parent.kind === 171) { + while (node.parent && node.parent.kind === 172) { node = node.parent; } - return node.parent && node.parent.kind === 193; + return node.parent && node.parent.kind === 194; } function forEachEnclosingClass(node, callback) { var result; @@ -25016,13 +25659,13 @@ var ts; return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; }); } function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) { - while (nodeOnRightSide.parent.kind === 138) { + while (nodeOnRightSide.parent.kind === 139) { nodeOnRightSide = nodeOnRightSide.parent; } - if (nodeOnRightSide.parent.kind === 228) { + if (nodeOnRightSide.parent.kind === 229) { return nodeOnRightSide.parent.moduleReference === nodeOnRightSide && nodeOnRightSide.parent; } - if (nodeOnRightSide.parent.kind === 234) { + if (nodeOnRightSide.parent.kind === 235) { return nodeOnRightSide.parent.expression === nodeOnRightSide && nodeOnRightSide.parent; } return undefined; @@ -25034,7 +25677,7 @@ var ts; if (ts.isDeclarationName(entityName)) { return getSymbolOfNode(entityName.parent); } - if (ts.isInJavaScriptFile(entityName) && entityName.parent.kind === 171) { + if (ts.isInJavaScriptFile(entityName) && entityName.parent.kind === 172) { var specialPropertyAssignmentKind = ts.getSpecialPropertyAssignmentKind(entityName.parent.parent); switch (specialPropertyAssignmentKind) { case 1: @@ -25046,10 +25689,10 @@ var ts; default: } } - if (entityName.parent.kind === 234) { + if (entityName.parent.kind === 235) { return resolveEntityName(entityName, 107455 | 793056 | 1536 | 8388608); } - if (entityName.kind !== 171) { + if (entityName.kind !== 172) { if (isInRightSideOfImportOrExportAssignment(entityName)) { return getSymbolOfPartOfRightHandSideOfImportEquals(entityName); } @@ -25059,7 +25702,7 @@ var ts; } if (isHeritageClauseElementIdentifier(entityName)) { var meaning = 0; - if (entityName.parent.kind === 193) { + if (entityName.parent.kind === 194) { meaning = 793056; if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { meaning |= 107455; @@ -25082,14 +25725,14 @@ var ts; var meaning = 107455 | 8388608; return resolveEntityName(entityName, meaning); } - else if (entityName.kind === 171) { + else if (entityName.kind === 172) { var symbol = getNodeLinks(entityName).resolvedSymbol; if (!symbol) { checkPropertyAccessExpression(entityName); } return getNodeLinks(entityName).resolvedSymbol; } - else if (entityName.kind === 138) { + else if (entityName.kind === 139) { var symbol = getNodeLinks(entityName).resolvedSymbol; if (!symbol) { checkQualifiedName(entityName); @@ -25098,33 +25741,39 @@ var ts; } } else if (isTypeReferenceIdentifier(entityName)) { - var meaning = entityName.parent.kind === 154 ? 793056 : 1536; + var meaning = entityName.parent.kind === 155 ? 793056 : 1536; meaning |= 8388608; return resolveEntityName(entityName, meaning); } - else if (entityName.parent.kind === 245) { + else if (entityName.parent.kind === 246) { return getJsxAttributePropertySymbol(entityName.parent); } - if (entityName.parent.kind === 153) { + if (entityName.parent.kind === 154) { return resolveEntityName(entityName, 1); } return undefined; } function getSymbolAtLocation(node) { + if (node.kind === 256) { + return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined; + } if (isInsideWithStatementBody(node)) { return undefined; } if (ts.isDeclarationName(node)) { return getSymbolOfNode(node.parent); } + else if (ts.isLiteralComputedPropertyDeclarationName(node)) { + return getSymbolOfNode(node.parent.parent); + } if (node.kind === 69) { if (isInRightSideOfImportOrExportAssignment(node)) { - return node.parent.kind === 234 + return node.parent.kind === 235 ? getSymbolOfEntityNameOrPropertyAccessExpression(node) : getSymbolOfPartOfRightHandSideOfImportEquals(node); } - else if (node.parent.kind === 168 && - node.parent.parent.kind === 166 && + else if (node.parent.kind === 169 && + node.parent.parent.kind === 167 && node === node.parent.propertyName) { var typeOfPattern = getTypeOfNode(node.parent.parent); var propertyDeclaration = typeOfPattern && getPropertyOfType(typeOfPattern, node.text); @@ -25135,30 +25784,30 @@ var ts; } switch (node.kind) { case 69: - case 171: - case 138: + case 172: + case 139: return getSymbolOfEntityNameOrPropertyAccessExpression(node); case 97: case 95: var type = ts.isExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node); return type.symbol; - case 164: + case 165: return getTypeFromTypeNode(node).symbol; case 121: var constructorDeclaration = node.parent; - if (constructorDeclaration && constructorDeclaration.kind === 147) { + if (constructorDeclaration && constructorDeclaration.kind === 148) { return constructorDeclaration.parent.symbol; } return undefined; case 9: if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) || - ((node.parent.kind === 229 || node.parent.kind === 235) && + ((node.parent.kind === 230 || node.parent.kind === 236) && node.parent.moduleSpecifier === node)) { return resolveExternalModuleName(node, node); } case 8: - if (node.parent.kind === 172 && node.parent.argumentExpression === node) { + if (node.parent.kind === 173 && node.parent.argumentExpression === node) { var objectType = checkExpression(node.parent.expression); if (objectType === unknownType) return undefined; @@ -25172,7 +25821,7 @@ var ts; return undefined; } function getShorthandAssignmentValueSymbol(location) { - if (location && location.kind === 253) { + if (location && location.kind === 254) { return resolveEntityName(location.name, 107455 | 8388608); } return undefined; @@ -25221,6 +25870,29 @@ var ts; } return unknownType; } + function getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr) { + ts.Debug.assert(expr.kind === 171 || expr.kind === 170); + if (expr.parent.kind === 208) { + var iteratedType = checkRightHandSideOfForOf(expr.parent.expression); + return checkDestructuringAssignment(expr, iteratedType || unknownType); + } + if (expr.parent.kind === 187) { + var iteratedType = checkExpression(expr.parent.right); + return checkDestructuringAssignment(expr, iteratedType || unknownType); + } + if (expr.parent.kind === 253) { + var typeOfParentObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent.parent); + return checkObjectLiteralDestructuringPropertyAssignment(typeOfParentObjectLiteral || unknownType, expr.parent); + } + ts.Debug.assert(expr.parent.kind === 170); + var typeOfArrayLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent); + var elementType = checkIteratedTypeOrElementType(typeOfArrayLiteral || unknownType, expr.parent, 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.text); + } function getTypeOfExpression(expr) { if (ts.isRightSideOfQualifiedNameOrPropertyAccess(expr)) { expr = expr.parent; @@ -25258,7 +25930,11 @@ var ts; return symbols_3; } else if (symbol.flags & 67108864) { - var target = getSymbolLinks(symbol).target; + var target = void 0; + var next = symbol; + while (next = getSymbolLinks(next).target) { + target = next; + } if (target) { return [target]; } @@ -25299,11 +25975,11 @@ var ts; } var parentSymbol = getParentOfSymbol(symbol); if (parentSymbol) { - if (parentSymbol.flags & 512 && parentSymbol.valueDeclaration.kind === 255) { + if (parentSymbol.flags & 512 && parentSymbol.valueDeclaration.kind === 256) { return parentSymbol.valueDeclaration; } for (var n = node.parent; n; n = n.parent) { - if ((n.kind === 224 || n.kind === 223) && getSymbolOfNode(n) === parentSymbol) { + if ((n.kind === 225 || n.kind === 224) && getSymbolOfNode(n) === parentSymbol) { return n; } } @@ -25327,7 +26003,7 @@ var ts; else if (nodeLinks_1.flags & 131072) { var isDeclaredInLoop = nodeLinks_1.flags & 262144; var inLoopInitializer = ts.isIterationStatement(container, false); - var inLoopBodyBlock = container.kind === 198 && ts.isIterationStatement(container.parent, false); + var inLoopBodyBlock = container.kind === 199 && ts.isIterationStatement(container.parent, false); links.isDeclarationWithCollidingName = !ts.isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || (!inLoopInitializer && !inLoopBodyBlock)); } else { @@ -25348,22 +26024,22 @@ var ts; } function isValueAliasDeclaration(node) { switch (node.kind) { - case 228: - case 230: + case 229: case 231: - case 233: - case 237: + case 232: + case 234: + case 238: return isAliasResolvedToValue(getSymbolOfNode(node)); - case 235: + case 236: var exportClause = node.exportClause; return exportClause && ts.forEach(exportClause.elements, isValueAliasDeclaration); - case 234: + case 235: return node.expression && node.expression.kind === 69 ? isAliasResolvedToValue(getSymbolOfNode(node)) : true; } return false; } function isTopLevelValueImportEqualsWithEntityName(node) { - if (node.parent.kind !== 255 || !ts.isInternalModuleImportEqualsDeclaration(node)) { + if (node.parent.kind !== 256 || !ts.isInternalModuleImportEqualsDeclaration(node)) { return false; } var isValue = isAliasResolvedToValue(getSymbolOfNode(node)); @@ -25371,12 +26047,10 @@ var ts; } function isAliasResolvedToValue(symbol) { var target = resolveAlias(symbol); - if (target === unknownSymbol && compilerOptions.isolatedModules) { + if (target === unknownSymbol) { return true; } - return target !== unknownSymbol && - target && - target.flags & 107455 && + return target.flags & 107455 && (compilerOptions.preserveConstEnums || !isConstEnumOrConstEnumOnlyModule(target)); } function isConstEnumOrConstEnumOnlyModule(s) { @@ -25411,7 +26085,7 @@ var ts; return getNodeLinks(node).enumMemberValue; } function getConstantValue(node) { - if (node.kind === 254) { + if (node.kind === 255) { return getEnumMemberValue(node); } var symbol = getNodeLinks(node).resolvedSymbol; @@ -25504,6 +26178,22 @@ var ts; return symbol && getExportSymbolOfValueSymbolIfExported(symbol).valueDeclaration; } function createResolver() { + var resolvedTypeReferenceDirectives = host.getResolvedTypeReferenceDirectives(); + var fileToDirective; + if (resolvedTypeReferenceDirectives) { + fileToDirective = ts.createFileMap(); + for (var key in resolvedTypeReferenceDirectives) { + if (!ts.hasProperty(resolvedTypeReferenceDirectives, key)) { + continue; + } + var resolvedDirective = resolvedTypeReferenceDirectives[key]; + if (!resolvedDirective) { + continue; + } + var file = host.getSourceFile(resolvedDirective.resolvedFileName); + fileToDirective.set(file.path, key); + } + } return { getReferencedExportContainer: getReferencedExportContainer, getReferencedImportDeclaration: getReferencedImportDeclaration, @@ -25529,8 +26219,66 @@ var ts; isOptionalParameter: isOptionalParameter, moduleExportsSomeValue: moduleExportsSomeValue, isArgumentsLocalBinding: isArgumentsLocalBinding, - getExternalModuleFileFromDeclaration: getExternalModuleFileFromDeclaration + getExternalModuleFileFromDeclaration: getExternalModuleFileFromDeclaration, + getTypeReferenceDirectivesForEntityName: getTypeReferenceDirectivesForEntityName, + getTypeReferenceDirectivesForSymbol: getTypeReferenceDirectivesForSymbol }; + function getTypeReferenceDirectivesForEntityName(node) { + if (!fileToDirective) { + return undefined; + } + var meaning = (node.kind === 172) || (node.kind === 69 && isInTypeQuery(node)) + ? 107455 | 1048576 + : 793056 | 1536; + 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); + } + } + } + return typeReferenceDirectives; + } + function isSymbolFromTypeDeclarationFile(symbol) { + if (!symbol.declarations) { + return false; + } + var current = symbol; + while (true) { + var parent_12 = getParentOfSymbol(current); + if (parent_12) { + current = parent_12; + } + else { + break; + } + } + if (current.valueDeclaration && current.valueDeclaration.kind === 256 && 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.contains(file.path)) { + return true; + } + } + return false; + } } function getExternalModuleFileFromDeclaration(declaration) { var specifier = ts.getExternalModuleName(declaration); @@ -25538,7 +26286,7 @@ var ts; if (!moduleSymbol) { return undefined; } - return ts.getDeclarationOfKind(moduleSymbol, 255); + return ts.getDeclarationOfKind(moduleSymbol, 256); } function initializeTypeChecker() { ts.forEach(host.getSourceFiles(), function (file) { @@ -25630,14 +26378,14 @@ var ts; return false; } if (!ts.nodeCanBeDecorated(node)) { - if (node.kind === 146 && !ts.nodeIsPresent(node.body)) { + if (node.kind === 147 && !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 === 148 || node.kind === 149) { + else if (node.kind === 149 || node.kind === 150) { 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); @@ -25647,38 +26395,38 @@ var ts; } function checkGrammarModifiers(node) { switch (node.kind) { - case 148: case 149: - case 147: - case 144: - case 143: - case 146: + case 150: + case 148: case 145: - case 152: - case 224: + case 144: + case 147: + case 146: + case 153: + case 225: + case 230: case 229: - case 228: + case 236: case 235: - case 234: - case 141: - break; - case 219: - if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 118) && - node.parent.kind !== 225 && node.parent.kind !== 255) { - return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); - } + case 142: break; case 220: - case 221: - case 199: - case 222: - if (node.modifiers && node.parent.kind !== 225 && node.parent.kind !== 255) { + if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 118) && + node.parent.kind !== 226 && node.parent.kind !== 256) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); } break; + case 221: + case 222: + case 200: case 223: + if (node.modifiers && node.parent.kind !== 226 && node.parent.kind !== 256) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); + } + break; + case 224: if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 74) && - node.parent.kind !== 225 && node.parent.kind !== 255) { + node.parent.kind !== 226 && node.parent.kind !== 256) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); } break; @@ -25692,17 +26440,17 @@ var ts; var flags = 0; for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) { var modifier = _a[_i]; - if (modifier.kind !== 127) { - if (node.kind === 143 || node.kind === 145) { + if (modifier.kind !== 128) { + if (node.kind === 144 || node.kind === 146) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind)); } - if (node.kind === 152) { + if (node.kind === 153) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind)); } } switch (modifier.kind) { case 74: - if (node.kind !== 223 && node.parent.kind === 220) { + if (node.kind !== 224 && node.parent.kind === 221) { return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(74)); } break; @@ -25728,7 +26476,7 @@ var ts; else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async"); } - else if (node.parent.kind === 225 || node.parent.kind === 255) { + else if (node.parent.kind === 226 || node.parent.kind === 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text); } else if (flags & 128) { @@ -25751,10 +26499,10 @@ var ts; else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async"); } - else if (node.parent.kind === 225 || node.parent.kind === 255) { + else if (node.parent.kind === 226 || node.parent.kind === 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static"); } - else if (node.kind === 141) { + else if (node.kind === 142) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); } else if (flags & 128) { @@ -25763,11 +26511,11 @@ var ts; flags |= 32; lastStatic = modifier; break; - case 127: + case 128: if (flags & 64) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly"); } - else if (node.kind !== 144 && node.kind !== 143 && node.kind !== 152) { + else if (node.kind !== 145 && node.kind !== 144 && node.kind !== 153 && node.kind !== 142) { return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature); } flags |= 64; @@ -25786,10 +26534,10 @@ var ts; else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "async"); } - else if (node.parent.kind === 220) { + else if (node.parent.kind === 221) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); } - else if (node.kind === 141) { + else if (node.kind === 142) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); } flags |= 1; @@ -25801,13 +26549,13 @@ var ts; else if (flags & 256) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async"); } - else if (node.parent.kind === 220) { + else if (node.parent.kind === 221) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); } - else if (node.kind === 141) { + else if (node.kind === 142) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); } - else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 225) { + else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 226) { return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); } flags |= 2; @@ -25817,14 +26565,14 @@ var ts; if (flags & 128) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract"); } - if (node.kind !== 220) { - if (node.kind !== 146 && - node.kind !== 144 && - node.kind !== 148 && - node.kind !== 149) { + if (node.kind !== 221) { + if (node.kind !== 147 && + node.kind !== 145 && + node.kind !== 149 && + node.kind !== 150) { return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration); } - if (!(node.parent.kind === 220 && node.parent.flags & 128)) { + if (!(node.parent.kind === 221 && node.parent.flags & 128)) { return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class); } if (flags & 32) { @@ -25843,7 +26591,7 @@ var ts; 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 === 141) { + else if (node.kind === 142) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async"); } flags |= 256; @@ -25851,7 +26599,7 @@ var ts; break; } } - if (node.kind === 147) { + if (node.kind === 148) { if (flags & 32) { return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); } @@ -25866,10 +26614,10 @@ var ts; } return; } - else if ((node.kind === 229 || node.kind === 228) && flags & 2) { + else if ((node.kind === 230 || node.kind === 229) && flags & 2) { return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare"); } - else if (node.kind === 141 && (flags & 28) && ts.isBindingPattern(node.name)) { + else if (node.kind === 142 && (flags & 92) && ts.isBindingPattern(node.name)) { return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_a_binding_pattern); } if (flags & 256) { @@ -25881,10 +26629,10 @@ var ts; return grammarErrorOnNode(asyncModifier, ts.Diagnostics.Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher); } switch (node.kind) { - case 146: - case 219: - case 178: + case 147: + case 220: case 179: + case 180: if (!node.asteriskToken) { return false; } @@ -25949,7 +26697,7 @@ var ts; checkGrammarParameterList(node.parameters) || checkGrammarArrowFunction(node, file); } function checkGrammarArrowFunction(node, file) { - if (node.kind === 179) { + if (node.kind === 180) { var arrowFunction = node; var startLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.pos).line; var endLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.end).line; @@ -25972,7 +26720,7 @@ var ts; if (parameter.dotDotDotToken) { return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); } - if (parameter.flags & 959) { + if (parameter.flags & 1023) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); } if (parameter.questionToken) { @@ -25984,7 +26732,7 @@ var ts; if (!parameter.type) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); } - if (parameter.type.kind !== 131 && parameter.type.kind !== 129) { + if (parameter.type.kind !== 132 && parameter.type.kind !== 130) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); } if (!node.type) { @@ -26011,7 +26759,7 @@ var ts; var sourceFile = ts.getSourceFileOfNode(node); for (var _i = 0, args_1 = args; _i < args_1.length; _i++) { var arg = args_1[_i]; - if (arg.kind === 192) { + if (arg.kind === 193) { return grammarErrorAtPos(sourceFile, arg.pos, 0, ts.Diagnostics.Argument_expression_expected); } } @@ -26082,19 +26830,19 @@ var ts; return false; } function checkGrammarComputedPropertyName(node) { - if (node.kind !== 139) { + if (node.kind !== 140) { return false; } var computedPropertyName = node; - if (computedPropertyName.expression.kind === 186 && computedPropertyName.expression.operatorToken.kind === 24) { + if (computedPropertyName.expression.kind === 187 && computedPropertyName.expression.operatorToken.kind === 24) { 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 === 219 || - node.kind === 178 || - node.kind === 146); + ts.Debug.assert(node.kind === 220 || + node.kind === 179 || + node.kind === 147); if (ts.isInAmbientContext(node)) { return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context); } @@ -26119,34 +26867,34 @@ var ts; var GetOrSetAccessor = GetAccessor | SetAccessor; var _loop_1 = function(prop) { var name_20 = prop.name; - if (prop.kind === 192 || - name_20.kind === 139) { + if (prop.kind === 193 || + name_20.kind === 140) { checkGrammarComputedPropertyName(name_20); return "continue"; } - if (prop.kind === 253 && !inDestructuring && prop.objectAssignmentInitializer) { + if (prop.kind === 254 && !inDestructuring && prop.objectAssignmentInitializer) { return { value: grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment) }; } ts.forEach(prop.modifiers, function (mod) { - if (mod.kind !== 118 || prop.kind !== 146) { + if (mod.kind !== 118 || prop.kind !== 147) { grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod)); } }); var currentKind = void 0; - if (prop.kind === 252 || prop.kind === 253) { + if (prop.kind === 253 || prop.kind === 254) { checkGrammarForInvalidQuestionMark(prop, prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional); if (name_20.kind === 8) { checkGrammarNumericLiteral(name_20); } currentKind = Property; } - else if (prop.kind === 146) { + else if (prop.kind === 147) { currentKind = Property; } - else if (prop.kind === 148) { + else if (prop.kind === 149) { currentKind = GetAccessor; } - else if (prop.kind === 149) { + else if (prop.kind === 150) { currentKind = SetAccessor; } else { @@ -26183,7 +26931,7 @@ var ts; var seen = {}; for (var _i = 0, _a = node.attributes; _i < _a.length; _i++) { var attr = _a[_i]; - if (attr.kind === 246) { + if (attr.kind === 247) { continue; } var jsxAttr = attr; @@ -26195,7 +26943,7 @@ var ts; return grammarErrorOnNode(name_21, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); } var initializer = jsxAttr.initializer; - if (initializer && initializer.kind === 247 && !initializer.expression) { + if (initializer && initializer.kind === 248 && !initializer.expression) { return grammarErrorOnNode(jsxAttr.initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression); } } @@ -26204,7 +26952,7 @@ var ts; if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) { return true; } - if (forInOrOfStatement.initializer.kind === 218) { + if (forInOrOfStatement.initializer.kind === 219) { var variableList = forInOrOfStatement.initializer; if (!checkGrammarVariableDeclarationList(variableList)) { var declarations = variableList.declarations; @@ -26212,20 +26960,20 @@ var ts; return false; } if (declarations.length > 1) { - var diagnostic = forInOrOfStatement.kind === 206 + var diagnostic = forInOrOfStatement.kind === 207 ? 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 === 206 + var diagnostic = forInOrOfStatement.kind === 207 ? 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 === 206 + var diagnostic = forInOrOfStatement.kind === 207 ? 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); @@ -26248,24 +26996,20 @@ var ts; else if (accessor.typeParameters) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); } - else if (kind === 148 && accessor.parameters.length) { - return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters); + else if (!doesAccessorHaveCorrectParameterCount(accessor)) { + return grammarErrorOnNode(accessor.name, kind === 149 ? + ts.Diagnostics.A_get_accessor_cannot_have_parameters : + ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); } - else if (kind === 149) { + else if (kind === 150) { if (accessor.type) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); } - else if (accessor.parameters.length !== 1) { - return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); - } 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.flags & 959) { - return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); - } else if (parameter.questionToken) { return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); } @@ -26275,6 +27019,16 @@ var ts; } } } + function doesAccessorHaveCorrectParameterCount(accessor) { + return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 149 ? 0 : 1); + } + function getAccessorThisParameter(accessor) { + if (accessor.parameters.length === (accessor.kind === 149 ? 1 : 2) && + accessor.parameters[0].name.kind === 69 && + accessor.parameters[0].name.originalKeywordKind === 97) { + return accessor.parameters[0]; + } + } function checkGrammarForNonSymbolComputedProperty(node, message) { if (ts.isDynamicName(node)) { return grammarErrorOnNode(node, message); @@ -26286,8 +27040,8 @@ var ts; checkGrammarForGenerator(node)) { return true; } - if (node.parent.kind === 170) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) { + if (node.parent.kind === 171) { + if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) { return true; } else if (node.body === undefined) { @@ -26295,9 +27049,6 @@ var ts; } } if (ts.isClassLike(node.parent)) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) { - return true; - } 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); } @@ -26305,10 +27056,10 @@ var ts; 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 === 221) { + else if (node.parent.kind === 222) { 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 === 158) { + else if (node.parent.kind === 159) { return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol); } } @@ -26319,9 +27070,9 @@ var ts; return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); } switch (current.kind) { - case 213: + case 214: if (node.label && current.label.text === node.label.text) { - var isMisplacedContinueLabel = node.kind === 208 + var isMisplacedContinueLabel = node.kind === 209 && !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); @@ -26329,8 +27080,8 @@ var ts; return false; } break; - case 212: - if (node.kind === 209 && !node.label) { + case 213: + if (node.kind === 210 && !node.label) { return false; } break; @@ -26343,13 +27094,13 @@ var ts; current = current.parent; } if (node.label) { - var message = node.kind === 209 + var message = node.kind === 210 ? 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 === 209 + var message = node.kind === 210 ? 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); @@ -26361,7 +27112,7 @@ var ts; if (node !== ts.lastOrUndefined(elements)) { return grammarErrorOnNode(node, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern); } - if (node.name.kind === 167 || node.name.kind === 166) { + if (node.name.kind === 168 || node.name.kind === 167) { return grammarErrorOnNode(node.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern); } if (node.initializer) { @@ -26370,7 +27121,7 @@ var ts; } } function checkGrammarVariableDeclaration(node) { - if (node.parent.parent.kind !== 206 && node.parent.parent.kind !== 207) { + if (node.parent.parent.kind !== 207 && node.parent.parent.kind !== 208) { if (ts.isInAmbientContext(node)) { if (node.initializer) { var equalsTokenLength = "=".length; @@ -26399,7 +27150,7 @@ var ts; var elements = name.elements; for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) { var element = elements_2[_i]; - if (element.kind !== 192) { + if (element.kind !== 193) { checkGrammarNameInLetOrConstDeclarations(element.name); } } @@ -26416,15 +27167,15 @@ var ts; } function allowLetAndConstDeclarations(parent) { switch (parent.kind) { - case 202: case 203: case 204: - case 211: case 205: + case 212: case 206: case 207: + case 208: return false; - case 213: + case 214: return allowLetAndConstDeclarations(parent.parent); } return true; @@ -26475,12 +27226,11 @@ var ts; } function checkGrammarProperty(node) { if (ts.isClassLike(node.parent)) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional) || - checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol)) { + 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 === 221) { + else if (node.parent.kind === 222) { if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol)) { return true; } @@ -26488,7 +27238,7 @@ var ts; return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer); } } - else if (node.parent.kind === 158) { + else if (node.parent.kind === 159) { if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol)) { return true; } @@ -26501,12 +27251,12 @@ var ts; } } function checkGrammarTopLevelElementForRequiredDeclareModifier(node) { - if (node.kind === 221 || - node.kind === 222 || + if (node.kind === 222 || + node.kind === 223 || + node.kind === 230 || node.kind === 229 || - node.kind === 228 || + node.kind === 236 || node.kind === 235 || - node.kind === 234 || (node.flags & 2) || (node.flags & (1 | 512))) { return false; @@ -26516,7 +27266,7 @@ var ts; function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) { for (var _i = 0, _a = file.statements; _i < _a.length; _i++) { var decl = _a[_i]; - if (ts.isDeclaration(decl) || decl.kind === 199) { + if (ts.isDeclaration(decl) || decl.kind === 200) { if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) { return true; } @@ -26535,7 +27285,7 @@ var ts; 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 === 198 || node.parent.kind === 225 || node.parent.kind === 255) { + if (node.parent.kind === 199 || node.parent.kind === 226 || node.parent.kind === 256) { 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); @@ -26861,7 +27611,8 @@ var ts; var noDeclare; var moduleElementDeclarationEmitInfo = []; var asynchronousSubModuleDeclarationEmitInfo; - var referencePathsOutput = ""; + var referencesOutput = ""; + var usedTypeDirectiveReferences; var emittedReferencedFiles = []; var addedGlobalFileReference = false; var allSourcesModuleElementDeclarationEmitInfo = []; @@ -26899,7 +27650,7 @@ var ts; var oldWriter = writer; ts.forEach(moduleElementDeclarationEmitInfo, function (aliasEmitInfo) { if (aliasEmitInfo.isVisible && !aliasEmitInfo.asynchronousOutput) { - ts.Debug.assert(aliasEmitInfo.node.kind === 229); + ts.Debug.assert(aliasEmitInfo.node.kind === 230); createAndSetNewTextWriterWithSymbolWriter(); ts.Debug.assert(aliasEmitInfo.indent === 0 || (aliasEmitInfo.indent === 1 && isBundledEmit)); for (var i = 0; i < aliasEmitInfo.indent; i++) { @@ -26921,11 +27672,18 @@ var ts; writeLine(); } }); + if (usedTypeDirectiveReferences) { + for (var directive in usedTypeDirectiveReferences) { + if (ts.hasProperty(usedTypeDirectiveReferences, directive)) { + referencesOutput += "/// " + newLine; + } + } + } return { reportedDeclarationError: reportedDeclarationError, moduleElementDeclarationEmitInfo: allSourcesModuleElementDeclarationEmitInfo, synchronousDeclarationOutput: writer.getText(), - referencePathsOutput: referencePathsOutput + referencesOutput: referencesOutput }; function hasInternalAnnotation(range) { var comment = currentText.substring(range.pos, range.end); @@ -26965,10 +27723,10 @@ var ts; var oldWriter = writer; ts.forEach(nodes, function (declaration) { var nodeToCheck; - if (declaration.kind === 217) { + if (declaration.kind === 218) { nodeToCheck = declaration.parent.parent; } - else if (declaration.kind === 232 || declaration.kind === 233 || declaration.kind === 230) { + else if (declaration.kind === 233 || declaration.kind === 234 || declaration.kind === 231) { ts.Debug.fail("We should be getting ImportDeclaration instead to write"); } else { @@ -26979,7 +27737,7 @@ var ts; moduleElementEmitInfo = ts.forEach(asynchronousSubModuleDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.node === nodeToCheck ? declEmitInfo : undefined; }); } if (moduleElementEmitInfo) { - if (moduleElementEmitInfo.node.kind === 229) { + if (moduleElementEmitInfo.node.kind === 230) { moduleElementEmitInfo.isVisible = true; } else { @@ -26987,12 +27745,12 @@ var ts; for (var declarationIndent = moduleElementEmitInfo.indent; declarationIndent; declarationIndent--) { increaseIndent(); } - if (nodeToCheck.kind === 224) { + if (nodeToCheck.kind === 225) { ts.Debug.assert(asynchronousSubModuleDeclarationEmitInfo === undefined); asynchronousSubModuleDeclarationEmitInfo = []; } writeModuleElement(nodeToCheck); - if (nodeToCheck.kind === 224) { + if (nodeToCheck.kind === 225) { moduleElementEmitInfo.subModuleElementDeclarationEmitInfo = asynchronousSubModuleDeclarationEmitInfo; asynchronousSubModuleDeclarationEmitInfo = undefined; } @@ -27002,6 +27760,20 @@ var ts; }); setWriter(oldWriter); } + function recordTypeReferenceDirectivesIfNecessary(typeReferenceDirectives) { + if (!typeReferenceDirectives) { + return; + } + if (!usedTypeDirectiveReferences) { + usedTypeDirectiveReferences = {}; + } + for (var _i = 0, typeReferenceDirectives_1 = typeReferenceDirectives; _i < typeReferenceDirectives_1.length; _i++) { + var directive = typeReferenceDirectives_1[_i]; + if (!ts.hasProperty(usedTypeDirectiveReferences, directive)) { + usedTypeDirectiveReferences[directive] = directive; + } + } + } function handleSymbolAccessibilityError(symbolAccessibilityResult) { if (symbolAccessibilityResult.accessibility === 0) { if (symbolAccessibilityResult && symbolAccessibilityResult.aliasesToMakeVisible) { @@ -27023,6 +27795,7 @@ var ts; } function trackSymbol(symbol, enclosingDeclaration, meaning) { handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning)); + recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning)); } function reportInaccessibleThisError() { if (errorNameNode) { @@ -27090,42 +27863,43 @@ var ts; function emitType(type) { switch (type.kind) { case 117: - case 131: - case 129: - case 120: case 132: + case 130: + case 120: + case 133: case 103: - case 134: + case 135: case 93: - case 164: + case 127: case 165: + case 166: return writeTextOfNode(currentText, type); - case 193: + case 194: return emitExpressionWithTypeArguments(type); - case 154: - return emitTypeReference(type); - case 157: - return emitTypeQuery(type); - case 159: - return emitArrayType(type); - case 160: - return emitTupleType(type); - case 161: - return emitUnionType(type); - case 162: - return emitIntersectionType(type); - case 163: - return emitParenType(type); case 155: - case 156: - return emitSignatureDeclarationWithJsDocComments(type); + return emitTypeReference(type); case 158: + return emitTypeQuery(type); + case 160: + return emitArrayType(type); + case 161: + return emitTupleType(type); + case 162: + return emitUnionType(type); + case 163: + return emitIntersectionType(type); + case 164: + return emitParenType(type); + case 156: + case 157: + return emitSignatureDeclarationWithJsDocComments(type); + case 159: return emitTypeLiteral(type); case 69: return emitEntityName(type); - case 138: + case 139: return emitEntityName(type); - case 153: + case 154: return emitTypePredicate(type); } function writeEntityName(entityName) { @@ -27133,21 +27907,22 @@ var ts; writeTextOfNode(currentText, entityName); } else { - var left = entityName.kind === 138 ? entityName.left : entityName.expression; - var right = entityName.kind === 138 ? entityName.right : entityName.name; + var left = entityName.kind === 139 ? entityName.left : entityName.expression; + var right = entityName.kind === 139 ? entityName.right : entityName.name; writeEntityName(left); write("."); writeTextOfNode(currentText, right); } } function emitEntityName(entityName) { - var visibilityResult = resolver.isEntityNameVisible(entityName, entityName.parent.kind === 228 ? entityName.parent : enclosingDeclaration); + var visibilityResult = resolver.isEntityNameVisible(entityName, entityName.parent.kind === 229 ? entityName.parent : enclosingDeclaration); handleSymbolAccessibilityError(visibilityResult); + recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForEntityName(entityName)); writeEntityName(entityName); } function emitExpressionWithTypeArguments(node) { if (ts.isSupportedExpressionWithTypeArguments(node)) { - ts.Debug.assert(node.expression.kind === 69 || node.expression.kind === 171); + ts.Debug.assert(node.expression.kind === 69 || node.expression.kind === 172); emitEntityName(node.expression); if (node.typeArguments) { write("<"); @@ -27267,10 +28042,10 @@ var ts; if (isModuleElementVisible) { writeModuleElement(node); } - else if (node.kind === 228 || - (node.parent.kind === 255 && isCurrentFileExternalModule)) { + else if (node.kind === 229 || + (node.parent.kind === 256 && isCurrentFileExternalModule)) { var isVisible = void 0; - if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 255) { + if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 256) { asynchronousSubModuleDeclarationEmitInfo.push({ node: node, outputPos: writer.getTextPos(), @@ -27279,7 +28054,7 @@ var ts; }); } else { - if (node.kind === 229) { + if (node.kind === 230) { var importDeclaration = node; if (importDeclaration.importClause) { isVisible = (importDeclaration.importClause.name && resolver.isDeclarationVisible(importDeclaration.importClause)) || @@ -27297,37 +28072,37 @@ var ts; } function writeModuleElement(node) { switch (node.kind) { - case 219: - return writeFunctionDeclaration(node); - case 199: - return writeVariableStatement(node); - case 221: - return writeInterfaceDeclaration(node); case 220: - return writeClassDeclaration(node); + return writeFunctionDeclaration(node); + case 200: + return writeVariableStatement(node); case 222: - return writeTypeAliasDeclaration(node); + return writeInterfaceDeclaration(node); + case 221: + return writeClassDeclaration(node); case 223: - return writeEnumDeclaration(node); + return writeTypeAliasDeclaration(node); case 224: + return writeEnumDeclaration(node); + case 225: return writeModuleDeclaration(node); - case 228: - return writeImportEqualsDeclaration(node); case 229: + return writeImportEqualsDeclaration(node); + case 230: return writeImportDeclaration(node); default: ts.Debug.fail("Unknown symbol kind"); } } function emitModuleElementDeclarationFlags(node) { - if (node.parent.kind === 255) { + if (node.parent.kind === 256) { if (node.flags & 1) { write("export "); } if (node.flags & 512) { write("default "); } - else if (node.kind !== 221 && !noDeclare) { + else if (node.kind !== 222 && !noDeclare) { write("declare "); } } @@ -27377,7 +28152,7 @@ var ts; } function isVisibleNamedBinding(namedBindings) { if (namedBindings) { - if (namedBindings.kind === 231) { + if (namedBindings.kind === 232) { return resolver.isDeclarationVisible(namedBindings); } else { @@ -27400,7 +28175,7 @@ var ts; if (currentWriterPos !== writer.getTextPos()) { write(", "); } - if (node.importClause.namedBindings.kind === 231) { + if (node.importClause.namedBindings.kind === 232) { write("* as "); writeTextOfNode(currentText, node.importClause.namedBindings.name); } @@ -27417,13 +28192,13 @@ var ts; writer.writeLine(); } function emitExternalModuleSpecifier(parent) { - resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || parent.kind !== 224; + resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || parent.kind !== 225; var moduleSpecifier; - if (parent.kind === 228) { + if (parent.kind === 229) { var node = parent; moduleSpecifier = ts.getExternalModuleImportEqualsDeclarationExpression(node); } - else if (parent.kind === 224) { + else if (parent.kind === 225) { moduleSpecifier = parent.name; } else { @@ -27491,7 +28266,7 @@ var ts; writeTextOfNode(currentText, node.name); } } - while (node.body.kind !== 225) { + while (node.body.kind !== 226) { node = node.body; write("."); writeTextOfNode(currentText, node.name); @@ -27556,7 +28331,7 @@ var ts; writeLine(); } function isPrivateMethodTypeParameter(node) { - return node.parent.kind === 146 && (node.parent.flags & 8); + return node.parent.kind === 147 && (node.parent.flags & 8); } function emitTypeParameters(typeParameters) { function emitTypeParameter(node) { @@ -27566,15 +28341,15 @@ var ts; writeTextOfNode(currentText, node.name); if (node.constraint && !isPrivateMethodTypeParameter(node)) { write(" extends "); - if (node.parent.kind === 155 || - node.parent.kind === 156 || - (node.parent.parent && node.parent.parent.kind === 158)) { - ts.Debug.assert(node.parent.kind === 146 || - node.parent.kind === 145 || - node.parent.kind === 155 || + if (node.parent.kind === 156 || + node.parent.kind === 157 || + (node.parent.parent && node.parent.parent.kind === 159)) { + ts.Debug.assert(node.parent.kind === 147 || + node.parent.kind === 146 || node.parent.kind === 156 || - node.parent.kind === 150 || - node.parent.kind === 151); + node.parent.kind === 157 || + node.parent.kind === 151 || + node.parent.kind === 152); emitType(node.constraint); } else { @@ -27584,31 +28359,31 @@ var ts; function getTypeParameterConstraintVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; switch (node.parent.kind) { - case 220: + case 221: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; break; - case 221: + case 222: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; break; - case 151: + case 152: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; break; - case 150: + case 151: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; break; + case 147: case 146: - case 145: if (node.parent.flags & 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 === 220) { + else if (node.parent.parent.kind === 221) { 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 219: + case 220: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; break; default: @@ -27645,7 +28420,7 @@ var ts; } function getHeritageClauseVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; - if (node.parent.parent.kind === 220) { + if (node.parent.parent.kind === 221) { 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; @@ -27665,7 +28440,7 @@ var ts; function emitParameterProperties(constructorDeclaration) { if (constructorDeclaration) { ts.forEach(constructorDeclaration.parameters, function (param) { - if (param.flags & 28) { + if (param.flags & 92) { emitPropertyDeclaration(param); } }); @@ -27725,16 +28500,16 @@ var ts; writeLine(); } function emitVariableDeclaration(node) { - if (node.kind !== 217 || resolver.isDeclarationVisible(node)) { + if (node.kind !== 218 || resolver.isDeclarationVisible(node)) { if (ts.isBindingPattern(node.name)) { emitBindingPattern(node.name); } else { writeTextOfNode(currentText, node.name); - if ((node.kind === 144 || node.kind === 143) && ts.hasQuestionToken(node)) { + if ((node.kind === 145 || node.kind === 144 || node.kind === 142) && ts.hasQuestionToken(node)) { write("?"); } - if ((node.kind === 144 || node.kind === 143) && node.parent.kind === 158) { + if ((node.kind === 145 || node.kind === 144) && node.parent.kind === 159) { emitTypeOfVariableDeclarationFromTypeLiteral(node); } else if (!(node.flags & 8)) { @@ -27743,14 +28518,14 @@ var ts; } } function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { - if (node.kind === 217) { + if (node.kind === 218) { 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 === 144 || node.kind === 143) { + else if (node.kind === 145 || node.kind === 144) { if (node.flags & 32) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 ? @@ -27758,7 +28533,7 @@ var ts; 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 === 220) { + else if (node.parent.kind === 221) { 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 : @@ -27784,7 +28559,7 @@ var ts; var elements = []; for (var _i = 0, _a = bindingPattern.elements; _i < _a.length; _i++) { var element = _a[_i]; - if (element.kind !== 192) { + if (element.kind !== 193) { elements.push(element); } } @@ -27850,7 +28625,7 @@ var ts; accessorWithTypeAnnotation = node; var type = getTypeAnnotationFromAccessor(node); if (!type) { - var anotherAccessor = node.kind === 148 ? accessors.setAccessor : accessors.getAccessor; + var anotherAccessor = node.kind === 149 ? accessors.setAccessor : accessors.getAccessor; type = getTypeAnnotationFromAccessor(anotherAccessor); if (type) { accessorWithTypeAnnotation = anotherAccessor; @@ -27863,7 +28638,7 @@ var ts; } function getTypeAnnotationFromAccessor(accessor) { if (accessor) { - return accessor.kind === 148 + return accessor.kind === 149 ? accessor.type : accessor.parameters.length > 0 ? accessor.parameters[0].type @@ -27872,7 +28647,7 @@ var ts; } function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; - if (accessorWithTypeAnnotation.kind === 149) { + if (accessorWithTypeAnnotation.kind === 150) { if (accessorWithTypeAnnotation.parent.flags & 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 : @@ -27918,17 +28693,17 @@ var ts; } if (!resolver.isImplementationOfOverload(node)) { emitJsDocComments(node); - if (node.kind === 219) { + if (node.kind === 220) { emitModuleElementDeclarationFlags(node); } - else if (node.kind === 146 || node.kind === 147) { + else if (node.kind === 147 || node.kind === 148) { emitClassMemberDeclarationFlags(node.flags); } - if (node.kind === 219) { + if (node.kind === 220) { write("function "); writeTextOfNode(currentText, node.name); } - else if (node.kind === 147) { + else if (node.kind === 148) { write("constructor"); } else { @@ -27947,32 +28722,40 @@ var ts; function emitSignatureDeclaration(node) { var prevEnclosingDeclaration = enclosingDeclaration; enclosingDeclaration = node; - if (node.kind === 152) { + var closeParenthesizedFunctionType = false; + if (node.kind === 153) { emitClassMemberDeclarationFlags(node.flags); write("["); } else { - if (node.kind === 151 || node.kind === 156) { + if (node.kind === 152 || node.kind === 157) { write("new "); } + else if (node.kind === 156) { + 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 === 152) { + if (node.kind === 153) { write("]"); } else { write(")"); } - var isFunctionTypeOrConstructorType = node.kind === 155 || node.kind === 156; - if (isFunctionTypeOrConstructorType || node.parent.kind === 158) { + var isFunctionTypeOrConstructorType = node.kind === 156 || node.kind === 157; + if (isFunctionTypeOrConstructorType || node.parent.kind === 159) { if (node.type) { write(isFunctionTypeOrConstructorType ? " => " : ": "); emitType(node.type); } } - else if (node.kind !== 147 && !(node.flags & 8)) { + else if (node.kind !== 148 && !(node.flags & 8)) { writeReturnTypeAtSignature(node, getReturnTypeVisibilityError); } enclosingDeclaration = prevEnclosingDeclaration; @@ -27980,26 +28763,29 @@ var ts; write(";"); writeLine(); } + else if (closeParenthesizedFunctionType) { + write(")"); + } function getReturnTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; switch (node.kind) { - case 151: + case 152: 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 150: + case 151: 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 152: + case 153: 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 147: case 146: - case 145: if (node.flags & 32) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 ? @@ -28007,7 +28793,7 @@ var ts; 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 === 220) { + else if (node.parent.kind === 221) { 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 : @@ -28020,7 +28806,7 @@ var ts; ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; } break; - case 219: + case 220: 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 : @@ -28052,9 +28838,9 @@ var ts; write("?"); } decreaseIndent(); - if (node.parent.kind === 155 || - node.parent.kind === 156 || - node.parent.parent.kind === 158) { + if (node.parent.kind === 156 || + node.parent.kind === 157 || + node.parent.parent.kind === 159) { emitTypeOfVariableDeclarationFromTypeLiteral(node); } else if (!(node.parent.flags & 8)) { @@ -28070,22 +28856,22 @@ var ts; } function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { switch (node.parent.kind) { - case 147: + case 148: 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 151: + case 152: 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 150: + case 151: 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 147: case 146: - case 145: if (node.parent.flags & 32) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 ? @@ -28093,7 +28879,7 @@ var ts; 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 === 220) { + else if (node.parent.parent.kind === 221) { 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 : @@ -28105,7 +28891,7 @@ var ts; 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 219: + case 220: 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 : @@ -28116,12 +28902,12 @@ var ts; } } function emitBindingPattern(bindingPattern) { - if (bindingPattern.kind === 166) { + if (bindingPattern.kind === 167) { write("{"); emitCommaList(bindingPattern.elements, emitBindingElement); write("}"); } - else if (bindingPattern.kind === 167) { + else if (bindingPattern.kind === 168) { write("["); var elements = bindingPattern.elements; emitCommaList(elements, emitBindingElement); @@ -28132,10 +28918,10 @@ var ts; } } function emitBindingElement(bindingElement) { - if (bindingElement.kind === 192) { + if (bindingElement.kind === 193) { write(" "); } - else if (bindingElement.kind === 168) { + else if (bindingElement.kind === 169) { if (bindingElement.propertyName) { writeTextOfNode(currentText, bindingElement.propertyName); write(": "); @@ -28157,39 +28943,39 @@ var ts; } function emitNode(node) { switch (node.kind) { - case 219: - case 224: - case 228: - case 221: case 220: - case 222: - case 223: - return emitModuleElement(node, isModuleElementVisible(node)); - case 199: - return emitModuleElement(node, isVariableStatementVisible(node)); + case 225: case 229: + case 222: + case 221: + case 223: + case 224: + return emitModuleElement(node, isModuleElementVisible(node)); + case 200: + return emitModuleElement(node, isVariableStatementVisible(node)); + case 230: return emitModuleElement(node, !node.importClause); - case 235: + case 236: return emitExportDeclaration(node); + case 148: case 147: case 146: - case 145: return writeFunctionDeclaration(node); - case 151: - case 150: case 152: + case 151: + case 153: return emitSignatureDeclarationWithJsDocComments(node); - case 148: case 149: + case 150: return emitAccessorDeclaration(node); + case 145: case 144: - case 143: return emitPropertyDeclaration(node); - case 254: - return emitEnumMemberDeclaration(node); - case 234: - return emitExportAssignment(node); case 255: + return emitEnumMemberDeclaration(node); + case 235: + return emitExportAssignment(node); + case 256: return emitSourceFile(node); } } @@ -28204,7 +28990,7 @@ var ts; } if (declFileName) { declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(declarationFilePath)), declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, false); - referencePathsOutput += '/// ' + newLine; + referencesOutput += "/// " + newLine; } return addedBundledEmitReference; function getDeclFileName(emitFileNames, sourceFiles, isBundledEmit) { @@ -28221,9 +29007,9 @@ var ts; var emitDeclarationResult = emitDeclarations(host, resolver, emitterDiagnostics, declarationFilePath, sourceFiles, isBundledEmit); var emitSkipped = emitDeclarationResult.reportedDeclarationError || host.isEmitBlocked(declarationFilePath) || host.getCompilerOptions().noEmit; if (!emitSkipped) { - var declarationOutput = emitDeclarationResult.referencePathsOutput + var declarationOutput = emitDeclarationResult.referencesOutput + getDeclarationOutput(emitDeclarationResult.synchronousDeclarationOutput, emitDeclarationResult.moduleElementDeclarationEmitInfo); - ts.writeFile(host, emitterDiagnostics, declarationFilePath, declarationOutput, host.getCompilerOptions().emitBOM); + ts.writeFile(host, emitterDiagnostics, declarationFilePath, declarationOutput, host.getCompilerOptions().emitBOM, sourceFiles); } return emitSkipped; function getDeclarationOutput(synchronousDeclarationOutput, moduleElementDeclarationEmitInfo) { @@ -28744,17 +29530,17 @@ var ts; switch (node.kind) { case 69: return makeUniqueName(node.text); + case 225: case 224: - case 223: return generateNameForModuleOrEnum(node); - case 229: - case 235: + case 230: + case 236: return generateNameForImportOrExportDeclaration(node); - case 219: case 220: - case 234: + case 221: + case 235: return generateNameForExportDefault(); - case 191: + case 192: return generateNameForClassExpression(); } } @@ -28994,10 +29780,10 @@ var ts; emitParenthesizedIf(node.tag, needsParenthesisForPropertyAccessOrInvocation(node.tag)); write("("); emit(tempVariable); - if (node.template.kind === 188) { + if (node.template.kind === 189) { ts.forEach(node.template.templateSpans, function (templateSpan) { write(", "); - var needsParens = templateSpan.expression.kind === 186 + var needsParens = templateSpan.expression.kind === 187 && templateSpan.expression.operatorToken.kind === 24; emitParenthesizedIf(templateSpan.expression, needsParens); }); @@ -29021,7 +29807,7 @@ var ts; } for (var i = 0, n = node.templateSpans.length; i < n; i++) { var templateSpan = node.templateSpans[i]; - var needsParens = templateSpan.expression.kind !== 177 + var needsParens = templateSpan.expression.kind !== 178 && comparePrecedenceToBinaryPlus(templateSpan.expression) !== 1; if (i > 0 || headEmitted) { write(" + "); @@ -29041,11 +29827,11 @@ var ts; } function templateNeedsParens(template, parent) { switch (parent.kind) { - case 173: case 174: - return parent.expression === template; case 175: - case 177: + return parent.expression === template; + case 176: + case 178: return false; default: return comparePrecedenceToBinaryPlus(parent) !== -1; @@ -29053,7 +29839,7 @@ var ts; } function comparePrecedenceToBinaryPlus(expression) { switch (expression.kind) { - case 186: + case 187: switch (expression.operatorToken.kind) { case 37: case 39: @@ -29065,8 +29851,8 @@ var ts; default: return -1; } - case 189: - case 187: + case 190: + case 188: return -1; default: return 1; @@ -29122,11 +29908,11 @@ var ts; } else { var attrs = openingNode.attributes; - if (ts.forEach(attrs, function (attr) { return attr.kind === 246; })) { + if (ts.forEach(attrs, function (attr) { return attr.kind === 247; })) { write("__assign("); var haveOpenedObjectLiteral = false; for (var i = 0; i < attrs.length; i++) { - if (attrs[i].kind === 246) { + if (attrs[i].kind === 247) { if (i === 0) { write("{}, "); } @@ -29140,7 +29926,7 @@ var ts; emit(attrs[i].expression); } else { - ts.Debug.assert(attrs[i].kind === 245); + ts.Debug.assert(attrs[i].kind === 246); if (haveOpenedObjectLiteral) { write(", "); } @@ -29196,7 +29982,7 @@ var ts; decreaseIndent(); } else if (firstChild) { - if (firstChild.kind !== 240 && firstChild.kind !== 241) { + if (firstChild.kind !== 241 && firstChild.kind !== 242) { emit(firstChild); } else { @@ -29211,11 +29997,11 @@ var ts; write(")"); emitTrailingComments(openingNode); } - if (node.kind === 240) { + if (node.kind === 241) { emitJsxElement(node.openingElement, node.children); } else { - ts.Debug.assert(node.kind === 241); + ts.Debug.assert(node.kind === 242); emitJsxElement(node); } } @@ -29237,11 +30023,11 @@ var ts; if (i > 0) { write(" "); } - if (attribs[i].kind === 246) { + if (attribs[i].kind === 247) { emitJsxSpreadAttribute(attribs[i]); } else { - ts.Debug.assert(attribs[i].kind === 245); + ts.Debug.assert(attribs[i].kind === 246); emitJsxAttribute(attribs[i]); } } @@ -29249,11 +30035,11 @@ var ts; function emitJsxOpeningOrSelfClosingElement(node) { write("<"); emit(node.tagName); - if (node.attributes.length > 0 || (node.kind === 241)) { + if (node.attributes.length > 0 || (node.kind === 242)) { write(" "); } emitAttributes(node.attributes); - if (node.kind === 241) { + if (node.kind === 242) { write("/>"); } else { @@ -29272,20 +30058,20 @@ var ts; } emitJsxClosingElement(node.closingElement); } - if (node.kind === 240) { + if (node.kind === 241) { emitJsxElement(node); } else { - ts.Debug.assert(node.kind === 241); + ts.Debug.assert(node.kind === 242); emitJsxOpeningOrSelfClosingElement(node); } } function emitExpressionForPropertyName(node) { - ts.Debug.assert(node.kind !== 168); + ts.Debug.assert(node.kind !== 169); if (node.kind === 9) { emitLiteral(node); } - else if (node.kind === 139) { + else if (node.kind === 140) { if (ts.nodeIsDecorated(node.parent)) { if (!computedPropertyNamesToGeneratedNames) { computedPropertyNamesToGeneratedNames = []; @@ -29316,63 +30102,64 @@ var ts; function isExpressionIdentifier(node) { var parent = node.parent; switch (parent.kind) { - case 169: - case 194: - case 186: - case 173: - case 248: - case 139: + case 170: + case 195: + case 184: case 187: - case 142: - case 180: - case 203: - case 172: - case 234: - case 201: - case 193: - case 205: + case 174: + case 249: + case 140: + case 188: + case 143: + case 181: + case 204: + case 173: + case 235: + case 202: + case 194: case 206: case 207: - case 202: - case 244: - case 241: + case 208: + case 203: + case 245: case 242: - case 246: + case 243: case 247: - case 174: - case 195: - case 177: - case 185: - case 184: - case 210: - case 253: - case 190: - case 212: + case 248: case 175: case 196: - case 214: - case 176: - case 181: - case 182: - case 204: - case 211: - case 189: - return true; - case 168: - case 254: - case 141: - case 252: - case 144: - case 217: - return parent.initializer === node; - case 171: - return parent.expression === node; - case 179: case 178: + case 186: + case 185: + case 211: + case 254: + case 191: + case 213: + case 176: + case 197: + case 215: + case 177: + case 182: + case 183: + case 205: + case 212: + case 190: + return true; + case 169: + case 255: + case 142: + case 253: + case 145: + case 218: + return parent.initializer === node; + case 172: + return parent.expression === node; + case 180: + case 179: return parent.body === node; - case 228: + case 229: return parent.moduleReference === node; - case 138: + case 139: return parent.left === node; } return false; @@ -29380,7 +30167,7 @@ var ts; function emitExpressionIdentifier(node) { var container = resolver.getReferencedExportContainer(node); if (container) { - if (container.kind === 255) { + if (container.kind === 256) { if (modulekind !== ts.ModuleKind.ES6 && modulekind !== ts.ModuleKind.System) { write("exports."); } @@ -29394,12 +30181,12 @@ var ts; if (modulekind !== ts.ModuleKind.ES6) { var declaration = resolver.getReferencedImportDeclaration(node); if (declaration) { - if (declaration.kind === 230) { + if (declaration.kind === 231) { write(getGeneratedNameForNode(declaration.parent)); write(languageVersion === 0 ? '["default"]' : ".default"); return; } - else if (declaration.kind === 233) { + else if (declaration.kind === 234) { write(getGeneratedNameForNode(declaration.parent.parent.parent)); var name_25 = declaration.propertyName || declaration.name; var identifier = ts.getTextOfNodeFromSourceText(currentText, name_25); @@ -29441,13 +30228,13 @@ var ts; } function isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(node) { if (languageVersion < 2) { - var parent_10 = node.parent; - switch (parent_10.kind) { - case 168: - case 220: - case 223: - case 217: - return parent_10.name === node && resolver.isDeclarationWithCollidingName(parent_10); + var parent_13 = node.parent; + switch (parent_13.kind) { + case 169: + case 221: + case 224: + case 218: + return parent_13.name === node && resolver.isDeclarationWithCollidingName(parent_13); } } return false; @@ -29556,10 +30343,10 @@ var ts; } } function needsParenthesisForAwaitExpressionAsYield(node) { - if (node.parent.kind === 186 && !ts.isAssignmentOperator(node.parent.operatorToken.kind)) { + if (node.parent.kind === 187 && !ts.isAssignmentOperator(node.parent.operatorToken.kind)) { return true; } - else if (node.parent.kind === 187 && node.parent.condition === node) { + else if (node.parent.kind === 188 && node.parent.condition === node) { return true; } return false; @@ -29567,11 +30354,11 @@ var ts; function needsParenthesisForPropertyAccessOrInvocation(node) { switch (node.kind) { case 69: - case 169: - case 171: + case 170: case 172: case 173: - case 177: + case 174: + case 178: return false; } return true; @@ -29588,17 +30375,17 @@ var ts; write(", "); } var e = elements[pos]; - if (e.kind === 190) { + if (e.kind === 191) { e = e.expression; emitParenthesizedIf(e, group === 0 && needsParenthesisForPropertyAccessOrInvocation(e)); pos++; - if (pos === length && group === 0 && needsUniqueCopy && e.kind !== 169) { + if (pos === length && group === 0 && needsUniqueCopy && e.kind !== 170) { write(".slice()"); } } else { var i = pos; - while (i < length && elements[i].kind !== 190) { + while (i < length && elements[i].kind !== 191) { i++; } write("["); @@ -29621,7 +30408,7 @@ var ts; } } function isSpreadElementExpression(node) { - return node.kind === 190; + return node.kind === 191; } function emitArrayLiteral(node) { var elements = node.elements; @@ -29682,7 +30469,7 @@ var ts; writeComma(); var property = properties[i]; emitStart(property); - if (property.kind === 148 || property.kind === 149) { + if (property.kind === 149 || property.kind === 150) { var accessors = ts.getAllAccessorDeclarations(node.properties, property); if (property !== accessors.firstAccessor) { continue; @@ -29690,7 +30477,7 @@ var ts; write("Object.defineProperty("); emit(tempVar); write(", "); - emitStart(node.name); + emitStart(property.name); emitExpressionForPropertyName(property.name); emitEnd(property.name); write(", {"); @@ -29733,13 +30520,13 @@ var ts; emitMemberAccessForPropertyName(property.name); emitEnd(property.name); write(" = "); - if (property.kind === 252) { + if (property.kind === 253) { emit(property.initializer); } - else if (property.kind === 253) { + else if (property.kind === 254) { emitExpressionIdentifier(property.name); } - else if (property.kind === 146) { + else if (property.kind === 147) { emitFunctionDeclaration(property); } else { @@ -29771,7 +30558,7 @@ var ts; var numProperties = properties.length; var numInitialNonComputedProperties = numProperties; for (var i = 0, n = properties.length; i < n; i++) { - if (properties[i].name.kind === 139) { + if (properties[i].name.kind === 140) { numInitialNonComputedProperties = i; break; } @@ -29785,37 +30572,37 @@ var ts; emitObjectLiteralBody(node, properties.length); } function createBinaryExpression(left, operator, right, startsOnNewLine) { - var result = ts.createSynthesizedNode(186, startsOnNewLine); + var result = ts.createSynthesizedNode(187, startsOnNewLine); result.operatorToken = ts.createSynthesizedNode(operator); result.left = left; result.right = right; return result; } function createPropertyAccessExpression(expression, name) { - var result = ts.createSynthesizedNode(171); + var result = ts.createSynthesizedNode(172); result.expression = parenthesizeForAccess(expression); result.dotToken = ts.createSynthesizedNode(21); result.name = name; return result; } function createElementAccessExpression(expression, argumentExpression) { - var result = ts.createSynthesizedNode(172); + var result = ts.createSynthesizedNode(173); result.expression = parenthesizeForAccess(expression); result.argumentExpression = argumentExpression; return result; } function parenthesizeForAccess(expr) { - while (expr.kind === 176 || - expr.kind === 194 || - expr.kind === 195) { + while (expr.kind === 177 || + expr.kind === 195 || + expr.kind === 196) { expr = expr.expression; } if (ts.isLeftHandSideExpression(expr) && - expr.kind !== 174 && + expr.kind !== 175 && expr.kind !== 8) { return expr; } - var node = ts.createSynthesizedNode(177); + var node = ts.createSynthesizedNode(178); node.expression = expr; return node; } @@ -29842,11 +30629,11 @@ var ts; } function isNamespaceExportReference(node) { var container = resolver.getReferencedExportContainer(node); - return container && container.kind !== 255; + return container && container.kind !== 256; } function isImportedReference(node) { var declaration = resolver.getReferencedImportDeclaration(node); - return declaration && (declaration.kind === 230 || declaration.kind === 233); + return declaration && (declaration.kind === 231 || declaration.kind === 234); } function emitShorthandPropertyAssignment(node) { writeTextOfNode(currentText, node.name); @@ -29864,7 +30651,7 @@ var ts; if (constantValue !== undefined) { write(constantValue.toString()); if (!compilerOptions.removeComments) { - var propertyName = node.kind === 171 ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); + var propertyName = node.kind === 172 ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); write(" /* " + propertyName + " */"); } return true; @@ -29875,7 +30662,7 @@ var ts; if (compilerOptions.isolatedModules) { return undefined; } - return node.kind === 171 || node.kind === 172 + return node.kind === 172 || node.kind === 173 ? resolver.getConstantValue(node) : undefined; } @@ -29963,7 +30750,7 @@ var ts; } emitExpressionIdentifier(node); break; - case 138: + case 139: emitQualifiedNameAsExpression(node, useFallback); break; default: @@ -29987,13 +30774,13 @@ var ts; write("]"); } function hasSpreadElement(elements) { - return ts.forEach(elements, function (e) { return e.kind === 190; }); + return ts.forEach(elements, function (e) { return e.kind === 191; }); } function skipParentheses(node) { - while (node.kind === 177 || - node.kind === 176 || - node.kind === 194 || - node.kind === 195) { + while (node.kind === 178 || + node.kind === 177 || + node.kind === 195 || + node.kind === 196) { node = node.expression; } return node; @@ -30014,12 +30801,12 @@ var ts; function emitCallWithSpread(node) { var target; var expr = skipParentheses(node.expression); - if (expr.kind === 171) { + if (expr.kind === 172) { target = emitCallTarget(expr.expression); write("."); emit(expr.name); } - else if (expr.kind === 172) { + else if (expr.kind === 173) { target = emitCallTarget(expr.expression); write("["); emit(expr.argumentExpression); @@ -30130,25 +30917,25 @@ var ts; } } function emitParenExpression(node) { - if (!ts.nodeIsSynthesized(node) && node.parent.kind !== 179) { - if (node.expression.kind === 176 || - node.expression.kind === 194 || - node.expression.kind === 195) { + if (!ts.nodeIsSynthesized(node) && node.parent.kind !== 180) { + if (node.expression.kind === 177 || + node.expression.kind === 195 || + node.expression.kind === 196) { var operand = node.expression.expression; - while (operand.kind === 176 || - operand.kind === 194 || - operand.kind === 195) { + while (operand.kind === 177 || + operand.kind === 195 || + operand.kind === 196) { operand = operand.expression; } - if (operand.kind !== 184 && + if (operand.kind !== 185 && + operand.kind !== 183 && operand.kind !== 182 && operand.kind !== 181 && - operand.kind !== 180 && - operand.kind !== 185 && - operand.kind !== 174 && - !(operand.kind === 173 && node.parent.kind === 174) && - !(operand.kind === 178 && node.parent.kind === 173) && - !(operand.kind === 8 && node.parent.kind === 171)) { + operand.kind !== 186 && + operand.kind !== 175 && + !(operand.kind === 174 && node.parent.kind === 175) && + !(operand.kind === 179 && node.parent.kind === 174) && + !(operand.kind === 8 && node.parent.kind === 172)) { emit(operand); return; } @@ -30177,7 +30964,7 @@ var ts; if (!isCurrentFileSystemExternalModule() || node.kind !== 69 || ts.nodeIsSynthesized(node)) { return false; } - var isVariableDeclarationOrBindingElement = node.parent && (node.parent.kind === 217 || node.parent.kind === 168); + var isVariableDeclarationOrBindingElement = node.parent && (node.parent.kind === 218 || node.parent.kind === 169); var targetDeclaration = isVariableDeclarationOrBindingElement ? node.parent : resolver.getReferencedValueDeclaration(node); @@ -30192,7 +30979,7 @@ var ts; write("\", "); } write(ts.tokenToString(node.operator)); - if (node.operand.kind === 184) { + if (node.operand.kind === 185) { var operand = node.operand; if (node.operator === 35 && (operand.operator === 35 || operand.operator === 41)) { write(" "); @@ -30235,7 +31022,7 @@ var ts; } var current = ts.getRootDeclaration(node).parent; while (current) { - if (current.kind === 255) { + if (current.kind === 256) { return !isExported || ((ts.getCombinedNodeFlags(node) & 1) !== 0); } else if (ts.isDeclaration(current)) { @@ -30254,7 +31041,7 @@ var ts; if (ts.isElementAccessExpression(leftHandSideExpression)) { shouldEmitParentheses = true; write("("); - synthesizedLHS = ts.createSynthesizedNode(172, false); + synthesizedLHS = ts.createSynthesizedNode(173, false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, false, false); synthesizedLHS.expression = identifier; if (leftHandSideExpression.argumentExpression.kind !== 8 && @@ -30271,7 +31058,7 @@ var ts; else if (ts.isPropertyAccessExpression(leftHandSideExpression)) { shouldEmitParentheses = true; write("("); - synthesizedLHS = ts.createSynthesizedNode(171, false); + synthesizedLHS = ts.createSynthesizedNode(172, false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, false, false); synthesizedLHS.expression = identifier; synthesizedLHS.dotToken = leftHandSideExpression.dotToken; @@ -30299,8 +31086,8 @@ var ts; } function emitBinaryExpression(node) { if (languageVersion < 2 && node.operatorToken.kind === 56 && - (node.left.kind === 170 || node.left.kind === 169)) { - emitDestructuring(node, node.parent.kind === 201); + (node.left.kind === 171 || node.left.kind === 170)) { + emitDestructuring(node, node.parent.kind === 202); } else { var exportChanged = node.operatorToken.kind >= 56 && @@ -30352,7 +31139,7 @@ var ts; } } function isSingleLineEmptyBlock(node) { - if (node && node.kind === 198) { + if (node && node.kind === 199) { var block = node; return block.statements.length === 0 && nodeEndIsOnSameLineAsNodeStart(block, block); } @@ -30366,12 +31153,12 @@ var ts; } emitToken(15, node.pos); increaseIndent(); - if (node.kind === 225) { - ts.Debug.assert(node.parent.kind === 224); + if (node.kind === 226) { + ts.Debug.assert(node.parent.kind === 225); emitCaptureThisForNodeIfNecessary(node.parent); } emitLines(node.statements); - if (node.kind === 225) { + if (node.kind === 226) { emitTempDeclarations(true); } decreaseIndent(); @@ -30379,7 +31166,7 @@ var ts; emitToken(16, node.statements.end); } function emitEmbeddedStatement(node) { - if (node.kind === 198) { + if (node.kind === 199) { write(" "); emit(node); } @@ -30391,7 +31178,7 @@ var ts; } } function emitExpressionStatement(node) { - emitParenthesizedIf(node.expression, node.expression.kind === 179); + emitParenthesizedIf(node.expression, node.expression.kind === 180); write(";"); } function emitIfStatement(node) { @@ -30404,7 +31191,7 @@ var ts; if (node.elseStatement) { writeLine(); emitToken(80, node.thenStatement.end); - if (node.elseStatement.kind === 202) { + if (node.elseStatement.kind === 203) { write(" "); emit(node.elseStatement); } @@ -30424,7 +31211,7 @@ var ts; else { emitNormalLoopBody(node, true); } - if (node.statement.kind === 198) { + if (node.statement.kind === 199) { write(" "); } else { @@ -30504,7 +31291,7 @@ var ts; } else { var loop = convertLoopBody(node); - if (node.parent.kind === 213) { + if (node.parent.kind === 214) { emitLabelAndColon(node.parent); } loopEmitter(node, loop); @@ -30514,11 +31301,11 @@ var ts; var functionName = makeUniqueName("_loop"); var loopInitializer; switch (node.kind) { - case 205: case 206: case 207: + case 208: var initializer = node.initializer; - if (initializer && initializer.kind === 218) { + if (initializer && initializer.kind === 219) { loopInitializer = node.initializer; } break; @@ -30532,7 +31319,7 @@ var ts; processVariableDeclaration(varDeclaration.name); } } - var bodyIsBlock = node.statement.kind === 198; + var bodyIsBlock = node.statement.kind === 199; var paramList = loopParameters ? loopParameters.join(", ") : ""; writeLine(); write("var " + functionName + " = function(" + paramList + ")"); @@ -30648,7 +31435,7 @@ var ts; if (emitAsEmbeddedStatement) { emitEmbeddedStatement(node.statement); } - else if (node.statement.kind === 198) { + else if (node.statement.kind === 199) { emitLines(node.statement.statements); } else { @@ -30764,7 +31551,7 @@ var ts; var endPos = emitToken(86, node.pos); write(" "); endPos = emitToken(17, endPos); - if (node.initializer && node.initializer.kind === 218) { + if (node.initializer && node.initializer.kind === 219) { var variableDeclarationList = node.initializer; var startIsEmitted = tryEmitStartOfVariableDeclarationList(variableDeclarationList); if (startIsEmitted) { @@ -30790,7 +31577,7 @@ var ts; } } function emitForInOrForOfStatement(node) { - if (languageVersion < 2 && node.kind === 207) { + if (languageVersion < 2 && node.kind === 208) { emitLoop(node, emitDownLevelForOfStatementWorker); } else { @@ -30801,7 +31588,7 @@ var ts; var endPos = emitToken(86, node.pos); write(" "); endPos = emitToken(17, endPos); - if (node.initializer.kind === 218) { + if (node.initializer.kind === 219) { var variableDeclarationList = node.initializer; if (variableDeclarationList.declarations.length >= 1) { tryEmitStartOfVariableDeclarationList(variableDeclarationList); @@ -30811,7 +31598,7 @@ var ts; else { emit(node.initializer); } - if (node.kind === 206) { + if (node.kind === 207) { write(" in "); } else { @@ -30864,7 +31651,7 @@ var ts; increaseIndent(); var rhsIterationValue = createElementAccessExpression(rhsReference, counter); emitStart(node.initializer); - if (node.initializer.kind === 218) { + if (node.initializer.kind === 219) { write("var "); var variableDeclarationList = node.initializer; if (variableDeclarationList.declarations.length > 0) { @@ -30886,7 +31673,7 @@ var ts; } else { var assignmentExpression = createBinaryExpression(node.initializer, 56, rhsIterationValue, false); - if (node.initializer.kind === 169 || node.initializer.kind === 170) { + if (node.initializer.kind === 170 || node.initializer.kind === 171) { emitDestructuring(assignmentExpression, true, undefined); } else { @@ -30908,14 +31695,14 @@ var ts; } function emitBreakOrContinueStatement(node) { if (convertedLoopState) { - var jump = node.kind === 209 ? 2 : 4; + var jump = node.kind === 210 ? 2 : 4; var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels[node.label.text]) || (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump)); if (!canUseBreakOrContinue) { write("return "); copyLoopOutParameters(convertedLoopState, 1, false); if (!node.label) { - if (node.kind === 209) { + if (node.kind === 210) { convertedLoopState.nonLocalJumps |= 2; write("\"break\";"); } @@ -30926,7 +31713,7 @@ var ts; } else { var labelMarker = void 0; - if (node.kind === 209) { + if (node.kind === 210) { labelMarker = "break-" + node.label.text; setLabeledJump(convertedLoopState, true, node.label.text, labelMarker); } @@ -30939,7 +31726,7 @@ var ts; return; } } - emitToken(node.kind === 209 ? 70 : 75, node.pos); + emitToken(node.kind === 210 ? 70 : 75, node.pos); emitOptional(" ", node.label); write(";"); } @@ -31004,7 +31791,7 @@ var ts; ts.getLineOfLocalPositionFromLineMap(currentLineMap, ts.skipTrivia(currentText, node2.pos)); } function emitCaseOrDefaultClause(node) { - if (node.kind === 248) { + if (node.kind === 249) { write("case "); emit(node.expression); write(":"); @@ -31073,7 +31860,7 @@ var ts; function getContainingModule(node) { do { node = node.parent; - } while (node && node.kind !== 224); + } while (node && node.kind !== 225); return node; } function emitContainingModuleName(node) { @@ -31098,13 +31885,13 @@ var ts; function createVoidZero() { var zero = ts.createSynthesizedNode(8); zero.text = "0"; - var result = ts.createSynthesizedNode(182); + var result = ts.createSynthesizedNode(183); result.expression = zero; return result; } function emitEs6ExportDefaultCompat(node) { - if (node.parent.kind === 255) { - ts.Debug.assert(!!(node.flags & 512) || node.kind === 234); + if (node.parent.kind === 256) { + ts.Debug.assert(!!(node.flags & 512) || node.kind === 235); if (modulekind === ts.ModuleKind.CommonJS || modulekind === ts.ModuleKind.AMD || modulekind === ts.ModuleKind.UMD) { if (!isEs6Module) { if (languageVersion !== 0) { @@ -31199,7 +31986,7 @@ var ts; emitNodeWithCommentsAndWithoutSourcemap(name); write("\", "); } - var isVariableDeclarationOrBindingElement = name.parent && (name.parent.kind === 217 || name.parent.kind === 168); + var isVariableDeclarationOrBindingElement = name.parent && (name.parent.kind === 218 || name.parent.kind === 169); emitStart(isFirstVariableDeclaration(nodeForSourceMap) ? nodeForSourceMap.parent : nodeForSourceMap); withTemporaryNoSourceMap(function () { if (isVariableDeclarationOrBindingElement) { @@ -31225,22 +32012,22 @@ var ts; return identifier; } function isFirstVariableDeclaration(root) { - return root.kind === 217 && - root.parent.kind === 218 && + return root.kind === 218 && + root.parent.kind === 219 && root.parent.declarations[0] === root; } function emitDestructuring(root, isAssignmentExpressionStatement, value) { var emitCount = 0; var canDefineTempVariablesInPlace = false; - if (root.kind === 217) { + if (root.kind === 218) { var isExported = ts.getCombinedNodeFlags(root) & 1; var isSourceLevelForSystemModuleKind = shouldHoistDeclarationInSystemJsModule(root); canDefineTempVariablesInPlace = !isExported && !isSourceLevelForSystemModuleKind; } - else if (root.kind === 141) { + else if (root.kind === 142) { canDefineTempVariablesInPlace = true; } - if (root.kind === 186) { + if (root.kind === 187) { emitAssignmentExpression(root); } else { @@ -31260,14 +32047,14 @@ var ts; } function createDefaultValueCheck(value, defaultValue, sourceMapNode) { value = ensureIdentifier(value, true, sourceMapNode); - var equals = ts.createSynthesizedNode(186); + var equals = ts.createSynthesizedNode(187); equals.left = value; equals.operatorToken = ts.createSynthesizedNode(32); equals.right = createVoidZero(); return createConditionalExpression(equals, defaultValue, value); } function createConditionalExpression(condition, whenTrue, whenFalse) { - var cond = ts.createSynthesizedNode(187); + var cond = ts.createSynthesizedNode(188); cond.condition = condition; cond.questionToken = ts.createSynthesizedNode(53); cond.whenTrue = whenTrue; @@ -31282,7 +32069,7 @@ var ts; } function createPropertyAccessForDestructuringProperty(object, propName) { var index; - var nameIsComputed = propName.kind === 139; + var nameIsComputed = propName.kind === 140; if (nameIsComputed) { index = ensureIdentifier(propName.expression, false, propName); } @@ -31295,7 +32082,7 @@ var ts; : createElementAccessExpression(object, index); } function createSliceCall(value, sliceIndex) { - var call = ts.createSynthesizedNode(173); + var call = ts.createSynthesizedNode(174); var sliceIdentifier = ts.createSynthesizedNode(69); sliceIdentifier.text = "slice"; call.expression = createPropertyAccessExpression(value, sliceIdentifier); @@ -31310,9 +32097,9 @@ var ts; } for (var _a = 0, properties_5 = properties; _a < properties_5.length; _a++) { var p = properties_5[_a]; - if (p.kind === 252 || p.kind === 253) { + if (p.kind === 253 || p.kind === 254) { var propName = p.name; - var target_1 = p.kind === 253 ? p : p.initializer || propName; + var target_1 = p.kind === 254 ? p : p.initializer || propName; emitDestructuringAssignment(target_1, createPropertyAccessForDestructuringProperty(value, propName), p); } } @@ -31324,8 +32111,8 @@ var ts; } for (var i = 0; i < elements.length; i++) { var e = elements[i]; - if (e.kind !== 192) { - if (e.kind !== 190) { + if (e.kind !== 193) { + if (e.kind !== 191) { emitDestructuringAssignment(e, createElementAccessExpression(value, createNumericLiteral(i)), e); } else if (i === elements.length - 1) { @@ -31335,20 +32122,20 @@ var ts; } } function emitDestructuringAssignment(target, value, sourceMapNode) { - if (target.kind === 253) { + if (target.kind === 254) { if (target.objectAssignmentInitializer) { value = createDefaultValueCheck(value, target.objectAssignmentInitializer, sourceMapNode); } target = target.name; } - else if (target.kind === 186 && target.operatorToken.kind === 56) { + else if (target.kind === 187 && target.operatorToken.kind === 56) { value = createDefaultValueCheck(value, target.right, sourceMapNode); target = target.left; } - if (target.kind === 170) { + if (target.kind === 171) { emitObjectLiteralAssignment(target, value, sourceMapNode); } - else if (target.kind === 169) { + else if (target.kind === 170) { emitArrayLiteralAssignment(target, value, sourceMapNode); } else { @@ -31366,14 +32153,14 @@ var ts; emitDestructuringAssignment(target, value, ts.nodeIsSynthesized(root) ? target : root); } else { - if (root.parent.kind !== 177) { + if (root.parent.kind !== 178) { write("("); } value = ensureIdentifier(value, true, root); emitDestructuringAssignment(target, value, root); write(", "); emit(value); - if (root.parent.kind !== 177) { + if (root.parent.kind !== 178) { write(")"); } } @@ -31394,11 +32181,11 @@ var ts; } for (var i = 0; i < numElements; i++) { var element = elements[i]; - if (pattern.kind === 166) { + if (pattern.kind === 167) { var propName = element.propertyName || element.name; emitBindingElement(element, createPropertyAccessForDestructuringProperty(value, propName)); } - else if (element.kind !== 192) { + else if (element.kind !== 193) { if (!element.dotDotDotToken) { emitBindingElement(element, createElementAccessExpression(value, createNumericLiteral(i))); } @@ -31443,12 +32230,12 @@ var ts; var isCapturedInFunction = flags & 131072; var isDeclaredInLoop = flags & 262144; var emittedAsTopLevel = ts.isBlockScopedContainerTopLevel(container) || - (isCapturedInFunction && isDeclaredInLoop && container.kind === 198 && ts.isIterationStatement(container.parent, false)); + (isCapturedInFunction && isDeclaredInLoop && container.kind === 199 && ts.isIterationStatement(container.parent, false)); var emittedAsNestedLetDeclaration = ts.getCombinedNodeFlags(node) & 1024 && !emittedAsTopLevel; var emitExplicitInitializer = emittedAsNestedLetDeclaration && - container.kind !== 206 && container.kind !== 207 && + container.kind !== 208 && (!resolver.isDeclarationWithCollidingName(node) || (isDeclaredInLoop && !isCapturedInFunction && !ts.isIterationStatement(container, false))); if (emitExplicitInitializer) { @@ -31469,7 +32256,7 @@ var ts; } } function emitExportVariableAssignments(node) { - if (node.kind === 192) { + if (node.kind === 193) { return; } var name = node.name; @@ -31483,7 +32270,7 @@ var ts; function isES6ExportedDeclaration(node) { return !!(node.flags & 1) && modulekind === ts.ModuleKind.ES6 && - node.parent.kind === 255; + node.parent.kind === 256; } function emitVariableStatement(node) { var startIsEmitted = false; @@ -31591,7 +32378,7 @@ var ts; } } function emitRestParameter(node) { - if (languageVersion < 2 && ts.hasRestParameter(node)) { + if (languageVersion < 2 && ts.hasDeclaredRestParameter(node)) { var restIndex = node.parameters.length - 1; var restParam = node.parameters[restIndex]; if (ts.isBindingPattern(restParam.name)) { @@ -31632,12 +32419,12 @@ var ts; } } function emitAccessor(node) { - write(node.kind === 148 ? "get " : "set "); + write(node.kind === 149 ? "get " : "set "); emit(node.name); emitSignatureAndBody(node); } function shouldEmitAsArrowFunction(node) { - return node.kind === 179 && languageVersion >= 2; + return node.kind === 180 && languageVersion >= 2; } function emitDeclarationName(node) { if (node.name) { @@ -31648,10 +32435,10 @@ var ts; } } function shouldEmitFunctionName(node) { - if (node.kind === 178) { + if (node.kind === 179) { return !!node.name; } - if (node.kind === 219) { + if (node.kind === 220) { return !!node.name || modulekind !== ts.ModuleKind.ES6; } } @@ -31660,12 +32447,12 @@ var ts; return emitCommentsOnNotEmittedNode(node); } var kind = node.kind, parent = node.parent; - if (kind !== 146 && - kind !== 145 && + if (kind !== 147 && + kind !== 146 && parent && - parent.kind !== 252 && - parent.kind !== 173 && - parent.kind !== 169) { + parent.kind !== 253 && + parent.kind !== 174 && + parent.kind !== 170) { emitLeadingComments(node); } emitStart(node); @@ -31686,13 +32473,13 @@ var ts; emitDeclarationName(node); } emitSignatureAndBody(node); - if (modulekind !== ts.ModuleKind.ES6 && kind === 219 && parent === currentSourceFile && node.name) { + if (modulekind !== ts.ModuleKind.ES6 && kind === 220 && parent === currentSourceFile && node.name) { emitExportMemberAssignments(node.name); } emitEnd(node); - if (kind !== 146 && - kind !== 145 && - kind !== 179) { + if (kind !== 147 && + kind !== 146 && + kind !== 180) { emitTrailingComments(node); } } @@ -31710,7 +32497,7 @@ var ts; if (node) { var parameters = node.parameters; var skipCount = node.parameters.length && node.parameters[0].name.text === "this" ? 1 : 0; - var omitCount = languageVersion < 2 && ts.hasRestParameter(node) ? 1 : 0; + var omitCount = languageVersion < 2 && ts.hasDeclaredRestParameter(node) ? 1 : 0; emitList(parameters, skipCount, parameters.length - omitCount - skipCount, false, false); } write(")"); @@ -31725,7 +32512,7 @@ var ts; } function emitAsyncFunctionBodyForES6(node) { var promiseConstructor = ts.getEntityNameFromTypeNode(node.type); - var isArrowFunction = node.kind === 179; + var isArrowFunction = node.kind === 180; var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192) !== 0; if (!isArrowFunction) { write(" {"); @@ -31769,7 +32556,7 @@ var ts; write(" { }"); } else { - if (node.body.kind === 198) { + if (node.body.kind === 199) { emitBlockFunctionBody(node, node.body); } else { @@ -31821,10 +32608,10 @@ var ts; } write(" "); var current = body; - while (current.kind === 176) { + while (current.kind === 177) { current = current.expression; } - emitParenthesizedIf(body, current.kind === 170); + emitParenthesizedIf(body, current.kind === 171); } function emitDownLevelExpressionFunctionBody(node, body) { write(" {"); @@ -31900,13 +32687,13 @@ var ts; return undefined; } var statement = statements[index]; - if (statement.kind === 201) { + if (statement.kind === 202) { return ts.isSuperCallExpression(statement.expression) ? statement : undefined; } } function emitParameterPropertyAssignments(node) { ts.forEach(node.parameters, function (param) { - if (param.flags & 28) { + if (param.flags & 92) { writeLine(); emitStart(param); emitStart(param.name); @@ -31926,7 +32713,7 @@ var ts; emitNodeWithCommentsAndWithoutSourcemap(memberName); write("]"); } - else if (memberName.kind === 139) { + else if (memberName.kind === 140) { emitComputedPropertyName(memberName); } else { @@ -31938,7 +32725,7 @@ var ts; var properties = []; for (var _a = 0, _b = node.members; _a < _b.length; _a++) { var member = _b[_a]; - if (member.kind === 144 && isStatic === ((member.flags & 32) !== 0) && member.initializer) { + if (member.kind === 145 && isStatic === ((member.flags & 32) !== 0) && member.initializer) { properties.push(member); } } @@ -31978,11 +32765,11 @@ var ts; } function emitMemberFunctionsForES5AndLower(node) { ts.forEach(node.members, function (member) { - if (member.kind === 197) { + if (member.kind === 198) { writeLine(); write(";"); } - else if (member.kind === 146 || node.kind === 145) { + else if (member.kind === 147 || node.kind === 146) { if (!member.body) { return emitCommentsOnNotEmittedNode(member); } @@ -31999,7 +32786,7 @@ var ts; write(";"); emitTrailingComments(member); } - else if (member.kind === 148 || member.kind === 149) { + else if (member.kind === 149 || member.kind === 150) { var accessors = ts.getAllAccessorDeclarations(node.members, member); if (member === accessors.firstAccessor) { writeLine(); @@ -32049,22 +32836,22 @@ var ts; function emitMemberFunctionsForES6AndHigher(node) { for (var _a = 0, _b = node.members; _a < _b.length; _a++) { var member = _b[_a]; - if ((member.kind === 146 || node.kind === 145) && !member.body) { + if ((member.kind === 147 || node.kind === 146) && !member.body) { emitCommentsOnNotEmittedNode(member); } - else if (member.kind === 146 || - member.kind === 148 || - member.kind === 149) { + else if (member.kind === 147 || + member.kind === 149 || + member.kind === 150) { writeLine(); emitLeadingComments(member); emitStart(member); if (member.flags & 32) { write("static "); } - if (member.kind === 148) { + if (member.kind === 149) { write("get "); } - else if (member.kind === 149) { + else if (member.kind === 150) { write("set "); } if (member.asteriskToken) { @@ -32075,7 +32862,7 @@ var ts; emitEnd(member); emitTrailingComments(member); } - else if (member.kind === 197) { + else if (member.kind === 198) { writeLine(); write(";"); } @@ -32100,10 +32887,10 @@ var ts; function emitConstructorWorker(node, baseTypeElement) { var hasInstancePropertyWithInitializer = false; ts.forEach(node.members, function (member) { - if (member.kind === 147 && !member.body) { + if (member.kind === 148 && !member.body) { emitCommentsOnNotEmittedNode(member); } - if (member.kind === 144 && member.initializer && (member.flags & 32) === 0) { + if (member.kind === 145 && member.initializer && (member.flags & 32) === 0) { hasInstancePropertyWithInitializer = true; } }); @@ -32210,7 +32997,7 @@ var ts; var isHoistedDeclarationInSystemModule = shouldHoistDeclarationInSystemJsModule(node); var isDecorated = ts.nodeIsDecorated(node); var rewriteAsClassExpression = isDecorated || isHoistedDeclarationInSystemModule; - if (node.kind === 220) { + if (node.kind === 221) { if (rewriteAsClassExpression) { if (isDecorated && resolver.getNodeCheckFlags(node) & 524288) { decoratedClassAlias = ts.unescapeIdentifier(makeUniqueName(node.name ? node.name.text : "default")); @@ -32238,7 +33025,7 @@ var ts; } } var staticProperties = getInitializedProperties(node, true); - var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 191; + var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 192; var tempVariable; if (isClassExpressionWithStaticProperties) { tempVariable = createAndRecordTempVariable(0); @@ -32302,7 +33089,7 @@ var ts; write(";"); } } - else if (node.parent.kind !== 255) { + else if (node.parent.kind !== 256) { writeLine(); emitStart(node); emitModuleMemberName(node); @@ -32314,7 +33101,7 @@ var ts; } } function emitClassLikeDeclarationBelowES6(node) { - if (node.kind === 220) { + if (node.kind === 221) { if (!shouldHoistDeclarationInSystemJsModule(node)) { write("var "); } @@ -32374,11 +33161,11 @@ var ts; emit(baseTypeNode.expression); } write("))"); - if (node.kind === 220) { + if (node.kind === 221) { write(";"); } emitEnd(node); - if (node.kind === 220) { + if (node.kind === 221) { emitExportMemberAssignment(node); } } @@ -32448,7 +33235,7 @@ var ts; } else { decorators = member.decorators; - if (member.kind === 146) { + if (member.kind === 147) { functionLikeMember = member; } } @@ -32474,7 +33261,7 @@ var ts; write(", "); emitExpressionForPropertyName(member.name); if (languageVersion > 0) { - if (member.kind !== 144) { + if (member.kind !== 145) { write(", null"); } else { @@ -32509,45 +33296,45 @@ var ts; } function shouldEmitTypeMetadata(node) { switch (node.kind) { - case 146: - case 148: + case 147: case 149: - case 144: + case 150: + case 145: return true; } return false; } function shouldEmitReturnTypeMetadata(node) { switch (node.kind) { - case 146: + case 147: return true; } return false; } function shouldEmitParamTypesMetadata(node) { switch (node.kind) { - case 220: - case 146: - case 149: + case 221: + case 147: + case 150: return true; } return false; } function emitSerializedTypeOfNode(node) { switch (node.kind) { - case 220: + case 221: write("Function"); return; - case 144: + case 145: emitSerializedTypeNode(node.type); return; - case 141: - emitSerializedTypeNode(node.type); - return; - case 148: + case 142: emitSerializedTypeNode(node.type); return; case 149: + emitSerializedTypeNode(node.type); + return; + case 150: emitSerializedTypeNode(ts.getSetAccessorTypeAnnotationNode(node)); return; } @@ -32563,40 +33350,40 @@ var ts; case 103: write("void 0"); return; - case 163: + case 164: emitSerializedTypeNode(node.type); return; - case 155: case 156: + case 157: write("Function"); return; - case 159: case 160: + case 161: write("Array"); return; - case 153: + case 154: case 120: write("Boolean"); return; - case 131: - case 165: + case 132: + case 166: write("String"); return; - case 129: + case 130: write("Number"); return; - case 132: + case 133: write("Symbol"); return; - case 154: + case 155: emitSerializedTypeReferenceNode(node); return; - case 157: case 158: - case 161: + case 159: case 162: + case 163: case 117: - case 164: + case 165: break; default: ts.Debug.fail("Cannot serialize unexpected type node."); @@ -32660,7 +33447,7 @@ var ts; function emitSerializedParameterTypesOfNode(node) { if (node) { var valueDeclaration = void 0; - if (node.kind === 220) { + if (node.kind === 221) { valueDeclaration = ts.getFirstConstructorWithBody(node); } else if (ts.isFunctionLike(node) && ts.nodeIsPresent(node.body)) { @@ -32676,10 +33463,10 @@ var ts; } if (parameters[i].dotDotDotToken) { var parameterType = parameters[i].type; - if (parameterType.kind === 159) { + if (parameterType.kind === 160) { parameterType = parameterType.elementType; } - else if (parameterType.kind === 154 && parameterType.typeArguments && parameterType.typeArguments.length === 1) { + else if (parameterType.kind === 155 && parameterType.typeArguments && parameterType.typeArguments.length === 1) { parameterType = parameterType.typeArguments[0]; } else { @@ -32751,7 +33538,7 @@ var ts; } if (!shouldHoistDeclarationInSystemJsModule(node)) { var isES6ExportedEnum = isES6ExportedDeclaration(node); - if (!(node.flags & 1) || (isES6ExportedEnum && isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 223))) { + if (!(node.flags & 1) || (isES6ExportedEnum && isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 224))) { emitStart(node); if (isES6ExportedEnum) { write("export "); @@ -32831,7 +33618,7 @@ var ts; } } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { - if (moduleDeclaration.body.kind === 224) { + if (moduleDeclaration.body.kind === 225) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); return recursiveInnerModule || moduleDeclaration.body; } @@ -32854,7 +33641,7 @@ var ts; var emitVarForModule = !hoistedInDeclarationScope && !isModuleMergedWithES6Class(node); if (emitVarForModule) { var isES6ExportedNamespace = isES6ExportedDeclaration(node); - if (!isES6ExportedNamespace || isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 224)) { + if (!isES6ExportedNamespace || isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 225)) { emitStart(node); if (isES6ExportedNamespace) { write("export "); @@ -32872,7 +33659,7 @@ var ts; write(getGeneratedNameForNode(node)); emitEnd(node.name); write(") "); - if (node.body.kind === 225) { + if (node.body.kind === 226) { var saveConvertedLoopState = convertedLoopState; var saveTempFlags = tempFlags; var saveTempVariables = tempVariables; @@ -32943,16 +33730,16 @@ var ts; } } function getNamespaceDeclarationNode(node) { - if (node.kind === 228) { + if (node.kind === 229) { return node; } var importClause = node.importClause; - if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 231) { + if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 232) { return importClause.namedBindings; } } function isDefaultImport(node) { - return node.kind === 229 && node.importClause && !!node.importClause.name; + return node.kind === 230 && node.importClause && !!node.importClause.name; } function emitExportImportAssignments(node) { if (ts.isAliasSymbolDeclaration(node) && resolver.isValueAliasDeclaration(node)) { @@ -32979,7 +33766,7 @@ var ts; if (shouldEmitNamedBindings) { emitLeadingComments(node.importClause.namedBindings); emitStart(node.importClause.namedBindings); - if (node.importClause.namedBindings.kind === 231) { + if (node.importClause.namedBindings.kind === 232) { write("* as "); emit(node.importClause.namedBindings.name); } @@ -33005,7 +33792,7 @@ var ts; } function emitExternalImportDeclaration(node) { if (ts.contains(externalImports, node)) { - var isExportedImport = node.kind === 228 && (node.flags & 1) !== 0; + var isExportedImport = node.kind === 229 && (node.flags & 1) !== 0; var namespaceDeclaration = getNamespaceDeclarationNode(node); var varOrConst = (languageVersion <= 1) ? "var " : "const "; if (modulekind !== ts.ModuleKind.AMD) { @@ -33020,7 +33807,7 @@ var ts; write(" = "); } else { - var isNakedImport = 229 && !node.importClause; + var isNakedImport = 230 && !node.importClause; if (!isNakedImport) { write(varOrConst); write(getGeneratedNameForNode(node)); @@ -33187,8 +33974,8 @@ var ts; write("export default "); var expression = node.expression; emit(expression); - if (expression.kind !== 219 && - expression.kind !== 220) { + if (expression.kind !== 220 && + expression.kind !== 221) { write(";"); } emitEnd(node); @@ -33225,18 +34012,18 @@ var ts; for (var _a = 0, _b = sourceFile.statements; _a < _b.length; _a++) { var node = _b[_a]; switch (node.kind) { - case 229: + case 230: if (!node.importClause || resolver.isReferencedAliasDeclaration(node.importClause, true)) { externalImports.push(node); } break; - case 228: - if (node.moduleReference.kind === 239 && resolver.isReferencedAliasDeclaration(node)) { + case 229: + if (node.moduleReference.kind === 240 && resolver.isReferencedAliasDeclaration(node)) { externalImports.push(node); } break; - case 235: + case 236: if (node.moduleSpecifier) { if (!node.exportClause) { if (resolver.moduleExportsSomeValue(node.moduleSpecifier)) { @@ -33256,7 +34043,7 @@ var ts; } } break; - case 234: + case 235: if (node.isExportEquals && !exportEquals) { exportEquals = node; } @@ -33281,10 +34068,10 @@ var ts; if (namespaceDeclaration && !isDefaultImport(node)) { return ts.getTextOfNodeFromSourceText(currentText, namespaceDeclaration.name); } - if (node.kind === 229 && node.importClause) { + if (node.kind === 230 && node.importClause) { return getGeneratedNameForNode(node); } - if (node.kind === 235 && node.moduleSpecifier) { + if (node.kind === 236 && node.moduleSpecifier) { return getGeneratedNameForNode(node); } } @@ -33309,8 +34096,8 @@ var ts; var started = false; for (var _a = 0, externalImports_1 = externalImports; _a < externalImports_1.length; _a++) { var importNode = externalImports_1[_a]; - var skipNode = importNode.kind === 235 || - (importNode.kind === 229 && !importNode.importClause); + var skipNode = importNode.kind === 236 || + (importNode.kind === 230 && !importNode.importClause); if (skipNode) { continue; } @@ -33335,7 +34122,7 @@ var ts; var hasExportDeclarationWithExportClause = false; for (var _a = 0, externalImports_2 = externalImports; _a < externalImports_2.length; _a++) { var externalImport = externalImports_2[_a]; - if (externalImport.kind === 235 && externalImport.exportClause) { + if (externalImport.kind === 236 && externalImport.exportClause) { hasExportDeclarationWithExportClause = true; break; } @@ -33364,7 +34151,7 @@ var ts; } for (var _d = 0, externalImports_3 = externalImports; _d < externalImports_3.length; _d++) { var externalImport = externalImports_3[_d]; - if (externalImport.kind !== 235) { + if (externalImport.kind !== 236) { continue; } var exportDecl = externalImport; @@ -33453,7 +34240,7 @@ var ts; if (i !== 0) { write(", "); } - if (local.kind === 220 || local.kind === 224 || local.kind === 223) { + if (local.kind === 221 || local.kind === 225 || local.kind === 224) { emitDeclarationName(local); } else { @@ -33487,21 +34274,21 @@ var ts; if (node.flags & 2) { return; } - if (node.kind === 219) { + if (node.kind === 220) { if (!hoistedFunctionDeclarations) { hoistedFunctionDeclarations = []; } hoistedFunctionDeclarations.push(node); return; } - if (node.kind === 220) { + if (node.kind === 221) { if (!hoistedVars) { hoistedVars = []; } hoistedVars.push(node); return; } - if (node.kind === 223) { + if (node.kind === 224) { if (shouldEmitEnumDeclaration(node)) { if (!hoistedVars) { hoistedVars = []; @@ -33510,7 +34297,7 @@ var ts; } return; } - if (node.kind === 224) { + if (node.kind === 225) { if (shouldEmitModuleDeclaration(node)) { if (!hoistedVars) { hoistedVars = []; @@ -33519,7 +34306,7 @@ var ts; } return; } - if (node.kind === 217 || node.kind === 168) { + if (node.kind === 218 || node.kind === 169) { if (shouldHoistVariable(node, false)) { var name_32 = node.name; if (name_32.kind === 69) { @@ -33555,7 +34342,7 @@ var ts; return false; } return (ts.getCombinedNodeFlags(node) & 3072) === 0 || - ts.getEnclosingBlockScopeContainer(node).kind === 255; + ts.getEnclosingBlockScopeContainer(node).kind === 256; } function isCurrentFileSystemExternalModule() { return modulekind === ts.ModuleKind.System && isCurrentFileExternalModule; @@ -33593,17 +34380,17 @@ var ts; var entry = group_1[_a]; var importVariableName = getLocalNameForExternalImport(entry) || ""; switch (entry.kind) { - case 229: + case 230: if (!entry.importClause) { break; } - case 228: + case 229: ts.Debug.assert(importVariableName !== ""); writeLine(); write(importVariableName + " = " + parameterName + ";"); writeLine(); break; - case 235: + case 236: ts.Debug.assert(importVariableName !== ""); if (entry.exportClause) { writeLine(); @@ -33647,10 +34434,10 @@ var ts; for (var i = startIndex; i < node.statements.length; i++) { var statement = node.statements[i]; switch (statement.kind) { - case 219: - case 229: + case 220: + case 230: continue; - case 235: + case 236: if (!statement.moduleSpecifier) { for (var _a = 0, _b = statement.exportClause.elements; _a < _b.length; _a++) { var element = _b[_a]; @@ -33658,7 +34445,7 @@ var ts; } } continue; - case 228: + case 229: if (!ts.isInternalModuleImportEqualsDeclaration(statement)) { continue; } @@ -33897,10 +34684,10 @@ var ts; return result; } function isJsxChildEmittable(child) { - if (child.kind === 247) { + if (child.kind === 248) { return !!child.expression; } - else if (child.kind === 243) { + else if (child.kind === 244) { return !!getTextToEmit(child); } return true; @@ -34094,30 +34881,30 @@ var ts; } function isSpecializedCommentHandling(node) { switch (node.kind) { - case 221: - case 219: - case 229: - case 228: case 222: - case 234: + case 220: + case 230: + case 229: + case 223: + case 235: return true; } } function shouldEmitLeadingAndTrailingComments(node) { switch (node.kind) { - case 199: + case 200: return shouldEmitLeadingAndTrailingCommentsForVariableStatement(node); - case 224: + case 225: return shouldEmitModuleDeclaration(node); - case 223: + case 224: return shouldEmitEnumDeclaration(node); } ts.Debug.assert(!isSpecializedCommentHandling(node)); - if (node.kind !== 198 && + if (node.kind !== 199 && node.parent && - node.parent.kind === 179 && + node.parent.kind === 180 && node.parent.body === node && - compilerOptions.target <= 1) { + languageVersion <= 1) { return false; } return true; @@ -34126,13 +34913,13 @@ var ts; switch (node.kind) { case 69: return emitIdentifier(node); - case 141: + case 142: return emitParameter(node); + case 147: case 146: - case 145: return emitMethod(node); - case 148: case 149: + case 150: return emitAccessor(node); case 97: return emitThis(node); @@ -34152,142 +34939,142 @@ var ts; case 13: case 14: return emitLiteral(node); - case 188: - return emitTemplateExpression(node); - case 196: - return emitTemplateSpan(node); - case 240: - case 241: - return emitJsxElement(node); - case 243: - return emitJsxText(node); - case 247: - return emitJsxExpression(node); - case 138: - return emitQualifiedName(node); - case 166: - return emitObjectBindingPattern(node); - case 167: - return emitArrayBindingPattern(node); - case 168: - return emitBindingElement(node); - case 169: - return emitArrayLiteral(node); - case 170: - return emitObjectLiteral(node); - case 252: - return emitPropertyAssignment(node); - case 253: - return emitShorthandPropertyAssignment(node); - case 139: - return emitComputedPropertyName(node); - case 171: - return emitPropertyAccess(node); - case 172: - return emitIndexedAccess(node); - case 173: - return emitCallExpression(node); - case 174: - return emitNewExpression(node); - case 175: - return emitTaggedTemplateExpression(node); - case 176: - case 194: - case 195: - return emit(node.expression); - case 177: - return emitParenExpression(node); - case 219: - case 178: - case 179: - return emitFunctionDeclaration(node); - case 180: - return emitDeleteExpression(node); - case 181: - return emitTypeOfExpression(node); - case 182: - return emitVoidExpression(node); - case 183: - return emitAwaitExpression(node); - case 184: - return emitPrefixUnaryExpression(node); - case 185: - return emitPostfixUnaryExpression(node); - case 186: - return emitBinaryExpression(node); - case 187: - return emitConditionalExpression(node); - case 190: - return emitSpreadElementExpression(node); case 189: - return emitYieldExpression(node); - case 192: - return; - case 198: - case 225: - return emitBlock(node); - case 199: - return emitVariableStatement(node); - case 200: - return write(";"); - case 201: - return emitExpressionStatement(node); - case 202: - return emitIfStatement(node); - case 203: - return emitDoStatement(node); - case 204: - return emitWhileStatement(node); - case 205: - return emitForStatement(node); - case 207: - case 206: - return emitForInOrForOfStatement(node); - case 208: - case 209: - return emitBreakOrContinueStatement(node); - case 210: - return emitReturnStatement(node); - case 211: - return emitWithStatement(node); - case 212: - return emitSwitchStatement(node); + return emitTemplateExpression(node); + case 197: + return emitTemplateSpan(node); + case 241: + case 242: + return emitJsxElement(node); + case 244: + return emitJsxText(node); case 248: - case 249: - return emitCaseOrDefaultClause(node); - case 213: - return emitLabeledStatement(node); - case 214: - return emitThrowStatement(node); - case 215: - return emitTryStatement(node); - case 251: - return emitCatchClause(node); - case 216: - return emitDebuggerStatement(node); - case 217: - return emitVariableDeclaration(node); - case 191: - return emitClassExpression(node); - case 220: - return emitClassDeclaration(node); - case 221: - return emitInterfaceDeclaration(node); - case 223: - return emitEnumDeclaration(node); + return emitJsxExpression(node); + case 139: + return emitQualifiedName(node); + case 167: + return emitObjectBindingPattern(node); + case 168: + return emitArrayBindingPattern(node); + case 169: + return emitBindingElement(node); + case 170: + return emitArrayLiteral(node); + case 171: + return emitObjectLiteral(node); + case 253: + return emitPropertyAssignment(node); case 254: - return emitEnumMember(node); + return emitShorthandPropertyAssignment(node); + case 140: + return emitComputedPropertyName(node); + case 172: + return emitPropertyAccess(node); + case 173: + return emitIndexedAccess(node); + case 174: + return emitCallExpression(node); + case 175: + return emitNewExpression(node); + case 176: + return emitTaggedTemplateExpression(node); + case 177: + case 195: + case 196: + return emit(node.expression); + case 178: + return emitParenExpression(node); + case 220: + case 179: + case 180: + return emitFunctionDeclaration(node); + case 181: + return emitDeleteExpression(node); + case 182: + return emitTypeOfExpression(node); + case 183: + return emitVoidExpression(node); + case 184: + return emitAwaitExpression(node); + case 185: + return emitPrefixUnaryExpression(node); + case 186: + return emitPostfixUnaryExpression(node); + case 187: + return emitBinaryExpression(node); + case 188: + return emitConditionalExpression(node); + case 191: + return emitSpreadElementExpression(node); + case 190: + return emitYieldExpression(node); + case 193: + return; + case 199: + case 226: + return emitBlock(node); + case 200: + return emitVariableStatement(node); + case 201: + return write(";"); + case 202: + return emitExpressionStatement(node); + case 203: + return emitIfStatement(node); + case 204: + return emitDoStatement(node); + case 205: + return emitWhileStatement(node); + case 206: + return emitForStatement(node); + case 208: + case 207: + return emitForInOrForOfStatement(node); + case 209: + case 210: + return emitBreakOrContinueStatement(node); + case 211: + return emitReturnStatement(node); + case 212: + return emitWithStatement(node); + case 213: + return emitSwitchStatement(node); + case 249: + case 250: + return emitCaseOrDefaultClause(node); + case 214: + return emitLabeledStatement(node); + case 215: + return emitThrowStatement(node); + case 216: + return emitTryStatement(node); + case 252: + return emitCatchClause(node); + case 217: + return emitDebuggerStatement(node); + case 218: + return emitVariableDeclaration(node); + case 192: + return emitClassExpression(node); + case 221: + return emitClassDeclaration(node); + case 222: + return emitInterfaceDeclaration(node); case 224: - return emitModuleDeclaration(node); - case 229: - return emitImportDeclaration(node); - case 228: - return emitImportEqualsDeclaration(node); - case 235: - return emitExportDeclaration(node); - case 234: - return emitExportAssignment(node); + return emitEnumDeclaration(node); case 255: + return emitEnumMember(node); + case 225: + return emitModuleDeclaration(node); + case 230: + return emitImportDeclaration(node); + case 229: + return emitImportEqualsDeclaration(node); + case 236: + return emitExportDeclaration(node); + case 235: + return emitExportAssignment(node); + case 256: return emitSourceFileNode(node); } } @@ -34317,7 +35104,7 @@ var ts; } function getLeadingCommentsToEmit(node) { if (node.parent) { - if (node.parent.kind === 255 || node.pos !== node.parent.pos) { + if (node.parent.kind === 256 || node.pos !== node.parent.pos) { if (hasDetachedComments(node.pos)) { return getLeadingCommentsWithoutDetachedComments(); } @@ -34329,7 +35116,7 @@ var ts; } function getTrailingCommentsToEmit(node) { if (node.parent) { - if (node.parent.kind === 255 || node.end !== node.parent.end) { + if (node.parent.kind === 256 || node.end !== node.parent.end) { return ts.getTrailingCommentRanges(currentText, node.end); } } @@ -34839,20 +35626,26 @@ var ts; var failedLookupLocations = []; var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled, skipTsx: false }; var resolvedFileName = tryLoadModuleUsingOptionalResolutionSettings(moduleName, containingDirectory, nodeLoadModuleByRelativeName, failedLookupLocations, supportedExtensions, state); - if (resolvedFileName) { - return createResolvedModule(resolvedFileName, false, failedLookupLocations); - } var isExternalLibraryImport = false; - if (moduleHasNonRelativeName(moduleName)) { - if (traceEnabled) { - trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder, moduleName); + if (!resolvedFileName) { + if (moduleHasNonRelativeName(moduleName)) { + if (traceEnabled) { + trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder, moduleName); + } + resolvedFileName = loadModuleFromNodeModules(moduleName, containingDirectory, failedLookupLocations, state); + isExternalLibraryImport = resolvedFileName !== undefined; + } + else { + var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); + resolvedFileName = nodeLoadModuleByRelativeName(candidate, supportedExtensions, failedLookupLocations, false, state); } - resolvedFileName = loadModuleFromNodeModules(moduleName, containingDirectory, failedLookupLocations, state); - isExternalLibraryImport = resolvedFileName !== undefined; } - else { - var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); - resolvedFileName = nodeLoadModuleByRelativeName(candidate, supportedExtensions, failedLookupLocations, false, state); + if (resolvedFileName && host.realpath) { + var originalFileName = resolvedFileName; + resolvedFileName = ts.normalizePath(host.realpath(resolvedFileName)); + if (traceEnabled) { + trace(host, ts.Diagnostics.Resolving_real_path_for_0_result_1, originalFileName, resolvedFileName); + } } return createResolvedModule(resolvedFileName, isExternalLibraryImport, failedLookupLocations); } @@ -35081,6 +35874,7 @@ var ts; 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, @@ -35093,7 +35887,8 @@ var ts; 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); } + directoryExists: function (directoryName) { return ts.sys.directoryExists(directoryName); }, + realpath: realpath }; } ts.createCompilerHost = createCompilerHost; @@ -35206,6 +36001,7 @@ var ts; program = { getRootFileNames: function () { return rootNames; }, getSourceFile: getSourceFile, + getSourceFileByPath: getSourceFileByPath, getSourceFiles: function () { return files; }, getCompilerOptions: function () { return options; }, getSyntacticDiagnostics: getSyntacticDiagnostics, @@ -35224,7 +36020,7 @@ var ts; getSymbolCount: function () { return getDiagnosticsProducingTypeChecker().getSymbolCount(); }, getTypeCount: function () { return getDiagnosticsProducingTypeChecker().getTypeCount(); }, getFileProcessingDiagnostics: function () { return fileProcessingDiagnostics; }, - resolvedTypeReferenceDirectives: resolvedTypeReferenceDirectives + getResolvedTypeReferenceDirectives: function () { return resolvedTypeReferenceDirectives; } }; verifyCompilerOptions(); ts.programTime += new Date().getTime() - start; @@ -35267,7 +36063,11 @@ var ts; (oldOptions.allowJs !== options.allowJs) || (oldOptions.rootDir !== options.rootDir) || (oldOptions.typesSearchPaths !== options.typesSearchPaths) || - (oldOptions.configFilePath !== options.configFilePath)) { + (oldOptions.configFilePath !== options.configFilePath) || + (oldOptions.baseUrl !== options.baseUrl) || + (oldOptions.typesRoot !== options.typesRoot) || + !ts.arrayIsEqualTo(oldOptions.rootDirs, options.rootDirs) || + !ts.mapIsEqualTo(oldOptions.paths, options.paths)) { return false; } ts.Debug.assert(!oldProgram.structureIsReused); @@ -35283,7 +36083,9 @@ var ts; var modifiedSourceFiles = []; for (var _i = 0, _a = oldProgram.getSourceFiles(); _i < _a.length; _i++) { var oldSourceFile = _a[_i]; - var newSourceFile = host.getSourceFile(oldSourceFile.fileName, options.target); + var newSourceFile = host.getSourceFileByPath + ? host.getSourceFileByPath(oldSourceFile.fileName, oldSourceFile.path, options.target) + : host.getSourceFile(oldSourceFile.fileName, options.target); if (!newSourceFile) { return false; } @@ -35341,7 +36143,7 @@ var ts; var modifiedFile = modifiedSourceFiles_1[_b]; fileProcessingDiagnostics.reattachFileDiagnostics(modifiedFile); } - resolvedTypeReferenceDirectives = oldProgram.resolvedTypeReferenceDirectives; + resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives(); oldProgram.structureIsReused = true; return true; } @@ -35353,6 +36155,7 @@ var ts; getCurrentDirectory: function () { return currentDirectory; }, getNewLine: function () { return host.getNewLine(); }, getSourceFile: program.getSourceFile, + getSourceFileByPath: program.getSourceFileByPath, getSourceFiles: program.getSourceFiles, writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }), isEmitBlocked: isEmitBlocked @@ -35397,7 +36200,10 @@ var ts; return emitResult; } function getSourceFile(fileName) { - return filesByName.get(ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + return getSourceFileByPath(ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + } + function getSourceFileByPath(path) { + return filesByName.get(path); } function getDiagnosticsHelper(sourceFile, getDiagnostics, cancellationToken) { if (sourceFile) { @@ -35465,47 +36271,47 @@ var ts; return false; } switch (node.kind) { - case 228: + case 229: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_a_ts_file)); return true; - case 234: + case 235: if (node.isExportEquals) { diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_a_ts_file)); return true; } break; - case 220: + case 221: var classDeclaration = node; if (checkModifiers(classDeclaration.modifiers) || checkTypeParameters(classDeclaration.typeParameters)) { return true; } break; - case 250: + case 251: var heritageClause = node; if (heritageClause.token === 106) { diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_a_ts_file)); return true; } break; - case 221: + case 222: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.interface_declarations_can_only_be_used_in_a_ts_file)); return true; - case 224: + case 225: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.module_declarations_can_only_be_used_in_a_ts_file)); return true; - case 222: + case 223: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.type_aliases_can_only_be_used_in_a_ts_file)); return true; - case 146: - case 145: case 147: + case 146: case 148: case 149: - case 178: - case 219: + case 150: case 179: - case 219: + case 220: + case 180: + case 220: var functionDeclaration = node; if (checkModifiers(functionDeclaration.modifiers) || checkTypeParameters(functionDeclaration.typeParameters) || @@ -35513,20 +36319,20 @@ var ts; return true; } break; - case 199: + case 200: var variableStatement = node; if (checkModifiers(variableStatement.modifiers)) { return true; } break; - case 217: + case 218: var variableDeclaration = node; if (checkTypeAnnotation(variableDeclaration.type)) { return true; } break; - case 173: case 174: + case 175: var expression = node; if (expression.typeArguments && expression.typeArguments.length > 0) { var start_2 = expression.typeArguments.pos; @@ -35534,7 +36340,7 @@ var ts; return true; } break; - case 141: + case 142: var parameter = node; if (parameter.modifiers) { var start_3 = parameter.modifiers.pos; @@ -35550,17 +36356,17 @@ var ts; return true; } break; - case 144: + case 145: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.property_declarations_can_only_be_used_in_a_ts_file)); return true; - case 223: + case 224: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); return true; - case 176: + case 177: var typeAssertionExpression = node; diagnostics.push(ts.createDiagnosticForNode(typeAssertionExpression.type, ts.Diagnostics.type_assertion_expressions_can_only_be_used_in_a_ts_file)); return true; - case 142: + case 143: if (!options.experimentalDecorators) { diagnostics.push(ts.createDiagnosticForNode(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)); } @@ -35591,7 +36397,7 @@ var ts; case 112: case 110: case 111: - case 127: + case 128: case 122: diagnostics.push(ts.createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind))); return true; @@ -35663,9 +36469,9 @@ var ts; return; function collectModuleReferences(node, inAmbientModule) { switch (node.kind) { + case 230: case 229: - case 228: - case 235: + case 236: var moduleNameExpr = ts.getExternalModuleName(node); if (!moduleNameExpr || moduleNameExpr.kind !== 9) { break; @@ -35677,7 +36483,7 @@ var ts; (imports || (imports = [])).push(moduleNameExpr); } break; - case 224: + case 225: if (ts.isAmbientModule(node) && (inAmbientModule || node.flags & 2 || ts.isDeclarationFile(file))) { var moduleName = node.name; if (isExternalModuleFile || (inAmbientModule && !ts.isExternalModuleNameRelative(moduleName.text))) { @@ -35951,12 +36757,23 @@ var ts; if (!hasZeroOrOneAsteriskCharacter(key)) { programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, key)); } - for (var _i = 0, _a = options.paths[key]; _i < _a.length; _i++) { - var subst = _a[_i]; - if (!hasZeroOrOneAsteriskCharacter(subst)) { - programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character, subst, key)); + if (ts.isArray(options.paths[key])) { + for (var _i = 0, _a = options.paths[key]; _i < _a.length; _i++) { + var subst = _a[_i]; + var typeOfSubst = typeof subst; + if (typeOfSubst === "string") { + if (!hasZeroOrOneAsteriskCharacter(subst)) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character, subst, key)); + } + } + else { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2, subst, key, typeOfSubst)); + } } } + else { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substututions_for_pattern_0_should_be_an_array, key)); + } } } if (options.inlineSources) { @@ -36107,89 +36924,89 @@ var ts; function spanInNode(node) { if (node) { switch (node.kind) { - case 199: + case 200: return spanInVariableDeclaration(node.declarationList.declarations[0]); - case 217: - case 144: - case 143: - return spanInVariableDeclaration(node); - case 141: - return spanInParameterDeclaration(node); - case 219: - case 146: + case 218: case 145: - case 148: - case 149: + case 144: + return spanInVariableDeclaration(node); + case 142: + return spanInParameterDeclaration(node); + case 220: case 147: - case 178: + case 146: + case 149: + case 150: + case 148: case 179: + case 180: return spanInFunctionDeclaration(node); - case 198: + case 199: if (ts.isFunctionBlock(node)) { return spanInFunctionBlock(node); } - case 225: + case 226: return spanInBlock(node); - case 251: + case 252: return spanInBlock(node.block); - case 201: - return textSpan(node.expression); - case 210: - return textSpan(node.getChildAt(0), node.expression); - case 204: - return textSpanEndingAtNextToken(node, node.expression); - case 203: - return spanInNode(node.statement); - case 216: - return textSpan(node.getChildAt(0)); case 202: - return textSpanEndingAtNextToken(node, node.expression); - case 213: - return spanInNode(node.statement); - case 209: - case 208: - return textSpan(node.getChildAt(0), node.label); + return textSpan(node.expression); + case 211: + return textSpan(node.getChildAt(0), node.expression); case 205: - return spanInForStatement(node); - case 206: return textSpanEndingAtNextToken(node, node.expression); - case 207: - return spanInInitializerOfForLike(node); - case 212: + case 204: + return spanInNode(node.statement); + case 217: + return textSpan(node.getChildAt(0)); + case 203: return textSpanEndingAtNextToken(node, node.expression); - case 248: - case 249: - return spanInNode(node.statements[0]); - case 215: - return spanInBlock(node.tryBlock); case 214: + return spanInNode(node.statement); + case 210: + case 209: + return textSpan(node.getChildAt(0), node.label); + case 206: + return spanInForStatement(node); + case 207: + return textSpanEndingAtNextToken(node, node.expression); + case 208: + return spanInInitializerOfForLike(node); + case 213: + return textSpanEndingAtNextToken(node, node.expression); + case 249: + case 250: + return spanInNode(node.statements[0]); + case 216: + return spanInBlock(node.tryBlock); + case 215: return textSpan(node, node.expression); - case 234: - return textSpan(node, node.expression); - case 228: - return textSpan(node, node.moduleReference); - case 229: - return textSpan(node, node.moduleSpecifier); case 235: + return textSpan(node, node.expression); + case 229: + return textSpan(node, node.moduleReference); + case 230: return textSpan(node, node.moduleSpecifier); - case 224: + case 236: + return textSpan(node, node.moduleSpecifier); + case 225: if (ts.getModuleInstanceState(node) !== 1) { return undefined; } - case 220: - case 223: - case 254: - case 168: - return textSpan(node); - case 211: - return spanInNode(node.statement); - case 142: - return spanInNodeArray(node.parent.decorators); - case 166: - case 167: - return spanInBindingPattern(node); case 221: + case 224: + case 255: + case 169: + return textSpan(node); + case 212: + return spanInNode(node.statement); + case 143: + return spanInNodeArray(node.parent.decorators); + case 167: + case 168: + return spanInBindingPattern(node); case 222: + case 223: return undefined; case 23: case 1: @@ -36217,20 +37034,20 @@ var ts; case 72: case 85: return spanInNextNode(node); - case 137: + case 138: return spanInOfKeyword(node); default: if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node)) { return spanInArrayLiteralOrObjectLiteralDestructuringPattern(node); } if ((node.kind === 69 || - node.kind == 190 || - node.kind === 252 || - node.kind === 253) && + node.kind == 191 || + node.kind === 253 || + node.kind === 254) && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) { return textSpan(node); } - if (node.kind === 186) { + if (node.kind === 187) { var binaryExpression = node; if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.left)) { return spanInArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.left); @@ -36245,38 +37062,38 @@ var ts; } if (ts.isExpression(node)) { switch (node.parent.kind) { - case 203: + case 204: return spanInPreviousNode(node); - case 142: + case 143: return spanInNode(node.parent); - case 205: - case 207: + case 206: + case 208: return textSpan(node); - case 186: + case 187: if (node.parent.operatorToken.kind === 24) { return textSpan(node); } break; - case 179: + case 180: if (node.parent.body === node) { return textSpan(node); } break; } } - if (node.parent.kind === 252 && + if (node.parent.kind === 253 && node.parent.name === node && !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.parent)) { return spanInNode(node.parent.initializer); } - if (node.parent.kind === 176 && node.parent.type === node) { + if (node.parent.kind === 177 && node.parent.type === node) { return spanInNextNode(node.parent.type); } if (ts.isFunctionLike(node.parent) && node.parent.type === node) { return spanInPreviousNode(node); } - if ((node.parent.kind === 217 || - node.parent.kind === 141)) { + if ((node.parent.kind === 218 || + node.parent.kind === 142)) { var paramOrVarDecl = node.parent; if (paramOrVarDecl.initializer === node || paramOrVarDecl.type === node || @@ -36284,7 +37101,7 @@ var ts; return spanInPreviousNode(node); } } - if (node.parent.kind === 186) { + if (node.parent.kind === 187) { var binaryExpression = node.parent; if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.left) && (binaryExpression.right === node || @@ -36305,7 +37122,7 @@ var ts; } } function spanInVariableDeclaration(variableDeclaration) { - if (variableDeclaration.parent.parent.kind === 206) { + if (variableDeclaration.parent.parent.kind === 207) { return spanInNode(variableDeclaration.parent.parent); } if (ts.isBindingPattern(variableDeclaration.name)) { @@ -36313,7 +37130,7 @@ var ts; } if (variableDeclaration.initializer || (variableDeclaration.flags & 1) || - variableDeclaration.parent.parent.kind === 207) { + variableDeclaration.parent.parent.kind === 208) { return textSpanFromVariableDeclaration(variableDeclaration); } var declarations = variableDeclaration.parent.declarations; @@ -36345,7 +37162,7 @@ var ts; } function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) { return !!(functionDeclaration.flags & 1) || - (functionDeclaration.parent.kind === 220 && functionDeclaration.kind !== 147); + (functionDeclaration.parent.kind === 221 && functionDeclaration.kind !== 148); } function spanInFunctionDeclaration(functionDeclaration) { if (!functionDeclaration.body) { @@ -36365,22 +37182,22 @@ var ts; } function spanInBlock(block) { switch (block.parent.kind) { - case 224: + case 225: if (ts.getModuleInstanceState(block.parent) !== 1) { return undefined; } - case 204: - case 202: - case 206: - return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]); case 205: + case 203: case 207: + return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]); + case 206: + case 208: return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]); } return spanInNode(block.statements[0]); } function spanInInitializerOfForLike(forLikeStatement) { - if (forLikeStatement.initializer.kind === 218) { + if (forLikeStatement.initializer.kind === 219) { var variableDeclarationList = forLikeStatement.initializer; if (variableDeclarationList.declarations.length > 0) { return spanInNode(variableDeclarationList.declarations[0]); @@ -36402,62 +37219,62 @@ var ts; } } function spanInBindingPattern(bindingPattern) { - var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 192 ? element : undefined; }); + var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 193 ? element : undefined; }); if (firstBindingElement) { return spanInNode(firstBindingElement); } - if (bindingPattern.parent.kind === 168) { + if (bindingPattern.parent.kind === 169) { return textSpan(bindingPattern.parent); } return textSpanFromVariableDeclaration(bindingPattern.parent); } function spanInArrayLiteralOrObjectLiteralDestructuringPattern(node) { - ts.Debug.assert(node.kind !== 167 && node.kind !== 166); - var elements = node.kind === 169 ? + ts.Debug.assert(node.kind !== 168 && node.kind !== 167); + var elements = node.kind === 170 ? node.elements : node.properties; - var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 192 ? element : undefined; }); + var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 193 ? element : undefined; }); if (firstBindingElement) { return spanInNode(firstBindingElement); } - return textSpan(node.parent.kind === 186 ? node.parent : node); + return textSpan(node.parent.kind === 187 ? node.parent : node); } function spanInOpenBraceToken(node) { switch (node.parent.kind) { - case 223: + case 224: var enumDeclaration = node.parent; return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile)); - case 220: + case 221: var classDeclaration = node.parent; return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile)); - case 226: + case 227: return spanInNodeIfStartsOnSameLine(node.parent.parent, node.parent.clauses[0]); } return spanInNode(node.parent); } function spanInCloseBraceToken(node) { switch (node.parent.kind) { - case 225: + case 226: if (ts.getModuleInstanceState(node.parent.parent) !== 1) { return undefined; } - case 223: - case 220: + case 224: + case 221: return textSpan(node); - case 198: + case 199: if (ts.isFunctionBlock(node.parent)) { return textSpan(node); } - case 251: + case 252: return spanInNode(ts.lastOrUndefined(node.parent.statements)); - case 226: + case 227: var caseBlock = node.parent; var lastClause = ts.lastOrUndefined(caseBlock.clauses); if (lastClause) { return spanInNode(ts.lastOrUndefined(lastClause.statements)); } return undefined; - case 166: + case 167: var bindingPattern = node.parent; return spanInNode(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern); default: @@ -36470,7 +37287,7 @@ var ts; } function spanInCloseBracketToken(node) { switch (node.parent.kind) { - case 167: + case 168: var bindingPattern = node.parent; return textSpan(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern); default: @@ -36482,33 +37299,33 @@ var ts; } } function spanInOpenParenToken(node) { - if (node.parent.kind === 203 || - node.parent.kind === 173 || - node.parent.kind === 174) { + if (node.parent.kind === 204 || + node.parent.kind === 174 || + node.parent.kind === 175) { return spanInPreviousNode(node); } - if (node.parent.kind === 177) { + if (node.parent.kind === 178) { return spanInNextNode(node); } return spanInNode(node.parent); } function spanInCloseParenToken(node) { switch (node.parent.kind) { - case 178: - case 219: case 179: - case 146: - case 145: - case 148: - case 149: + case 220: + case 180: case 147: - case 204: - case 203: + case 146: + case 149: + case 150: + case 148: case 205: - case 207: - case 173: + case 204: + case 206: + case 208: case 174: - case 177: + case 175: + case 178: return spanInPreviousNode(node); default: return spanInNode(node.parent); @@ -36516,26 +37333,26 @@ var ts; } function spanInColonToken(node) { if (ts.isFunctionLike(node.parent) || - node.parent.kind === 252 || - node.parent.kind === 141) { + node.parent.kind === 253 || + node.parent.kind === 142) { return spanInPreviousNode(node); } return spanInNode(node.parent); } function spanInGreaterThanOrLessThanToken(node) { - if (node.parent.kind === 176) { + if (node.parent.kind === 177) { return spanInNextNode(node); } return spanInNode(node.parent); } function spanInWhileKeyword(node) { - if (node.parent.kind === 203) { + if (node.parent.kind === 204) { return textSpanEndingAtNextToken(node, node.parent.expression); } return spanInNode(node.parent); } function spanInOfKeyword(node) { - if (node.parent.kind === 207) { + if (node.parent.kind === 208) { return spanInNextNode(node); } return spanInNode(node.parent); @@ -36613,7 +37430,7 @@ var ts; } } function autoCollapse(node) { - return ts.isFunctionBlock(node) && node.parent.kind !== 179; + return ts.isFunctionBlock(node) && node.parent.kind !== 180; } var depth = 0; var maxDepth = 20; @@ -36625,26 +37442,26 @@ var ts; addOutliningForLeadingCommentsForNode(n); } switch (n.kind) { - case 198: + case 199: if (!ts.isFunctionBlock(n)) { - var parent_11 = n.parent; + var parent_14 = n.parent; var openBrace = ts.findChildOfKind(n, 15, sourceFile); var closeBrace = ts.findChildOfKind(n, 16, sourceFile); - if (parent_11.kind === 203 || - parent_11.kind === 206 || - parent_11.kind === 207 || - parent_11.kind === 205 || - parent_11.kind === 202 || - parent_11.kind === 204 || - parent_11.kind === 211 || - parent_11.kind === 251) { - addOutliningSpan(parent_11, openBrace, closeBrace, autoCollapse(n)); + if (parent_14.kind === 204 || + parent_14.kind === 207 || + parent_14.kind === 208 || + parent_14.kind === 206 || + parent_14.kind === 203 || + parent_14.kind === 205 || + parent_14.kind === 212 || + parent_14.kind === 252) { + addOutliningSpan(parent_14, openBrace, closeBrace, autoCollapse(n)); break; } - if (parent_11.kind === 215) { - var tryStatement = parent_11; + if (parent_14.kind === 216) { + var tryStatement = parent_14; if (tryStatement.tryBlock === n) { - addOutliningSpan(parent_11, openBrace, closeBrace, autoCollapse(n)); + addOutliningSpan(parent_14, openBrace, closeBrace, autoCollapse(n)); break; } else if (tryStatement.finallyBlock === n) { @@ -36664,23 +37481,23 @@ var ts; }); break; } - case 225: { + case 226: { var openBrace = ts.findChildOfKind(n, 15, sourceFile); var closeBrace = ts.findChildOfKind(n, 16, sourceFile); addOutliningSpan(n.parent, openBrace, closeBrace, autoCollapse(n)); break; } - case 220: case 221: - case 223: - case 170: - case 226: { + case 222: + case 224: + case 171: + case 227: { var openBrace = ts.findChildOfKind(n, 15, sourceFile); var closeBrace = ts.findChildOfKind(n, 16, sourceFile); addOutliningSpan(n, openBrace, closeBrace, autoCollapse(n)); break; } - case 169: + case 170: var openBracket = ts.findChildOfKind(n, 19, sourceFile); var closeBracket = ts.findChildOfKind(n, 20, sourceFile); addOutliningSpan(n, openBracket, closeBracket, autoCollapse(n)); @@ -36765,7 +37582,7 @@ var ts; if (text !== undefined) { containers.unshift(text); } - else if (declaration.name.kind === 139) { + else if (declaration.name.kind === 140) { return tryAddComputedPropertyName(declaration.name.expression, containers, true); } else { @@ -36782,7 +37599,7 @@ var ts; } return true; } - if (expression.kind === 171) { + if (expression.kind === 172) { var propertyAccess = expression; if (includeLastPortion) { containers.unshift(propertyAccess.name.text); @@ -36793,7 +37610,7 @@ var ts; } function getContainers(declaration) { var containers = []; - if (declaration.name.kind === 139) { + if (declaration.name.kind === 140) { if (!tryAddComputedPropertyName(declaration.name.expression, containers, false)) { return undefined; } @@ -36858,14 +37675,14 @@ var ts; var current = node.parent; while (current) { switch (current.kind) { - case 224: + case 225: do { current = current.parent; - } while (current.kind === 224); - case 220: - case 223: + } while (current.kind === 225); case 221: - case 219: + case 224: + case 222: + case 220: indent++; } current = current.parent; @@ -36876,26 +37693,26 @@ var ts; var childNodes = []; function visit(node) { switch (node.kind) { - case 199: + case 200: ts.forEach(node.declarationList.declarations, visit); break; - case 166: case 167: + case 168: ts.forEach(node.elements, visit); break; - case 235: + case 236: if (node.exportClause) { ts.forEach(node.exportClause.elements, visit); } break; - case 229: + case 230: var importClause = node.importClause; if (importClause) { if (importClause.name) { childNodes.push(importClause); } if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 231) { + if (importClause.namedBindings.kind === 232) { childNodes.push(importClause.namedBindings); } else { @@ -36904,20 +37721,20 @@ var ts; } } break; - case 168: - case 217: + case 169: + case 218: if (ts.isBindingPattern(node.name)) { visit(node.name); break; } - case 220: - case 223: case 221: case 224: - case 219: - case 228: - case 233: - case 237: + case 222: + case 225: + case 220: + case 229: + case 234: + case 238: childNodes.push(node); break; } @@ -36952,11 +37769,11 @@ var ts; for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) { var node = nodes_4[_i]; switch (node.kind) { - case 220: + case 221: topLevelNodes.push(node); for (var _a = 0, _b = node.members; _a < _b.length; _a++) { var member = _b[_a]; - if (member.kind === 146 || member.kind === 147) { + if (member.kind === 147 || member.kind === 148) { if (member.body) { if (hasNamedFunctionDeclarations(member.body.statements)) { topLevelNodes.push(member); @@ -36966,16 +37783,17 @@ var ts; } } break; + case 224: + case 222: case 223: - case 221: topLevelNodes.push(node); break; - case 224: + case 225: var moduleDeclaration = node; topLevelNodes.push(node); addTopLevelNodes(getInnermostModule(moduleDeclaration).body.statements, topLevelNodes); break; - case 219: + case 220: var functionDeclaration = node; if (isTopLevelFunctionDeclaration(functionDeclaration)) { topLevelNodes.push(node); @@ -36988,15 +37806,15 @@ var ts; function hasNamedFunctionDeclarations(nodes) { for (var _i = 0, nodes_5 = nodes; _i < nodes_5.length; _i++) { var s = nodes_5[_i]; - if (s.kind === 219 && !isEmpty(s.name.text)) { + if (s.kind === 220 && !isEmpty(s.name.text)) { return true; } } return false; } function isTopLevelFunctionDeclaration(functionDeclaration) { - if (functionDeclaration.kind === 219) { - if (functionDeclaration.body && functionDeclaration.body.kind === 198) { + if (functionDeclaration.kind === 220) { + if (functionDeclaration.body && functionDeclaration.body.kind === 199) { if (hasNamedFunctionDeclarations(functionDeclaration.body.statements)) { return true; } @@ -37005,8 +37823,8 @@ var ts; } else { var grandParentKind = functionDeclaration.parent.parent.kind; - if (grandParentKind === 146 || - grandParentKind === 147) { + if (grandParentKind === 147 || + grandParentKind === 148) { return true; } } @@ -37057,42 +37875,42 @@ var ts; } function createChildItem(node) { switch (node.kind) { - case 141: + case 142: if (ts.isBindingPattern(node.name)) { break; } - if ((node.flags & 959) === 0) { + if ((node.flags & 1023) === 0) { return undefined; } return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); + case 147: case 146: - case 145: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberFunctionElement); - case 148: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberGetAccessorElement); case 149: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberSetAccessorElement); - case 152: - return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); - case 254: - return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberGetAccessorElement); case 150: - return createItem(node, "()", ts.ScriptElementKind.callSignatureElement); - case 151: - return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); - case 144: - case 143: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberSetAccessorElement); + case 153: + return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); + case 255: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 219: + case 151: + return createItem(node, "()", ts.ScriptElementKind.callSignatureElement); + case 152: + return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); + case 145: + case 144: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); + case 220: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.functionElement); - case 217: - case 168: + case 218: + case 169: var variableDeclarationNode = void 0; var name_35; - if (node.kind === 168) { + if (node.kind === 169) { name_35 = node.name; variableDeclarationNode = node; - while (variableDeclarationNode && variableDeclarationNode.kind !== 217) { + while (variableDeclarationNode && variableDeclarationNode.kind !== 218) { variableDeclarationNode = variableDeclarationNode.parent; } ts.Debug.assert(variableDeclarationNode !== undefined); @@ -37111,13 +37929,13 @@ var ts; else { return createItem(node, getTextOfNode(name_35), ts.ScriptElementKind.variableElement); } - case 147: + case 148: return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); - case 237: - case 233: - case 228: - case 230: + case 238: + case 234: + case 229: case 231: + case 232: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.alias); } return undefined; @@ -37147,21 +37965,23 @@ var ts; } function createTopLevelItem(node) { switch (node.kind) { - case 255: + case 256: return createSourceFileItem(node); - case 220: - return createClassItem(node); - case 146: - case 147: - return createMemberFunctionLikeItem(node); - case 223: - return createEnumItem(node); case 221: - return createInterfaceItem(node); + return createClassItem(node); + case 147: + case 148: + return createMemberFunctionLikeItem(node); case 224: + return createEnumItem(node); + case 222: + return createInterfaceItem(node); + case 225: return createModuleItem(node); - case 219: + case 220: return createFunctionItem(node); + case 223: + return createTypeAliasItem(node); } return undefined; function getModuleName(moduleDeclaration) { @@ -37170,7 +37990,7 @@ var ts; } var result = []; result.push(moduleDeclaration.name.text); - while (moduleDeclaration.body && moduleDeclaration.body.kind === 224) { + while (moduleDeclaration.body && moduleDeclaration.body.kind === 225) { moduleDeclaration = moduleDeclaration.body; result.push(moduleDeclaration.name.text); } @@ -37182,18 +38002,21 @@ var ts; return getNavigationBarItem(moduleName, ts.ScriptElementKind.moduleElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); } function createFunctionItem(node) { - if (node.body && node.body.kind === 198) { + if (node.body && node.body.kind === 199) { var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem); return getNavigationBarItem(!node.name ? "default" : node.name.text, ts.ScriptElementKind.functionElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); } return undefined; } + function createTypeAliasItem(node) { + return getNavigationBarItem(node.name.text, ts.ScriptElementKind.typeElement, ts.getNodeModifiers(node), [getNodeSpan(node)], [], getIndent(node)); + } function createMemberFunctionLikeItem(node) { - if (node.body && node.body.kind === 198) { + if (node.body && node.body.kind === 199) { var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem); var scriptElementKind = void 0; var memberFunctionName = void 0; - if (node.kind === 146) { + if (node.kind === 147) { memberFunctionName = ts.getPropertyNameForPropertyNameNode(node.name); scriptElementKind = ts.ScriptElementKind.memberFunctionElement; } @@ -37220,7 +38043,7 @@ var ts; var childItems; if (node.members) { var constructor = ts.forEach(node.members, function (member) { - return member.kind === 147 && member; + return member.kind === 148 && member; }); var nodes = removeDynamicallyNamedProperties(node); if (constructor) { @@ -37241,19 +38064,19 @@ var ts; } } function removeComputedProperties(node) { - return ts.filter(node.members, function (member) { return member.name === undefined || member.name.kind !== 139; }); + return ts.filter(node.members, function (member) { return member.name === undefined || member.name.kind !== 140; }); } function removeDynamicallyNamedProperties(node) { return ts.filter(node.members, function (member) { return !ts.hasDynamicName(member); }); } function getInnermostModule(node) { - while (node.body.kind === 224) { + while (node.body.kind === 225) { node = node.body; } return node; } function getNodeSpan(node) { - return node.kind === 255 + return node.kind === 256 ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); } @@ -37294,43 +38117,43 @@ var ts; } function createNavBarItem(node) { switch (node.kind) { - case 217: + case 218: if (node.parent.parent - .parent.kind !== 255) { + .parent.kind !== 256) { return undefined; } var varDecl = node; - if (varDecl.initializer && (varDecl.initializer.kind === 178 || - varDecl.initializer.kind === 179 || - varDecl.initializer.kind === 191)) { + if (varDecl.initializer && (varDecl.initializer.kind === 179 || + varDecl.initializer.kind === 180 || + varDecl.initializer.kind === 192)) { return undefined; } - case 219: case 220: - case 147: + case 221: case 148: case 149: + case 150: var name_36 = node.flags && (node.flags & 512) && !node.name ? "default" : - node.kind === 147 ? "constructor" : + node.kind === 148 ? "constructor" : ts.declarationNameToString(node.name); return getNavBarItem(name_36, getScriptKindForElementKind(node.kind), [getNodeSpan(node)]); - case 178: case 179: - case 191: + case 180: + case 192: return getDefineModuleItem(node) || getFunctionOrClassExpressionItem(node); - case 146: + case 147: var methodDecl = node; return getNavBarItem(ts.declarationNameToString(methodDecl.name), ts.ScriptElementKind.memberFunctionElement, [getNodeSpan(node)]); - case 234: + case 235: return getNavBarItem("default", ts.ScriptElementKind.variableElement, [getNodeSpan(node)]); - case 230: + case 231: if (!node.name) { return undefined; } - case 233: - case 231: - case 237: - if (node.kind === 237) { + case 234: + case 232: + case 238: + if (node.kind === 238) { if (!node.parent.parent.moduleSpecifier && !node.propertyName) { return undefined; } @@ -37352,14 +38175,14 @@ var ts; }; } function getDefineModuleItem(node) { - if (node.kind !== 178 && node.kind !== 179) { + if (node.kind !== 179 && node.kind !== 180) { return undefined; } - if (node.parent.kind !== 173) { + if (node.parent.kind !== 174) { return undefined; } var callExpr = node.parent; - if (callExpr.expression.kind !== 69 || callExpr.expression.getText() !== 'define') { + if (callExpr.expression.kind !== 69 || callExpr.expression.getText() !== "define") { return undefined; } var defaultName = node.getSourceFile().fileName; @@ -37369,9 +38192,9 @@ var ts; return getNavBarItem(defaultName, ts.ScriptElementKind.moduleElement, [getNodeSpan(node.parent)]); } function getFunctionOrClassExpressionItem(node) { - if (node.kind !== 178 && - node.kind !== 179 && - node.kind !== 191) { + if (node.kind !== 179 && + node.kind !== 180 && + node.kind !== 192) { return undefined; } var fnExpr = node; @@ -37380,45 +38203,42 @@ var ts; fnName = ts.declarationNameToString(fnExpr.name); } else { - if (fnExpr.parent.kind === 217) { + if (fnExpr.parent.kind === 218) { fnName = ts.declarationNameToString(fnExpr.parent.name); } - else if (fnExpr.parent.kind === 186 && + else if (fnExpr.parent.kind === 187 && fnExpr.parent.operatorToken.kind === 56) { fnName = fnExpr.parent.left.getText(); - if (fnName.length > 20) { - fnName = fnName.substring(0, 17) + "..."; - } } - else if (fnExpr.parent.kind === 252 && + else if (fnExpr.parent.kind === 253 && fnExpr.parent.name) { fnName = fnExpr.parent.name.getText(); } else { - fnName = node.kind === 191 ? anonClassText : anonFnText; + fnName = node.kind === 192 ? anonClassText : anonFnText; } } - var scriptKind = node.kind === 191 ? ts.ScriptElementKind.classElement : ts.ScriptElementKind.functionElement; + var scriptKind = node.kind === 192 ? ts.ScriptElementKind.classElement : ts.ScriptElementKind.functionElement; return getNavBarItem(fnName, scriptKind, [getNodeSpan(node)]); } function getNodeSpan(node) { - return node.kind === 255 + return node.kind === 256 ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); } function getScriptKindForElementKind(kind) { switch (kind) { - case 217: + case 218: return ts.ScriptElementKind.variableElement; - case 219: - return ts.ScriptElementKind.functionElement; case 220: + return ts.ScriptElementKind.functionElement; + case 221: return ts.ScriptElementKind.classElement; - case 147: - return ts.ScriptElementKind.constructorImplementationElement; case 148: - return ts.ScriptElementKind.memberGetAccessorElement; + return ts.ScriptElementKind.constructorImplementationElement; case 149: + return ts.ScriptElementKind.memberGetAccessorElement; + case 150: return ts.ScriptElementKind.memberSetAccessorElement; default: return "unknown"; @@ -37873,14 +38693,14 @@ var ts; } return createSignatureHelpItems(candidates, resolvedSignature, argumentInfo); function createJavaScriptSignatureHelpItems(argumentInfo) { - if (argumentInfo.invocation.kind !== 173) { + if (argumentInfo.invocation.kind !== 174) { return undefined; } var callExpression = argumentInfo.invocation; var expression = callExpression.expression; var name = expression.kind === 69 ? expression - : expression.kind === 171 + : expression.kind === 172 ? expression.name : undefined; if (!name || !name.text) { @@ -37909,7 +38729,7 @@ var ts; } } function getImmediatelyContainingArgumentInfo(node) { - if (node.parent.kind === 173 || node.parent.kind === 174) { + if (node.parent.kind === 174 || node.parent.kind === 175) { var callExpression = node.parent; if (node.kind === 25 || node.kind === 17) { @@ -37940,23 +38760,23 @@ var ts; }; } } - else if (node.kind === 11 && node.parent.kind === 175) { + else if (node.kind === 11 && node.parent.kind === 176) { if (ts.isInsideTemplateLiteral(node, position)) { return getArgumentListInfoForTemplate(node.parent, 0); } } - else if (node.kind === 12 && node.parent.parent.kind === 175) { + else if (node.kind === 12 && node.parent.parent.kind === 176) { var templateExpression = node.parent; var tagExpression = templateExpression.parent; - ts.Debug.assert(templateExpression.kind === 188); + ts.Debug.assert(templateExpression.kind === 189); var argumentIndex = ts.isInsideTemplateLiteral(node, position) ? 0 : 1; return getArgumentListInfoForTemplate(tagExpression, argumentIndex); } - else if (node.parent.kind === 196 && node.parent.parent.parent.kind === 175) { + else if (node.parent.kind === 197 && node.parent.parent.parent.kind === 176) { var templateSpan = node.parent; var templateExpression = templateSpan.parent; var tagExpression = templateExpression.parent; - ts.Debug.assert(templateExpression.kind === 188); + ts.Debug.assert(templateExpression.kind === 189); if (node.kind === 14 && !ts.isInsideTemplateLiteral(node, position)) { return undefined; } @@ -38020,7 +38840,7 @@ var ts; var template = taggedTemplate.template; var applicableSpanStart = template.getStart(); var applicableSpanEnd = template.getEnd(); - if (template.kind === 188) { + if (template.kind === 189) { var lastSpan = ts.lastOrUndefined(template.templateSpans); if (lastSpan.literal.getFullWidth() === 0) { applicableSpanEnd = ts.skipTrivia(sourceFile.text, applicableSpanEnd, false); @@ -38029,7 +38849,7 @@ var ts; return ts.createTextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); } function getContainingArgumentInfo(node) { - for (var n = node; n.kind !== 255; n = n.parent) { + for (var n = node; n.kind !== 256; n = n.parent) { if (ts.isFunctionBlock(n)) { return undefined; } @@ -38191,39 +39011,39 @@ var ts; return false; } switch (n.kind) { - case 220: case 221: - case 223: - case 170: - case 166: - case 158: - case 198: - case 225: + case 222: + case 224: + case 171: + case 167: + case 159: + case 199: case 226: + case 227: return nodeEndsWith(n, 16, sourceFile); - case 251: + case 252: return isCompletedNode(n.block, sourceFile); - case 174: + case 175: if (!n.arguments) { return true; } - case 173: - case 177: - case 163: + case 174: + case 178: + case 164: return nodeEndsWith(n, 18, sourceFile); - case 155: case 156: + case 157: return isCompletedNode(n.type, sourceFile); - case 147: case 148: case 149: - case 219: - case 178: - case 146: - case 145: - case 151: case 150: + case 220: case 179: + case 147: + case 146: + case 152: + case 151: + case 180: if (n.body) { return isCompletedNode(n.body, sourceFile); } @@ -38231,62 +39051,62 @@ var ts; return isCompletedNode(n.type, sourceFile); } return hasChildOfKind(n, 18, sourceFile); - case 224: + case 225: return n.body && isCompletedNode(n.body, sourceFile); - case 202: + case 203: if (n.elseStatement) { return isCompletedNode(n.elseStatement, sourceFile); } return isCompletedNode(n.thenStatement, sourceFile); - case 201: + case 202: return isCompletedNode(n.expression, sourceFile) || hasChildOfKind(n, 23); - case 169: - case 167: - case 172: - case 139: - case 160: + case 170: + case 168: + case 173: + case 140: + case 161: return nodeEndsWith(n, 20, sourceFile); - case 152: + case 153: if (n.type) { return isCompletedNode(n.type, sourceFile); } return hasChildOfKind(n, 20, sourceFile); - case 248: case 249: + case 250: return false; - case 205: case 206: case 207: - case 204: + case 208: + case 205: return isCompletedNode(n.statement, sourceFile); - case 203: + case 204: var hasWhileKeyword = findChildOfKind(n, 104, sourceFile); if (hasWhileKeyword) { return nodeEndsWith(n, 18, sourceFile); } return isCompletedNode(n.statement, sourceFile); - case 157: + case 158: return isCompletedNode(n.exprName, sourceFile); - case 181: - case 180: case 182: - case 189: + case 181: + case 183: case 190: + case 191: var unaryWordExpression = n; return isCompletedNode(unaryWordExpression.expression, sourceFile); - case 175: + case 176: return isCompletedNode(n.template, sourceFile); - case 188: + case 189: var lastSpan = ts.lastOrUndefined(n.templateSpans); return isCompletedNode(lastSpan, sourceFile); - case 196: + case 197: return ts.nodeIsPresent(n.literal); - case 184: + case 185: return isCompletedNode(n.operand, sourceFile); - case 186: - return isCompletedNode(n.right, sourceFile); case 187: + return isCompletedNode(n.right, sourceFile); + case 188: return isCompletedNode(n.whenFalse, sourceFile); default: return true; @@ -38329,7 +39149,7 @@ var ts; ts.findChildOfKind = findChildOfKind; function findContainingList(node) { var syntaxList = ts.forEach(node.parent.getChildren(), function (c) { - if (c.kind === 278 && c.pos <= node.pos && c.end >= node.end) { + if (c.kind === 279 && c.pos <= node.pos && c.end >= node.end) { return c; } }); @@ -38409,7 +39229,7 @@ var ts; function findPrecedingToken(position, sourceFile, startNode) { return find(startNode || sourceFile); function findRightmostToken(n) { - if (isToken(n) || n.kind === 243) { + if (isToken(n) || n.kind === 244) { return n; } var children = n.getChildren(); @@ -38417,16 +39237,16 @@ var ts; return candidate && findRightmostToken(candidate); } function find(n) { - if (isToken(n) || n.kind === 243) { + if (isToken(n) || n.kind === 244) { return n; } var children = n.getChildren(); for (var i = 0, len = children.length; i < len; i++) { var child = children[i]; - if (position < child.end && (nodeHasTokens(child) || child.kind === 243)) { + if (position < child.end && (nodeHasTokens(child) || child.kind === 244)) { var start = child.getStart(sourceFile); var lookInPreviousChild = (start >= position) || - (child.kind === 243 && start === child.end); + (child.kind === 244 && start === child.end); if (lookInPreviousChild) { var candidate = findRightmostChildNodeWithTokens(children, i); return candidate && findRightmostToken(candidate); @@ -38436,7 +39256,7 @@ var ts; } } } - ts.Debug.assert(startNode !== undefined || n.kind === 255); + ts.Debug.assert(startNode !== undefined || n.kind === 256); if (children.length) { var candidate = findRightmostChildNodeWithTokens(children, children.length); return candidate && findRightmostToken(candidate); @@ -38453,16 +39273,41 @@ var ts; ts.findPrecedingToken = findPrecedingToken; function isInString(sourceFile, position) { var token = getTokenAtPosition(sourceFile, position); - return token && (token.kind === 9 || token.kind === 165) && position > token.getStart(); + return token && (token.kind === 9 || token.kind === 166) && position > token.getStart(sourceFile); } ts.isInString = isInString; function isInComment(sourceFile, position) { return isInCommentHelper(sourceFile, position, undefined); } ts.isInComment = isInComment; + function isInsideJsxElementOrAttribute(sourceFile, position) { + var token = getTokenAtPosition(sourceFile, position); + if (!token) { + return false; + } + if (token.kind === 25 && token.parent.kind === 244) { + return true; + } + if (token.kind === 25 && token.parent.kind === 248) { + return true; + } + if (token && token.kind === 16 && token.parent.kind === 248) { + return true; + } + if (token.kind === 25 && token.parent.kind === 245) { + return true; + } + return false; + } + ts.isInsideJsxElementOrAttribute = isInsideJsxElementOrAttribute; + function isInTemplateString(sourceFile, position) { + var token = getTokenAtPosition(sourceFile, position); + return ts.isTemplateLiteralKind(token.kind) && position > token.getStart(sourceFile); + } + ts.isInTemplateString = isInTemplateString; function isInCommentHelper(sourceFile, position, predicate) { var token = getTokenAtPosition(sourceFile, position); - if (token && position <= token.getStart()) { + if (token && position <= token.getStart(sourceFile)) { var commentRanges = ts.getLeadingCommentRanges(sourceFile.text, token.pos); return predicate ? ts.forEach(commentRanges, function (c) { return c.pos < position && @@ -38480,7 +39325,7 @@ var ts; return ts.forEach(commentRanges, jsDocPrefix); function jsDocPrefix(c) { var text = sourceFile.text; - return text.length >= c.pos + 3 && text[c.pos] === '/' && text[c.pos + 1] === '*' && text[c.pos + 2] === '*'; + return text.length >= c.pos + 3 && text[c.pos] === "/" && text[c.pos + 1] === "*" && text[c.pos + 2] === "*"; } } ts.hasDocComment = hasDocComment; @@ -38532,21 +39377,21 @@ var ts; result.push(ts.ScriptElementKindModifier.exportedModifier); if (ts.isInAmbientContext(node)) result.push(ts.ScriptElementKindModifier.ambientModifier); - return result.length > 0 ? result.join(',') : ts.ScriptElementKindModifier.none; + return result.length > 0 ? result.join(",") : ts.ScriptElementKindModifier.none; } ts.getNodeModifiers = getNodeModifiers; function getTypeArgumentOrTypeParameterList(node) { - if (node.kind === 154 || node.kind === 173) { + if (node.kind === 155 || node.kind === 174) { return node.typeArguments; } - if (ts.isFunctionLike(node) || node.kind === 220 || node.kind === 221) { + if (ts.isFunctionLike(node) || node.kind === 221 || node.kind === 222) { return node.typeParameters; } return undefined; } ts.getTypeArgumentOrTypeParameterList = getTypeArgumentOrTypeParameterList; function isToken(n) { - return n.kind >= 0 && n.kind <= 137; + return n.kind >= 0 && n.kind <= 138; } ts.isToken = isToken; function isWord(kind) { @@ -38562,7 +39407,7 @@ var ts; ts.isComment = isComment; function isStringOrRegularExpressionOrTemplateLiteral(kind) { if (kind === 9 - || kind === 165 + || kind === 166 || kind === 10 || ts.isTemplateLiteralKind(kind)) { return true; @@ -38606,18 +39451,18 @@ var ts; } ts.compareDataObjects = compareDataObjects; function isArrayLiteralOrObjectLiteralDestructuringPattern(node) { - if (node.kind === 169 || - node.kind === 170) { - if (node.parent.kind === 186 && + if (node.kind === 170 || + node.kind === 171) { + if (node.parent.kind === 187 && node.parent.left === node && node.parent.operatorToken.kind === 56) { return true; } - if (node.parent.kind === 207 && + if (node.parent.kind === 208 && node.parent.initializer === node) { return true; } - if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 252 ? node.parent.parent : node.parent)) { + if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 253 ? node.parent.parent : node.parent)) { return true; } } @@ -38628,7 +39473,7 @@ var ts; var ts; (function (ts) { function isFirstDeclarationOfSymbolParameter(symbol) { - return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 141; + return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 142; } ts.isFirstDeclarationOfSymbolParameter = isFirstDeclarationOfSymbolParameter; var displayPartWriter = getDisplayPartWriter(); @@ -38802,6 +39647,10 @@ var ts; if (isImportOrExportSpecifierName(location)) { return location.getText(); } + else if (ts.isStringOrNumericLiteral(location.kind) && + location.parent.kind === 140) { + return location.text; + } var localExportDefaultSymbol = ts.getLocalSymbolForExportDefault(symbol); var name = typeChecker.symbolToString(localExportDefaultSymbol || symbol); return name; @@ -38809,7 +39658,7 @@ var ts; ts.getDeclaredName = getDeclaredName; function isImportOrExportSpecifierName(location) { return location.parent && - (location.parent.kind === 233 || location.parent.kind === 237) && + (location.parent.kind === 234 || location.parent.kind === 238) && location.parent.propertyName === location; } ts.isImportOrExportSpecifierName = isImportOrExportSpecifierName; @@ -38834,10 +39683,13 @@ var ts; } ts.scriptKindIs = scriptKindIs; function getScriptKind(fileName, host) { - var scriptKind = ts.getScriptKindFromFileName(fileName); - if (scriptKind === 0 && host && host.getScriptKind) { + var scriptKind; + if (host && host.getScriptKind) { scriptKind = host.getScriptKind(fileName); } + if (!scriptKind || scriptKind === 0) { + scriptKind = ts.getScriptKindFromFileName(fileName); + } return ts.ensureScriptKind(fileName, scriptKind); } ts.getScriptKind = getScriptKind; @@ -39074,10 +39926,10 @@ var ts; function shouldRescanJsxIdentifier(node) { if (node.parent) { switch (node.parent.kind) { + case 246: + case 243: case 245: case 242: - case 244: - case 241: return node.kind === 69; } } @@ -39435,12 +40287,12 @@ var ts; this.NoSpaceBetweenReturnAndSemicolon = new formatting.Rule(formatting.RuleDescriptor.create1(94, 23), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); this.SpaceBetweenStatements = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([18, 79, 80, 71]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNotForContext), 2)); this.SpaceAfterTryFinally = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([100, 85]), 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); - this.SpaceAfterGetSetInMember = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([123, 130]), 69), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2)); + this.SpaceAfterGetSetInMember = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([123, 131]), 69), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2)); this.SpaceBeforeBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryKeywordOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2)); this.SpaceAfterBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryKeywordOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2)); this.NoSpaceAfterConstructor = new formatting.Rule(formatting.RuleDescriptor.create1(121, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); - this.NoSpaceAfterModuleImport = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([125, 128]), 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); - this.SpaceAfterCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([115, 73, 122, 77, 81, 82, 83, 123, 106, 89, 107, 125, 126, 110, 112, 111, 130, 113, 133]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.NoSpaceAfterModuleImport = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([125, 129]), 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.SpaceAfterCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([115, 73, 122, 77, 81, 82, 83, 123, 106, 89, 107, 125, 126, 110, 112, 111, 131, 113, 134]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); this.SpaceBeforeCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([83, 106])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); this.SpaceAfterModuleName = new formatting.Rule(formatting.RuleDescriptor.create1(9, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsModuleDeclContext), 2)); this.SpaceBeforeArrow = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 34), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); @@ -39456,7 +40308,7 @@ var ts; this.NoSpaceBetweenEmptyInterfaceBraceBrackets = new formatting.Rule(formatting.RuleDescriptor.create1(15, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsObjectTypeContext), 8)); this.SpaceBeforeAt = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 55), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); this.NoSpaceAfterAt = new formatting.Rule(formatting.RuleDescriptor.create3(55, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); - this.SpaceAfterDecorator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([115, 69, 82, 77, 73, 113, 112, 110, 111, 123, 130, 19, 37])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsEndOfDecoratorContextOnSameLine), 2)); + this.SpaceAfterDecorator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([115, 69, 82, 77, 73, 113, 112, 110, 111, 123, 131, 19, 37])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsEndOfDecoratorContextOnSameLine), 2)); this.NoSpaceBetweenFunctionKeywordAndStar = new formatting.Rule(formatting.RuleDescriptor.create1(87, 37), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclarationOrFunctionExpressionContext), 8)); this.SpaceAfterStarInGeneratorDeclaration = new formatting.Rule(formatting.RuleDescriptor.create3(37, formatting.Shared.TokenRange.FromTokens([69, 17])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclarationOrFunctionExpressionContext), 2)); this.NoSpaceBetweenYieldKeywordAndStar = new formatting.Rule(formatting.RuleDescriptor.create1(114, 37), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsYieldOrYieldStarWithOperand), 8)); @@ -39557,33 +40409,33 @@ var ts; throw new Error("Unknown rule"); }; Rules.IsForContext = function (context) { - return context.contextNode.kind === 205; + return context.contextNode.kind === 206; }; Rules.IsNotForContext = function (context) { return !Rules.IsForContext(context); }; Rules.IsBinaryOpContext = function (context) { switch (context.contextNode.kind) { - case 186: case 187: - case 194: - case 153: - case 161: + case 188: + case 195: + case 154: case 162: + case 163: return true; - case 168: - case 222: - case 228: - case 217: - case 141: - case 254: + case 169: + case 223: + case 229: + case 218: + case 142: + case 255: + case 145: case 144: - case 143: return context.currentTokenSpan.kind === 56 || context.nextTokenSpan.kind === 56; - case 206: - return context.currentTokenSpan.kind === 90 || context.nextTokenSpan.kind === 90; case 207: - return context.currentTokenSpan.kind === 137 || context.nextTokenSpan.kind === 137; + return context.currentTokenSpan.kind === 90 || context.nextTokenSpan.kind === 90; + case 208: + return context.currentTokenSpan.kind === 138 || context.nextTokenSpan.kind === 138; } return false; }; @@ -39591,7 +40443,7 @@ var ts; return !Rules.IsBinaryOpContext(context); }; Rules.IsConditionalOperatorContext = function (context) { - return context.contextNode.kind === 187; + return context.contextNode.kind === 188; }; Rules.IsSameLineTokenOrBeforeMultilineBlockContext = function (context) { return context.TokensAreOnSameLine() || Rules.IsBeforeMultilineBlockContext(context); @@ -39616,86 +40468,86 @@ var ts; return true; } switch (node.kind) { - case 198: + case 199: + case 227: + case 171: case 226: - case 170: - case 225: return true; } return false; }; Rules.IsFunctionDeclContext = function (context) { switch (context.contextNode.kind) { - case 219: + case 220: + case 147: case 146: - case 145: - case 148: case 149: case 150: - case 178: - case 147: + case 151: case 179: - case 221: + case 148: + case 180: + case 222: return true; } return false; }; Rules.IsFunctionDeclarationOrFunctionExpressionContext = function (context) { - return context.contextNode.kind === 219 || context.contextNode.kind === 178; + return context.contextNode.kind === 220 || context.contextNode.kind === 179; }; Rules.IsTypeScriptDeclWithBlockContext = function (context) { return Rules.NodeIsTypeScriptDeclWithBlockContext(context.contextNode); }; Rules.NodeIsTypeScriptDeclWithBlockContext = function (node) { switch (node.kind) { - case 220: - case 191: case 221: - case 223: - case 158: + case 192: + case 222: case 224: + case 159: + case 225: return true; } return false; }; Rules.IsAfterCodeBlockContext = function (context) { switch (context.currentTokenParent.kind) { - case 220: - case 224: - case 223: - case 198: - case 251: + case 221: case 225: - case 212: + case 224: + case 199: + case 252: + case 226: + case 213: return true; } return false; }; Rules.IsControlDeclContext = function (context) { switch (context.contextNode.kind) { - case 202: - case 212: - case 205: + case 203: + case 213: case 206: case 207: + case 208: + case 205: + case 216: case 204: - case 215: - case 203: - case 211: - case 251: + case 212: + case 252: return true; default: return false; } }; Rules.IsObjectContext = function (context) { - return context.contextNode.kind === 170; + return context.contextNode.kind === 171; }; Rules.IsFunctionCallContext = function (context) { - return context.contextNode.kind === 173; + return context.contextNode.kind === 174; }; Rules.IsNewContext = function (context) { - return context.contextNode.kind === 174; + return context.contextNode.kind === 175; }; Rules.IsFunctionCallOrNewContext = function (context) { return Rules.IsFunctionCallContext(context) || Rules.IsNewContext(context); @@ -39707,10 +40559,10 @@ var ts; return context.nextTokenSpan.kind !== 20; }; Rules.IsArrowFunctionContext = function (context) { - return context.contextNode.kind === 179; + return context.contextNode.kind === 180; }; Rules.IsNonJsxSameLineTokenContext = function (context) { - return context.TokensAreOnSameLine() && context.contextNode.kind !== 243; + return context.TokensAreOnSameLine() && context.contextNode.kind !== 244; }; Rules.IsNotBeforeBlockInFunctionDeclarationContext = function (context) { return !Rules.IsFunctionDeclContext(context) && !Rules.IsBeforeBlockContext(context); @@ -39725,41 +40577,41 @@ var ts; while (ts.isExpression(node)) { node = node.parent; } - return node.kind === 142; + return node.kind === 143; }; Rules.IsStartOfVariableDeclarationList = function (context) { - return context.currentTokenParent.kind === 218 && + return context.currentTokenParent.kind === 219 && context.currentTokenParent.getStart(context.sourceFile) === context.currentTokenSpan.pos; }; Rules.IsNotFormatOnEnter = function (context) { return context.formattingRequestKind !== 2; }; Rules.IsModuleDeclContext = function (context) { - return context.contextNode.kind === 224; + return context.contextNode.kind === 225; }; Rules.IsObjectTypeContext = function (context) { - return context.contextNode.kind === 158; + return context.contextNode.kind === 159; }; Rules.IsTypeArgumentOrParameterOrAssertion = function (token, parent) { if (token.kind !== 25 && token.kind !== 27) { return false; } switch (parent.kind) { - case 154: - case 176: - case 220: - case 191: + case 155: + case 177: case 221: - case 219: - case 178: + case 192: + case 222: + case 220: case 179: + case 180: + case 147: case 146: - case 145: - case 150: case 151: - case 173: + case 152: case 174: - case 193: + case 175: + case 194: return true; default: return false; @@ -39770,13 +40622,13 @@ var ts; Rules.IsTypeArgumentOrParameterOrAssertion(context.nextTokenSpan, context.nextTokenParent); }; Rules.IsTypeAssertionContext = function (context) { - return context.contextNode.kind === 176; + return context.contextNode.kind === 177; }; Rules.IsVoidOpContext = function (context) { - return context.currentTokenSpan.kind === 103 && context.currentTokenParent.kind === 182; + return context.currentTokenSpan.kind === 103 && context.currentTokenParent.kind === 183; }; Rules.IsYieldOrYieldStarWithOperand = function (context) { - return context.contextNode.kind === 189 && context.contextNode.expression !== undefined; + return context.contextNode.kind === 190 && context.contextNode.expression !== undefined; }; return Rules; }()); @@ -39798,7 +40650,7 @@ var ts; return result; }; RulesMap.prototype.Initialize = function (rules) { - this.mapRowLength = 137 + 1; + this.mapRowLength = 138 + 1; this.map = new Array(this.mapRowLength * this.mapRowLength); var rulesBucketConstructionStateList = new Array(this.map.length); this.FillRules(rules, rulesBucketConstructionStateList); @@ -39974,7 +40826,7 @@ var ts; } TokenAllAccess.prototype.GetTokens = function () { var result = []; - for (var token = 0; token <= 137; token++) { + for (var token = 0; token <= 138; token++) { result.push(token); } return result; @@ -40016,9 +40868,9 @@ var ts; }; TokenRange.Any = TokenRange.AllTokens(); TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([3])); - TokenRange.Keywords = TokenRange.FromRange(70, 137); + TokenRange.Keywords = TokenRange.FromRange(70, 138); TokenRange.BinaryOperators = TokenRange.FromRange(25, 68); - TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([90, 91, 137, 116, 124]); + TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([90, 91, 138, 116, 124]); TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([41, 42, 50, 49]); TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([8, 69, 17, 19, 15, 97, 92]); TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([69, 17, 97, 92]); @@ -40026,7 +40878,7 @@ var ts; TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([69, 17, 97, 92]); TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([69, 18, 20, 92]); TokenRange.Comments = TokenRange.FromTokens([2, 3]); - TokenRange.TypeNames = TokenRange.FromTokens([69, 129, 131, 120, 132, 103, 117]); + TokenRange.TypeNames = TokenRange.FromTokens([69, 130, 132, 120, 133, 103, 117]); return TokenRange; }()); Shared.TokenRange = TokenRange; @@ -40209,17 +41061,17 @@ var ts; } function isListElement(parent, node) { switch (parent.kind) { - case 220: case 221: + case 222: return ts.rangeContainsRange(parent.members, node); - case 224: - var body = parent.body; - return body && body.kind === 198 && ts.rangeContainsRange(body.statements, node); - case 255: - case 198: case 225: + var body = parent.body; + return body && body.kind === 199 && ts.rangeContainsRange(body.statements, node); + case 256: + case 199: + case 226: return ts.rangeContainsRange(parent.statements, node); - case 251: + case 252: return ts.rangeContainsRange(parent.block.statements, node); } return false; @@ -40374,18 +41226,18 @@ var ts; return node.modifiers[0].kind; } switch (node.kind) { - case 220: return 73; - case 221: return 107; - case 219: return 87; - case 223: return 223; - case 148: return 123; - case 149: return 130; - case 146: + case 221: return 73; + case 222: return 107; + case 220: return 87; + case 224: return 224; + case 149: return 123; + case 150: return 131; + case 147: if (node.asteriskToken) { return 37; } - case 144: - case 141: + case 145: + case 142: return node.name.kind; } } @@ -40462,7 +41314,7 @@ var ts; } consumeTokenAndAdvanceScanner(tokenInfo, node, nodeDynamicIndentation); } - function processChildNode(child, inheritedIndentation, parent, parentDynamicIndentation, parentStartLine, undecoratedParentStartLine, isListItem) { + function processChildNode(child, inheritedIndentation, parent, parentDynamicIndentation, parentStartLine, undecoratedParentStartLine, isListItem, isFirstListItem) { var childStartPos = child.getStart(sourceFile); var childStartLine = sourceFile.getLineAndCharacterOfPosition(childStartPos).line; var undecoratedChildStartLine = childStartLine; @@ -40498,10 +41350,13 @@ var ts; consumeTokenAndAdvanceScanner(tokenInfo, node, parentDynamicIndentation, child); return inheritedIndentation; } - var effectiveParentStartLine = child.kind === 142 ? childStartLine : undecoratedParentStartLine; + var effectiveParentStartLine = child.kind === 143 ? childStartLine : undecoratedParentStartLine; var childIndentation = computeIndentation(child, childStartLine, childIndentationAmount, node, parentDynamicIndentation, effectiveParentStartLine); processNode(child, childContextNode, childStartLine, undecoratedChildStartLine, childIndentation.indentation, childIndentation.delta); childContextNode = node; + if (isFirstListItem && parent.kind === 170 && inheritedIndentation === -1) { + inheritedIndentation = childIndentation.indentation; + } return inheritedIndentation; } function processChildNodes(nodes, parent, parentStartLine, parentDynamicIndentation) { @@ -40527,9 +41382,9 @@ var ts; } } var inheritedIndentation = -1; - for (var _i = 0, nodes_7 = nodes; _i < nodes_7.length; _i++) { - var child = nodes_7[_i]; - inheritedIndentation = processChildNode(child, inheritedIndentation, node, listDynamicIndentation, startLine, startLine, true); + for (var i = 0; i < nodes.length; i++) { + var child = nodes[i]; + inheritedIndentation = processChildNode(child, inheritedIndentation, node, listDynamicIndentation, startLine, startLine, true, i === 0); } if (listEndToken !== 0) { if (formattingScanner.isOnToken()) { @@ -40574,24 +41429,24 @@ var ts; var tokenIndentation = (isTokenInRange && !rangeContainsError(currentTokenInfo.token)) ? dynamicIndentation.getIndentationForToken(tokenStart.line, currentTokenInfo.token.kind, container) : -1; + var indentNextTokenOrTrivia = true; if (currentTokenInfo.leadingTrivia) { var commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind, tokenIndentation, container); - var indentNextTokenOrTrivia = true; for (var _i = 0, _a = currentTokenInfo.leadingTrivia; _i < _a.length; _i++) { var triviaItem = _a[_i]; - if (!ts.rangeContainsRange(originalRange, triviaItem)) { - continue; - } + var triviaInRange = ts.rangeContainsRange(originalRange, triviaItem); switch (triviaItem.kind) { case 3: - indentMultilineComment(triviaItem, commentIndentation, !indentNextTokenOrTrivia); + if (triviaInRange) { + indentMultilineComment(triviaItem, commentIndentation, !indentNextTokenOrTrivia); + } indentNextTokenOrTrivia = false; break; case 2: - if (indentNextTokenOrTrivia) { + if (indentNextTokenOrTrivia && triviaInRange) { insertIndentation(triviaItem.pos, commentIndentation, false); - indentNextTokenOrTrivia = false; } + indentNextTokenOrTrivia = false; break; case 4: indentNextTokenOrTrivia = true; @@ -40599,7 +41454,7 @@ var ts; } } } - if (tokenIndentation !== -1) { + if (tokenIndentation !== -1 && indentNextTokenOrTrivia) { insertIndentation(currentTokenInfo.token.pos, tokenIndentation, lineAdded); lastIndentedLine = tokenStart.line; indentationOnLastIndentedLine = tokenIndentation; @@ -40673,12 +41528,15 @@ var ts; } else { var tokenStart = sourceFile.getLineAndCharacterOfPosition(pos); - if (indentation !== tokenStart.character) { - var startLinePosition = ts.getStartPositionOfLine(tokenStart.line, sourceFile); + var startLinePosition = ts.getStartPositionOfLine(tokenStart.line, sourceFile); + if (indentation !== tokenStart.character || indentationIsDifferent(indentationString, startLinePosition)) { recordReplace(startLinePosition, tokenStart.character, indentationString); } } } + function indentationIsDifferent(indentationString, startLinePosition) { + return indentationString !== sourceFile.text.substr(startLinePosition, indentationString.length); + } function indentMultilineComment(commentRange, indentation, firstLineIsIndented) { var startLine = sourceFile.getLineAndCharacterOfPosition(commentRange.pos).line; var endLine = sourceFile.getLineAndCharacterOfPosition(commentRange.end).line; @@ -40801,20 +41659,20 @@ var ts; } function isSomeBlock(kind) { switch (kind) { - case 198: - case 225: + case 199: + case 226: return true; } return false; } function getOpenTokenForList(node, list) { switch (node.kind) { - case 147: - case 219: - case 178: - case 146: - case 145: + case 148: + case 220: case 179: + case 147: + case 146: + case 180: if (node.typeParameters === list) { return 25; } @@ -40822,8 +41680,8 @@ var ts; return 17; } break; - case 173: case 174: + case 175: if (node.typeArguments === list) { return 25; } @@ -40831,7 +41689,7 @@ var ts; return 17; } break; - case 154: + case 155: if (node.typeArguments === list) { return 25; } @@ -40932,7 +41790,7 @@ var ts; var lineStart = ts.getLineStartPositionForPosition(current_1, sourceFile); return SmartIndenter.findFirstNonWhitespaceColumn(lineStart, current_1, sourceFile, options); } - if (precedingToken.kind === 24 && precedingToken.parent.kind !== 186) { + if (precedingToken.kind === 24 && precedingToken.parent.kind !== 187) { var actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options); if (actualIndentation !== -1) { return actualIndentation; @@ -41030,7 +41888,7 @@ var ts; } function getActualIndentationForNode(current, parent, currentLineAndChar, parentAndChildShareLine, sourceFile, options) { var useActualIndentation = (ts.isDeclaration(current) || ts.isStatement(current)) && - (parent.kind === 255 || !parentAndChildShareLine); + (parent.kind === 256 || !parentAndChildShareLine); if (!useActualIndentation) { return -1; } @@ -41054,7 +41912,7 @@ var ts; return sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); } function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) { - if (parent.kind === 202 && parent.elseStatement === child) { + if (parent.kind === 203 && parent.elseStatement === child) { var elseKeyword = ts.findChildOfKind(parent, 80, sourceFile); ts.Debug.assert(elseKeyword !== undefined); var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line; @@ -41066,23 +41924,23 @@ var ts; function getContainingList(node, sourceFile) { if (node.parent) { switch (node.parent.kind) { - case 154: + case 155: if (node.parent.typeArguments && ts.rangeContainsStartEnd(node.parent.typeArguments, node.getStart(sourceFile), node.getEnd())) { return node.parent.typeArguments; } break; - case 170: + case 171: return node.parent.properties; - case 169: + case 170: return node.parent.elements; - case 219: - case 178: + case 220: case 179: + case 180: + case 147: case 146: - case 145: - case 150: - case 151: { + case 151: + case 152: { var start = node.getStart(sourceFile); if (node.parent.typeParameters && ts.rangeContainsStartEnd(node.parent.typeParameters, start, node.getEnd())) { @@ -41093,8 +41951,8 @@ var ts; } break; } - case 174: - case 173: { + case 175: + case 174: { var start = node.getStart(sourceFile); if (node.parent.typeArguments && ts.rangeContainsStartEnd(node.parent.typeArguments, start, node.getEnd())) { @@ -41122,8 +41980,8 @@ var ts; if (node.kind === 18) { return -1; } - if (node.parent && (node.parent.kind === 173 || - node.parent.kind === 174) && + if (node.parent && (node.parent.kind === 174 || + node.parent.kind === 175) && node.parent.expression !== node) { var fullCallOrNewExpression = node.parent.expression; var startingExpression = getStartingExpression(fullCallOrNewExpression); @@ -41141,10 +41999,10 @@ var ts; function getStartingExpression(node) { while (true) { switch (node.kind) { - case 173: case 174: - case 171: + case 175: case 172: + case 173: node = node.expression; break; default: @@ -41198,45 +42056,45 @@ var ts; SmartIndenter.findFirstNonWhitespaceColumn = findFirstNonWhitespaceColumn; function nodeContentIsAlwaysIndented(kind) { switch (kind) { - case 201: - case 220: - case 191: + case 202: case 221: - case 223: + case 192: case 222: - case 169: - case 198: - case 225: + case 224: + case 223: case 170: - case 158: - case 160: - case 226: - case 249: - case 248: - case 177: - case 171: - case 173: - case 174: case 199: - case 217: - case 234: - case 210: - case 187: - case 167: - case 166: - case 242: - case 241: - case 247: - case 145: - case 150: - case 151: - case 141: - case 155: - case 156: - case 163: + case 226: + case 171: + case 159: + case 161: + case 227: + case 250: + case 249: + case 178: + case 172: + case 174: case 175: - case 183: - case 232: + case 200: + case 218: + case 235: + case 211: + case 188: + case 168: + case 167: + case 243: + case 242: + case 248: + case 146: + case 151: + case 152: + case 142: + case 156: + case 157: + case 164: + case 176: + case 184: + case 233: return true; } return false; @@ -41244,22 +42102,22 @@ var ts; function nodeWillIndentChild(parent, child, indentByDefault) { var childKind = child ? child.kind : 0; switch (parent.kind) { - case 203: case 204: - case 206: - case 207: case 205: - case 202: - case 219: - case 178: - case 146: + case 207: + case 208: + case 206: + case 203: + case 220: case 179: case 147: + case 180: case 148: case 149: - return childKind !== 198; - case 240: - return childKind !== 244; + case 150: + return childKind !== 199; + case 241: + return childKind !== 245; } return indentByDefault; } @@ -41273,7 +42131,7 @@ var ts; })(ts || (ts = {})); var ts; (function (ts) { - ts.servicesVersion = "0.4"; + ts.servicesVersion = "0.5"; var ScriptSnapshot; (function (ScriptSnapshot) { var StringScriptSnapshot = (function () { @@ -41389,11 +42247,11 @@ var ts; return pos; }; NodeObject.prototype.createSyntaxList = function (nodes) { - var list = createNode(278, nodes.pos, nodes.end, 0, this); + var list = createNode(279, nodes.pos, nodes.end, 0, this); list._children = []; var pos = nodes.pos; - for (var _i = 0, nodes_8 = nodes; _i < nodes_8.length; _i++) { - var node = nodes_8[_i]; + for (var _i = 0, nodes_7 = nodes; _i < nodes_7.length; _i++) { + var node = nodes_7[_i]; if (pos < node.pos) { pos = this.addSyntheticNodes(list._children, pos, node.pos); } @@ -41408,7 +42266,7 @@ var ts; NodeObject.prototype.createChildren = function (sourceFile) { var _this = this; var children; - if (this.kind >= 138) { + if (this.kind >= 139) { scanner.setText((sourceFile || this.getSourceFile()).text); children = []; var pos_3 = this.pos; @@ -41455,7 +42313,7 @@ var ts; return undefined; } var child = children[0]; - return child.kind < 138 ? child : child.getFirstToken(sourceFile); + return child.kind < 139 ? child : child.getFirstToken(sourceFile); }; NodeObject.prototype.getLastToken = function (sourceFile) { var children = this.getChildren(sourceFile); @@ -41463,7 +42321,7 @@ var ts; if (!child) { return undefined; } - return child.kind < 138 ? child : child.getLastToken(sourceFile); + return child.kind < 139 ? child : child.getLastToken(sourceFile); }; return NodeObject; }()); @@ -41505,7 +42363,7 @@ var ts; ts.forEach(declarations, function (declaration, indexOfDeclaration) { if (ts.indexOf(declarations, declaration) === indexOfDeclaration) { var sourceFileOfDeclaration_1 = ts.getSourceFileOfNode(declaration); - if (canUseParsedParamTagComments && declaration.kind === 141) { + if (canUseParsedParamTagComments && declaration.kind === 142) { ts.forEach(getJsDocCommentTextRange(declaration.parent, sourceFileOfDeclaration_1), function (jsDocCommentTextRange) { var cleanedParamJsDocComment = getCleanedParamJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration_1); if (cleanedParamJsDocComment) { @@ -41513,13 +42371,13 @@ var ts; } }); } - if (declaration.kind === 224 && declaration.body.kind === 224) { + if (declaration.kind === 225 && declaration.body.kind === 225) { return; } - while (declaration.kind === 224 && declaration.parent.kind === 224) { + while (declaration.kind === 225 && declaration.parent.kind === 225) { declaration = declaration.parent; } - ts.forEach(getJsDocCommentTextRange(declaration.kind === 217 ? declaration.parent.parent : declaration, sourceFileOfDeclaration_1), function (jsDocCommentTextRange) { + ts.forEach(getJsDocCommentTextRange(declaration.kind === 218 ? declaration.parent.parent : declaration, sourceFileOfDeclaration_1), function (jsDocCommentTextRange) { var cleanedJsDocComment = getCleanedJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration_1); if (cleanedJsDocComment) { ts.addRange(jsDocCommentParts, cleanedJsDocComment); @@ -41761,6 +42619,9 @@ var ts; ? this.checker.getBaseTypes(this) : undefined; }; + TypeObject.prototype.getNonNullableType = function () { + return this.checker.getNonNullableType(this); + }; return TypeObject; }()); var SignatureObject = (function () { @@ -41830,9 +42691,9 @@ var ts; if (result_2 !== undefined) { return result_2; } - if (declaration.name.kind === 139) { + if (declaration.name.kind === 140) { var expr = declaration.name.expression; - if (expr.kind === 171) { + if (expr.kind === 172) { return expr.name.text; } return getTextOfIdentifierOrLiteral(expr); @@ -41852,9 +42713,10 @@ var ts; } function visit(node) { switch (node.kind) { - case 219: + case 220: + case 179: + case 147: case 146: - case 145: var functionDeclaration = node; var declarationName = getDeclarationName(functionDeclaration); if (declarationName) { @@ -41871,62 +42733,56 @@ var ts; ts.forEachChild(node, visit); } break; - case 220: case 221: + case 192: case 222: case 223: case 224: - case 228: - case 237: - case 233: - case 228: - case 230: - case 231: - case 148: - case 149: - case 158: - addDeclaration(node); - case 147: - case 199: - case 218: - case 166: - case 167: case 225: + case 229: + case 238: + case 234: + case 229: + case 231: + case 232: + case 149: + case 150: + case 159: + addDeclaration(node); ts.forEachChild(node, visit); break; - case 198: - if (ts.isFunctionBlock(node)) { - ts.forEachChild(node, visit); - } - break; - case 141: - if (!(node.flags & 28)) { + case 142: + if (!(node.flags & 92)) { break; } - case 217: - case 168: - if (ts.isBindingPattern(node.name)) { - ts.forEachChild(node.name, visit); + case 218: + case 169: { + var decl = node; + if (ts.isBindingPattern(decl.name)) { + ts.forEachChild(decl.name, visit); break; } - case 254: + if (decl.initializer) + visit(decl.initializer); + } + case 255: + case 145: case 144: - case 143: addDeclaration(node); break; - case 235: + case 236: if (node.exportClause) { ts.forEach(node.exportClause.elements, visit); } break; - case 229: + case 230: var importClause = node.importClause; if (importClause) { if (importClause.name) { addDeclaration(importClause); } if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 231) { + if (importClause.namedBindings.kind === 232) { addDeclaration(importClause.namedBindings); } else { @@ -41935,6 +42791,8 @@ var ts; } } break; + default: + ts.forEachChild(node, visit); } } }; @@ -42080,14 +42938,14 @@ var ts; return false; } return ts.forEach(symbol.declarations, function (declaration) { - if (declaration.kind === 178) { + if (declaration.kind === 179) { return true; } - if (declaration.kind !== 217 && declaration.kind !== 219) { + if (declaration.kind !== 218 && declaration.kind !== 220) { return false; } - for (var parent_12 = declaration.parent; !ts.isFunctionBlock(parent_12); parent_12 = parent_12.parent) { - if (parent_12.kind === 255 || parent_12.kind === 225) { + for (var parent_15 = declaration.parent; !ts.isFunctionBlock(parent_15); parent_15 = parent_15.parent) { + if (parent_15.kind === 256 || parent_15.kind === 226) { return false; } } @@ -42139,10 +42997,12 @@ var ts; }; HostCache.prototype.getOrCreateEntry = function (fileName) { var path = ts.toPath(fileName, this.currentDirectory, this.getCanonicalFileName); - if (this.contains(path)) { - return this.getEntry(path); - } - return this.createEntry(fileName, path); + return this.getOrCreateEntryByPath(fileName, path); + }; + HostCache.prototype.getOrCreateEntryByPath = function (fileName, path) { + return this.contains(path) + ? this.getEntry(path) + : this.createEntry(fileName, path); }; HostCache.prototype.getRootFileNames = function () { var fileNames = []; @@ -42213,7 +43073,7 @@ var ts; var outputText; var sourceMapText; var compilerHost = { - getSourceFile: function (fileName, target) { return fileName === ts.normalizeSlashes(inputFileName) ? sourceFile : undefined; }, + getSourceFile: function (fileName, target) { return fileName === ts.normalizePath(inputFileName) ? sourceFile : undefined; }, writeFile: function (name, text, writeByteOrderMark) { if (ts.fileExtensionIs(name, ".map")) { ts.Debug.assert(sourceMapText === undefined, "Unexpected multiple source map outputs for the file '" + name + "'"); @@ -42301,11 +43161,10 @@ var ts; if (currentDirectory === void 0) { currentDirectory = ""; } var buckets = {}; var getCanonicalFileName = ts.createGetCanonicalFileName(!!useCaseSensitiveFileNames); - function getKeyFromCompilationSettings(settings) { - return "_" + settings.target + "|" + settings.module + "|" + settings.noResolve + "|" + settings.jsx + +"|" + settings.allowJs; + function getKeyForCompilationSettings(settings) { + return ("_" + settings.target + "|" + settings.module + "|" + settings.noResolve + "|" + settings.jsx + "|" + settings.allowJs + "|" + settings.baseUrl + "|" + settings.typesRoot + "|" + settings.typesSearchPaths + "|" + JSON.stringify(settings.rootDirs) + "|" + JSON.stringify(settings.paths)); } - function getBucketForCompilationSettings(settings, createIfMissing) { - var key = getKeyFromCompilationSettings(settings); + function getBucketForCompilationSettings(key, createIfMissing) { var bucket = ts.lookUp(buckets, key); if (!bucket && createIfMissing) { buckets[key] = bucket = ts.createFileMap(); @@ -42332,14 +43191,23 @@ var ts; return JSON.stringify(bucketInfoArray, undefined, 2); } function acquireDocument(fileName, compilationSettings, scriptSnapshot, version, scriptKind) { - return acquireOrUpdateDocument(fileName, compilationSettings, scriptSnapshot, version, true, scriptKind); + var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); + var key = getKeyForCompilationSettings(compilationSettings); + return acquireDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind); + } + function acquireDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind) { + return acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, true, scriptKind); } function updateDocument(fileName, compilationSettings, scriptSnapshot, version, scriptKind) { - return acquireOrUpdateDocument(fileName, compilationSettings, scriptSnapshot, version, false, scriptKind); - } - function acquireOrUpdateDocument(fileName, compilationSettings, scriptSnapshot, version, acquiring, scriptKind) { - var bucket = getBucketForCompilationSettings(compilationSettings, true); var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); + var key = getKeyForCompilationSettings(compilationSettings); + return updateDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind); + } + function updateDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind) { + return acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, false, scriptKind); + } + function acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, acquiring, scriptKind) { + var bucket = getBucketForCompilationSettings(key, true); var entry = bucket.get(path); if (!entry) { ts.Debug.assert(acquiring, "How could we be trying to update a document that the registry doesn't have?"); @@ -42362,9 +43230,13 @@ var ts; return entry.sourceFile; } function releaseDocument(fileName, compilationSettings) { - var bucket = getBucketForCompilationSettings(compilationSettings, false); - ts.Debug.assert(bucket !== undefined); var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); + var key = getKeyForCompilationSettings(compilationSettings); + return releaseDocumentWithKey(path, key); + } + function releaseDocumentWithKey(path, key) { + var bucket = getBucketForCompilationSettings(key, false); + ts.Debug.assert(bucket !== undefined); var entry = bucket.get(path); entry.languageServiceRefCount--; ts.Debug.assert(entry.languageServiceRefCount >= 0); @@ -42374,9 +43246,13 @@ var ts; } return { acquireDocument: acquireDocument, + acquireDocumentWithKey: acquireDocumentWithKey, updateDocument: updateDocument, + updateDocumentWithKey: updateDocumentWithKey, releaseDocument: releaseDocument, - reportStats: reportStats + releaseDocumentWithKey: releaseDocumentWithKey, + reportStats: reportStats, + getKeyForCompilationSettings: getKeyForCompilationSettings }; } ts.createDocumentRegistry = createDocumentRegistry; @@ -42466,7 +43342,7 @@ var ts; else { if (token === 69 || ts.isKeyword(token)) { token = nextToken(); - if (token === 135) { + if (token === 136) { token = nextToken(); if (token === 9) { recordModuleName(); @@ -42492,7 +43368,7 @@ var ts; } if (token === 16) { token = nextToken(); - if (token === 135) { + if (token === 136) { token = nextToken(); if (token === 9) { recordModuleName(); @@ -42506,7 +43382,7 @@ var ts; token = nextToken(); if (token === 69 || ts.isKeyword(token)) { token = nextToken(); - if (token === 135) { + if (token === 136) { token = nextToken(); if (token === 9) { recordModuleName(); @@ -42532,7 +43408,7 @@ var ts; } if (token === 16) { token = nextToken(); - if (token === 135) { + if (token === 136) { token = nextToken(); if (token === 9) { recordModuleName(); @@ -42542,7 +43418,7 @@ var ts; } else if (token === 37) { token = nextToken(); - if (token === 135) { + if (token === 136) { token = nextToken(); if (token === 9) { recordModuleName(); @@ -42566,7 +43442,7 @@ var ts; } function tryConsumeRequireCall(skipCurrentToken) { var token = skipCurrentToken ? nextToken() : scanner.getToken(); - if (token === 128) { + if (token === 129) { token = nextToken(); if (token === 17) { token = nextToken(); @@ -42665,7 +43541,7 @@ var ts; ts.preProcessFile = preProcessFile; function getTargetLabel(referenceNode, labelName) { while (referenceNode) { - if (referenceNode.kind === 213 && referenceNode.label.text === labelName) { + if (referenceNode.kind === 214 && referenceNode.label.text === labelName) { return referenceNode.label; } referenceNode = referenceNode.parent; @@ -42674,16 +43550,16 @@ var ts; } function isJumpStatementTarget(node) { return node.kind === 69 && - (node.parent.kind === 209 || node.parent.kind === 208) && + (node.parent.kind === 210 || node.parent.kind === 209) && node.parent.label === node; } function isLabelOfLabeledStatement(node) { return node.kind === 69 && - node.parent.kind === 213 && + node.parent.kind === 214 && node.parent.label === node; } function isLabeledBy(node, labelName) { - for (var owner = node.parent; owner.kind === 213; owner = owner.parent) { + for (var owner = node.parent; owner.kind === 214; owner = owner.parent) { if (owner.label.text === labelName) { return true; } @@ -42694,49 +43570,70 @@ var ts; return isLabelOfLabeledStatement(node) || isJumpStatementTarget(node); } function isRightSideOfQualifiedName(node) { - return node.parent.kind === 138 && node.parent.right === node; + return node.parent.kind === 139 && node.parent.right === node; } function isRightSideOfPropertyAccess(node) { - return node && node.parent && node.parent.kind === 171 && node.parent.name === node; + return node && node.parent && node.parent.kind === 172 && node.parent.name === node; } function isCallExpressionTarget(node) { if (isRightSideOfPropertyAccess(node)) { node = node.parent; } - return node && node.parent && node.parent.kind === 173 && node.parent.expression === node; + return node && node.parent && node.parent.kind === 174 && node.parent.expression === node; } function isNewExpressionTarget(node) { if (isRightSideOfPropertyAccess(node)) { node = node.parent; } - return node && node.parent && node.parent.kind === 174 && node.parent.expression === node; + return node && node.parent && node.parent.kind === 175 && node.parent.expression === node; } function isNameOfModuleDeclaration(node) { - return node.parent.kind === 224 && node.parent.name === node; + return node.parent.kind === 225 && node.parent.name === node; } function isNameOfFunctionDeclaration(node) { return node.kind === 69 && ts.isFunctionLike(node.parent) && node.parent.name === node; } - function isNameOfPropertyAssignment(node) { - return (node.kind === 69 || node.kind === 9 || node.kind === 8) && - (node.parent.kind === 252 || node.parent.kind === 253) && node.parent.name === node; + function isObjectLiteralPropertyDeclaration(node) { + switch (node.kind) { + case 253: + case 254: + case 147: + case 149: + case 150: + return true; + } + return false; + } + function getContainingObjectLiteralElement(node) { + switch (node.kind) { + case 9: + case 8: + if (node.parent.kind === 140) { + return isObjectLiteralPropertyDeclaration(node.parent.parent) ? node.parent.parent : undefined; + } + case 69: + return isObjectLiteralPropertyDeclaration(node.parent) && node.parent.name === node ? node.parent : undefined; + } + return undefined; } function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) { if (node.kind === 9 || node.kind === 8) { switch (node.parent.kind) { - case 144: - case 143: - case 252: - case 254: - case 146: case 145: - case 148: + case 144: + case 253: + case 255: + case 147: + case 146: case 149: - case 224: + case 150: + case 225: return node.parent.name === node; - case 172: + case 173: return node.parent.argumentExpression === node; + case 140: + return true; } } return false; @@ -42773,7 +43670,7 @@ var ts; } } var keywordCompletions = []; - for (var i = 70; i <= 137; i++) { + for (var i = 70; i <= 138; i++) { keywordCompletions.push({ name: ts.tokenToString(i), kind: ScriptElementKind.keyword, @@ -42788,17 +43685,17 @@ var ts; return undefined; } switch (node.kind) { - case 255: + case 256: + case 147: case 146: - case 145: - case 219: - case 178: - case 148: - case 149: case 220: + case 179: + case 149: + case 150: case 221: - case 223: + case 222: case 224: + case 225: return node; } } @@ -42806,38 +43703,42 @@ var ts; ts.getContainerNode = getContainerNode; function getNodeKind(node) { switch (node.kind) { - case 224: return ScriptElementKind.moduleElement; - case 220: return ScriptElementKind.classElement; - case 221: return ScriptElementKind.interfaceElement; - case 222: return ScriptElementKind.typeElement; - case 223: return ScriptElementKind.enumElement; - case 217: + case 225: return ScriptElementKind.moduleElement; + case 221: + case 192: + return ScriptElementKind.classElement; + case 222: return ScriptElementKind.interfaceElement; + case 223: return ScriptElementKind.typeElement; + case 224: return ScriptElementKind.enumElement; + case 218: return ts.isConst(node) ? ScriptElementKind.constElement : ts.isLet(node) ? ScriptElementKind.letElement : ScriptElementKind.variableElement; - case 219: return ScriptElementKind.functionElement; - case 148: return ScriptElementKind.memberGetAccessorElement; - case 149: return ScriptElementKind.memberSetAccessorElement; + case 220: + case 179: + return ScriptElementKind.functionElement; + case 149: return ScriptElementKind.memberGetAccessorElement; + case 150: return ScriptElementKind.memberSetAccessorElement; + case 147: case 146: - case 145: return ScriptElementKind.memberFunctionElement; + case 145: case 144: - case 143: return ScriptElementKind.memberVariableElement; - case 152: return ScriptElementKind.indexSignatureElement; - case 151: return ScriptElementKind.constructSignatureElement; - case 150: return ScriptElementKind.callSignatureElement; - case 147: return ScriptElementKind.constructorImplementationElement; - case 140: return ScriptElementKind.typeParameterElement; - case 254: return ScriptElementKind.variableElement; - case 141: return (node.flags & 28) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement; - case 228: - case 233: - case 230: - case 237: + case 153: return ScriptElementKind.indexSignatureElement; + case 152: return ScriptElementKind.constructSignatureElement; + case 151: return ScriptElementKind.callSignatureElement; + case 148: return ScriptElementKind.constructorImplementationElement; + case 141: return ScriptElementKind.typeParameterElement; + case 255: return ScriptElementKind.variableElement; + case 142: return (node.flags & 92) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement; + case 229: + case 234: case 231: + case 238: + case 232: return ScriptElementKind.alias; } return ScriptElementKind.unknown; @@ -42913,6 +43814,7 @@ var ts; oldSettings.allowJs !== newSettings.allowJs); var compilerHost = { getSourceFile: getOrCreateSourceFile, + getSourceFileByPath: getOrCreateSourceFileByPath, getCancellationToken: function () { return cancellationToken; }, getCanonicalFileName: getCanonicalFileName, useCaseSensitiveFileNames: function () { return useCaseSensitivefileNames; }, @@ -42944,13 +43846,15 @@ var ts; return host.resolveTypeReferenceDirectives(typeReferenceDirectiveNames, containingFile); }; } + var documentRegistryBucketKey = documentRegistry.getKeyForCompilationSettings(newSettings); var newProgram = ts.createProgram(hostCache.getRootFileNames(), newSettings, compilerHost, program); if (program) { var oldSourceFiles = program.getSourceFiles(); + var oldSettingsKey = documentRegistry.getKeyForCompilationSettings(oldSettings); for (var _i = 0, oldSourceFiles_1 = oldSourceFiles; _i < oldSourceFiles_1.length; _i++) { var oldSourceFile = oldSourceFiles_1[_i]; if (!newProgram.getSourceFile(oldSourceFile.fileName) || changesInCompilationSettingsAffectSyntax) { - documentRegistry.releaseDocument(oldSourceFile.fileName, oldSettings); + documentRegistry.releaseDocumentWithKey(oldSourceFile.path, oldSettingsKey); } } } @@ -42959,19 +43863,22 @@ var ts; program.getTypeChecker(); return; function getOrCreateSourceFile(fileName) { + return getOrCreateSourceFileByPath(fileName, ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + } + function getOrCreateSourceFileByPath(fileName, path) { ts.Debug.assert(hostCache !== undefined); - var hostFileInformation = hostCache.getOrCreateEntry(fileName); + var hostFileInformation = hostCache.getOrCreateEntryByPath(fileName, path); if (!hostFileInformation) { return undefined; } if (!changesInCompilationSettingsAffectSyntax) { - var oldSourceFile = program && program.getSourceFile(fileName); + var oldSourceFile = program && program.getSourceFileByPath(path); if (oldSourceFile) { - ts.Debug.assert(hostFileInformation.scriptKind === oldSourceFile.scriptKind, "Registered script kind (" + oldSourceFile.scriptKind + ") should match new script kind (" + hostFileInformation.scriptKind + ") for file: " + fileName); - return documentRegistry.updateDocument(fileName, newSettings, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); + ts.Debug.assert(hostFileInformation.scriptKind === oldSourceFile.scriptKind, "Registered script kind (" + oldSourceFile.scriptKind + ") should match new script kind (" + hostFileInformation.scriptKind + ") for file: " + path); + return documentRegistry.updateDocumentWithKey(fileName, path, newSettings, documentRegistryBucketKey, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); } } - return documentRegistry.acquireDocument(fileName, newSettings, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); + return documentRegistry.acquireDocumentWithKey(fileName, path, newSettings, documentRegistryBucketKey, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); } function sourceFileUpToDate(sourceFile) { if (!sourceFile) { @@ -43075,9 +43982,9 @@ var ts; isJsDocTagName = true; } switch (tag.kind) { - case 276: - case 274: + case 277: case 275: + case 276: var tagWithExpression = tag; if (tagWithExpression.typeExpression) { insideJsDocTagExpression = tagWithExpression.typeExpression.pos < position && position < tagWithExpression.typeExpression.end; @@ -43112,13 +44019,13 @@ var ts; log("Returning an empty list because completion was requested in an invalid position."); return undefined; } - var parent_13 = contextToken.parent, kind = contextToken.kind; + var parent_16 = contextToken.parent, kind = contextToken.kind; if (kind === 21) { - if (parent_13.kind === 171) { + if (parent_16.kind === 172) { node = contextToken.parent.expression; isRightOfDot = true; } - else if (parent_13.kind === 138) { + else if (parent_16.kind === 139) { node = contextToken.parent.left; isRightOfDot = true; } @@ -43131,7 +44038,7 @@ var ts; isRightOfOpenTag = true; location = contextToken; } - else if (kind === 39 && contextToken.parent.kind === 244) { + else if (kind === 39 && contextToken.parent.kind === 245) { isStartingCloseTag = true; location = contextToken; } @@ -43174,7 +44081,7 @@ var ts; function getTypeScriptMemberSymbols() { isMemberCompletion = true; isNewIdentifierLocation = false; - if (node.kind === 69 || node.kind === 138 || node.kind === 171) { + if (node.kind === 69 || node.kind === 139 || node.kind === 172) { var symbol = typeChecker.getSymbolAtLocation(node); if (symbol && symbol.flags & 8388608) { symbol = typeChecker.getAliasedSymbol(symbol); @@ -43220,7 +44127,7 @@ var ts; } if (jsxContainer = tryGetContainingJsxElement(contextToken)) { var attrsType = void 0; - if ((jsxContainer.kind === 241) || (jsxContainer.kind === 242)) { + if ((jsxContainer.kind === 242) || (jsxContainer.kind === 243)) { attrsType = typeChecker.getJsxElementAttributesType(jsxContainer); if (attrsType) { symbols = filterJsxAttributes(typeChecker.getPropertiesOfType(attrsType), jsxContainer.attributes); @@ -43260,15 +44167,15 @@ var ts; return result; } function isInJsxText(contextToken) { - if (contextToken.kind === 243) { + if (contextToken.kind === 244) { return true; } if (contextToken.kind === 27 && contextToken.parent) { - if (contextToken.parent.kind === 242) { + if (contextToken.parent.kind === 243) { return true; } - if (contextToken.parent.kind === 244 || contextToken.parent.kind === 241) { - return contextToken.parent.parent && contextToken.parent.parent.kind === 240; + if (contextToken.parent.kind === 245 || contextToken.parent.kind === 242) { + return contextToken.parent.parent && contextToken.parent.parent.kind === 241; } } return false; @@ -43278,40 +44185,40 @@ var ts; var containingNodeKind = previousToken.parent.kind; switch (previousToken.kind) { case 24: - return containingNodeKind === 173 - || containingNodeKind === 147 - || containingNodeKind === 174 - || containingNodeKind === 169 - || containingNodeKind === 186 - || containingNodeKind === 155; + return containingNodeKind === 174 + || containingNodeKind === 148 + || containingNodeKind === 175 + || containingNodeKind === 170 + || containingNodeKind === 187 + || containingNodeKind === 156; case 17: - return containingNodeKind === 173 - || containingNodeKind === 147 - || containingNodeKind === 174 - || containingNodeKind === 177 - || containingNodeKind === 163; + return containingNodeKind === 174 + || containingNodeKind === 148 + || containingNodeKind === 175 + || containingNodeKind === 178 + || containingNodeKind === 164; case 19: - return containingNodeKind === 169 - || containingNodeKind === 152 - || containingNodeKind === 139; + return containingNodeKind === 170 + || containingNodeKind === 153 + || containingNodeKind === 140; case 125: case 126: return true; case 21: - return containingNodeKind === 224; + return containingNodeKind === 225; case 15: - return containingNodeKind === 220; + return containingNodeKind === 221; case 56: - return containingNodeKind === 217 - || containingNodeKind === 186; + return containingNodeKind === 218 + || containingNodeKind === 187; case 12: - return containingNodeKind === 188; + return containingNodeKind === 189; case 13: - return containingNodeKind === 196; + return containingNodeKind === 197; case 112: case 110: case 111: - return containingNodeKind === 144; + return containingNodeKind === 145; } switch (previousToken.getText()) { case "public": @@ -43324,7 +44231,7 @@ var ts; } function isInStringOrRegularExpressionOrTemplateLiteral(contextToken) { if (contextToken.kind === 9 - || contextToken.kind === 165 + || contextToken.kind === 166 || contextToken.kind === 10 || ts.isTemplateLiteralKind(contextToken.kind)) { var start_7 = contextToken.getStart(); @@ -43343,21 +44250,21 @@ var ts; isMemberCompletion = true; var typeForObject; var existingMembers; - if (objectLikeContainer.kind === 170) { + if (objectLikeContainer.kind === 171) { isNewIdentifierLocation = true; typeForObject = typeChecker.getContextualType(objectLikeContainer); existingMembers = objectLikeContainer.properties; } - else if (objectLikeContainer.kind === 166) { + else if (objectLikeContainer.kind === 167) { isNewIdentifierLocation = false; var rootDeclaration = ts.getRootDeclaration(objectLikeContainer.parent); if (ts.isVariableLike(rootDeclaration)) { var canGetType = !!(rootDeclaration.initializer || rootDeclaration.type); - if (!canGetType && rootDeclaration.kind === 141) { + if (!canGetType && rootDeclaration.kind === 142) { if (ts.isExpression(rootDeclaration.parent)) { canGetType = !!typeChecker.getContextualType(rootDeclaration.parent); } - else if (rootDeclaration.parent.kind === 146 || rootDeclaration.parent.kind === 149) { + else if (rootDeclaration.parent.kind === 147 || rootDeclaration.parent.kind === 150) { canGetType = ts.isExpression(rootDeclaration.parent.parent) && !!typeChecker.getContextualType(rootDeclaration.parent.parent); } } @@ -43383,9 +44290,9 @@ var ts; return true; } function tryGetImportOrExportClauseCompletionSymbols(namedImportsOrExports) { - var declarationKind = namedImportsOrExports.kind === 232 ? - 229 : - 235; + var declarationKind = namedImportsOrExports.kind === 233 ? + 230 : + 236; var importOrExportDeclaration = ts.getAncestor(namedImportsOrExports, declarationKind); var moduleSpecifier = importOrExportDeclaration.moduleSpecifier; if (!moduleSpecifier) { @@ -43406,9 +44313,9 @@ var ts; switch (contextToken.kind) { case 15: case 24: - var parent_14 = contextToken.parent; - if (parent_14 && (parent_14.kind === 170 || parent_14.kind === 166)) { - return parent_14; + var parent_17 = contextToken.parent; + if (parent_17 && (parent_17.kind === 171 || parent_17.kind === 167)) { + return parent_17; } break; } @@ -43421,8 +44328,8 @@ var ts; case 15: case 24: switch (contextToken.parent.kind) { - case 232: - case 236: + case 233: + case 237: return contextToken.parent; } } @@ -43431,34 +44338,34 @@ var ts; } function tryGetContainingJsxElement(contextToken) { if (contextToken) { - var parent_15 = contextToken.parent; + var parent_18 = contextToken.parent; switch (contextToken.kind) { case 26: case 39: case 69: - case 245: case 246: - if (parent_15 && (parent_15.kind === 241 || parent_15.kind === 242)) { - return parent_15; + case 247: + if (parent_18 && (parent_18.kind === 242 || parent_18.kind === 243)) { + return parent_18; } - else if (parent_15.kind === 245) { - return parent_15.parent; + else if (parent_18.kind === 246) { + return parent_18.parent; } break; case 9: - if (parent_15 && ((parent_15.kind === 245) || (parent_15.kind === 246))) { - return parent_15.parent; + if (parent_18 && ((parent_18.kind === 246) || (parent_18.kind === 247))) { + return parent_18.parent; } break; case 16: - if (parent_15 && - parent_15.kind === 247 && - parent_15.parent && - (parent_15.parent.kind === 245)) { - return parent_15.parent.parent; + if (parent_18 && + parent_18.kind === 248 && + parent_18.parent && + (parent_18.parent.kind === 246)) { + return parent_18.parent.parent; } - if (parent_15 && parent_15.kind === 246) { - return parent_15.parent; + if (parent_18 && parent_18.kind === 247) { + return parent_18.parent; } break; } @@ -43467,16 +44374,16 @@ var ts; } function isFunction(kind) { switch (kind) { - case 178: case 179: - case 219: + case 180: + case 220: + case 147: case 146: - case 145: - case 148: case 149: case 150: case 151: case 152: + case 153: return true; } return false; @@ -43485,66 +44392,66 @@ var ts; var containingNodeKind = contextToken.parent.kind; switch (contextToken.kind) { case 24: - return containingNodeKind === 217 || - containingNodeKind === 218 || - containingNodeKind === 199 || - containingNodeKind === 223 || + return containingNodeKind === 218 || + containingNodeKind === 219 || + containingNodeKind === 200 || + containingNodeKind === 224 || isFunction(containingNodeKind) || - containingNodeKind === 220 || - containingNodeKind === 191 || containingNodeKind === 221 || - containingNodeKind === 167 || - containingNodeKind === 222; + containingNodeKind === 192 || + containingNodeKind === 222 || + containingNodeKind === 168 || + containingNodeKind === 223; case 21: - return containingNodeKind === 167; - case 54: return containingNodeKind === 168; + case 54: + return containingNodeKind === 169; case 19: - return containingNodeKind === 167; + return containingNodeKind === 168; case 17: - return containingNodeKind === 251 || + return containingNodeKind === 252 || isFunction(containingNodeKind); case 15: - return containingNodeKind === 223 || - containingNodeKind === 221 || - containingNodeKind === 158; - case 23: - return containingNodeKind === 143 && - contextToken.parent && contextToken.parent.parent && - (contextToken.parent.parent.kind === 221 || - contextToken.parent.parent.kind === 158); - case 25: - return containingNodeKind === 220 || - containingNodeKind === 191 || - containingNodeKind === 221 || + return containingNodeKind === 224 || containingNodeKind === 222 || + containingNodeKind === 159; + case 23: + return containingNodeKind === 144 && + contextToken.parent && contextToken.parent.parent && + (contextToken.parent.parent.kind === 222 || + contextToken.parent.parent.kind === 159); + case 25: + return containingNodeKind === 221 || + containingNodeKind === 192 || + containingNodeKind === 222 || + containingNodeKind === 223 || isFunction(containingNodeKind); case 113: - return containingNodeKind === 144; + return containingNodeKind === 145; case 22: - return containingNodeKind === 141 || + return containingNodeKind === 142 || (contextToken.parent && contextToken.parent.parent && - contextToken.parent.parent.kind === 167); + contextToken.parent.parent.kind === 168); case 112: case 110: case 111: - return containingNodeKind === 141; + return containingNodeKind === 142; case 116: - return containingNodeKind === 233 || - containingNodeKind === 237 || - containingNodeKind === 231; + return containingNodeKind === 234 || + containingNodeKind === 238 || + containingNodeKind === 232; case 73: case 81: case 107: case 87: case 102: case 123: - case 130: + case 131: case 89: case 108: case 74: case 114: - case 133: + case 134: return true; } switch (contextToken.getText()) { @@ -43585,9 +44492,9 @@ var ts; existingImportsOrExports[name_39.text] = true; } if (ts.isEmpty(existingImportsOrExports)) { - return exportsOfModule; + return ts.filter(exportsOfModule, function (e) { return e.name !== "default"; }); } - return ts.filter(exportsOfModule, function (e) { return !ts.lookUp(existingImportsOrExports, e.name); }); + return ts.filter(exportsOfModule, function (e) { return e.name !== "default" && !ts.lookUp(existingImportsOrExports, e.name); }); } function filterObjectMembersList(contextualMemberSymbols, existingMembers) { if (!existingMembers || existingMembers.length === 0) { @@ -43596,17 +44503,17 @@ var ts; var existingMemberNames = {}; for (var _i = 0, existingMembers_1 = existingMembers; _i < existingMembers_1.length; _i++) { var m = existingMembers_1[_i]; - if (m.kind !== 252 && - m.kind !== 253 && - m.kind !== 168 && - m.kind !== 146) { + if (m.kind !== 253 && + m.kind !== 254 && + m.kind !== 169 && + m.kind !== 147) { continue; } if (m.getStart() <= position && position <= m.getEnd()) { continue; } var existingName = void 0; - if (m.kind === 168 && m.propertyName) { + if (m.kind === 169 && m.propertyName) { if (m.propertyName.kind === 69) { existingName = m.propertyName.text; } @@ -43625,7 +44532,7 @@ var ts; if (attr.getStart() <= position && position <= attr.getEnd()) { continue; } - if (attr.kind === 245) { + if (attr.kind === 246) { seenNames[attr.name.text] = true; } } @@ -43651,7 +44558,7 @@ var ts; else { if (!symbols || symbols.length === 0) { if (sourceFile.languageVariant === 1 && - location.parent && location.parent.kind === 244) { + location.parent && location.parent.kind === 245) { var tagName = location.parent.parent.openingElement.tagName; entries.push({ name: tagName.text, @@ -43769,7 +44676,7 @@ var ts; function getSymbolKind(symbol, location) { var flags = symbol.getFlags(); if (flags & 32) - return ts.getDeclarationOfKind(symbol, 191) ? + return ts.getDeclarationOfKind(symbol, 192) ? ScriptElementKind.localClassElement : ScriptElementKind.classElement; if (flags & 384) return ScriptElementKind.enumElement; @@ -43869,14 +44776,14 @@ var ts; var signature = void 0; type = isThisExpression ? typeChecker.getTypeAtLocation(location) : typeChecker.getTypeOfSymbolAtLocation(symbol, location); if (type) { - if (location.parent && location.parent.kind === 171) { + if (location.parent && location.parent.kind === 172) { var right = location.parent.name; if (right === location || (right && right.getFullWidth() === 0)) { location = location.parent; } } var callExpression = void 0; - if (location.kind === 173 || location.kind === 174) { + if (location.kind === 174 || location.kind === 175) { callExpression = location; } else if (isCallExpressionTarget(location) || isNewExpressionTarget(location)) { @@ -43888,7 +44795,7 @@ var ts; if (!signature && candidateSignatures.length) { signature = candidateSignatures[0]; } - var useConstructSignatures = callExpression.kind === 174 || callExpression.expression.kind === 95; + var useConstructSignatures = callExpression.kind === 175 || callExpression.expression.kind === 95; var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures(); if (!ts.contains(allSignatures, signature.target) && !ts.contains(allSignatures, signature)) { signature = allSignatures.length ? allSignatures[0] : undefined; @@ -43924,7 +44831,7 @@ var ts; displayParts.push(ts.keywordPart(92)); displayParts.push(ts.spacePart()); } - if (!(type.flags & 65536)) { + if (!(type.flags & 65536) && type.symbol) { ts.addRange(displayParts, ts.symbolToDisplayParts(typeChecker, type.symbol, enclosingDeclaration, undefined, 1)); } addSignatureDisplayParts(signature, allSignatures, 8); @@ -43936,21 +44843,21 @@ var ts; } } else if ((isNameOfFunctionDeclaration(location) && !(symbol.flags & 98304)) || - (location.kind === 121 && location.parent.kind === 147)) { + (location.kind === 121 && location.parent.kind === 148)) { var functionDeclaration = location.parent; - var allSignatures = functionDeclaration.kind === 147 ? type.getConstructSignatures() : type.getCallSignatures(); + var allSignatures = functionDeclaration.kind === 148 ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures(); if (!typeChecker.isImplementationOfOverload(functionDeclaration)) { signature = typeChecker.getSignatureFromDeclaration(functionDeclaration); } else { signature = allSignatures[0]; } - if (functionDeclaration.kind === 147) { + if (functionDeclaration.kind === 148) { symbolKind = ScriptElementKind.constructorImplementationElement; addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); } else { - addPrefixForAnyFunctionOrVar(functionDeclaration.kind === 150 && + addPrefixForAnyFunctionOrVar(functionDeclaration.kind === 151 && !(type.symbol.flags & 2048 || type.symbol.flags & 4096) ? type.symbol : symbol, symbolKind); } addSignatureDisplayParts(signature, allSignatures); @@ -43959,7 +44866,7 @@ var ts; } } if (symbolFlags & 32 && !hasAddedSymbolInfo && !isThisExpression) { - if (ts.getDeclarationOfKind(symbol, 191)) { + if (ts.getDeclarationOfKind(symbol, 192)) { pushTypePart(ScriptElementKind.localClassElement); } else { @@ -43978,7 +44885,7 @@ var ts; } if (symbolFlags & 524288) { addNewLineIfDisplayPartsExist(); - displayParts.push(ts.keywordPart(133)); + displayParts.push(ts.keywordPart(134)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); writeTypeParametersOfSymbol(symbol, sourceFile); @@ -43999,7 +44906,7 @@ var ts; } if (symbolFlags & 1536) { addNewLineIfDisplayPartsExist(); - var declaration = ts.getDeclarationOfKind(symbol, 224); + var declaration = ts.getDeclarationOfKind(symbol, 225); var isNamespace = declaration && declaration.name && declaration.name.kind === 69; displayParts.push(ts.keywordPart(isNamespace ? 126 : 125)); displayParts.push(ts.spacePart()); @@ -44020,23 +44927,23 @@ var ts; writeTypeParametersOfSymbol(symbol.parent, enclosingDeclaration); } else { - var declaration = ts.getDeclarationOfKind(symbol, 140); + var declaration = ts.getDeclarationOfKind(symbol, 141); ts.Debug.assert(declaration !== undefined); declaration = declaration.parent; if (declaration) { if (ts.isFunctionLikeKind(declaration.kind)) { var signature = typeChecker.getSignatureFromDeclaration(declaration); - if (declaration.kind === 151) { + if (declaration.kind === 152) { displayParts.push(ts.keywordPart(92)); displayParts.push(ts.spacePart()); } - else if (declaration.kind !== 150 && declaration.name) { + else if (declaration.kind !== 151 && declaration.name) { addFullSymbolName(declaration.symbol); } ts.addRange(displayParts, ts.signatureToDisplayParts(typeChecker, signature, sourceFile, 32)); } else { - displayParts.push(ts.keywordPart(133)); + displayParts.push(ts.keywordPart(134)); displayParts.push(ts.spacePart()); addFullSymbolName(declaration.symbol); writeTypeParametersOfSymbol(declaration.symbol, sourceFile); @@ -44047,7 +44954,7 @@ var ts; if (symbolFlags & 8) { addPrefixForAnyFunctionOrVar(symbol, "enum member"); var declaration = symbol.declarations[0]; - if (declaration.kind === 254) { + if (declaration.kind === 255) { var constantValue = typeChecker.getConstantValue(declaration); if (constantValue !== undefined) { displayParts.push(ts.spacePart()); @@ -44063,13 +44970,13 @@ var ts; displayParts.push(ts.spacePart()); addFullSymbolName(symbol); ts.forEach(symbol.declarations, function (declaration) { - if (declaration.kind === 228) { + if (declaration.kind === 229) { var importEqualsDeclaration = declaration; if (ts.isExternalModuleImportEqualsDeclaration(importEqualsDeclaration)) { displayParts.push(ts.spacePart()); displayParts.push(ts.operatorPart(56)); displayParts.push(ts.spacePart()); - displayParts.push(ts.keywordPart(128)); + displayParts.push(ts.keywordPart(129)); displayParts.push(ts.punctuationPart(17)); displayParts.push(ts.displayPart(ts.getTextOfNode(ts.getExternalModuleImportEqualsDeclarationExpression(importEqualsDeclaration)), SymbolDisplayPartKind.stringLiteral)); displayParts.push(ts.punctuationPart(18)); @@ -44119,7 +45026,7 @@ var ts; symbolFlags & 131072 || symbolFlags & 98304 || symbolKind === ScriptElementKind.memberFunctionElement) { - var allSignatures = type.getCallSignatures(); + var allSignatures = type.getNonNullableType().getCallSignatures(); addSignatureDisplayParts(allSignatures[0], allSignatures); } } @@ -44189,7 +45096,7 @@ var ts; synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); - if (!node) { + if (node === sourceFile) { return undefined; } if (isLabelName(node)) { @@ -44200,10 +45107,10 @@ var ts; if (!symbol || typeChecker.isUnknownSymbol(symbol)) { switch (node.kind) { case 69: - case 171: - case 138: + case 172: + case 139: case 97: - case 164: + case 165: case 95: var type = typeChecker.getTypeAtLocation(node); if (type) { @@ -44276,8 +45183,8 @@ var ts; var declarations = []; var definition; ts.forEach(signatureDeclarations, function (d) { - if ((selectConstructors && d.kind === 147) || - (!selectConstructors && (d.kind === 219 || d.kind === 146 || d.kind === 145))) { + if ((selectConstructors && d.kind === 148) || + (!selectConstructors && (d.kind === 220 || d.kind === 147 || d.kind === 146))) { declarations.push(d); if (d.body) definition = d; @@ -44316,15 +45223,6 @@ var ts; function getDefinitionAtPosition(fileName, position) { synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); - var node = ts.getTouchingPropertyName(sourceFile, position); - if (!node) { - return undefined; - } - if (isJumpStatementTarget(node)) { - var labelName = node.text; - var label = getTargetLabel(node.parent, node.text); - return label ? [createDefinitionInfo(label, ScriptElementKind.label, labelName, undefined)] : undefined; - } var comment = findReferenceInPosition(sourceFile.referencedFiles, position); if (comment) { var referenceFile = ts.tryResolveScriptReference(program, sourceFile, comment); @@ -44335,12 +45233,21 @@ var ts; } var typeReferenceDirective = findReferenceInPosition(sourceFile.typeReferenceDirectives, position); if (typeReferenceDirective) { - var referenceFile = ts.lookUp(program.resolvedTypeReferenceDirectives, typeReferenceDirective.fileName); + var referenceFile = ts.lookUp(program.getResolvedTypeReferenceDirectives(), typeReferenceDirective.fileName); if (referenceFile && referenceFile.resolvedFileName) { return [getDefinitionInfoForFileReference(typeReferenceDirective.fileName, referenceFile.resolvedFileName)]; } return undefined; } + var node = ts.getTouchingPropertyName(sourceFile, position); + if (node === sourceFile) { + return undefined; + } + if (isJumpStatementTarget(node)) { + var labelName = node.text; + var label = getTargetLabel(node.parent, node.text); + return label ? [createDefinitionInfo(label, ScriptElementKind.label, labelName, undefined)] : undefined; + } var typeChecker = program.getTypeChecker(); var symbol = typeChecker.getSymbolAtLocation(node); if (!symbol) { @@ -44350,11 +45257,11 @@ var ts; var declaration = symbol.declarations[0]; if (node.kind === 69 && (node.parent === declaration || - (declaration.kind === 233 && declaration.parent && declaration.parent.kind === 232))) { + (declaration.kind === 234 && declaration.parent && declaration.parent.kind === 233))) { symbol = typeChecker.getAliasedSymbol(symbol); } } - if (node.parent.kind === 253) { + if (node.parent.kind === 254) { var shorthandSymbol = typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration); if (!shorthandSymbol) { return []; @@ -44371,7 +45278,7 @@ var ts; synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); - if (!node) { + if (node === sourceFile) { return undefined; } var typeChecker = program.getTypeChecker(); @@ -44427,10 +45334,10 @@ var ts; function getSemanticDocumentHighlights(node) { if (node.kind === 69 || node.kind === 97 || - node.kind === 164 || + node.kind === 165 || node.kind === 95 || - isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || - isNameOfExternalModuleImportOrDeclaration(node)) { + node.kind === 9 || + isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { var referencedSymbols = getReferencedSymbolsForNode(node, sourceFilesToSearch, false, false); return convertReferencedSymbols(referencedSymbols); } @@ -44479,75 +45386,75 @@ var ts; switch (node.kind) { case 88: case 80: - if (hasKind(node.parent, 202)) { + if (hasKind(node.parent, 203)) { return getIfElseOccurrences(node.parent); } break; case 94: - if (hasKind(node.parent, 210)) { + if (hasKind(node.parent, 211)) { return getReturnOccurrences(node.parent); } break; case 98: - if (hasKind(node.parent, 214)) { + if (hasKind(node.parent, 215)) { return getThrowOccurrences(node.parent); } break; case 72: - if (hasKind(parent(parent(node)), 215)) { + if (hasKind(parent(parent(node)), 216)) { return getTryCatchFinallyOccurrences(node.parent.parent); } break; case 100: case 85: - if (hasKind(parent(node), 215)) { + if (hasKind(parent(node), 216)) { return getTryCatchFinallyOccurrences(node.parent); } break; case 96: - if (hasKind(node.parent, 212)) { + if (hasKind(node.parent, 213)) { return getSwitchCaseDefaultOccurrences(node.parent); } break; case 71: case 77: - if (hasKind(parent(parent(parent(node))), 212)) { + if (hasKind(parent(parent(parent(node))), 213)) { return getSwitchCaseDefaultOccurrences(node.parent.parent.parent); } break; case 70: case 75: - if (hasKind(node.parent, 209) || hasKind(node.parent, 208)) { + if (hasKind(node.parent, 210) || hasKind(node.parent, 209)) { return getBreakOrContinueStatementOccurrences(node.parent); } break; case 86: - if (hasKind(node.parent, 205) || - hasKind(node.parent, 206) || - hasKind(node.parent, 207)) { + if (hasKind(node.parent, 206) || + hasKind(node.parent, 207) || + hasKind(node.parent, 208)) { return getLoopBreakContinueOccurrences(node.parent); } break; case 104: case 79: - if (hasKind(node.parent, 204) || hasKind(node.parent, 203)) { + if (hasKind(node.parent, 205) || hasKind(node.parent, 204)) { return getLoopBreakContinueOccurrences(node.parent); } break; case 121: - if (hasKind(node.parent, 147)) { + if (hasKind(node.parent, 148)) { return getConstructorOccurrences(node.parent); } break; case 123: - case 130: - if (hasKind(node.parent, 148) || hasKind(node.parent, 149)) { + case 131: + if (hasKind(node.parent, 149) || hasKind(node.parent, 150)) { return getGetAndSetOccurrences(node.parent); } break; default: if (ts.isModifierKind(node.kind) && node.parent && - (ts.isDeclaration(node.parent) || node.parent.kind === 199)) { + (ts.isDeclaration(node.parent) || node.parent.kind === 200)) { return getModifierOccurrences(node.kind, node.parent); } } @@ -44559,10 +45466,10 @@ var ts; aggregate(node); return statementAccumulator; function aggregate(node) { - if (node.kind === 214) { + if (node.kind === 215) { statementAccumulator.push(node); } - else if (node.kind === 215) { + else if (node.kind === 216) { var tryStatement = node; if (tryStatement.catchClause) { aggregate(tryStatement.catchClause); @@ -44582,17 +45489,17 @@ var ts; function getThrowStatementOwner(throwStatement) { var child = throwStatement; while (child.parent) { - var parent_16 = child.parent; - if (ts.isFunctionBlock(parent_16) || parent_16.kind === 255) { - return parent_16; + var parent_19 = child.parent; + if (ts.isFunctionBlock(parent_19) || parent_19.kind === 256) { + return parent_19; } - if (parent_16.kind === 215) { - var tryStatement = parent_16; + if (parent_19.kind === 216) { + var tryStatement = parent_19; if (tryStatement.tryBlock === child && tryStatement.catchClause) { return child; } } - child = parent_16; + child = parent_19; } return undefined; } @@ -44601,7 +45508,7 @@ var ts; aggregate(node); return statementAccumulator; function aggregate(node) { - if (node.kind === 209 || node.kind === 208) { + if (node.kind === 210 || node.kind === 209) { statementAccumulator.push(node); } else if (!ts.isFunctionLike(node)) { @@ -44614,23 +45521,23 @@ var ts; return actualOwner && actualOwner === owner; } function getBreakOrContinueOwner(statement) { - for (var node_2 = statement.parent; node_2; node_2 = node_2.parent) { - switch (node_2.kind) { - case 212: - if (statement.kind === 208) { + for (var node_1 = statement.parent; node_1; node_1 = node_1.parent) { + switch (node_1.kind) { + case 213: + if (statement.kind === 209) { continue; } - case 205: case 206: case 207: + case 208: + case 205: case 204: - case 203: - if (!statement.label || isLabeledBy(node_2, statement.label.text)) { - return node_2; + if (!statement.label || isLabeledBy(node_1, statement.label.text)) { + return node_1; } break; default: - if (ts.isFunctionLike(node_2)) { + if (ts.isFunctionLike(node_1)) { return undefined; } break; @@ -44641,24 +45548,24 @@ var ts; function getModifierOccurrences(modifier, declaration) { var container = declaration.parent; if (ts.isAccessibilityModifier(modifier)) { - if (!(container.kind === 220 || - container.kind === 191 || - (declaration.kind === 141 && hasKind(container, 147)))) { + if (!(container.kind === 221 || + container.kind === 192 || + (declaration.kind === 142 && hasKind(container, 148)))) { return undefined; } } else if (modifier === 113) { - if (!(container.kind === 220 || container.kind === 191)) { + if (!(container.kind === 221 || container.kind === 192)) { return undefined; } } else if (modifier === 82 || modifier === 122) { - if (!(container.kind === 225 || container.kind === 255)) { + if (!(container.kind === 226 || container.kind === 256)) { return undefined; } } else if (modifier === 115) { - if (!(container.kind === 220 || declaration.kind === 220)) { + if (!(container.kind === 221 || declaration.kind === 221)) { return undefined; } } @@ -44669,8 +45576,8 @@ var ts; var modifierFlag = getFlagFromModifier(modifier); var nodes; switch (container.kind) { - case 225: - case 255: + case 226: + case 256: if (modifierFlag & 128) { nodes = declaration.members.concat(declaration); } @@ -44678,15 +45585,15 @@ var ts; nodes = container.statements; } break; - case 147: + case 148: nodes = container.parameters.concat(container.parent.members); break; - case 220: - case 191: + case 221: + case 192: nodes = container.members; if (modifierFlag & 28) { var constructor = ts.forEach(container.members, function (member) { - return member.kind === 147 && member; + return member.kind === 148 && member; }); if (constructor) { nodes = nodes.concat(constructor.parameters); @@ -44739,13 +45646,13 @@ var ts; } function getGetAndSetOccurrences(accessorDeclaration) { var keywords = []; - tryPushAccessorKeyword(accessorDeclaration.symbol, 148); tryPushAccessorKeyword(accessorDeclaration.symbol, 149); + tryPushAccessorKeyword(accessorDeclaration.symbol, 150); return ts.map(keywords, getHighlightSpanForNode); function tryPushAccessorKeyword(accessorSymbol, accessorKind) { var accessor = ts.getDeclarationOfKind(accessorSymbol, accessorKind); if (accessor) { - ts.forEach(accessor.getChildren(), function (child) { return pushKeywordIf(keywords, child, 123, 130); }); + ts.forEach(accessor.getChildren(), function (child) { return pushKeywordIf(keywords, child, 123, 131); }); } } } @@ -44762,7 +45669,7 @@ var ts; function getLoopBreakContinueOccurrences(loopNode) { var keywords = []; if (pushKeywordIf(keywords, loopNode.getFirstToken(), 86, 104, 79)) { - if (loopNode.kind === 203) { + if (loopNode.kind === 204) { var loopTokens = loopNode.getChildren(); for (var i = loopTokens.length - 1; i >= 0; i--) { if (pushKeywordIf(keywords, loopTokens[i], 104)) { @@ -44783,13 +45690,13 @@ var ts; var owner = getBreakOrContinueOwner(breakOrContinueStatement); if (owner) { switch (owner.kind) { - case 205: case 206: case 207: - case 203: + case 208: case 204: + case 205: return getLoopBreakContinueOccurrences(owner); - case 212: + case 213: return getSwitchCaseDefaultOccurrences(owner); } } @@ -44839,7 +45746,7 @@ var ts; } function getReturnOccurrences(returnStatement) { var func = ts.getContainingFunction(returnStatement); - if (!(func && hasKind(func.body, 198))) { + if (!(func && hasKind(func.body, 199))) { return undefined; } var keywords = []; @@ -44853,7 +45760,7 @@ var ts; } function getIfElseOccurrences(ifStatement) { var keywords = []; - while (hasKind(ifStatement.parent, 202) && ifStatement.parent.elseStatement === ifStatement) { + while (hasKind(ifStatement.parent, 203) && ifStatement.parent.elseStatement === ifStatement) { ifStatement = ifStatement.parent; } while (ifStatement) { @@ -44864,7 +45771,7 @@ var ts; break; } } - if (!hasKind(ifStatement.elseStatement, 202)) { + if (!hasKind(ifStatement.elseStatement, 203)) { break; } ifStatement = ifStatement.elseStatement; @@ -44946,12 +45853,12 @@ var ts; synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); - if (!node) { + if (node === sourceFile) { return undefined; } if (node.kind !== 69 && - !isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && - !isNameOfExternalModuleImportOrDeclaration(node)) { + node.kind !== 9 && + !isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { return undefined; } ts.Debug.assert(node.kind === 69 || node.kind === 8 || node.kind === 9); @@ -44968,13 +45875,16 @@ var ts; return getLabelReferencesInNode(node.parent, node); } } - if (node.kind === 97 || node.kind === 164) { + if (node.kind === 97 || node.kind === 165) { return getReferencesForThisKeyword(node, sourceFiles); } if (node.kind === 95) { return getReferencesForSuperKeyword(node); } var symbol = typeChecker.getSymbolAtLocation(node); + if (!symbol && node.kind === 9) { + return getReferencesForStringLiteral(node, sourceFiles); + } if (!symbol) { return undefined; } @@ -45020,8 +45930,41 @@ var ts; textSpan: ts.createTextSpan(declarations[0].getStart(), 0) }; } - function isImportSpecifierSymbol(symbol) { - return (symbol.flags & 8388608) && !!ts.getDeclarationOfKind(symbol, 233); + function getAliasSymbolForPropertyNameSymbol(symbol, location) { + if (symbol.flags & 8388608) { + var defaultImport = ts.getDeclarationOfKind(symbol, 231); + if (defaultImport) { + return typeChecker.getAliasedSymbol(symbol); + } + var importOrExportSpecifier = ts.forEach(symbol.declarations, function (declaration) { return (declaration.kind === 234 || + declaration.kind === 238) ? declaration : undefined; }); + if (importOrExportSpecifier && + (!importOrExportSpecifier.propertyName || + importOrExportSpecifier.propertyName === location)) { + return importOrExportSpecifier.kind === 234 ? + typeChecker.getAliasedSymbol(symbol) : + typeChecker.getExportSpecifierLocalTargetSymbol(importOrExportSpecifier); + } + } + return undefined; + } + function getPropertySymbolOfDestructuringAssignment(location) { + return ts.isArrayLiteralOrObjectLiteralDestructuringPattern(location.parent.parent) && + typeChecker.getPropertySymbolOfDestructuringAssignment(location); + } + function isObjectBindingPatternElementWithoutPropertyName(symbol) { + var bindingElement = ts.getDeclarationOfKind(symbol, 169); + return bindingElement && + bindingElement.parent.kind === 167 && + !bindingElement.propertyName; + } + function getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol) { + if (isObjectBindingPatternElementWithoutPropertyName(symbol)) { + var bindingElement = ts.getDeclarationOfKind(symbol, 169); + var typeOfPattern = typeChecker.getTypeAtLocation(bindingElement.parent); + return typeOfPattern && typeChecker.getPropertyOfType(typeOfPattern, bindingElement.name.text); + } + return undefined; } function getInternedName(symbol, location, declarations) { if (ts.isImportOrExportSpecifierName(location)) { @@ -45033,18 +45976,21 @@ var ts; } function getSymbolScope(symbol) { var valueDeclaration = symbol.valueDeclaration; - if (valueDeclaration && (valueDeclaration.kind === 178 || valueDeclaration.kind === 191)) { + if (valueDeclaration && (valueDeclaration.kind === 179 || valueDeclaration.kind === 192)) { return valueDeclaration; } if (symbol.flags & (4 | 8192)) { var privateDeclaration = ts.forEach(symbol.getDeclarations(), function (d) { return (d.flags & 8) ? d : undefined; }); if (privateDeclaration) { - return ts.getAncestor(privateDeclaration, 220); + return ts.getAncestor(privateDeclaration, 221); } } if (symbol.flags & 8388608) { return undefined; } + if (isObjectBindingPatternElementWithoutPropertyName(symbol)) { + return undefined; + } if (symbol.parent || (symbol.flags & 268435456)) { return undefined; } @@ -45060,7 +46006,7 @@ var ts; if (scope && scope !== container) { return undefined; } - if (container.kind === 255 && !ts.isExternalModule(container)) { + if (container.kind === 256 && !ts.isExternalModule(container)) { return undefined; } scope = container; @@ -45207,13 +46153,13 @@ var ts; } var staticFlag = 32; switch (searchSpaceNode.kind) { - case 144: - case 143: - case 146: case 145: + case 144: case 147: + case 146: case 148: case 149: + case 150: staticFlag &= searchSpaceNode.flags; searchSpaceNode = searchSpaceNode.parent; break; @@ -45241,32 +46187,32 @@ var ts; var searchSpaceNode = ts.getThisContainer(thisOrSuperKeyword, false); var staticFlag = 32; switch (searchSpaceNode.kind) { + case 147: case 146: - case 145: if (ts.isObjectLiteralMethod(searchSpaceNode)) { break; } + case 145: case 144: - case 143: - case 147: case 148: case 149: + case 150: staticFlag &= searchSpaceNode.flags; searchSpaceNode = searchSpaceNode.parent; break; - case 255: + case 256: if (ts.isExternalModule(searchSpaceNode)) { return undefined; } - case 219: - case 178: + case 220: + case 179: break; default: return undefined; } var references = []; var possiblePositions; - if (searchSpaceNode.kind === 255) { + if (searchSpaceNode.kind === 256) { ts.forEach(sourceFiles, function (sourceFile) { possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "this", sourceFile.getStart(), sourceFile.getEnd()); getThisReferencesInFile(sourceFile, sourceFile, possiblePositions, references); @@ -45292,31 +46238,31 @@ var ts; ts.forEach(possiblePositions, function (position) { cancellationToken.throwIfCancellationRequested(); var node = ts.getTouchingWord(sourceFile, position); - if (!node || (node.kind !== 97 && node.kind !== 164)) { + if (!node || (node.kind !== 97 && node.kind !== 165)) { return; } var container = ts.getThisContainer(node, false); switch (searchSpaceNode.kind) { - case 178: - case 219: + case 179: + case 220: if (searchSpaceNode.symbol === container.symbol) { result.push(getReferenceEntryFromNode(node)); } break; + case 147: case 146: - case 145: if (ts.isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol) { result.push(getReferenceEntryFromNode(node)); } break; - case 191: - case 220: + case 192: + case 221: if (container.parent && searchSpaceNode.symbol === container.parent.symbol && (container.flags & 32) === staticFlag) { result.push(getReferenceEntryFromNode(node)); } break; - case 255: - if (container.kind === 255 && !ts.isExternalModule(container)) { + case 256: + if (container.kind === 256 && !ts.isExternalModule(container)) { result.push(getReferenceEntryFromNode(node)); } break; @@ -45324,16 +46270,59 @@ var ts; }); } } + function getReferencesForStringLiteral(node, sourceFiles) { + var typeChecker = program.getTypeChecker(); + var type = getStringLiteralTypeForNode(node, typeChecker); + if (!type) { + return undefined; + } + var references = []; + for (var _i = 0, sourceFiles_5 = sourceFiles; _i < sourceFiles_5.length; _i++) { + var sourceFile = sourceFiles_5[_i]; + var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, type.text, sourceFile.getStart(), sourceFile.getEnd()); + getReferencesForStringLiteralInFile(sourceFile, type, possiblePositions, references); + } + return [{ + definition: { + containerKind: "", + containerName: "", + fileName: node.getSourceFile().fileName, + kind: ScriptElementKind.variableElement, + name: type.text, + textSpan: ts.createTextSpanFromBounds(node.getStart(), node.getEnd()) + }, + references: references + }]; + function getReferencesForStringLiteralInFile(sourceFile, searchType, possiblePositions, references) { + for (var _i = 0, possiblePositions_1 = possiblePositions; _i < possiblePositions_1.length; _i++) { + var position = possiblePositions_1[_i]; + cancellationToken.throwIfCancellationRequested(); + var node_2 = ts.getTouchingWord(sourceFile, position); + if (!node_2 || node_2.kind !== 9) { + return; + } + var type_1 = getStringLiteralTypeForNode(node_2, typeChecker); + if (type_1 === searchType) { + references.push(getReferenceEntryFromNode(node_2)); + } + } + } + } function populateSearchSymbolSet(symbol, location) { var result = [symbol]; - if (isImportSpecifierSymbol(symbol)) { - result.push(typeChecker.getAliasedSymbol(symbol)); + var containingObjectLiteralElement = getContainingObjectLiteralElement(location); + if (containingObjectLiteralElement && containingObjectLiteralElement.kind !== 254) { + var propertySymbol = getPropertySymbolOfDestructuringAssignment(location); + if (propertySymbol) { + result.push(propertySymbol); + } } - if (location.parent.kind === 237) { - result.push(typeChecker.getExportSpecifierLocalTargetSymbol(location.parent)); + var aliasSymbol = getAliasSymbolForPropertyNameSymbol(symbol, location); + if (aliasSymbol) { + result = result.concat(populateSearchSymbolSet(aliasSymbol, location)); } - if (isNameOfPropertyAssignment(location)) { - ts.forEach(getPropertySymbolsFromContextualType(location), function (contextualSymbol) { + if (containingObjectLiteralElement) { + ts.forEach(getPropertySymbolsFromContextualType(containingObjectLiteralElement), function (contextualSymbol) { ts.addRange(result, typeChecker.getRootSymbols(contextualSymbol)); }); var shorthandValueSymbol = typeChecker.getShorthandAssignmentValueSymbol(location.parent); @@ -45341,10 +46330,14 @@ var ts; result.push(shorthandValueSymbol); } } - if (symbol.valueDeclaration && symbol.valueDeclaration.kind === 141 && + if (symbol.valueDeclaration && symbol.valueDeclaration.kind === 142 && ts.isParameterPropertyDeclaration(symbol.valueDeclaration)) { result = result.concat(typeChecker.getSymbolsOfParameterPropertyDeclaration(symbol.valueDeclaration, symbol.name)); } + var bindingElementPropertySymbol = getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol); + if (bindingElementPropertySymbol) { + result.push(bindingElementPropertySymbol); + } ts.forEach(typeChecker.getRootSymbols(symbol), function (rootSymbol) { if (rootSymbol !== symbol) { result.push(rootSymbol); @@ -45364,11 +46357,11 @@ var ts; } if (symbol.flags & (32 | 64)) { ts.forEach(symbol.getDeclarations(), function (declaration) { - if (declaration.kind === 220) { + if (ts.isClassLike(declaration)) { getPropertySymbolFromTypeReference(ts.getClassExtendsHeritageClauseElement(declaration)); ts.forEach(ts.getClassImplementsHeritageClauseElements(declaration), getPropertySymbolFromTypeReference); } - else if (declaration.kind === 221) { + else if (declaration.kind === 222) { ts.forEach(ts.getInterfaceBaseTypeNodes(declaration), getPropertySymbolFromTypeReference); } }); @@ -45380,7 +46373,7 @@ var ts; if (type) { var propertySymbol = typeChecker.getPropertyOfType(type, propertyName); if (propertySymbol) { - result.push(propertySymbol); + result.push.apply(result, typeChecker.getRootSymbols(propertySymbol)); } previousIterationSymbolsCache[symbol.name] = symbol; getPropertySymbolsFromBaseTypes(type.symbol, propertyName, result, previousIterationSymbolsCache); @@ -45392,22 +46385,26 @@ var ts; if (searchSymbols.indexOf(referenceSymbol) >= 0) { return referenceSymbol; } - if (isImportSpecifierSymbol(referenceSymbol)) { - var aliasedSymbol = typeChecker.getAliasedSymbol(referenceSymbol); - if (searchSymbols.indexOf(aliasedSymbol) >= 0) { - return aliasedSymbol; - } + var aliasSymbol = getAliasSymbolForPropertyNameSymbol(referenceSymbol, referenceLocation); + if (aliasSymbol) { + return getRelatedSymbol(searchSymbols, aliasSymbol, referenceLocation); } - if (referenceLocation.parent.kind === 237) { - var aliasedSymbol = typeChecker.getExportSpecifierLocalTargetSymbol(referenceLocation.parent); - if (searchSymbols.indexOf(aliasedSymbol) >= 0) { - return aliasedSymbol; - } - } - if (isNameOfPropertyAssignment(referenceLocation)) { - return ts.forEach(getPropertySymbolsFromContextualType(referenceLocation), function (contextualSymbol) { + var containingObjectLiteralElement = getContainingObjectLiteralElement(referenceLocation); + if (containingObjectLiteralElement) { + var contextualSymbol = ts.forEach(getPropertySymbolsFromContextualType(containingObjectLiteralElement), function (contextualSymbol) { return ts.forEach(typeChecker.getRootSymbols(contextualSymbol), function (s) { return searchSymbols.indexOf(s) >= 0 ? s : undefined; }); }); + if (contextualSymbol) { + return contextualSymbol; + } + var propertySymbol = getPropertySymbolOfDestructuringAssignment(referenceLocation); + if (propertySymbol && searchSymbols.indexOf(propertySymbol) >= 0) { + return propertySymbol; + } + } + var bindingElementPropertySymbol = getPropertySymbolOfObjectBindingPatternWithoutPropertyName(referenceSymbol); + if (bindingElementPropertySymbol && searchSymbols.indexOf(bindingElementPropertySymbol) >= 0) { + return bindingElementPropertySymbol; } return ts.forEach(typeChecker.getRootSymbols(referenceSymbol), function (rootSymbol) { if (searchSymbols.indexOf(rootSymbol) >= 0) { @@ -45421,35 +46418,35 @@ var ts; return undefined; }); } - function getPropertySymbolsFromContextualType(node) { - if (isNameOfPropertyAssignment(node)) { - var objectLiteral = node.parent.parent; - var contextualType = typeChecker.getContextualType(objectLiteral); - var name_41 = node.text; - if (contextualType) { - if (contextualType.flags & 16384) { - var unionProperty = contextualType.getProperty(name_41); - if (unionProperty) { - return [unionProperty]; - } - else { - var result_5 = []; - ts.forEach(contextualType.types, function (t) { - var symbol = t.getProperty(name_41); - if (symbol) { - result_5.push(symbol); - } - }); - return result_5; - } - } - else { - var symbol_1 = contextualType.getProperty(name_41); - if (symbol_1) { - return [symbol_1]; - } - } + function getNameFromObjectLiteralElement(node) { + if (node.name.kind === 140) { + var nameExpression = node.name.expression; + if (ts.isStringOrNumericLiteral(nameExpression.kind)) { + return nameExpression.text; } + return undefined; + } + return node.name.text; + } + function getPropertySymbolsFromContextualType(node) { + var objectLiteral = node.parent; + var contextualType = typeChecker.getContextualType(objectLiteral); + var name = getNameFromObjectLiteralElement(node); + if (name && contextualType) { + var result_5 = []; + var symbol_1 = contextualType.getProperty(name); + if (symbol_1) { + result_5.push(symbol_1); + } + if (contextualType.flags & 16384) { + ts.forEach(contextualType.types, function (t) { + var symbol = t.getProperty(name); + if (symbol) { + result_5.push(symbol); + } + }); + } + return result_5; } return undefined; } @@ -45489,10 +46486,10 @@ var ts; } var parent = node.parent; if (parent) { - if (parent.kind === 185 || parent.kind === 184) { + if (parent.kind === 186 || parent.kind === 185) { return true; } - else if (parent.kind === 186 && parent.left === node) { + else if (parent.kind === 187 && parent.left === node) { var operator = parent.operatorToken.kind; return 56 <= operator && operator <= 68; } @@ -45522,33 +46519,33 @@ var ts; } function getMeaningFromDeclaration(node) { switch (node.kind) { - case 141: - case 217: - case 168: + case 142: + case 218: + case 169: + case 145: case 144: - case 143: - case 252: case 253: case 254: - case 146: - case 145: + case 255: case 147: + case 146: case 148: case 149: - case 219: - case 178: - case 179: - case 251: - return 1; - case 140: - case 221: - case 222: - case 158: - return 2; + case 150: case 220: + case 179: + case 180: + case 252: + return 1; + case 141: + case 222: case 223: - return 1 | 2; + case 159: + return 2; + case 221: case 224: + return 1 | 2; + case 225: if (ts.isAmbientModule(node)) { return 4 | 1; } @@ -45558,14 +46555,14 @@ var ts; else { return 4; } - case 232: case 233: - case 228: - case 229: case 234: + case 229: + case 230: case 235: + case 236: return 1 | 2 | 4; - case 255: + case 256: return 4 | 1; } return 1 | 2 | 4; @@ -45574,10 +46571,10 @@ var ts; if (ts.isRightSideOfQualifiedNameOrPropertyAccess(node)) { node = node.parent; } - return node.parent.kind === 154 || - (node.parent.kind === 193 && !ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent)) || + return node.parent.kind === 155 || + (node.parent.kind === 194 && !ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent)) || (node.kind === 97 && !ts.isExpression(node)) || - node.kind === 164; + node.kind === 165; } function isNamespaceReference(node) { return isQualifiedNameNamespaceReference(node) || isPropertyAccessNamespaceReference(node); @@ -45585,47 +46582,47 @@ var ts; function isPropertyAccessNamespaceReference(node) { var root = node; var isLastClause = true; - if (root.parent.kind === 171) { - while (root.parent && root.parent.kind === 171) { + if (root.parent.kind === 172) { + while (root.parent && root.parent.kind === 172) { root = root.parent; } isLastClause = root.name === node; } - if (!isLastClause && root.parent.kind === 193 && root.parent.parent.kind === 250) { + if (!isLastClause && root.parent.kind === 194 && root.parent.parent.kind === 251) { var decl = root.parent.parent.parent; - return (decl.kind === 220 && root.parent.parent.token === 106) || - (decl.kind === 221 && root.parent.parent.token === 83); + return (decl.kind === 221 && root.parent.parent.token === 106) || + (decl.kind === 222 && root.parent.parent.token === 83); } return false; } function isQualifiedNameNamespaceReference(node) { var root = node; var isLastClause = true; - if (root.parent.kind === 138) { - while (root.parent && root.parent.kind === 138) { + if (root.parent.kind === 139) { + while (root.parent && root.parent.kind === 139) { root = root.parent; } isLastClause = root.right === node; } - return root.parent.kind === 154 && !isLastClause; + return root.parent.kind === 155 && !isLastClause; } function isInRightSideOfImport(node) { - while (node.parent.kind === 138) { + while (node.parent.kind === 139) { node = node.parent; } return ts.isInternalModuleImportEqualsDeclaration(node.parent) && node.parent.moduleReference === node; } function getMeaningFromRightHandSideOfImportEquals(node) { ts.Debug.assert(node.kind === 69); - if (node.parent.kind === 138 && + if (node.parent.kind === 139 && node.parent.right === node && - node.parent.parent.kind === 228) { + node.parent.parent.kind === 229) { return 1 | 2 | 4; } return 4; } function getMeaningFromLocation(node) { - if (node.parent.kind === 234) { + if (node.parent.kind === 235) { return 1 | 2 | 4; } else if (isInRightSideOfImport(node)) { @@ -45655,20 +46652,20 @@ var ts; function getNameOrDottedNameSpan(fileName, startPos, endPos) { var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, startPos); - if (!node) { + if (node === sourceFile) { return; } switch (node.kind) { - case 171: - case 138: + case 172: + case 139: case 9: - case 165: + case 166: case 84: case 99: case 93: case 95: case 97: - case 164: + case 165: case 69: break; default: @@ -45680,7 +46677,7 @@ var ts; nodeForStartPos = nodeForStartPos.parent; } else if (isNameOfModuleDeclaration(nodeForStartPos)) { - if (nodeForStartPos.parent.parent.kind === 224 && + if (nodeForStartPos.parent.parent.kind === 225 && nodeForStartPos.parent.parent.body === nodeForStartPos.parent) { nodeForStartPos = nodeForStartPos.parent.parent.name; } @@ -45707,10 +46704,10 @@ var ts; } function checkForClassificationCancellation(kind) { switch (kind) { - case 224: - case 220: + case 225: case 221: - case 219: + case 222: + case 220: cancellationToken.throwIfCancellationRequested(); } } @@ -45758,7 +46755,7 @@ var ts; return undefined; function hasValueSideModule(symbol) { return ts.forEach(symbol.declarations, function (declaration) { - return declaration.kind === 224 && + return declaration.kind === 225 && ts.getModuleInstanceState(declaration) === 1; }); } @@ -45897,16 +46894,16 @@ var ts; pushClassification(tag.tagName.pos, tag.tagName.end - tag.tagName.pos, 18); pos = tag.tagName.end; switch (tag.kind) { - case 274: + case 275: processJSDocParameterTag(tag); break; - case 277: + case 278: processJSDocTemplateTag(tag); break; - case 276: + case 277: processElement(tag.typeExpression); break; - case 275: + case 276: processElement(tag.typeExpression); break; } @@ -45967,10 +46964,10 @@ var ts; return true; } var classifiedElementName = tryClassifyJsxElementName(node); - if (!ts.isToken(node) && node.kind !== 243 && classifiedElementName === undefined) { + if (!ts.isToken(node) && node.kind !== 244 && classifiedElementName === undefined) { return false; } - var tokenStart = node.kind === 243 ? node.pos : classifyLeadingTriviaAndGetTokenStart(node); + var tokenStart = node.kind === 244 ? node.pos : classifyLeadingTriviaAndGetTokenStart(node); var tokenWidth = node.end - tokenStart; ts.Debug.assert(tokenWidth >= 0); if (tokenWidth > 0) { @@ -45983,22 +46980,22 @@ var ts; } function tryClassifyJsxElementName(token) { switch (token.parent && token.parent.kind) { - case 242: + case 243: if (token.parent.tagName === token) { return 19; } break; - case 244: + case 245: if (token.parent.tagName === token) { return 20; } break; - case 241: + case 242: if (token.parent.tagName === token) { return 21; } break; - case 245: + case 246: if (token.parent.name === token) { return 22; } @@ -46018,17 +47015,17 @@ var ts; if (ts.isPunctuation(tokenKind)) { if (token) { if (tokenKind === 56) { - if (token.parent.kind === 217 || - token.parent.kind === 144 || - token.parent.kind === 141 || - token.parent.kind === 245) { + if (token.parent.kind === 218 || + token.parent.kind === 145 || + token.parent.kind === 142 || + token.parent.kind === 246) { return 5; } } - if (token.parent.kind === 186 || - token.parent.kind === 184 || + if (token.parent.kind === 187 || token.parent.kind === 185 || - token.parent.kind === 187) { + token.parent.kind === 186 || + token.parent.kind === 188) { return 5; } } @@ -46037,8 +47034,8 @@ var ts; else if (tokenKind === 8) { return 4; } - else if (tokenKind === 9 || tokenKind === 165) { - return token.parent.kind === 245 ? 24 : 6; + else if (tokenKind === 9 || tokenKind === 166) { + return token.parent.kind === 246 ? 24 : 6; } else if (tokenKind === 10) { return 6; @@ -46046,38 +47043,38 @@ var ts; else if (ts.isTemplateLiteralKind(tokenKind)) { return 6; } - else if (tokenKind === 243) { + else if (tokenKind === 244) { return 23; } else if (tokenKind === 69) { if (token) { switch (token.parent.kind) { - case 220: + case 221: if (token.parent.name === token) { return 11; } return; - case 140: + case 141: if (token.parent.name === token) { return 15; } return; - case 221: + case 222: if (token.parent.name === token) { return 13; } return; - case 223: + case 224: if (token.parent.name === token) { return 12; } return; - case 224: + case 225: if (token.parent.name === token) { return 14; } return; - case 141: + case 142: if (token.parent.name === token) { return 17; } @@ -46190,16 +47187,16 @@ var ts; var commentOwner; findOwner: for (commentOwner = tokenAtPos; commentOwner; commentOwner = commentOwner.parent) { switch (commentOwner.kind) { - case 219: - case 146: - case 147: case 220: - case 199: + case 147: + case 148: + case 221: + case 200: break findOwner; - case 255: + case 256: return undefined; - case 224: - if (commentOwner.parent.kind === 224) { + case 225: + if (commentOwner.parent.kind === 225) { return undefined; } break findOwner; @@ -46229,11 +47226,27 @@ var ts; (tokenStart === position ? newLine + indentationStr : ""); return { newText: result, caretOffset: preamble.length }; } + function isValidBraceCompletionAtPostion(fileName, position, openingBrace) { + if (openingBrace === 60) { + return false; + } + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + if (ts.isInString(sourceFile, position) || ts.isInComment(sourceFile, position)) { + return false; + } + if (ts.isInsideJsxElementOrAttribute(sourceFile, position)) { + return openingBrace === 123; + } + if (ts.isInTemplateString(sourceFile, position)) { + return false; + } + return true; + } function getParametersForJsDocOwningNode(commentOwner) { if (ts.isFunctionLike(commentOwner)) { return commentOwner.parameters; } - if (commentOwner.kind === 199) { + if (commentOwner.kind === 200) { var varStatement = commentOwner; var varDeclarations = varStatement.declarationList.declarations; if (varDeclarations.length === 1 && varDeclarations[0].initializer) { @@ -46243,17 +47256,17 @@ var ts; return emptyArray; } function getParametersFromRightHandSideOfAssignment(rightHandSide) { - while (rightHandSide.kind === 177) { + while (rightHandSide.kind === 178) { rightHandSide = rightHandSide.expression; } switch (rightHandSide.kind) { - case 178: case 179: + case 180: return rightHandSide.parameters; - case 191: + case 192: for (var _i = 0, _a = rightHandSide.members; _i < _a.length; _i++) { var member = _a[_i]; - if (member.kind === 147) { + if (member.kind === 148) { return member.parameters; } } @@ -46320,43 +47333,65 @@ var ts; (char >= 48 && char <= 57); } } + function getStringLiteralTypeForNode(node, typeChecker) { + var searchNode = node.parent.kind === 166 ? node.parent : node; + var type = typeChecker.getTypeAtLocation(searchNode); + if (type && type.flags & 256) { + return type; + } + return undefined; + } function getRenameInfo(fileName, position) { synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var typeChecker = program.getTypeChecker(); + var defaultLibFileName = host.getDefaultLibFileName(host.getCompilationSettings()); + var canonicalDefaultLibName = getCanonicalFileName(ts.normalizePath(defaultLibFileName)); var node = ts.getTouchingWord(sourceFile, position); - if (node && node.kind === 69) { - var symbol = typeChecker.getSymbolAtLocation(node); - if (symbol) { - var declarations = symbol.getDeclarations(); - if (declarations && declarations.length > 0) { - var defaultLibFileName = host.getDefaultLibFileName(host.getCompilationSettings()); - var canonicalDefaultLibName = getCanonicalFileName(ts.normalizePath(defaultLibFileName)); - if (defaultLibFileName) { - for (var _i = 0, declarations_11 = declarations; _i < declarations_11.length; _i++) { - var current = declarations_11[_i]; - var sourceFile_3 = current.getSourceFile(); - if (!sourceFile_3) { - continue; - } - var canonicalName = getCanonicalFileName(ts.normalizePath(sourceFile_3.fileName)); - if (canonicalName === canonicalDefaultLibName) { - return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library)); - } + if (node) { + if (node.kind === 69 || + node.kind === 9 || + isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + var symbol = typeChecker.getSymbolAtLocation(node); + if (symbol) { + var declarations = symbol.getDeclarations(); + if (declarations && declarations.length > 0) { + if (ts.forEach(declarations, isDefinedInLibraryFile)) { + return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library)); + } + var displayName = ts.stripQuotes(ts.getDeclaredName(typeChecker, symbol, node)); + var kind = getSymbolKind(symbol, node); + if (kind) { + return { + canRename: true, + kind: kind, + displayName: displayName, + localizedErrorMessage: undefined, + fullDisplayName: typeChecker.getFullyQualifiedName(symbol), + kindModifiers: getSymbolModifiers(symbol), + triggerSpan: createTriggerSpanForNode(node, sourceFile) + }; } } - var displayName = ts.stripQuotes(ts.getDeclaredName(typeChecker, symbol, node)); - var kind = getSymbolKind(symbol, node); - if (kind) { - return { - canRename: true, - kind: kind, - displayName: displayName, - localizedErrorMessage: undefined, - fullDisplayName: typeChecker.getFullyQualifiedName(symbol), - kindModifiers: getSymbolModifiers(symbol), - triggerSpan: ts.createTextSpan(node.getStart(), node.getWidth()) - }; + } + else if (node.kind === 9) { + var type = getStringLiteralTypeForNode(node, typeChecker); + if (type) { + if (isDefinedInLibraryFile(node)) { + return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library)); + } + else { + var displayName = ts.stripQuotes(type.text); + return { + canRename: true, + kind: ScriptElementKind.variableElement, + displayName: displayName, + localizedErrorMessage: undefined, + fullDisplayName: displayName, + kindModifiers: ScriptElementKindModifier.none, + triggerSpan: createTriggerSpanForNode(node, sourceFile) + }; + } } } } @@ -46373,6 +47408,25 @@ var ts; triggerSpan: undefined }; } + function isDefinedInLibraryFile(declaration) { + if (defaultLibFileName) { + var sourceFile_3 = declaration.getSourceFile(); + var canonicalName = getCanonicalFileName(ts.normalizePath(sourceFile_3.fileName)); + if (canonicalName === canonicalDefaultLibName) { + return true; + } + } + return false; + } + function createTriggerSpanForNode(node, sourceFile) { + var start = node.getStart(sourceFile); + var width = node.getWidth(sourceFile); + if (node.kind === 9) { + start += 1; + width -= 2; + } + return ts.createTextSpan(start, width); + } } return { dispose: dispose, @@ -46408,6 +47462,7 @@ var ts; getFormattingEditsForDocument: getFormattingEditsForDocument, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, getDocCommentTemplateAtPosition: getDocCommentTemplateAtPosition, + isValidBraceCompletionAtPostion: isValidBraceCompletionAtPostion, getEmitOutput: getEmitOutput, getNonBoundSourceFile: getNonBoundSourceFile, getProgram: getProgram @@ -46433,8 +47488,9 @@ var ts; case 9: case 8: if (ts.isDeclarationName(node) || - node.parent.kind === 239 || - isArgumentOfElementAccessExpression(node)) { + node.parent.kind === 240 || + isArgumentOfElementAccessExpression(node) || + ts.isLiteralComputedPropertyDeclarationName(node)) { nameTable[node.text] = nameTable[node.text] === undefined ? node.pos : -1; } break; @@ -46446,7 +47502,7 @@ var ts; function isArgumentOfElementAccessExpression(node) { return node && node.parent && - node.parent.kind === 172 && + node.parent.kind === 173 && node.parent.argumentExpression === node; } function createClassifier() { @@ -46468,7 +47524,7 @@ var ts; function canFollow(keyword1, keyword2) { if (ts.isAccessibilityModifier(keyword1)) { if (keyword2 === 123 || - keyword2 === 130 || + keyword2 === 131 || keyword2 === 121 || keyword2 === 113) { return true; @@ -46584,10 +47640,10 @@ var ts; angleBracketStack--; } else if (token === 117 || - token === 131 || - token === 129 || + token === 132 || + token === 130 || token === 120 || - token === 132) { + token === 133) { if (angleBracketStack > 0 && !syntacticClassifierAbsent) { token = 69; } @@ -46628,7 +47684,7 @@ var ts; var end = scanner.getTextPos(); addResult(start, end, classFromKind(token)); if (end >= text.length) { - if (token === 9 || token === 165) { + if (token === 9 || token === 166) { var tokenText = scanner.getTokenText(); if (scanner.isUnterminated()) { var lastCharIndex = tokenText.length - 1; @@ -46742,7 +47798,7 @@ var ts; } } function isKeyword(token) { - return token >= 70 && token <= 137; + return token >= 70 && token <= 138; } function classFromKind(token) { if (isKeyword(token)) { @@ -46758,7 +47814,7 @@ var ts; case 8: return 4; case 9: - case 165: + case 166: return 6; case 10: return 7; @@ -46866,6 +47922,13 @@ var ts; text: ts.flattenDiagnosticMessageText(diag.messageText, "\n") }; } + function formatConfigFileDiag(diag) { + return { + start: undefined, + end: undefined, + text: ts.flattenDiagnosticMessageText(diag.messageText, "\n") + }; + } function allEditsBeforePos(edits, pos) { for (var i = 0, len = edits.length; i < len; i++) { if (ts.textSpanEnd(edits[i].span) >= pos) { @@ -46939,7 +48002,22 @@ var ts; }, _a[CommandNames.Open] = function (request) { var openArgs = request.arguments; - _this.openClientFile(openArgs.file, openArgs.fileContent); + var scriptKind; + switch (openArgs.scriptKindName) { + case "TS": + scriptKind = 3; + break; + case "JS": + scriptKind = 1; + break; + case "TSX": + scriptKind = 4; + break; + case "JSX": + scriptKind = 2; + break; + } + _this.openClientFile(openArgs.file, openArgs.fileContent, scriptKind); return { responseRequired: false }; }, _a[CommandNames.Quickinfo] = function (request) { @@ -46960,7 +48038,9 @@ var ts; }, _a[CommandNames.CompletionDetails] = function (request) { var completionDetailsArgs = request.arguments; - return { response: _this.getCompletionEntryDetails(completionDetailsArgs.line, completionDetailsArgs.offset, completionDetailsArgs.entryNames, completionDetailsArgs.file), responseRequired: true }; + return { + response: _this.getCompletionEntryDetails(completionDetailsArgs.line, completionDetailsArgs.offset, completionDetailsArgs.entryNames, completionDetailsArgs.file), responseRequired: true + }; }, _a[CommandNames.SignatureHelp] = function (request) { var signatureHelpArgs = request.arguments; @@ -46988,7 +48068,7 @@ var ts; _a[CommandNames.Reload] = function (request) { var reloadArgs = request.arguments; _this.reload(reloadArgs.file, reloadArgs.tmpfile, request.seq); - return { responseRequired: false }; + return { response: { reloadFinished: true }, responseRequired: true }; }, _a[CommandNames.Saveto] = function (request) { var savetoArgs = request.arguments; @@ -47065,6 +48145,20 @@ var ts; this.sendLineToClient("Content-Length: " + (1 + this.byteLength(json, "utf8")) + "\r\n\r\n" + json); }; + Session.prototype.configFileDiagnosticEvent = function (triggerFile, configFile, diagnostics) { + var bakedDiags = ts.map(diagnostics, formatConfigFileDiag); + var ev = { + seq: 0, + type: "event", + event: "configFileDiag", + body: { + triggerFile: triggerFile, + configFile: configFile, + diagnostics: bakedDiags + } + }; + this.send(ev); + }; Session.prototype.event = function (info, eventName) { var ev = { seq: 0, @@ -47270,13 +48364,15 @@ var ts; }; Session.prototype.getRenameLocations = function (line, offset, fileName, findInComments, findInStrings) { var file = ts.normalizePath(fileName); - var project = this.projectService.getProjectForFile(file); - if (!project) { + var info = this.projectService.getScriptInfo(file); + var projects = this.projectService.findReferencingProjects(info); + if (!projects.length) { throw Errors.NoProject; } - var compilerService = project.compilerService; - var position = compilerService.host.lineOffsetToPosition(file, line, offset); - var renameInfo = compilerService.languageService.getRenameInfo(file, position); + var defaultProject = projects[0]; + var defaultProjectCompilerService = defaultProject.compilerService; + var position = defaultProjectCompilerService.host.lineOffsetToPosition(file, line, offset); + var renameInfo = defaultProjectCompilerService.languageService.getRenameInfo(file, position); if (!renameInfo) { return undefined; } @@ -47286,15 +48382,35 @@ var ts; locs: [] }; } - var renameLocations = compilerService.languageService.findRenameLocations(file, position, findInStrings, findInComments); - if (!renameLocations) { - return undefined; - } - var bakedRenameLocs = renameLocations.map(function (location) { return ({ - file: location.fileName, - start: compilerService.host.positionToLineOffset(location.fileName, location.textSpan.start), - end: compilerService.host.positionToLineOffset(location.fileName, ts.textSpanEnd(location.textSpan)) - }); }).sort(function (a, b) { + var fileSpans = server.combineProjectOutput(projects, function (project) { + var compilerService = project.compilerService; + var renameLocations = compilerService.languageService.findRenameLocations(file, position, findInStrings, findInComments); + if (!renameLocations) { + return []; + } + return renameLocations.map(function (location) { return ({ + file: location.fileName, + start: compilerService.host.positionToLineOffset(location.fileName, location.textSpan.start), + end: compilerService.host.positionToLineOffset(location.fileName, ts.textSpanEnd(location.textSpan)) + }); }); + }, compareRenameLocation, function (a, b) { return a.file === b.file && a.start.line === b.start.line && a.start.offset === b.start.offset; }); + var locs = fileSpans.reduce(function (accum, cur) { + var curFileAccum; + if (accum.length > 0) { + curFileAccum = accum[accum.length - 1]; + if (curFileAccum.file !== cur.file) { + curFileAccum = undefined; + } + } + if (!curFileAccum) { + curFileAccum = { file: cur.file, locs: [] }; + accum.push(curFileAccum); + } + curFileAccum.locs.push({ start: cur.start, end: cur.end }); + return accum; + }, []); + return { info: renameInfo, locs: locs }; + function compareRenameLocation(a, b) { if (a.file < b.file) { return -1; } @@ -47312,66 +48428,66 @@ var ts; return b.start.offset - a.start.offset; } } - }).reduce(function (accum, cur) { - var curFileAccum; - if (accum.length > 0) { - curFileAccum = accum[accum.length - 1]; - if (curFileAccum.file != cur.file) { - curFileAccum = undefined; - } - } - if (!curFileAccum) { - curFileAccum = { file: cur.file, locs: [] }; - accum.push(curFileAccum); - } - curFileAccum.locs.push({ start: cur.start, end: cur.end }); - return accum; - }, []); - return { info: renameInfo, locs: bakedRenameLocs }; + } }; Session.prototype.getReferences = function (line, offset, fileName) { var file = ts.normalizePath(fileName); - var project = this.projectService.getProjectForFile(file); - if (!project) { + var info = this.projectService.getScriptInfo(file); + var projects = this.projectService.findReferencingProjects(info); + if (!projects.length) { throw Errors.NoProject; } - var compilerService = project.compilerService; - var position = compilerService.host.lineOffsetToPosition(file, line, offset); - var references = compilerService.languageService.getReferencesAtPosition(file, position); - if (!references) { - return undefined; - } - var nameInfo = compilerService.languageService.getQuickInfoAtPosition(file, position); + var defaultProject = projects[0]; + var position = defaultProject.compilerService.host.lineOffsetToPosition(file, line, offset); + var nameInfo = defaultProject.compilerService.languageService.getQuickInfoAtPosition(file, position); if (!nameInfo) { return undefined; } var displayString = ts.displayPartsToString(nameInfo.displayParts); var nameSpan = nameInfo.textSpan; - var nameColStart = compilerService.host.positionToLineOffset(file, nameSpan.start).offset; - var nameText = compilerService.host.getScriptSnapshot(file).getText(nameSpan.start, ts.textSpanEnd(nameSpan)); - var bakedRefs = references.map(function (ref) { - var start = compilerService.host.positionToLineOffset(ref.fileName, ref.textSpan.start); - var refLineSpan = compilerService.host.lineToTextSpan(ref.fileName, start.line - 1); - var snap = compilerService.host.getScriptSnapshot(ref.fileName); - var lineText = snap.getText(refLineSpan.start, ts.textSpanEnd(refLineSpan)).replace(/\r|\n/g, ""); - return { - file: ref.fileName, - start: start, - lineText: lineText, - end: compilerService.host.positionToLineOffset(ref.fileName, ts.textSpanEnd(ref.textSpan)), - isWriteAccess: ref.isWriteAccess - }; - }).sort(compareFileStart); + var nameColStart = defaultProject.compilerService.host.positionToLineOffset(file, nameSpan.start).offset; + var nameText = defaultProject.compilerService.host.getScriptSnapshot(file).getText(nameSpan.start, ts.textSpanEnd(nameSpan)); + var refs = server.combineProjectOutput(projects, function (project) { + var compilerService = project.compilerService; + var references = compilerService.languageService.getReferencesAtPosition(file, position); + if (!references) { + return []; + } + return references.map(function (ref) { + var start = compilerService.host.positionToLineOffset(ref.fileName, ref.textSpan.start); + var refLineSpan = compilerService.host.lineToTextSpan(ref.fileName, start.line - 1); + var snap = compilerService.host.getScriptSnapshot(ref.fileName); + var lineText = snap.getText(refLineSpan.start, ts.textSpanEnd(refLineSpan)).replace(/\r|\n/g, ""); + return { + file: ref.fileName, + start: start, + lineText: lineText, + end: compilerService.host.positionToLineOffset(ref.fileName, ts.textSpanEnd(ref.textSpan)), + isWriteAccess: ref.isWriteAccess + }; + }); + }, compareFileStart, areReferencesResponseItemsForTheSameLocation); return { - refs: bakedRefs, + refs: refs, symbolName: nameText, symbolStartOffset: nameColStart, symbolDisplayString: displayString }; + function areReferencesResponseItemsForTheSameLocation(a, b) { + if (a && b) { + return a.file === b.file && + a.start === b.start && + a.end === b.end; + } + return false; + } }; - Session.prototype.openClientFile = function (fileName, fileContent) { + Session.prototype.openClientFile = function (fileName, fileContent, scriptKind) { var file = ts.normalizePath(fileName); - this.projectService.openClientFile(file, fileContent); + var _a = this.projectService.openClientFile(file, fileContent, scriptKind), configFileName = _a.configFileName, configFileErrors = _a.configFileErrors; + if (configFileErrors) { + this.configFileDiagnosticEvent(fileName, configFileName, configFileErrors); + } }; Session.prototype.getQuickInfo = function (line, offset, fileName) { var file = ts.normalizePath(fileName); @@ -47437,7 +48553,7 @@ var ts; var editorOptions = { IndentSize: formatOptions.IndentSize, TabSize: formatOptions.TabSize, - NewLineCharacter: "\n", + NewLineCharacter: formatOptions.NewLineCharacter, ConvertTabsToSpaces: formatOptions.ConvertTabsToSpaces, IndentStyle: ts.IndentStyle.Smart }; @@ -47629,39 +48745,52 @@ var ts; }; Session.prototype.getNavigateToItems = function (searchValue, fileName, maxResultCount) { var file = ts.normalizePath(fileName); - var project = this.projectService.getProjectForFile(file); - if (!project) { + var info = this.projectService.getScriptInfo(file); + var projects = this.projectService.findReferencingProjects(info); + var defaultProject = projects[0]; + if (!defaultProject) { throw Errors.NoProject; } - var compilerService = project.compilerService; - var navItems = compilerService.languageService.getNavigateToItems(searchValue, maxResultCount); - if (!navItems) { - return undefined; + var allNavToItems = server.combineProjectOutput(projects, function (project) { + var compilerService = project.compilerService; + var navItems = compilerService.languageService.getNavigateToItems(searchValue, maxResultCount); + if (!navItems) { + return []; + } + return navItems.map(function (navItem) { + var start = compilerService.host.positionToLineOffset(navItem.fileName, navItem.textSpan.start); + var end = compilerService.host.positionToLineOffset(navItem.fileName, ts.textSpanEnd(navItem.textSpan)); + var bakedItem = { + name: navItem.name, + kind: navItem.kind, + file: navItem.fileName, + start: start, + end: end + }; + if (navItem.kindModifiers && (navItem.kindModifiers !== "")) { + bakedItem.kindModifiers = navItem.kindModifiers; + } + if (navItem.matchKind !== "none") { + bakedItem.matchKind = navItem.matchKind; + } + if (navItem.containerName && (navItem.containerName.length > 0)) { + bakedItem.containerName = navItem.containerName; + } + if (navItem.containerKind && (navItem.containerKind.length > 0)) { + bakedItem.containerKind = navItem.containerKind; + } + return bakedItem; + }); + }, undefined, areNavToItemsForTheSameLocation); + return allNavToItems; + function areNavToItemsForTheSameLocation(a, b) { + if (a && b) { + return a.file === b.file && + a.start === b.start && + a.end === b.end; + } + return false; } - return navItems.map(function (navItem) { - var start = compilerService.host.positionToLineOffset(navItem.fileName, navItem.textSpan.start); - var end = compilerService.host.positionToLineOffset(navItem.fileName, ts.textSpanEnd(navItem.textSpan)); - var bakedItem = { - name: navItem.name, - kind: navItem.kind, - file: navItem.fileName, - start: start, - end: end - }; - if (navItem.kindModifiers && (navItem.kindModifiers != "")) { - bakedItem.kindModifiers = navItem.kindModifiers; - } - if (navItem.matchKind !== "none") { - bakedItem.matchKind = navItem.matchKind; - } - if (navItem.containerName && (navItem.containerName.length > 0)) { - bakedItem.containerName = navItem.containerName; - } - if (navItem.containerKind && (navItem.containerKind.length > 0)) { - bakedItem.containerKind = navItem.containerKind; - } - return bakedItem; - }); }; Session.prototype.getBraceMatching = function (line, offset, fileName) { var file = ts.normalizePath(fileName); @@ -47800,7 +48929,7 @@ var ts; this.content = content; this.isOpen = isOpen; this.children = []; - this.formatCodeOptions = ts.clone(CompilerService.defaultFormatCodeOptions); + this.formatCodeOptions = ts.clone(CompilerService.getDefaultFormatCodeOptions(this.host)); this.path = ts.toPath(fileName, host.getCurrentDirectory(), ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames)); this.svc = ScriptVersionCache.fromString(host, content); } @@ -47861,17 +48990,17 @@ var ts; var resolvedModules = []; var compilerOptions = this.getCompilationSettings(); for (var _i = 0, names_2 = names; _i < names_2.length; _i++) { - var name_42 = names_2[_i]; - var resolution = ts.lookUp(newResolutions, name_42); + var name_41 = names_2[_i]; + var resolution = ts.lookUp(newResolutions, name_41); if (!resolution) { - var existingResolution = currentResolutionsInFile && ts.lookUp(currentResolutionsInFile, name_42); + var existingResolution = currentResolutionsInFile && ts.lookUp(currentResolutionsInFile, name_41); if (moduleResolutionIsValid(existingResolution)) { resolution = existingResolution; } else { - resolution = loader(name_42, containingFile, compilerOptions, this.moduleResolutionHost); + resolution = loader(name_41, containingFile, compilerOptions, this.moduleResolutionHost); resolution.lastCheckTime = Date.now(); - newResolutions[name_42] = resolution; + newResolutions[name_41] = resolution; } } ts.Debug.assert(resolution !== undefined); @@ -47924,8 +49053,15 @@ var ts; LSHost.prototype.getScriptFileNames = function () { return this.roots.map(function (root) { return root.fileName; }); }; - LSHost.prototype.getScriptKind = function () { - return 0; + LSHost.prototype.getScriptKind = function (fileName) { + var info = this.getScriptInfo(fileName); + if (!info) { + return undefined; + } + if (!info.scriptKind) { + info.scriptKind = ts.getScriptKindFromFileName(fileName); + } + return info.scriptKind; }; LSHost.prototype.getScriptVersion = function (filename) { return this.getScriptInfo(filename).svc.latestVersion().toString(); @@ -48129,6 +49265,11 @@ var ts; } return copiedList; } + function combineProjectOutput(projects, action, comparer, areEqual) { + var result = projects.reduce(function (previous, current) { return ts.concatenate(previous, action(current)); }, []).sort(comparer); + return projects.length > 1 ? ts.deduplicate(result, areEqual) : result; + } + server.combineProjectOutput = combineProjectOutput; var ProjectService = (function () { function ProjectService(host, psLogger, eventHandler) { this.host = host; @@ -48147,7 +49288,7 @@ var ts; } ProjectService.prototype.addDefaultHostConfiguration = function () { this.hostConfiguration = { - formatCodeOptions: ts.clone(CompilerService.defaultFormatCodeOptions), + formatCodeOptions: ts.clone(CompilerService.getDefaultFormatCodeOptions(this.host)), hostInfo: "Unknown host" }; }; @@ -48184,9 +49325,9 @@ var ts; ProjectService.prototype.startTimerForDetectingProjectFileListChanges = function (project) { var _this = this; if (this.timerForDetectingProjectFileListChanges[project.projectFilename]) { - clearTimeout(this.timerForDetectingProjectFileListChanges[project.projectFilename]); + this.host.clearTimeout(this.timerForDetectingProjectFileListChanges[project.projectFilename]); } - this.timerForDetectingProjectFileListChanges[project.projectFilename] = setTimeout(function () { return _this.handleProjectFileListChanges(project); }, 250); + this.timerForDetectingProjectFileListChanges[project.projectFilename] = this.host.setTimeout(function () { return _this.handleProjectFileListChanges(project); }, 250); }; ProjectService.prototype.handleProjectFileListChanges = function (project) { var _this = this; @@ -48451,6 +49592,7 @@ var ts; configuredProject.updateGraph(); if (configuredProject.getSourceFile(info)) { info.defaultProject = configuredProject; + referencingProjects.push(configuredProject); } } return referencingProjects; @@ -48525,7 +49667,7 @@ var ts; filename = ts.normalizePath(filename); return ts.lookUp(this.filenameToScriptInfo, filename); }; - ProjectService.prototype.openFile = function (fileName, openedByClient, fileContent) { + ProjectService.prototype.openFile = function (fileName, openedByClient, fileContent, scriptKind) { var _this = this; fileName = ts.normalizePath(fileName); var info = ts.lookUp(this.filenameToScriptInfo, fileName); @@ -48541,6 +49683,7 @@ var ts; } if (content !== undefined) { info = new ScriptInfo(this.host, fileName, content, openedByClient); + info.scriptKind = scriptKind; info.setFormatOptions(this.getFormatCodeOptions()); this.filenameToScriptInfo[fileName] = info; if (!info.isOpen) { @@ -48576,12 +49719,12 @@ var ts; } return undefined; }; - ProjectService.prototype.openClientFile = function (fileName, fileContent) { - this.openOrUpdateConfiguredProjectForFile(fileName); - var info = this.openFile(fileName, true, fileContent); + ProjectService.prototype.openClientFile = function (fileName, fileContent, scriptKind) { + var _a = this.openOrUpdateConfiguredProjectForFile(fileName), configFileName = _a.configFileName, configFileErrors = _a.configFileErrors; + var info = this.openFile(fileName, true, fileContent, scriptKind); this.addOpenFile(info); this.printProjects(); - return info; + return { configFileName: configFileName, configFileErrors: configFileErrors }; }; ProjectService.prototype.openOrUpdateConfiguredProjectForFile = function (fileName) { var searchPath = ts.normalizePath(ts.getDirectoryPath(fileName)); @@ -48593,11 +49736,14 @@ var ts; if (!project) { var configResult = this.openConfigFile(configFileName, fileName); if (!configResult.success) { - this.log("Error opening config file " + configFileName + " " + configResult.errorMsg); + return { configFileName: configFileName, configFileErrors: configResult.errors }; } else { this.log("Opened configuration file " + configFileName, "Info"); this.configuredProjects.push(configResult.project); + if (configResult.errors && configResult.errors.length > 0) { + return { configFileName: configFileName, configFileErrors: configResult.errors }; + } } } else { @@ -48607,6 +49753,7 @@ var ts; else { this.log("No config files found."); } + return {}; }; ProjectService.prototype.closeClientFile = function (filename) { var info = ts.lookUp(this.filenameToScriptInfo, filename); @@ -48691,16 +49838,17 @@ var ts; var contents = this.host.readFile(configFilename); var rawConfig = ts.parseConfigFileTextToJson(configFilename, contents); if (rawConfig.error) { - return { succeeded: false, error: rawConfig.error }; + return { succeeded: false, errors: [rawConfig.error] }; } else { var parsedCommandLine = ts.parseJsonConfigFileContent(rawConfig.config, this.host, dirPath, {}, configFilename); ts.Debug.assert(!!parsedCommandLine.fileNames); if (parsedCommandLine.errors && (parsedCommandLine.errors.length > 0)) { - return { succeeded: false, error: { errorMsg: "tsconfig option errors" } }; + return { succeeded: false, errors: parsedCommandLine.errors }; } else if (parsedCommandLine.fileNames.length === 0) { - return { succeeded: false, error: { errorMsg: "no files found" } }; + var error = ts.createCompilerDiagnostic(ts.Diagnostics.The_config_file_0_found_doesn_t_contain_any_source_files, configFilename); + return { succeeded: false, errors: [error] }; } else { var projectOptions = { @@ -48713,12 +49861,13 @@ var ts; }; ProjectService.prototype.openConfigFile = function (configFilename, clientFileName) { var _this = this; - var _a = this.configFileToProjectOptions(configFilename), succeeded = _a.succeeded, projectOptions = _a.projectOptions, error = _a.error; + var _a = this.configFileToProjectOptions(configFilename), succeeded = _a.succeeded, projectOptions = _a.projectOptions, errors = _a.errors; if (!succeeded) { - return error; + return { success: false, errors: errors }; } else { var project_1 = this.createProject(configFilename, projectOptions); + var errors_1; for (var _i = 0, _b = projectOptions.files; _i < _b.length; _i++) { var rootFilename = _b[_i]; if (this.host.fileExists(rootFilename)) { @@ -48726,29 +49875,30 @@ var ts; project_1.addRoot(info); } else { - return { errorMsg: "specified file " + rootFilename + " not found" }; + (errors_1 || (errors_1 = [])).push(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, rootFilename)); } } project_1.finishGraph(); project_1.projectFileWatcher = this.host.watchFile(configFilename, function (_) { return _this.watchedProjectConfigFileChanged(project_1); }); this.log("Add recursive watcher for: " + ts.getDirectoryPath(configFilename)); project_1.directoryWatcher = this.host.watchDirectory(ts.getDirectoryPath(configFilename), function (path) { return _this.directoryWatchedForSourceFilesChanged(project_1, path); }, true); - return { success: true, project: project_1 }; + return { success: true, project: project_1, errors: errors_1 }; } }; ProjectService.prototype.updateConfiguredProject = function (project) { + var _this = this; if (!this.host.fileExists(project.projectFilename)) { this.log("Config file deleted"); this.removeProject(project); } else { - var _a = this.configFileToProjectOptions(project.projectFilename), succeeded = _a.succeeded, projectOptions = _a.projectOptions, error = _a.error; + var _a = this.configFileToProjectOptions(project.projectFilename), succeeded = _a.succeeded, projectOptions = _a.projectOptions, errors = _a.errors; if (!succeeded) { - return error; + return errors; } else { var oldFileNames_1 = project.compilerService.host.roots.map(function (info) { return info.fileName; }); - var newFileNames_1 = projectOptions.files; + var newFileNames_1 = ts.filter(projectOptions.files, function (f) { return _this.host.fileExists(f); }); var fileNamesToRemove = oldFileNames_1.filter(function (f) { return newFileNames_1.indexOf(f) < 0; }); var fileNamesToAdd = newFileNames_1.filter(function (f) { return oldFileNames_1.indexOf(f) < 0; }); for (var _i = 0, fileNamesToRemove_1 = fileNamesToRemove; _i < fileNamesToRemove_1.length; _i++) { @@ -48819,22 +49969,24 @@ var ts; var sourceFile = this.languageService.getNonBoundSourceFile(filename); return ts.isExternalModule(sourceFile); }; - CompilerService.defaultFormatCodeOptions = { - IndentSize: 4, - TabSize: 4, - NewLineCharacter: ts.sys ? ts.sys.newLine : "\n", - ConvertTabsToSpaces: true, - IndentStyle: ts.IndentStyle.Smart, - InsertSpaceAfterCommaDelimiter: true, - InsertSpaceAfterSemicolonInForStatements: true, - InsertSpaceBeforeAndAfterBinaryOperators: true, - InsertSpaceAfterKeywordsInControlFlowStatements: true, - InsertSpaceAfterFunctionKeywordForAnonymousFunctions: false, - InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false, - InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false, - InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false, - PlaceOpenBraceOnNewLineForFunctions: false, - PlaceOpenBraceOnNewLineForControlBlocks: false + CompilerService.getDefaultFormatCodeOptions = function (host) { + return ts.clone({ + IndentSize: 4, + TabSize: 4, + NewLineCharacter: host.newLine || "\n", + ConvertTabsToSpaces: true, + IndentStyle: ts.IndentStyle.Smart, + InsertSpaceAfterCommaDelimiter: true, + InsertSpaceAfterSemicolonInForStatements: true, + InsertSpaceBeforeAndAfterBinaryOperators: true, + InsertSpaceAfterKeywordsInControlFlowStatements: true, + InsertSpaceAfterFunctionKeywordForAnonymousFunctions: false, + InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false, + InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false, + InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false, + PlaceOpenBraceOnNewLineForFunctions: false, + PlaceOpenBraceOnNewLineForControlBlocks: false + }); }; return CompilerService; }()); @@ -49079,6 +50231,9 @@ var ts; }; ScriptVersionCache.prototype.reloadFromFile = function (filename, cb) { var content = this.host.readFile(filename); + if (!content) { + content = ""; + } this.reload(content); if (cb) cb(); @@ -49811,6 +50966,73 @@ var ts; } return new Logger(fileName, detailLevel); } + function createPollingWatchedFileSet(interval, chunkSize) { + if (interval === void 0) { interval = 2500; } + if (chunkSize === void 0) { chunkSize = 30; } + var watchedFiles = []; + var nextFileToCheck = 0; + var watchTimer; + function getModifiedTime(fileName) { + return fs.statSync(fileName).mtime; + } + function poll(checkedIndex) { + var watchedFile = watchedFiles[checkedIndex]; + if (!watchedFile) { + return; + } + fs.stat(watchedFile.fileName, function (err, stats) { + if (err) { + watchedFile.callback(watchedFile.fileName); + } + else if (watchedFile.mtime.getTime() !== stats.mtime.getTime()) { + watchedFile.mtime = getModifiedTime(watchedFile.fileName); + watchedFile.callback(watchedFile.fileName, watchedFile.mtime.getTime() === 0); + } + }); + } + function startWatchTimer() { + watchTimer = setInterval(function () { + var count = 0; + var nextToCheck = nextFileToCheck; + var firstCheck = -1; + while ((count < chunkSize) && (nextToCheck !== firstCheck)) { + poll(nextToCheck); + if (firstCheck < 0) { + firstCheck = nextToCheck; + } + nextToCheck++; + if (nextToCheck === watchedFiles.length) { + nextToCheck = 0; + } + count++; + } + nextFileToCheck = nextToCheck; + }, interval); + } + function addFile(fileName, callback) { + var file = { + fileName: fileName, + callback: callback, + mtime: getModifiedTime(fileName) + }; + watchedFiles.push(file); + if (watchedFiles.length === 1) { + startWatchTimer(); + } + return file; + } + function removeFile(file) { + watchedFiles = ts.copyListRemovingItem(file, watchedFiles); + } + return { + getModifiedTime: getModifiedTime, + poll: poll, + startWatchTimer: startWatchTimer, + addFile: addFile, + removeFile: removeFile + }; + } + var pollingWatchedFileSet = createPollingWatchedFileSet(); var logger = createLoggerFromEnv(); var pending = []; var canWrite = true; @@ -49829,8 +51051,17 @@ var ts; writeMessage(pending.shift()); } } - ts.sys.write = function (s) { return writeMessage(s); }; - var ioSession = new IOSession(ts.sys, logger); + var sys = ts.sys; + sys.write = function (s) { return writeMessage(s); }; + sys.watchFile = function (fileName, callback) { + var watchedFile = pollingWatchedFileSet.addFile(fileName, callback); + return { + close: function () { return pollingWatchedFileSet.removeFile(watchedFile); } + }; + }; + sys.setTimeout = setTimeout; + sys.clearTimeout = clearTimeout; + var ioSession = new IOSession(sys, logger); process.on("uncaughtException", function (err) { ioSession.logError(err, "unknown"); }); @@ -49993,6 +51224,9 @@ var ts; if ("directoryExists" in this.shimHost) { this.directoryExists = function (directoryName) { return _this.shimHost.directoryExists(directoryName); }; } + if ("realpath" in this.shimHost) { + this.realpath = function (path) { return _this.shimHost.realpath(path); }; + } } CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extension, exclude, depth) { var encoded; @@ -50180,6 +51414,10 @@ var ts; var _this = this; return this.forwardJSONCall("getBraceMatchingAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getBraceMatchingAtPosition(fileName, position); }); }; + LanguageServiceShimObject.prototype.isValidBraceCompletionAtPostion = function (fileName, position, openingBrace) { + var _this = this; + return this.forwardJSONCall("isValidBraceCompletionAtPostion('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPostion(fileName, position, openingBrace); }); + }; LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options) { var _this = this; return this.forwardJSONCall("getIndentationAtPosition('" + fileName + "', " + position + ")", function () { @@ -50362,6 +51600,7 @@ var ts; options: {}, typingOptions: {}, files: [], + raw: {}, errors: [realizeDiagnostic(result.error, "\r\n")] }; } @@ -50371,6 +51610,7 @@ var ts; options: configFile.options, typingOptions: configFile.typingOptions, files: configFile.fileNames, + raw: configFile.raw, errors: realizeDiagnostics(configFile.errors, "\r\n") }; }); diff --git a/lib/tsserverlibrary.d.ts b/lib/tsserverlibrary.d.ts new file mode 100644 index 00000000000..0629ad983a3 --- /dev/null +++ b/lib/tsserverlibrary.d.ts @@ -0,0 +1,8618 @@ +/// +declare namespace ts { + interface Map { + [index: string]: T; + } + type Path = string & { + __pathBrand: any; + }; + interface FileMap { + get(fileName: Path): T; + set(fileName: Path, value: T): void; + contains(fileName: Path): boolean; + remove(fileName: Path): void; + forEachValue(f: (key: Path, v: T) => void): void; + clear(): void; + } + interface TextRange { + pos: number; + end: number; + } + const enum SyntaxKind { + Unknown = 0, + EndOfFileToken = 1, + SingleLineCommentTrivia = 2, + MultiLineCommentTrivia = 3, + NewLineTrivia = 4, + WhitespaceTrivia = 5, + ShebangTrivia = 6, + ConflictMarkerTrivia = 7, + NumericLiteral = 8, + StringLiteral = 9, + RegularExpressionLiteral = 10, + NoSubstitutionTemplateLiteral = 11, + TemplateHead = 12, + TemplateMiddle = 13, + TemplateTail = 14, + OpenBraceToken = 15, + CloseBraceToken = 16, + OpenParenToken = 17, + CloseParenToken = 18, + OpenBracketToken = 19, + CloseBracketToken = 20, + DotToken = 21, + DotDotDotToken = 22, + SemicolonToken = 23, + CommaToken = 24, + LessThanToken = 25, + LessThanSlashToken = 26, + GreaterThanToken = 27, + LessThanEqualsToken = 28, + GreaterThanEqualsToken = 29, + EqualsEqualsToken = 30, + ExclamationEqualsToken = 31, + EqualsEqualsEqualsToken = 32, + ExclamationEqualsEqualsToken = 33, + EqualsGreaterThanToken = 34, + PlusToken = 35, + MinusToken = 36, + AsteriskToken = 37, + AsteriskAsteriskToken = 38, + SlashToken = 39, + PercentToken = 40, + PlusPlusToken = 41, + MinusMinusToken = 42, + LessThanLessThanToken = 43, + GreaterThanGreaterThanToken = 44, + GreaterThanGreaterThanGreaterThanToken = 45, + AmpersandToken = 46, + BarToken = 47, + CaretToken = 48, + ExclamationToken = 49, + TildeToken = 50, + AmpersandAmpersandToken = 51, + BarBarToken = 52, + QuestionToken = 53, + ColonToken = 54, + AtToken = 55, + EqualsToken = 56, + PlusEqualsToken = 57, + MinusEqualsToken = 58, + AsteriskEqualsToken = 59, + AsteriskAsteriskEqualsToken = 60, + SlashEqualsToken = 61, + PercentEqualsToken = 62, + LessThanLessThanEqualsToken = 63, + GreaterThanGreaterThanEqualsToken = 64, + GreaterThanGreaterThanGreaterThanEqualsToken = 65, + AmpersandEqualsToken = 66, + BarEqualsToken = 67, + CaretEqualsToken = 68, + Identifier = 69, + BreakKeyword = 70, + CaseKeyword = 71, + CatchKeyword = 72, + ClassKeyword = 73, + ConstKeyword = 74, + ContinueKeyword = 75, + DebuggerKeyword = 76, + DefaultKeyword = 77, + DeleteKeyword = 78, + DoKeyword = 79, + ElseKeyword = 80, + EnumKeyword = 81, + ExportKeyword = 82, + ExtendsKeyword = 83, + FalseKeyword = 84, + FinallyKeyword = 85, + ForKeyword = 86, + FunctionKeyword = 87, + IfKeyword = 88, + ImportKeyword = 89, + InKeyword = 90, + InstanceOfKeyword = 91, + NewKeyword = 92, + NullKeyword = 93, + ReturnKeyword = 94, + SuperKeyword = 95, + SwitchKeyword = 96, + ThisKeyword = 97, + ThrowKeyword = 98, + TrueKeyword = 99, + TryKeyword = 100, + TypeOfKeyword = 101, + VarKeyword = 102, + VoidKeyword = 103, + WhileKeyword = 104, + WithKeyword = 105, + ImplementsKeyword = 106, + InterfaceKeyword = 107, + LetKeyword = 108, + PackageKeyword = 109, + PrivateKeyword = 110, + ProtectedKeyword = 111, + PublicKeyword = 112, + StaticKeyword = 113, + YieldKeyword = 114, + AbstractKeyword = 115, + AsKeyword = 116, + AnyKeyword = 117, + AsyncKeyword = 118, + AwaitKeyword = 119, + BooleanKeyword = 120, + ConstructorKeyword = 121, + DeclareKeyword = 122, + GetKeyword = 123, + IsKeyword = 124, + ModuleKeyword = 125, + NamespaceKeyword = 126, + NeverKeyword = 127, + ReadonlyKeyword = 128, + RequireKeyword = 129, + NumberKeyword = 130, + SetKeyword = 131, + StringKeyword = 132, + SymbolKeyword = 133, + TypeKeyword = 134, + UndefinedKeyword = 135, + FromKeyword = 136, + GlobalKeyword = 137, + OfKeyword = 138, + QualifiedName = 139, + ComputedPropertyName = 140, + TypeParameter = 141, + Parameter = 142, + Decorator = 143, + PropertySignature = 144, + PropertyDeclaration = 145, + MethodSignature = 146, + MethodDeclaration = 147, + Constructor = 148, + GetAccessor = 149, + SetAccessor = 150, + CallSignature = 151, + ConstructSignature = 152, + IndexSignature = 153, + TypePredicate = 154, + TypeReference = 155, + FunctionType = 156, + ConstructorType = 157, + TypeQuery = 158, + TypeLiteral = 159, + ArrayType = 160, + TupleType = 161, + UnionType = 162, + IntersectionType = 163, + ParenthesizedType = 164, + ThisType = 165, + StringLiteralType = 166, + ObjectBindingPattern = 167, + ArrayBindingPattern = 168, + BindingElement = 169, + ArrayLiteralExpression = 170, + ObjectLiteralExpression = 171, + PropertyAccessExpression = 172, + ElementAccessExpression = 173, + CallExpression = 174, + NewExpression = 175, + TaggedTemplateExpression = 176, + TypeAssertionExpression = 177, + ParenthesizedExpression = 178, + FunctionExpression = 179, + ArrowFunction = 180, + DeleteExpression = 181, + TypeOfExpression = 182, + VoidExpression = 183, + AwaitExpression = 184, + PrefixUnaryExpression = 185, + PostfixUnaryExpression = 186, + BinaryExpression = 187, + ConditionalExpression = 188, + TemplateExpression = 189, + YieldExpression = 190, + SpreadElementExpression = 191, + ClassExpression = 192, + OmittedExpression = 193, + ExpressionWithTypeArguments = 194, + AsExpression = 195, + NonNullExpression = 196, + TemplateSpan = 197, + SemicolonClassElement = 198, + Block = 199, + VariableStatement = 200, + EmptyStatement = 201, + ExpressionStatement = 202, + IfStatement = 203, + DoStatement = 204, + WhileStatement = 205, + ForStatement = 206, + ForInStatement = 207, + ForOfStatement = 208, + ContinueStatement = 209, + BreakStatement = 210, + ReturnStatement = 211, + WithStatement = 212, + SwitchStatement = 213, + LabeledStatement = 214, + ThrowStatement = 215, + TryStatement = 216, + DebuggerStatement = 217, + VariableDeclaration = 218, + VariableDeclarationList = 219, + FunctionDeclaration = 220, + ClassDeclaration = 221, + InterfaceDeclaration = 222, + TypeAliasDeclaration = 223, + EnumDeclaration = 224, + ModuleDeclaration = 225, + ModuleBlock = 226, + CaseBlock = 227, + GlobalModuleExportDeclaration = 228, + ImportEqualsDeclaration = 229, + ImportDeclaration = 230, + ImportClause = 231, + NamespaceImport = 232, + NamedImports = 233, + ImportSpecifier = 234, + ExportAssignment = 235, + ExportDeclaration = 236, + NamedExports = 237, + ExportSpecifier = 238, + MissingDeclaration = 239, + ExternalModuleReference = 240, + JsxElement = 241, + JsxSelfClosingElement = 242, + JsxOpeningElement = 243, + JsxText = 244, + JsxClosingElement = 245, + JsxAttribute = 246, + JsxSpreadAttribute = 247, + JsxExpression = 248, + CaseClause = 249, + DefaultClause = 250, + HeritageClause = 251, + CatchClause = 252, + PropertyAssignment = 253, + ShorthandPropertyAssignment = 254, + EnumMember = 255, + SourceFile = 256, + JSDocTypeExpression = 257, + JSDocAllType = 258, + JSDocUnknownType = 259, + JSDocArrayType = 260, + JSDocUnionType = 261, + JSDocTupleType = 262, + JSDocNullableType = 263, + JSDocNonNullableType = 264, + JSDocRecordType = 265, + JSDocRecordMember = 266, + JSDocTypeReference = 267, + JSDocOptionalType = 268, + JSDocFunctionType = 269, + JSDocVariadicType = 270, + JSDocConstructorType = 271, + JSDocThisType = 272, + JSDocComment = 273, + JSDocTag = 274, + JSDocParameterTag = 275, + JSDocReturnTag = 276, + JSDocTypeTag = 277, + JSDocTemplateTag = 278, + SyntaxList = 279, + Count = 280, + FirstAssignment = 56, + LastAssignment = 68, + FirstReservedWord = 70, + LastReservedWord = 105, + FirstKeyword = 70, + LastKeyword = 138, + FirstFutureReservedWord = 106, + LastFutureReservedWord = 114, + FirstTypeNode = 154, + LastTypeNode = 166, + FirstPunctuation = 15, + LastPunctuation = 68, + FirstToken = 0, + LastToken = 138, + FirstTriviaToken = 2, + LastTriviaToken = 7, + FirstLiteralToken = 8, + LastLiteralToken = 11, + FirstTemplateToken = 11, + LastTemplateToken = 14, + FirstBinaryOperator = 25, + LastBinaryOperator = 68, + FirstNode = 139, + } + const enum NodeFlags { + None = 0, + Export = 1, + Ambient = 2, + Public = 4, + Private = 8, + Protected = 16, + Static = 32, + Readonly = 64, + Abstract = 128, + Async = 256, + Default = 512, + Let = 1024, + Const = 2048, + Namespace = 4096, + ExportContext = 8192, + ContainsThis = 16384, + HasImplicitReturn = 32768, + HasExplicitReturn = 65536, + GlobalAugmentation = 131072, + HasClassExtends = 262144, + HasDecorators = 524288, + HasParamDecorators = 1048576, + HasAsyncFunctions = 2097152, + DisallowInContext = 4194304, + YieldContext = 8388608, + DecoratorContext = 16777216, + AwaitContext = 33554432, + ThisNodeHasError = 67108864, + JavaScriptFile = 134217728, + ThisNodeOrAnySubNodesHasError = 268435456, + HasAggregatedChildData = 536870912, + HasJsxSpreadAttribute = 1073741824, + Modifier = 1023, + AccessibilityModifier = 28, + ParameterPropertyModifier = 92, + BlockScoped = 3072, + ReachabilityCheckFlags = 98304, + EmitHelperFlags = 3932160, + ContextFlags = 197132288, + TypeExcludesFlags = 41943040, + } + const enum JsxFlags { + None = 0, + IntrinsicNamedElement = 1, + IntrinsicIndexedElement = 2, + IntrinsicElement = 3, + } + const enum RelationComparisonResult { + Succeeded = 1, + Failed = 2, + FailedAndReported = 3, + } + interface Node extends TextRange { + kind: SyntaxKind; + flags: NodeFlags; + decorators?: NodeArray; + modifiers?: ModifiersArray; + id?: number; + parent?: Node; + jsDocComment?: JSDocComment; + symbol?: Symbol; + locals?: SymbolTable; + nextContainer?: Node; + localSymbol?: Symbol; + flowNode?: FlowNode; + } + interface NodeArray extends Array, TextRange { + hasTrailingComma?: boolean; + } + interface ModifiersArray extends NodeArray { + flags: number; + } + interface Modifier extends Node { + } + interface Identifier extends PrimaryExpression { + text: string; + originalKeywordKind?: SyntaxKind; + } + interface QualifiedName extends Node { + left: EntityName; + right: Identifier; + } + type EntityName = Identifier | QualifiedName; + type PropertyName = Identifier | LiteralExpression | ComputedPropertyName; + type DeclarationName = Identifier | LiteralExpression | ComputedPropertyName | BindingPattern; + interface Declaration extends Node { + _declarationBrand: any; + name?: DeclarationName; + } + interface DeclarationStatement extends Declaration, Statement { + name?: Identifier; + } + interface ComputedPropertyName extends Node { + expression: Expression; + } + interface Decorator extends Node { + expression: LeftHandSideExpression; + } + interface TypeParameterDeclaration extends Declaration { + name: Identifier; + constraint?: TypeNode; + expression?: Expression; + } + interface SignatureDeclaration extends Declaration { + name?: PropertyName; + typeParameters?: NodeArray; + parameters: NodeArray; + type?: TypeNode; + } + interface CallSignatureDeclaration extends SignatureDeclaration, TypeElement { + } + interface ConstructSignatureDeclaration extends SignatureDeclaration, TypeElement { + } + interface VariableDeclaration extends Declaration { + parent?: VariableDeclarationList; + name: Identifier | BindingPattern; + type?: TypeNode; + initializer?: Expression; + } + interface VariableDeclarationList extends Node { + declarations: NodeArray; + } + interface ParameterDeclaration extends Declaration { + dotDotDotToken?: Node; + name: Identifier | BindingPattern; + questionToken?: Node; + type?: TypeNode; + initializer?: Expression; + } + interface BindingElement extends Declaration { + propertyName?: PropertyName; + dotDotDotToken?: Node; + name: Identifier | BindingPattern; + initializer?: Expression; + } + interface PropertySignature extends TypeElement { + name: PropertyName; + questionToken?: Node; + type?: TypeNode; + initializer?: Expression; + } + interface PropertyDeclaration extends ClassElement { + questionToken?: Node; + name: PropertyName; + type?: TypeNode; + initializer?: Expression; + } + interface ObjectLiteralElement extends Declaration { + _objectLiteralBrandBrand: any; + name?: PropertyName; + } + interface PropertyAssignment extends ObjectLiteralElement { + _propertyAssignmentBrand: any; + name: PropertyName; + questionToken?: Node; + initializer: Expression; + } + interface ShorthandPropertyAssignment extends ObjectLiteralElement { + name: Identifier; + questionToken?: Node; + equalsToken?: Node; + objectAssignmentInitializer?: Expression; + } + interface VariableLikeDeclaration extends Declaration { + propertyName?: PropertyName; + dotDotDotToken?: Node; + name: DeclarationName; + questionToken?: Node; + type?: TypeNode; + initializer?: Expression; + } + interface PropertyLikeDeclaration extends Declaration { + name: PropertyName; + } + interface BindingPattern extends Node { + elements: NodeArray; + } + interface ObjectBindingPattern extends BindingPattern { + } + interface ArrayBindingPattern extends BindingPattern { + } + interface FunctionLikeDeclaration extends SignatureDeclaration { + _functionLikeDeclarationBrand: any; + asteriskToken?: Node; + questionToken?: Node; + body?: Block | Expression; + } + interface FunctionDeclaration extends FunctionLikeDeclaration, DeclarationStatement { + name?: Identifier; + body?: FunctionBody; + } + interface MethodSignature extends SignatureDeclaration, TypeElement { + name: PropertyName; + } + interface MethodDeclaration extends FunctionLikeDeclaration, ClassElement, ObjectLiteralElement { + name: PropertyName; + body?: FunctionBody; + } + interface ConstructorDeclaration extends FunctionLikeDeclaration, ClassElement { + body?: FunctionBody; + } + interface SemicolonClassElement extends ClassElement { + _semicolonClassElementBrand: any; + } + interface AccessorDeclaration extends FunctionLikeDeclaration, ClassElement, ObjectLiteralElement { + _accessorDeclarationBrand: any; + name: PropertyName; + body: FunctionBody; + } + interface GetAccessorDeclaration extends AccessorDeclaration { + } + interface SetAccessorDeclaration extends AccessorDeclaration { + } + interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement, TypeElement { + _indexSignatureDeclarationBrand: any; + } + interface TypeNode extends Node { + _typeNodeBrand: any; + } + interface ThisTypeNode extends TypeNode { + _thisTypeNodeBrand: any; + } + interface FunctionOrConstructorTypeNode extends TypeNode, SignatureDeclaration { + _functionOrConstructorTypeNodeBrand: any; + } + interface FunctionTypeNode extends FunctionOrConstructorTypeNode { + } + interface ConstructorTypeNode extends FunctionOrConstructorTypeNode { + } + interface TypeReferenceNode extends TypeNode { + typeName: EntityName; + typeArguments?: NodeArray; + } + interface TypePredicateNode extends TypeNode { + parameterName: Identifier | ThisTypeNode; + type: TypeNode; + } + interface TypeQueryNode extends TypeNode { + exprName: EntityName; + } + interface TypeLiteralNode extends TypeNode, Declaration { + members: NodeArray; + } + interface ArrayTypeNode extends TypeNode { + elementType: TypeNode; + } + interface TupleTypeNode extends TypeNode { + elementTypes: NodeArray; + } + interface UnionOrIntersectionTypeNode extends TypeNode { + types: NodeArray; + } + interface UnionTypeNode extends UnionOrIntersectionTypeNode { + } + interface IntersectionTypeNode extends UnionOrIntersectionTypeNode { + } + interface ParenthesizedTypeNode extends TypeNode { + type: TypeNode; + } + interface StringLiteralTypeNode extends LiteralLikeNode, TypeNode { + _stringLiteralTypeBrand: any; + } + interface StringLiteral extends LiteralExpression { + _stringLiteralBrand: any; + } + interface Expression extends Node { + _expressionBrand: any; + contextualType?: Type; + } + interface OmittedExpression extends Expression { + } + interface UnaryExpression extends Expression { + _unaryExpressionBrand: any; + } + interface IncrementExpression extends UnaryExpression { + _incrementExpressionBrand: any; + } + interface PrefixUnaryExpression extends IncrementExpression { + operator: SyntaxKind; + operand: UnaryExpression; + } + interface PostfixUnaryExpression extends IncrementExpression { + operand: LeftHandSideExpression; + operator: SyntaxKind; + } + interface PostfixExpression extends UnaryExpression { + _postfixExpressionBrand: any; + } + interface LeftHandSideExpression extends IncrementExpression { + _leftHandSideExpressionBrand: any; + } + interface MemberExpression extends LeftHandSideExpression { + _memberExpressionBrand: any; + } + interface PrimaryExpression extends MemberExpression { + _primaryExpressionBrand: any; + } + interface DeleteExpression extends UnaryExpression { + expression: UnaryExpression; + } + interface TypeOfExpression extends UnaryExpression { + expression: UnaryExpression; + } + interface VoidExpression extends UnaryExpression { + expression: UnaryExpression; + } + interface AwaitExpression extends UnaryExpression { + expression: UnaryExpression; + } + interface YieldExpression extends Expression { + asteriskToken?: Node; + expression?: Expression; + } + interface BinaryExpression extends Expression, Declaration { + left: Expression; + operatorToken: Node; + right: Expression; + } + interface ConditionalExpression extends Expression { + condition: Expression; + questionToken: Node; + whenTrue: Expression; + colonToken: Node; + whenFalse: Expression; + } + type FunctionBody = Block; + type ConciseBody = FunctionBody | Expression; + interface FunctionExpression extends PrimaryExpression, FunctionLikeDeclaration { + name?: Identifier; + body: FunctionBody; + } + interface ArrowFunction extends Expression, FunctionLikeDeclaration { + equalsGreaterThanToken: Node; + body: ConciseBody; + } + interface LiteralLikeNode extends Node { + text: string; + isUnterminated?: boolean; + hasExtendedUnicodeEscape?: boolean; + isOctalLiteral?: boolean; + } + interface LiteralExpression extends LiteralLikeNode, PrimaryExpression { + _literalExpressionBrand: any; + } + interface TemplateLiteralFragment extends LiteralLikeNode { + _templateLiteralFragmentBrand: any; + } + interface TemplateExpression extends PrimaryExpression { + head: TemplateLiteralFragment; + templateSpans: NodeArray; + } + interface TemplateSpan extends Node { + expression: Expression; + literal: TemplateLiteralFragment; + } + interface ParenthesizedExpression extends PrimaryExpression { + expression: Expression; + } + interface ArrayLiteralExpression extends PrimaryExpression { + elements: NodeArray; + multiLine?: boolean; + } + interface SpreadElementExpression extends Expression { + expression: Expression; + } + interface ObjectLiteralExpression extends PrimaryExpression, Declaration { + properties: NodeArray; + multiLine?: boolean; + } + interface PropertyAccessExpression extends MemberExpression, Declaration { + expression: LeftHandSideExpression; + dotToken: Node; + name: Identifier; + } + type IdentifierOrPropertyAccess = Identifier | PropertyAccessExpression; + interface ElementAccessExpression extends MemberExpression { + expression: LeftHandSideExpression; + argumentExpression?: Expression; + } + interface CallExpression extends LeftHandSideExpression, Declaration { + expression: LeftHandSideExpression; + typeArguments?: NodeArray; + arguments: NodeArray; + } + interface ExpressionWithTypeArguments extends TypeNode { + expression: LeftHandSideExpression; + typeArguments?: NodeArray; + } + interface NewExpression extends CallExpression, PrimaryExpression { + } + interface TaggedTemplateExpression extends MemberExpression { + tag: LeftHandSideExpression; + template: LiteralExpression | TemplateExpression; + } + type CallLikeExpression = CallExpression | NewExpression | TaggedTemplateExpression | Decorator; + interface AsExpression extends Expression { + expression: Expression; + type: TypeNode; + } + interface TypeAssertion extends UnaryExpression { + type: TypeNode; + expression: UnaryExpression; + } + type AssertionExpression = TypeAssertion | AsExpression; + interface NonNullExpression extends LeftHandSideExpression { + expression: Expression; + } + interface JsxElement extends PrimaryExpression { + openingElement: JsxOpeningElement; + children: NodeArray; + closingElement: JsxClosingElement; + } + interface JsxOpeningElement extends Expression { + _openingElementBrand?: any; + tagName: EntityName; + attributes: NodeArray; + } + interface JsxSelfClosingElement extends PrimaryExpression, JsxOpeningElement { + _selfClosingElementBrand?: any; + } + type JsxOpeningLikeElement = JsxSelfClosingElement | JsxOpeningElement; + interface JsxAttribute extends Node { + name: Identifier; + initializer?: Expression; + } + interface JsxSpreadAttribute extends Node { + expression: Expression; + } + interface JsxClosingElement extends Node { + tagName: EntityName; + } + interface JsxExpression extends Expression { + expression?: Expression; + } + interface JsxText extends Node { + _jsxTextExpressionBrand: any; + } + type JsxChild = JsxText | JsxExpression | JsxElement | JsxSelfClosingElement; + interface Statement extends Node { + _statementBrand: any; + } + interface EmptyStatement extends Statement { + } + interface DebuggerStatement extends Statement { + } + interface MissingDeclaration extends DeclarationStatement, ClassElement, ObjectLiteralElement, TypeElement { + name?: Identifier; + } + type BlockLike = SourceFile | Block | ModuleBlock | CaseClause; + interface Block extends Statement { + statements: NodeArray; + } + interface VariableStatement extends Statement { + declarationList: VariableDeclarationList; + } + interface ExpressionStatement extends Statement { + expression: Expression; + } + interface IfStatement extends Statement { + expression: Expression; + thenStatement: Statement; + elseStatement?: Statement; + } + interface IterationStatement extends Statement { + statement: Statement; + } + interface DoStatement extends IterationStatement { + expression: Expression; + } + interface WhileStatement extends IterationStatement { + expression: Expression; + } + interface ForStatement extends IterationStatement { + initializer?: VariableDeclarationList | Expression; + condition?: Expression; + incrementor?: Expression; + } + interface ForInStatement extends IterationStatement { + initializer: VariableDeclarationList | Expression; + expression: Expression; + } + interface ForOfStatement extends IterationStatement { + initializer: VariableDeclarationList | Expression; + expression: Expression; + } + interface BreakStatement extends Statement { + label?: Identifier; + } + interface ContinueStatement extends Statement { + label?: Identifier; + } + type BreakOrContinueStatement = BreakStatement | ContinueStatement; + interface ReturnStatement extends Statement { + expression?: Expression; + } + interface WithStatement extends Statement { + expression: Expression; + statement: Statement; + } + interface SwitchStatement extends Statement { + expression: Expression; + caseBlock: CaseBlock; + } + interface CaseBlock extends Node { + clauses: NodeArray; + } + interface CaseClause extends Node { + expression: Expression; + statements: NodeArray; + } + interface DefaultClause extends Node { + statements: NodeArray; + } + type CaseOrDefaultClause = CaseClause | DefaultClause; + interface LabeledStatement extends Statement { + label: Identifier; + statement: Statement; + } + interface ThrowStatement extends Statement { + expression: Expression; + } + interface TryStatement extends Statement { + tryBlock: Block; + catchClause?: CatchClause; + finallyBlock?: Block; + } + interface CatchClause extends Node { + variableDeclaration: VariableDeclaration; + block: Block; + } + type DeclarationWithTypeParameters = SignatureDeclaration | ClassLikeDeclaration | InterfaceDeclaration | TypeAliasDeclaration; + interface ClassLikeDeclaration extends Declaration { + name?: Identifier; + typeParameters?: NodeArray; + heritageClauses?: NodeArray; + members: NodeArray; + } + interface ClassDeclaration extends ClassLikeDeclaration, DeclarationStatement { + name?: Identifier; + } + interface ClassExpression extends ClassLikeDeclaration, PrimaryExpression { + } + interface ClassElement extends Declaration { + _classElementBrand: any; + name?: PropertyName; + } + interface TypeElement extends Declaration { + _typeElementBrand: any; + name?: PropertyName; + questionToken?: Node; + } + interface InterfaceDeclaration extends DeclarationStatement { + name: Identifier; + typeParameters?: NodeArray; + heritageClauses?: NodeArray; + members: NodeArray; + } + interface HeritageClause extends Node { + token: SyntaxKind; + types?: NodeArray; + } + interface TypeAliasDeclaration extends DeclarationStatement { + name: Identifier; + typeParameters?: NodeArray; + type: TypeNode; + } + interface EnumMember extends Declaration { + name: DeclarationName; + initializer?: Expression; + } + interface EnumDeclaration extends DeclarationStatement { + name: Identifier; + members: NodeArray; + } + type ModuleBody = ModuleBlock | ModuleDeclaration; + interface ModuleDeclaration extends DeclarationStatement { + name: Identifier | LiteralExpression; + body: ModuleBlock | ModuleDeclaration; + } + interface ModuleBlock extends Node, Statement { + statements: NodeArray; + } + interface ImportEqualsDeclaration extends DeclarationStatement { + name: Identifier; + moduleReference: EntityName | ExternalModuleReference; + } + interface ExternalModuleReference extends Node { + expression?: Expression; + } + interface ImportDeclaration extends Statement { + importClause?: ImportClause; + moduleSpecifier: Expression; + } + interface ImportClause extends Declaration { + name?: Identifier; + namedBindings?: NamespaceImport | NamedImports; + } + interface NamespaceImport extends Declaration { + name: Identifier; + } + interface GlobalModuleExportDeclaration extends DeclarationStatement { + name: Identifier; + moduleReference: LiteralLikeNode; + } + interface ExportDeclaration extends DeclarationStatement { + exportClause?: NamedExports; + moduleSpecifier?: Expression; + } + interface NamedImports extends Node { + elements: NodeArray; + } + interface NamedExports extends Node { + elements: NodeArray; + } + type NamedImportsOrExports = NamedImports | NamedExports; + interface ImportSpecifier extends Declaration { + propertyName?: Identifier; + name: Identifier; + } + interface ExportSpecifier extends Declaration { + propertyName?: Identifier; + name: Identifier; + } + type ImportOrExportSpecifier = ImportSpecifier | ExportSpecifier; + interface ExportAssignment extends DeclarationStatement { + isExportEquals?: boolean; + expression: Expression; + } + interface FileReference extends TextRange { + fileName: string; + } + interface CommentRange extends TextRange { + hasTrailingNewLine?: boolean; + kind: SyntaxKind; + } + interface JSDocTypeExpression extends Node { + type: JSDocType; + } + interface JSDocType extends TypeNode { + _jsDocTypeBrand: any; + } + interface JSDocAllType extends JSDocType { + _JSDocAllTypeBrand: any; + } + interface JSDocUnknownType extends JSDocType { + _JSDocUnknownTypeBrand: any; + } + interface JSDocArrayType extends JSDocType { + elementType: JSDocType; + } + interface JSDocUnionType extends JSDocType { + types: NodeArray; + } + interface JSDocTupleType extends JSDocType { + types: NodeArray; + } + interface JSDocNonNullableType extends JSDocType { + type: JSDocType; + } + interface JSDocNullableType extends JSDocType { + type: JSDocType; + } + interface JSDocRecordType extends JSDocType, TypeLiteralNode { + members: NodeArray; + } + interface JSDocTypeReference extends JSDocType { + name: EntityName; + typeArguments: NodeArray; + } + interface JSDocOptionalType extends JSDocType { + type: JSDocType; + } + interface JSDocFunctionType extends JSDocType, SignatureDeclaration { + parameters: NodeArray; + type: JSDocType; + } + interface JSDocVariadicType extends JSDocType { + type: JSDocType; + } + interface JSDocConstructorType extends JSDocType { + type: JSDocType; + } + interface JSDocThisType extends JSDocType { + type: JSDocType; + } + type JSDocTypeReferencingNode = JSDocThisType | JSDocConstructorType | JSDocVariadicType | JSDocOptionalType | JSDocNullableType | JSDocNonNullableType; + interface JSDocRecordMember extends PropertySignature { + name: Identifier | LiteralExpression; + type?: JSDocType; + } + interface JSDocComment extends Node { + tags: NodeArray; + } + interface JSDocTag extends Node { + atToken: Node; + tagName: Identifier; + } + interface JSDocTemplateTag extends JSDocTag { + typeParameters: NodeArray; + } + interface JSDocReturnTag extends JSDocTag { + typeExpression: JSDocTypeExpression; + } + interface JSDocTypeTag extends JSDocTag { + typeExpression: JSDocTypeExpression; + } + interface JSDocParameterTag extends JSDocTag { + preParameterName?: Identifier; + typeExpression?: JSDocTypeExpression; + postParameterName?: Identifier; + isBracketed: boolean; + } + const enum FlowFlags { + Unreachable = 1, + Start = 2, + BranchLabel = 4, + LoopLabel = 8, + Assignment = 16, + TrueCondition = 32, + FalseCondition = 64, + Referenced = 128, + Shared = 256, + Label = 12, + Condition = 96, + } + interface FlowNode { + flags: FlowFlags; + id?: number; + } + interface FlowLabel extends FlowNode { + antecedents: FlowNode[]; + } + interface FlowAssignment extends FlowNode { + node: Expression | VariableDeclaration | BindingElement; + antecedent: FlowNode; + } + interface FlowCondition extends FlowNode { + expression: Expression; + antecedent: FlowNode; + } + interface AmdDependency { + path: string; + name: string; + } + interface SourceFile extends Declaration { + statements: NodeArray; + endOfFileToken: Node; + fileName: string; + path: Path; + text: string; + amdDependencies: AmdDependency[]; + moduleName: string; + referencedFiles: FileReference[]; + typeReferenceDirectives: FileReference[]; + languageVariant: LanguageVariant; + isDeclarationFile: boolean; + renamedDependencies?: Map; + hasNoDefaultLib: boolean; + languageVersion: ScriptTarget; + scriptKind: ScriptKind; + externalModuleIndicator: Node; + commonJsModuleIndicator: Node; + wasReferenced?: boolean; + identifiers: Map; + nodeCount: number; + identifierCount: number; + symbolCount: number; + parseDiagnostics: Diagnostic[]; + bindDiagnostics: Diagnostic[]; + lineMap: number[]; + classifiableNames?: Map; + resolvedModules: Map; + resolvedTypeReferenceDirectiveNames: Map; + imports: LiteralExpression[]; + moduleAugmentations: LiteralExpression[]; + } + interface ScriptReferenceHost { + getCompilerOptions(): CompilerOptions; + getSourceFile(fileName: string): SourceFile; + getSourceFileByPath(path: Path): SourceFile; + getCurrentDirectory(): string; + } + interface ParseConfigHost { + readDirectory(rootDir: string, extension: string, exclude: string[]): string[]; + } + interface WriteFileCallback { + (fileName: string, data: string, writeByteOrderMark: boolean, onError?: (message: string) => void, sourceFiles?: SourceFile[]): void; + } + class OperationCanceledException { + } + interface CancellationToken { + isCancellationRequested(): boolean; + throwIfCancellationRequested(): void; + } + interface Program extends ScriptReferenceHost { + getRootFileNames(): string[]; + getSourceFiles(): SourceFile[]; + emit(targetSourceFile?: SourceFile, writeFile?: WriteFileCallback, cancellationToken?: CancellationToken): EmitResult; + getOptionsDiagnostics(cancellationToken?: CancellationToken): Diagnostic[]; + getGlobalDiagnostics(cancellationToken?: CancellationToken): Diagnostic[]; + getSyntacticDiagnostics(sourceFile?: SourceFile, cancellationToken?: CancellationToken): Diagnostic[]; + getSemanticDiagnostics(sourceFile?: SourceFile, cancellationToken?: CancellationToken): Diagnostic[]; + getDeclarationDiagnostics(sourceFile?: SourceFile, cancellationToken?: CancellationToken): Diagnostic[]; + getTypeChecker(): TypeChecker; + getCommonSourceDirectory(): string; + getDiagnosticsProducingTypeChecker(): TypeChecker; + getClassifiableNames(): Map; + getNodeCount(): number; + getIdentifierCount(): number; + getSymbolCount(): number; + getTypeCount(): number; + getFileProcessingDiagnostics(): DiagnosticCollection; + getResolvedTypeReferenceDirectives(): Map; + structureIsReused?: boolean; + } + interface SourceMapSpan { + emittedLine: number; + emittedColumn: number; + sourceLine: number; + sourceColumn: number; + nameIndex?: number; + sourceIndex: number; + } + interface SourceMapData { + sourceMapFilePath: string; + jsSourceMappingURL: string; + sourceMapFile: string; + sourceMapSourceRoot: string; + sourceMapSources: string[]; + sourceMapSourcesContent?: string[]; + inputSourceFileNames: string[]; + sourceMapNames?: string[]; + sourceMapMappings: string; + sourceMapDecodedMappings: SourceMapSpan[]; + } + enum ExitStatus { + Success = 0, + DiagnosticsPresent_OutputsSkipped = 1, + DiagnosticsPresent_OutputsGenerated = 2, + } + interface EmitResult { + emitSkipped: boolean; + diagnostics: Diagnostic[]; + emittedFiles: string[]; + sourceMaps: SourceMapData[]; + } + interface TypeCheckerHost { + getCompilerOptions(): CompilerOptions; + getSourceFiles(): SourceFile[]; + getSourceFile(fileName: string): SourceFile; + getResolvedTypeReferenceDirectives(): Map; + } + interface TypeChecker { + getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; + getDeclaredTypeOfSymbol(symbol: Symbol): Type; + getPropertiesOfType(type: Type): Symbol[]; + getPropertyOfType(type: Type, propertyName: string): Symbol; + getSignaturesOfType(type: Type, kind: SignatureKind): Signature[]; + getIndexTypeOfType(type: Type, kind: IndexKind): Type; + getBaseTypes(type: InterfaceType): ObjectType[]; + getReturnTypeOfSignature(signature: Signature): Type; + getNonNullableType(type: Type): Type; + getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; + getSymbolAtLocation(node: Node): Symbol; + getSymbolsOfParameterPropertyDeclaration(parameter: ParameterDeclaration, parameterName: string): Symbol[]; + getShorthandAssignmentValueSymbol(location: Node): Symbol; + getExportSpecifierLocalTargetSymbol(location: ExportSpecifier): Symbol; + getPropertySymbolOfDestructuringAssignment(location: Identifier): Symbol; + getTypeAtLocation(node: Node): Type; + typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string; + symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string; + getSymbolDisplayBuilder(): SymbolDisplayBuilder; + getFullyQualifiedName(symbol: Symbol): string; + getAugmentedPropertiesOfType(type: Type): Symbol[]; + getRootSymbols(symbol: Symbol): Symbol[]; + getContextualType(node: Expression): Type; + getResolvedSignature(node: CallLikeExpression, candidatesOutArray?: Signature[]): Signature; + getSignatureFromDeclaration(declaration: SignatureDeclaration): Signature; + isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; + isUndefinedSymbol(symbol: Symbol): boolean; + isArgumentsSymbol(symbol: Symbol): boolean; + isUnknownSymbol(symbol: Symbol): boolean; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; + isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean; + getAliasedSymbol(symbol: Symbol): Symbol; + getExportsOfModule(moduleSymbol: Symbol): Symbol[]; + getJsxElementAttributesType(elementNode: JsxOpeningLikeElement): Type; + getJsxIntrinsicTagNames(): Symbol[]; + isOptionalParameter(node: ParameterDeclaration): boolean; + getDiagnostics(sourceFile?: SourceFile, cancellationToken?: CancellationToken): Diagnostic[]; + getGlobalDiagnostics(): Diagnostic[]; + getEmitResolver(sourceFile?: SourceFile, cancellationToken?: CancellationToken): EmitResolver; + getNodeCount(): number; + getIdentifierCount(): number; + getSymbolCount(): number; + getTypeCount(): number; + } + interface SymbolDisplayBuilder { + buildTypeDisplay(type: Type, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void; + buildSymbolDisplay(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): void; + buildSignatureDisplay(signatures: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind): void; + buildParameterDisplay(parameter: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void; + buildTypeParameterDisplay(tp: TypeParameter, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void; + buildTypePredicateDisplay(predicate: TypePredicate, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void; + buildTypeParameterDisplayFromSymbol(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void; + buildDisplayForParametersAndDelimiters(thisType: Type, parameters: Symbol[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void; + buildDisplayForTypeParametersAndDelimiters(typeParameters: TypeParameter[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void; + buildReturnTypeDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void; + } + interface SymbolWriter { + writeKeyword(text: string): void; + writeOperator(text: string): void; + writePunctuation(text: string): void; + writeSpace(text: string): void; + writeStringLiteral(text: string): void; + writeParameter(text: string): void; + writeSymbol(text: string, symbol: Symbol): void; + writeLine(): void; + increaseIndent(): void; + decreaseIndent(): void; + clear(): void; + trackSymbol(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): void; + reportInaccessibleThisError(): void; + } + const enum TypeFormatFlags { + None = 0, + WriteArrayAsGenericType = 1, + UseTypeOfFunction = 2, + NoTruncation = 4, + WriteArrowStyleSignature = 8, + WriteOwnNameForAnyLike = 16, + WriteTypeArgumentsOfSignature = 32, + InElementType = 64, + UseFullyQualifiedType = 128, + InFirstTypeArgument = 256, + } + const enum SymbolFormatFlags { + None = 0, + WriteTypeParametersOrArguments = 1, + UseOnlyExternalAliasing = 2, + } + const enum SymbolAccessibility { + Accessible = 0, + NotAccessible = 1, + CannotBeNamed = 2, + } + const enum TypePredicateKind { + This = 0, + Identifier = 1, + } + interface TypePredicateBase { + kind: TypePredicateKind; + type: Type; + } + interface ThisTypePredicate extends TypePredicateBase { + _thisTypePredicateBrand: any; + } + interface IdentifierTypePredicate extends TypePredicateBase { + parameterName: string; + parameterIndex: number; + } + type TypePredicate = IdentifierTypePredicate | ThisTypePredicate; + type AnyImportSyntax = ImportDeclaration | ImportEqualsDeclaration; + interface SymbolVisibilityResult { + accessibility: SymbolAccessibility; + aliasesToMakeVisible?: AnyImportSyntax[]; + errorSymbolName?: string; + errorNode?: Node; + } + interface SymbolAccessibilityResult extends SymbolVisibilityResult { + errorModuleName?: string; + } + enum TypeReferenceSerializationKind { + Unknown = 0, + TypeWithConstructSignatureAndValue = 1, + VoidType = 2, + NumberLikeType = 3, + StringLikeType = 4, + BooleanType = 5, + ArrayLikeType = 6, + ESSymbolType = 7, + TypeWithCallSignature = 8, + ObjectType = 9, + } + interface EmitResolver { + hasGlobalName(name: string): boolean; + getReferencedExportContainer(node: Identifier): SourceFile | ModuleDeclaration | EnumDeclaration; + getReferencedImportDeclaration(node: Identifier): Declaration; + getReferencedDeclarationWithCollidingName(node: Identifier): Declaration; + isDeclarationWithCollidingName(node: Declaration): boolean; + isValueAliasDeclaration(node: Node): boolean; + isReferencedAliasDeclaration(node: Node, checkChildren?: boolean): boolean; + isTopLevelValueImportEqualsWithEntityName(node: ImportEqualsDeclaration): boolean; + getNodeCheckFlags(node: Node): NodeCheckFlags; + isDeclarationVisible(node: Declaration): boolean; + collectLinkedAliases(node: Identifier): Node[]; + isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; + writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; + writeReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; + writeTypeOfExpression(expr: Expression, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; + writeBaseConstructorTypeOfClass(node: ClassLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void; + isSymbolAccessible(symbol: Symbol, enclosingDeclaration: Node, meaning: SymbolFlags): SymbolAccessibilityResult; + isEntityNameVisible(entityName: EntityName | Expression, enclosingDeclaration: Node): SymbolVisibilityResult; + getConstantValue(node: EnumMember | PropertyAccessExpression | ElementAccessExpression): number; + getReferencedValueDeclaration(reference: Identifier): Declaration; + getTypeReferenceSerializationKind(typeName: EntityName): TypeReferenceSerializationKind; + isOptionalParameter(node: ParameterDeclaration): boolean; + moduleExportsSomeValue(moduleReferenceExpression: Expression): boolean; + isArgumentsLocalBinding(node: Identifier): boolean; + getExternalModuleFileFromDeclaration(declaration: ImportEqualsDeclaration | ImportDeclaration | ExportDeclaration | ModuleDeclaration): SourceFile; + getTypeReferenceDirectivesForEntityName(name: EntityName | PropertyAccessExpression): string[]; + getTypeReferenceDirectivesForSymbol(symbol: Symbol, meaning?: SymbolFlags): string[]; + } + const enum SymbolFlags { + None = 0, + FunctionScopedVariable = 1, + BlockScopedVariable = 2, + Property = 4, + EnumMember = 8, + Function = 16, + Class = 32, + Interface = 64, + ConstEnum = 128, + RegularEnum = 256, + ValueModule = 512, + NamespaceModule = 1024, + TypeLiteral = 2048, + ObjectLiteral = 4096, + Method = 8192, + Constructor = 16384, + GetAccessor = 32768, + SetAccessor = 65536, + Signature = 131072, + TypeParameter = 262144, + TypeAlias = 524288, + ExportValue = 1048576, + ExportType = 2097152, + ExportNamespace = 4194304, + Alias = 8388608, + Instantiated = 16777216, + Merged = 33554432, + Transient = 67108864, + Prototype = 134217728, + SyntheticProperty = 268435456, + Optional = 536870912, + ExportStar = 1073741824, + Enum = 384, + Variable = 3, + Value = 107455, + Type = 793056, + Namespace = 1536, + Module = 1536, + Accessor = 98304, + FunctionScopedVariableExcludes = 107454, + BlockScopedVariableExcludes = 107455, + ParameterExcludes = 107455, + PropertyExcludes = 107455, + EnumMemberExcludes = 107455, + FunctionExcludes = 106927, + ClassExcludes = 899519, + InterfaceExcludes = 792960, + RegularEnumExcludes = 899327, + ConstEnumExcludes = 899967, + ValueModuleExcludes = 106639, + NamespaceModuleExcludes = 0, + MethodExcludes = 99263, + GetAccessorExcludes = 41919, + SetAccessorExcludes = 74687, + TypeParameterExcludes = 530912, + TypeAliasExcludes = 793056, + AliasExcludes = 8388608, + ModuleMember = 8914931, + ExportHasLocal = 944, + HasExports = 1952, + HasMembers = 6240, + BlockScoped = 418, + PropertyOrAccessor = 98308, + Export = 7340032, + Classifiable = 788448, + } + interface Symbol { + flags: SymbolFlags; + name: string; + declarations?: Declaration[]; + valueDeclaration?: Declaration; + members?: SymbolTable; + exports?: SymbolTable; + globalExports?: SymbolTable; + id?: number; + mergeId?: number; + parent?: Symbol; + exportSymbol?: Symbol; + constEnumOnlyModule?: boolean; + } + interface SymbolLinks { + target?: Symbol; + type?: Type; + declaredType?: Type; + typeParameters?: TypeParameter[]; + inferredClassType?: Type; + instantiations?: Map; + mapper?: TypeMapper; + referenced?: boolean; + containingType?: UnionOrIntersectionType; + resolvedExports?: SymbolTable; + exportsChecked?: boolean; + isDeclarationWithCollidingName?: boolean; + bindingElement?: BindingElement; + exportsSomeValue?: boolean; + } + interface TransientSymbol extends Symbol, SymbolLinks { + } + interface SymbolTable { + [index: string]: Symbol; + } + const enum NodeCheckFlags { + TypeChecked = 1, + LexicalThis = 2, + CaptureThis = 4, + SuperInstance = 256, + SuperStatic = 512, + ContextChecked = 1024, + AsyncMethodWithSuper = 2048, + AsyncMethodWithSuperBinding = 4096, + CaptureArguments = 8192, + EnumValuesComputed = 16384, + LexicalModuleMergesWithClass = 32768, + LoopWithCapturedBlockScopedBinding = 65536, + CapturedBlockScopedBinding = 131072, + BlockScopedBindingInLoop = 262144, + ClassWithBodyScopedClassBinding = 524288, + BodyScopedClassBinding = 1048576, + NeedsLoopOutParameter = 2097152, + } + interface NodeLinks { + resolvedType?: Type; + resolvedSignature?: Signature; + resolvedSymbol?: Symbol; + resolvedIndexInfo?: IndexInfo; + flags?: NodeCheckFlags; + enumMemberValue?: number; + isVisible?: boolean; + hasReportedStatementInAmbientContext?: boolean; + jsxFlags?: JsxFlags; + resolvedJsxType?: Type; + hasSuperCall?: boolean; + superCall?: ExpressionStatement; + } + const enum TypeFlags { + Any = 1, + String = 2, + Number = 4, + Boolean = 8, + Void = 16, + Undefined = 32, + Null = 64, + Enum = 128, + StringLiteral = 256, + TypeParameter = 512, + Class = 1024, + Interface = 2048, + Reference = 4096, + Tuple = 8192, + Union = 16384, + Intersection = 32768, + Anonymous = 65536, + Instantiated = 131072, + FromSignature = 262144, + ObjectLiteral = 524288, + FreshObjectLiteral = 1048576, + ContainsUndefinedOrNull = 2097152, + ContainsObjectLiteral = 4194304, + ContainsAnyFunctionType = 8388608, + ESSymbol = 16777216, + ThisType = 33554432, + ObjectLiteralPatternWithComputedProperties = 67108864, + Never = 134217728, + Nullable = 96, + Intrinsic = 150995071, + Primitive = 16777726, + StringLike = 258, + NumberLike = 132, + ObjectType = 80896, + UnionOrIntersection = 49152, + StructuredType = 130048, + Narrowable = 97793, + RequiresWidening = 6291456, + PropagatingFlags = 14680064, + } + type DestructuringPattern = BindingPattern | ObjectLiteralExpression | ArrayLiteralExpression; + interface Type { + flags: TypeFlags; + id: number; + symbol?: Symbol; + pattern?: DestructuringPattern; + } + interface IntrinsicType extends Type { + intrinsicName: string; + } + interface StringLiteralType extends Type { + text: string; + } + interface ObjectType extends Type { + } + interface InterfaceType extends ObjectType { + typeParameters: TypeParameter[]; + outerTypeParameters: TypeParameter[]; + localTypeParameters: TypeParameter[]; + thisType: TypeParameter; + resolvedBaseConstructorType?: Type; + resolvedBaseTypes: ObjectType[]; + } + interface InterfaceTypeWithDeclaredMembers extends InterfaceType { + declaredProperties: Symbol[]; + declaredCallSignatures: Signature[]; + declaredConstructSignatures: Signature[]; + declaredStringIndexInfo: IndexInfo; + declaredNumberIndexInfo: IndexInfo; + } + interface TypeReference extends ObjectType { + target: GenericType; + typeArguments: Type[]; + } + interface GenericType extends InterfaceType, TypeReference { + instantiations: Map; + } + interface TupleType extends ObjectType { + elementTypes: Type[]; + } + interface UnionOrIntersectionType extends Type { + types: Type[]; + reducedType: Type; + resolvedProperties: SymbolTable; + } + interface UnionType extends UnionOrIntersectionType { + } + interface IntersectionType extends UnionOrIntersectionType { + } + interface AnonymousType extends ObjectType { + target?: AnonymousType; + mapper?: TypeMapper; + } + interface ResolvedType extends ObjectType, UnionOrIntersectionType { + members: SymbolTable; + properties: Symbol[]; + callSignatures: Signature[]; + constructSignatures: Signature[]; + stringIndexInfo?: IndexInfo; + numberIndexInfo?: IndexInfo; + } + interface FreshObjectLiteralType extends ResolvedType { + regularType: ResolvedType; + } + interface IterableOrIteratorType extends ObjectType, UnionType { + iterableElementType?: Type; + iteratorElementType?: Type; + } + interface TypeParameter extends Type { + constraint: Type; + target?: TypeParameter; + mapper?: TypeMapper; + resolvedApparentType: Type; + } + const enum SignatureKind { + Call = 0, + Construct = 1, + } + interface Signature { + declaration: SignatureDeclaration; + typeParameters: TypeParameter[]; + parameters: Symbol[]; + thisType?: Type; + resolvedReturnType: Type; + minArgumentCount: number; + hasRestParameter: boolean; + hasStringLiterals: boolean; + target?: Signature; + mapper?: TypeMapper; + unionSignatures?: Signature[]; + erasedSignatureCache?: Signature; + isolatedSignatureType?: ObjectType; + typePredicate?: TypePredicate; + } + const enum IndexKind { + String = 0, + Number = 1, + } + interface IndexInfo { + type: Type; + isReadonly: boolean; + declaration?: SignatureDeclaration; + } + interface TypeMapper { + (t: TypeParameter): Type; + mappedTypes?: Type[]; + instantiations?: Type[]; + context?: InferenceContext; + } + interface TypeInferences { + primary: Type[]; + secondary: Type[]; + isFixed: boolean; + } + interface InferenceContext { + typeParameters: TypeParameter[]; + inferUnionTypes: boolean; + inferences: TypeInferences[]; + inferredTypes: Type[]; + mapper?: TypeMapper; + failedTypeParameterIndex?: number; + } + const enum SpecialPropertyAssignmentKind { + None = 0, + ExportsProperty = 1, + ModuleExports = 2, + PrototypeProperty = 3, + ThisProperty = 4, + } + interface DiagnosticMessage { + key: string; + category: DiagnosticCategory; + code: number; + message: string; + } + interface DiagnosticMessageChain { + messageText: string; + category: DiagnosticCategory; + code: number; + next?: DiagnosticMessageChain; + } + interface Diagnostic { + file: SourceFile; + start: number; + length: number; + messageText: string | DiagnosticMessageChain; + category: DiagnosticCategory; + code: number; + } + enum DiagnosticCategory { + Warning = 0, + Error = 1, + Message = 2, + } + enum ModuleResolutionKind { + Classic = 1, + NodeJs = 2, + } + type RootPaths = string[]; + type PathSubstitutions = Map; + type TsConfigOnlyOptions = RootPaths | PathSubstitutions; + type CompilerOptionsValue = string | number | boolean | (string | number)[] | TsConfigOnlyOptions; + interface CompilerOptions { + allowNonTsExtensions?: boolean; + charset?: string; + declaration?: boolean; + declarationDir?: string; + diagnostics?: boolean; + emitBOM?: boolean; + help?: boolean; + init?: boolean; + inlineSourceMap?: boolean; + inlineSources?: boolean; + jsx?: JsxEmit; + reactNamespace?: string; + listFiles?: boolean; + typesSearchPaths?: string[]; + locale?: string; + mapRoot?: string; + module?: ModuleKind; + newLine?: NewLineKind; + noEmit?: boolean; + noEmitHelpers?: boolean; + noEmitOnError?: boolean; + noErrorTruncation?: boolean; + noImplicitAny?: boolean; + noImplicitThis?: boolean; + noLib?: boolean; + noResolve?: boolean; + out?: string; + outFile?: string; + outDir?: string; + preserveConstEnums?: boolean; + pretty?: DiagnosticStyle; + project?: string; + removeComments?: boolean; + rootDir?: string; + sourceMap?: boolean; + sourceRoot?: string; + suppressExcessPropertyErrors?: boolean; + suppressImplicitAnyIndexErrors?: boolean; + target?: ScriptTarget; + version?: boolean; + watch?: boolean; + isolatedModules?: boolean; + experimentalDecorators?: boolean; + emitDecoratorMetadata?: boolean; + moduleResolution?: ModuleResolutionKind; + allowUnusedLabels?: boolean; + allowUnreachableCode?: boolean; + noImplicitReturns?: boolean; + noFallthroughCasesInSwitch?: boolean; + forceConsistentCasingInFileNames?: boolean; + baseUrl?: string; + paths?: PathSubstitutions; + rootDirs?: RootPaths; + traceResolution?: boolean; + allowSyntheticDefaultImports?: boolean; + allowJs?: boolean; + noImplicitUseStrict?: boolean; + strictNullChecks?: boolean; + listEmittedFiles?: boolean; + lib?: string[]; + stripInternal?: boolean; + skipDefaultLibCheck?: boolean; + suppressOutputPathCheck?: boolean; + configFilePath?: string; + typesRoot?: string; + types?: string[]; + list?: string[]; + [option: string]: CompilerOptionsValue | undefined; + } + interface TypingOptions { + enableAutoDiscovery?: boolean; + include?: string[]; + exclude?: string[]; + [option: string]: string[] | boolean | undefined; + } + interface DiscoverTypingsInfo { + fileNames: string[]; + projectRootPath: string; + safeListPath: string; + packageNameToTypingLocation: Map; + typingOptions: TypingOptions; + compilerOptions: CompilerOptions; + } + enum ModuleKind { + None = 0, + CommonJS = 1, + AMD = 2, + UMD = 3, + System = 4, + ES6 = 5, + ES2015 = 5, + } + const enum JsxEmit { + None = 0, + Preserve = 1, + React = 2, + } + const enum NewLineKind { + CarriageReturnLineFeed = 0, + LineFeed = 1, + } + interface LineAndCharacter { + line: number; + character: number; + } + const enum ScriptKind { + Unknown = 0, + JS = 1, + JSX = 2, + TS = 3, + TSX = 4, + } + const enum ScriptTarget { + ES3 = 0, + ES5 = 1, + ES6 = 2, + ES2015 = 2, + Latest = 2, + } + const enum LanguageVariant { + Standard = 0, + JSX = 1, + } + const enum DiagnosticStyle { + Simple = 0, + Pretty = 1, + } + interface ParsedCommandLine { + options: CompilerOptions; + typingOptions?: TypingOptions; + fileNames: string[]; + raw?: any; + errors: Diagnostic[]; + } + interface CommandLineOptionBase { + name: string; + type: "string" | "number" | "boolean" | "object" | "list" | Map; + isFilePath?: boolean; + shortName?: string; + description?: DiagnosticMessage; + paramType?: DiagnosticMessage; + experimental?: boolean; + isTSConfigOnly?: boolean; + } + interface CommandLineOptionOfPrimitiveType extends CommandLineOptionBase { + type: "string" | "number" | "boolean"; + } + interface CommandLineOptionOfCustomType extends CommandLineOptionBase { + type: Map; + } + interface TsConfigOnlyOption extends CommandLineOptionBase { + type: "object"; + } + interface CommandLineOptionOfListType extends CommandLineOptionBase { + type: "list"; + element: CommandLineOptionOfCustomType | CommandLineOptionOfPrimitiveType; + } + type CommandLineOption = CommandLineOptionOfCustomType | CommandLineOptionOfPrimitiveType | TsConfigOnlyOption | CommandLineOptionOfListType; + const enum CharacterCodes { + nullCharacter = 0, + maxAsciiCharacter = 127, + lineFeed = 10, + carriageReturn = 13, + lineSeparator = 8232, + paragraphSeparator = 8233, + nextLine = 133, + space = 32, + nonBreakingSpace = 160, + enQuad = 8192, + emQuad = 8193, + enSpace = 8194, + emSpace = 8195, + threePerEmSpace = 8196, + fourPerEmSpace = 8197, + sixPerEmSpace = 8198, + figureSpace = 8199, + punctuationSpace = 8200, + thinSpace = 8201, + hairSpace = 8202, + zeroWidthSpace = 8203, + narrowNoBreakSpace = 8239, + ideographicSpace = 12288, + mathematicalSpace = 8287, + ogham = 5760, + _ = 95, + $ = 36, + _0 = 48, + _1 = 49, + _2 = 50, + _3 = 51, + _4 = 52, + _5 = 53, + _6 = 54, + _7 = 55, + _8 = 56, + _9 = 57, + a = 97, + b = 98, + c = 99, + d = 100, + e = 101, + f = 102, + g = 103, + h = 104, + i = 105, + j = 106, + k = 107, + l = 108, + m = 109, + n = 110, + o = 111, + p = 112, + q = 113, + r = 114, + s = 115, + t = 116, + u = 117, + v = 118, + w = 119, + x = 120, + y = 121, + z = 122, + A = 65, + B = 66, + C = 67, + D = 68, + E = 69, + F = 70, + G = 71, + H = 72, + I = 73, + J = 74, + K = 75, + L = 76, + M = 77, + N = 78, + O = 79, + P = 80, + Q = 81, + R = 82, + S = 83, + T = 84, + U = 85, + V = 86, + W = 87, + X = 88, + Y = 89, + Z = 90, + ampersand = 38, + asterisk = 42, + at = 64, + backslash = 92, + backtick = 96, + bar = 124, + caret = 94, + closeBrace = 125, + closeBracket = 93, + closeParen = 41, + colon = 58, + comma = 44, + dot = 46, + doubleQuote = 34, + equals = 61, + exclamation = 33, + greaterThan = 62, + hash = 35, + lessThan = 60, + minus = 45, + openBrace = 123, + openBracket = 91, + openParen = 40, + percent = 37, + plus = 43, + question = 63, + semicolon = 59, + singleQuote = 39, + slash = 47, + tilde = 126, + backspace = 8, + formFeed = 12, + byteOrderMark = 65279, + tab = 9, + verticalTab = 11, + } + interface ModuleResolutionHost { + fileExists(fileName: string): boolean; + readFile(fileName: string): string; + trace?(s: string): void; + directoryExists?(directoryName: string): boolean; + realpath?(path: string): string; + } + interface ResolvedModule { + resolvedFileName: string; + isExternalLibraryImport?: boolean; + } + interface ResolvedModuleWithFailedLookupLocations { + resolvedModule: ResolvedModule; + failedLookupLocations: string[]; + } + interface ResolvedTypeReferenceDirective { + primary: boolean; + resolvedFileName?: string; + } + interface ResolvedTypeReferenceDirectiveWithFailedLookupLocations { + resolvedTypeReferenceDirective: ResolvedTypeReferenceDirective; + failedLookupLocations: string[]; + } + interface CompilerHost extends ModuleResolutionHost { + getSourceFile(fileName: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; + getSourceFileByPath?(fileName: string, path: Path, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; + getCancellationToken?(): CancellationToken; + getDefaultLibFileName(options: CompilerOptions): string; + getDefaultLibLocation?(): string; + writeFile: WriteFileCallback; + getCurrentDirectory(): string; + getCanonicalFileName(fileName: string): string; + useCaseSensitiveFileNames(): boolean; + getNewLine(): string; + resolveModuleNames?(moduleNames: string[], containingFile: string): ResolvedModule[]; + resolveTypeReferenceDirectives?(typeReferenceDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[]; + } + interface TextSpan { + start: number; + length: number; + } + interface TextChangeRange { + span: TextSpan; + newLength: number; + } + interface DiagnosticCollection { + add(diagnostic: Diagnostic): void; + getGlobalDiagnostics(): Diagnostic[]; + getDiagnostics(fileName?: string): Diagnostic[]; + getModificationCount(): number; + reattachFileDiagnostics(newFile: SourceFile): void; + } +} +declare namespace ts { + const enum Ternary { + False = 0, + Maybe = 1, + True = -1, + } + function createFileMap(keyMapper?: (key: string) => string): FileMap; + function toPath(fileName: string, basePath: string, getCanonicalFileName: (path: string) => string): Path; + const enum Comparison { + LessThan = -1, + EqualTo = 0, + GreaterThan = 1, + } + function forEach(array: T[], callback: (element: T, index: number) => U): U; + function contains(array: T[], value: T, areEqual?: (a: T, b: T) => boolean): boolean; + function indexOf(array: T[], value: T): number; + function countWhere(array: T[], predicate: (x: T) => boolean): number; + function filter(array: T[], f: (x: T) => boolean): T[]; + function map(array: T[], f: (x: T) => U): U[]; + function concatenate(array1: T[], array2: T[]): T[]; + function deduplicate(array: T[], areEqual?: (a: T, b: T) => boolean): T[]; + function sum(array: any[], prop: string): number; + function addRange(to: T[], from: T[]): void; + function rangeEquals(array1: T[], array2: T[], pos: number, end: number): boolean; + function lastOrUndefined(array: T[]): T; + function binarySearch(array: number[], value: number): number; + function reduceLeft(array: T[], f: (a: T, x: T) => T): T; + function reduceLeft(array: T[], f: (a: U, x: T) => U, initial: U): U; + function reduceRight(array: T[], f: (a: T, x: T) => T): T; + function reduceRight(array: T[], f: (a: U, x: T) => U, initial: U): U; + function hasProperty(map: Map, key: string): boolean; + function getKeys(map: Map): string[]; + function getProperty(map: Map, key: string): T; + function isEmpty(map: Map): boolean; + function clone(object: T): T; + function extend, T2 extends Map<{}>>(first: T1, second: T2): T1 & T2; + function forEachValue(map: Map, callback: (value: T) => U): U; + function forEachKey(map: Map, callback: (key: string) => U): U; + function lookUp(map: Map, key: string): T; + function copyMap(source: Map, target: Map): void; + function arrayToMap(array: T[], makeKey: (value: T) => string): Map; + function reduceProperties(map: Map, callback: (aggregate: U, value: T, key: string) => U, initial: U): U; + function isArray(value: any): value is any[]; + function memoize(callback: () => T): () => T; + let localizedDiagnosticMessages: Map; + function getLocaleSpecificMessage(message: DiagnosticMessage): string; + function createFileDiagnostic(file: SourceFile, start: number, length: number, message: DiagnosticMessage, ...args: any[]): Diagnostic; + function formatMessage(dummy: any, message: DiagnosticMessage): string; + function createCompilerDiagnostic(message: DiagnosticMessage, ...args: any[]): Diagnostic; + function chainDiagnosticMessages(details: DiagnosticMessageChain, message: DiagnosticMessage, ...args: any[]): DiagnosticMessageChain; + function concatenateDiagnosticMessageChains(headChain: DiagnosticMessageChain, tailChain: DiagnosticMessageChain): DiagnosticMessageChain; + function compareValues(a: T, b: T): Comparison; + function compareDiagnostics(d1: Diagnostic, d2: Diagnostic): Comparison; + function sortAndDeduplicateDiagnostics(diagnostics: Diagnostic[]): Diagnostic[]; + function deduplicateSortedDiagnostics(diagnostics: Diagnostic[]): Diagnostic[]; + function normalizeSlashes(path: string): string; + function getRootLength(path: string): number; + let directorySeparator: string; + function normalizePath(path: string): string; + function getDirectoryPath(path: Path): Path; + function getDirectoryPath(path: string): string; + function isUrl(path: string): boolean; + function isRootedDiskPath(path: string): boolean; + function getNormalizedPathComponents(path: string, currentDirectory: string): string[]; + function getNormalizedAbsolutePath(fileName: string, currentDirectory: string): string; + function getNormalizedPathFromPathComponents(pathComponents: string[]): string; + function getRelativePathToDirectoryOrUrl(directoryPathOrUrl: string, relativeOrAbsolutePath: string, currentDirectory: string, getCanonicalFileName: (fileName: string) => string, isAbsolutePathAnUrl: boolean): string; + function getBaseFileName(path: string): string; + function combinePaths(path1: string, path2: string): string; + function fileExtensionIs(path: string, extension: string): boolean; + function ensureScriptKind(fileName: string, scriptKind?: ScriptKind): ScriptKind; + function getScriptKindFromFileName(fileName: string): ScriptKind; + const supportedTypeScriptExtensions: string[]; + const supportedJavascriptExtensions: string[]; + function getSupportedExtensions(options?: CompilerOptions): string[]; + function isSupportedSourceFileName(fileName: string, compilerOptions?: CompilerOptions): boolean; + function removeFileExtension(path: string): string; + interface ObjectAllocator { + getNodeConstructor(): new (kind: SyntaxKind, pos?: number, end?: number) => Node; + getSourceFileConstructor(): new (kind: SyntaxKind, pos?: number, end?: number) => SourceFile; + getSymbolConstructor(): new (flags: SymbolFlags, name: string) => Symbol; + getTypeConstructor(): new (checker: TypeChecker, flags: TypeFlags) => Type; + getSignatureConstructor(): new (checker: TypeChecker) => Signature; + } + let objectAllocator: ObjectAllocator; + const enum AssertionLevel { + None = 0, + Normal = 1, + Aggressive = 2, + VeryAggressive = 3, + } + namespace Debug { + function shouldAssert(level: AssertionLevel): boolean; + function assert(expression: boolean, message?: string, verboseDebugInfo?: () => string): void; + function fail(message?: string): void; + } + function copyListRemovingItem(item: T, list: T[]): T[]; + function createGetCanonicalFileName(useCaseSensitivefileNames: boolean): (fileName: string) => string; +} +declare namespace ts { + type FileWatcherCallback = (fileName: string, removed?: boolean) => void; + type DirectoryWatcherCallback = (directoryName: string) => void; + interface WatchedFile { + fileName: string; + callback: FileWatcherCallback; + mtime?: Date; + } + interface System { + args: string[]; + newLine: string; + useCaseSensitiveFileNames: boolean; + write(s: string): void; + readFile(path: string, encoding?: string): string; + writeFile(path: string, data: string, writeByteOrderMark?: boolean): void; + watchFile?(path: string, callback: FileWatcherCallback): FileWatcher; + watchDirectory?(path: string, callback: DirectoryWatcherCallback, recursive?: boolean): FileWatcher; + resolvePath(path: string): string; + fileExists(path: string): boolean; + directoryExists(path: string): boolean; + createDirectory(path: string): void; + getExecutingFilePath(): string; + getCurrentDirectory(): string; + readDirectory(path: string, extension?: string, exclude?: string[]): string[]; + getModifiedTime?(path: string): Date; + createHash?(data: string): string; + getMemoryUsage?(): number; + exit(exitCode?: number): void; + realpath?(path: string): string; + } + interface FileWatcher { + close(): void; + } + interface DirectoryWatcher extends FileWatcher { + directoryName: string; + referenceCount: number; + } + var sys: System; +} +declare namespace ts { + var Diagnostics: { + Unterminated_string_literal: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Identifier_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_file_cannot_have_a_reference_to_itself: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Trailing_comma_not_allowed: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Asterisk_Slash_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unexpected_token: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_rest_parameter_must_be_last_in_a_parameter_list: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_cannot_have_question_mark_and_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_required_parameter_cannot_follow_an_optional_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_index_signature_cannot_have_a_rest_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_index_signature_parameter_cannot_have_an_accessibility_modifier: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_index_signature_parameter_cannot_have_a_question_mark: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_index_signature_parameter_cannot_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_index_signature_must_have_a_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_index_signature_parameter_must_have_a_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_index_signature_parameter_type_must_be_string_or_number: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Accessibility_modifier_already_seen: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_must_precede_1_modifier: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_already_seen: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_cannot_appear_on_a_class_element: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + super_must_be_followed_by_an_argument_list_or_member_access: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Only_ambient_modules_can_use_quoted_names: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Statements_are_not_allowed_in_ambient_contexts: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Initializers_are_not_allowed_in_ambient_contexts: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_cannot_be_used_in_an_ambient_context: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_cannot_be_used_with_a_class_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_cannot_be_used_here: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_cannot_appear_on_a_data_property: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_cannot_appear_on_a_module_or_namespace_element: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_0_modifier_cannot_be_used_with_an_interface_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_rest_parameter_cannot_be_optional: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_rest_parameter_cannot_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_set_accessor_must_have_exactly_one_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_set_accessor_cannot_have_an_optional_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_set_accessor_parameter_cannot_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_set_accessor_cannot_have_rest_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_get_accessor_cannot_have_parameters: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_is_not_a_valid_async_function_return_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_async_function_or_method_must_have_a_valid_awaitable_return_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Operand_for_await_does_not_have_a_valid_callable_then_member: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_expression_in_async_function_does_not_have_a_valid_callable_then_member: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Expression_body_for_async_arrow_function_does_not_have_a_valid_callable_then_member: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Enum_member_must_have_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_export_assignment_cannot_be_used_in_a_namespace: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + In_ambient_enum_declarations_member_initializer_must_be_constant_expression: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_cannot_appear_on_a_type_member: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_cannot_appear_on_an_index_signature: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_0_modifier_cannot_be_used_with_an_import_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Invalid_reference_directive_syntax: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_accessor_cannot_be_declared_in_an_ambient_context: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_cannot_appear_on_a_constructor_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_cannot_appear_on_a_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameters_cannot_appear_on_a_constructor_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_annotation_cannot_appear_on_a_constructor_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_accessor_cannot_have_type_parameters: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_set_accessor_cannot_have_a_return_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_index_signature_must_have_exactly_one_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_list_cannot_be_empty: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameter_list_cannot_be_empty: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_argument_list_cannot_be_empty: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Invalid_use_of_0_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + with_statements_are_not_allowed_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + delete_cannot_be_called_on_an_identifier_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Jump_target_cannot_cross_function_boundary: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_return_statement_can_only_be_used_within_a_function_body: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Expression_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Duplicate_label_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_export_assignment_cannot_have_modifiers: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Octal_literals_are_not_allowed_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_tuple_type_element_list_cannot_be_empty: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Variable_declaration_list_cannot_be_empty: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Digit_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Hexadecimal_digit_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unexpected_end_of_text: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Invalid_character: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Declaration_or_statement_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Statement_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + case_or_default_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_or_signature_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Enum_member_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Variable_declaration_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Argument_expression_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_assignment_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Expression_or_comma_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_declaration_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameter_declaration_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_argument_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + String_literal_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Line_break_not_permitted_here: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + or_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Declaration_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Import_declarations_in_a_namespace_cannot_reference_a_module: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_compile_modules_unless_the_module_flag_is_provided_with_a_valid_module_type_Consider_setting_the_module_compiler_option_in_a_tsconfig_json_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + File_name_0_differs_from_already_included_file_name_1_only_in_casing: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + const_declarations_must_be_initialized: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + const_declarations_can_only_be_declared_inside_a_block: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + let_declarations_can_only_be_declared_inside_a_block: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unterminated_template_literal: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unterminated_regular_expression_literal: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_object_member_cannot_be_declared_optional: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_yield_expression_is_only_allowed_in_a_generator_body: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Computed_property_names_are_not_allowed_in_enums: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_comma_expression_is_not_allowed_in_a_computed_property_name: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + extends_clause_already_seen: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + extends_clause_must_precede_implements_clause: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Classes_can_only_extend_a_single_class: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + implements_clause_already_seen: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Interface_declaration_cannot_have_implements_clause: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Binary_digit_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Octal_digit_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unexpected_token_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_destructuring_pattern_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Array_element_destructuring_pattern_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_destructuring_declaration_must_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_implementation_cannot_be_declared_in_ambient_contexts: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Modifiers_cannot_appear_here: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Merge_conflict_marker_encountered: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_rest_element_cannot_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_parameter_property_may_not_be_a_binding_pattern: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_import_declaration_cannot_have_modifiers: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Module_0_has_no_default_export: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_export_declaration_cannot_have_modifiers: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Export_declarations_are_not_permitted_in_a_namespace: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Catch_clause_variable_name_must_be_an_identifier: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Catch_clause_variable_cannot_have_a_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Catch_clause_variable_cannot_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unterminated_Unicode_escape_sequence: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Line_terminator_not_permitted_before_arrow: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Import_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_export_default_or_another_module_format_instead: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_compile_modules_into_es2015_when_targeting_ES5_or_lower: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Decorators_are_not_valid_here: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_class_declaration_without_the_default_modifier_must_have_a_name: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Identifier_expected_0_is_a_reserved_word_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Invalid_use_of_0_Modules_are_automatically_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Export_assignment_is_not_supported_when_module_flag_is_system: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Generators_are_only_available_when_targeting_ECMAScript_6_or_higher: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Generators_are_not_allowed_in_an_ambient_context: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_overload_signature_cannot_be_declared_as_a_generator: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_tag_already_specified: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Signature_0_must_have_a_type_predicate: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_find_parameter_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_predicate_0_is_not_assignable_to_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_is_not_in_the_same_position_as_parameter_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_type_predicate_cannot_reference_a_rest_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_type_predicate_cannot_reference_element_0_in_a_binding_pattern: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_export_assignment_can_only_be_used_in_a_module: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_import_declaration_can_only_be_used_in_a_namespace_or_module: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_export_declaration_can_only_be_used_in_a_module: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_namespace_declaration_is_only_allowed_in_a_namespace_or_module: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_return_type_of_a_property_decorator_function_must_be_either_void_or_any: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_modifier_cannot_be_used_with_1_modifier: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Abstract_methods_can_only_appear_within_an_abstract_class: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Method_0_cannot_have_an_implementation_because_it_is_marked_abstract: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_interface_property_cannot_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_type_literal_property_cannot_have_an_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_class_member_cannot_have_the_0_keyword: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_decorator_can_only_decorate_a_method_implementation_not_an_overload: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + with_statements_are_not_allowed_in_an_async_function_block: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + await_expression_is_only_allowed_within_an_async_function: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_body_of_an_if_statement_cannot_be_the_empty_statement: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Global_module_exports_may_only_appear_in_module_files: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Global_module_exports_may_only_appear_in_declaration_files: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Global_module_exports_may_only_appear_at_top_level: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Duplicate_identifier_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Static_members_cannot_reference_class_type_parameters: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Circular_definition_of_import_alias_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_find_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Module_0_has_no_exported_member_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + File_0_is_not_a_module: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_find_module_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_recursively_references_itself_as_a_base_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_class_may_only_extend_another_class: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_interface_may_only_extend_a_class_or_another_interface: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameter_0_has_a_circular_constraint: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Generic_type_0_requires_1_type_argument_s: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_is_not_generic: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Global_type_0_must_be_a_class_or_interface_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Global_type_0_must_have_1_type_parameter_s: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_find_global_type_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Named_property_0_of_types_1_and_2_are_not_identical: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Interface_0_cannot_simultaneously_extend_types_1_and_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Excessive_stack_depth_comparing_types_0_and_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_is_not_assignable_to_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_redeclare_exported_variable_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_is_missing_in_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_is_private_in_type_1_but_not_in_type_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Types_of_property_0_are_incompatible: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_is_optional_in_type_1_but_required_in_type_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Types_of_parameters_0_and_1_are_incompatible: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Index_signature_is_missing_in_type_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Index_signatures_are_incompatible: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + this_cannot_be_referenced_in_a_module_or_namespace_body: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + this_cannot_be_referenced_in_current_location: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + this_cannot_be_referenced_in_constructor_arguments: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + this_cannot_be_referenced_in_a_static_property_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + super_can_only_be_referenced_in_a_derived_class: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + super_cannot_be_referenced_in_constructor_arguments: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_does_not_exist_on_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_is_private_and_only_accessible_within_class_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_index_expression_argument_must_be_of_type_string_number_symbol_or_any: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_does_not_satisfy_the_constraint_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Supplied_parameters_do_not_match_any_signature_of_call_target: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Untyped_function_calls_may_not_accept_type_arguments: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Only_a_void_function_can_be_called_with_the_new_keyword: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_cannot_be_converted_to_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + No_best_common_type_exists_among_return_expressions: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Invalid_left_hand_side_of_assignment_expression: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Operator_0_cannot_be_applied_to_types_1_and_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameter_name_cannot_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_parameter_property_is_only_allowed_in_a_constructor_implementation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_rest_parameter_must_be_of_an_array_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_cannot_be_referenced_in_its_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Duplicate_string_index_signature: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Duplicate_number_index_signature: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Constructors_for_derived_classes_must_contain_a_super_call: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_get_accessor_must_return_a_value: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Getter_and_setter_accessors_do_not_agree_in_visibility: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + get_and_set_accessor_must_have_the_same_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_signature_with_an_implementation_cannot_use_a_string_literal_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Overload_signatures_must_all_be_exported_or_non_exported: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Overload_signatures_must_all_be_ambient_or_non_ambient: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Overload_signatures_must_all_be_public_private_or_protected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Overload_signatures_must_all_be_optional_or_required: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Function_overload_must_be_static: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Function_overload_must_not_be_static: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Function_implementation_name_must_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Constructor_implementation_is_missing: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Function_implementation_is_missing_or_not_immediately_following_the_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Multiple_constructor_implementations_are_not_allowed: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Duplicate_function_implementation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Overload_signature_is_not_compatible_with_function_implementation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Declaration_name_conflicts_with_built_in_global_identifier_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Invalid_left_hand_side_in_for_in_statement: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Setters_cannot_return_a_value: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + All_symbols_within_a_with_block_will_be_resolved_to_any: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Class_name_cannot_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Class_0_incorrectly_extends_base_class_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Class_static_side_0_incorrectly_extends_base_class_static_side_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Class_0_incorrectly_implements_interface_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_class_may_only_implement_another_class_or_interface: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Interface_name_cannot_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + All_declarations_of_0_must_have_identical_type_parameters: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Interface_0_incorrectly_extends_interface_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Enum_name_cannot_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Ambient_module_declaration_cannot_specify_relative_module_name: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Import_name_cannot_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Import_declaration_conflicts_with_local_declaration_of_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Types_have_separate_declarations_of_a_private_property_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_is_protected_in_type_1_but_public_in_type_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Block_scoped_variable_0_used_before_its_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant_or_a_read_only_property: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Left_hand_side_of_assignment_expression_cannot_be_a_constant_or_a_read_only_property: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_redeclare_block_scoped_variable_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_enum_member_cannot_have_a_numeric_name: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Variable_0_is_used_before_being_assigned: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_alias_0_circularly_references_itself: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_alias_name_cannot_be_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_AMD_module_cannot_have_multiple_name_assignments: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_has_no_property_1_and_no_string_index_signature: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_has_no_property_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_is_not_an_array_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_rest_element_must_be_last_in_an_array_destructuring_pattern: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_computed_property_name_must_be_of_type_string_number_symbol_or_any: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + this_cannot_be_referenced_in_a_computed_property_name: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + super_cannot_be_referenced_in_a_computed_property_name: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_find_global_value_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_0_operator_cannot_be_applied_to_type_symbol: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_computed_property_name_of_the_form_0_must_be_of_type_symbol: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Enum_declarations_must_all_be_const_or_non_const: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + In_const_enum_declarations_member_initializer_must_be_constant_expression: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_const_enum_member_can_only_be_accessed_using_a_string_literal: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + const_enum_member_initializer_was_evaluated_to_a_non_finite_value: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_does_not_exist_on_const_enum_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Export_declaration_conflicts_with_exported_declaration_of_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_left_hand_side_of_a_for_of_statement_cannot_be_a_constant_or_a_read_only_property: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_left_hand_side_of_a_for_in_statement_cannot_be_a_constant_or_a_read_only_property: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Invalid_left_hand_side_in_for_of_statement: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_iterator_must_have_a_next_method: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_redeclare_identifier_0_in_catch_clause: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_is_not_an_array_type_or_a_string_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Module_0_uses_export_and_cannot_be_used_with_export_Asterisk: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_rest_element_cannot_contain_a_binding_pattern: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_is_referenced_directly_or_indirectly_in_its_own_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_find_namespace_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + No_best_common_type_exists_among_yield_expressions: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_generator_cannot_have_a_void_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_is_referenced_directly_or_indirectly_in_its_own_base_expression: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_is_not_a_constructor_function_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + No_base_constructor_has_the_specified_number_of_type_arguments: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Base_constructor_return_type_0_is_not_a_class_or_interface_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Base_constructors_must_all_have_the_same_return_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_create_an_instance_of_the_abstract_class_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Overload_signatures_must_all_be_abstract_or_non_abstract: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Classes_containing_abstract_methods_must_be_marked_abstract: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + All_declarations_of_an_abstract_method_must_be_consecutive: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_arguments_object_cannot_be_referenced_in_an_async_arrow_function_Consider_using_a_standard_async_function_expression: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + yield_expressions_cannot_be_used_in_a_parameter_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + await_expressions_cannot_be_used_in_a_parameter_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_module_cannot_have_multiple_default_exports: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_is_incompatible_with_index_signature: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Object_is_possibly_null: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Object_is_possibly_undefined: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Object_is_possibly_null_or_undefined: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_function_returning_never_cannot_have_a_reachable_end_point: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + JSX_element_attributes_type_0_may_not_be_a_union_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_return_type_of_a_JSX_element_constructor_must_return_an_object_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_in_type_1_is_not_assignable_to_type_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + JSX_element_type_0_does_not_have_any_construct_or_call_signatures: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_global_type_JSX_0_may_not_have_more_than_one_property: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_emit_namespaced_JSX_elements_in_React: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_package_author_to_update_the_package_definition: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_the_package_definition: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + JSX_expressions_must_have_one_parent_element: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_provides_no_match_for_the_signature_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_find_name_0_Did_you_mean_the_static_member_1_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_find_name_0_Did_you_mean_the_instance_member_this_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Invalid_module_name_in_augmentation_module_0_cannot_be_found: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Exports_and_export_assignments_are_not_permitted_in_module_augmentations: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_assign_a_0_constructor_type_to_a_1_constructor_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_extend_a_class_0_Class_constructor_is_marked_as_private: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Accessors_must_both_be_abstract_or_non_abstract: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_0_is_not_comparable_to_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_this_parameter_must_be_the_first_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_constructor_cannot_have_a_this_parameter: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + get_and_set_accessor_must_have_the_same_this_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_this_types_of_each_signature_are_incompatible: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Import_declaration_0_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Exported_variable_0_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Public_property_0_of_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_of_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Return_type_of_exported_function_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_of_exported_function_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Exported_type_alias_0_has_or_is_using_private_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Default_export_of_the_module_has_or_is_using_private_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Conflicting_library_definitions_for_0_found_at_1_and_2_Copy_the_correct_file_to_the_typings_folder_to_resolve_this_conflict: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_current_host_does_not_support_the_0_option: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_find_the_common_subdirectory_path_for_the_input_files: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_read_file_0_Colon_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unsupported_file_encoding: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Failed_to_parse_file_0_Colon_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unknown_compiler_option_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Compiler_option_0_requires_a_value_of_type_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Could_not_write_file_0_Colon_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Option_project_cannot_be_mixed_with_source_files_on_a_command_line: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Option_inlineSources_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Option_0_cannot_be_specified_without_specifying_option_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Option_0_cannot_be_specified_with_option_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_tsconfig_json_file_is_already_defined_at_Colon_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_write_file_0_because_it_would_overwrite_input_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_specified_path_does_not_exist_Colon_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Option_paths_cannot_be_used_without_specifying_baseUrl_option: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Pattern_0_can_have_at_most_one_Asterisk_character: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Substututions_for_pattern_0_should_be_an_array: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Concatenate_and_emit_output_to_single_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Generates_corresponding_d_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Watch_input_files: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Redirect_output_structure_to_the_directory: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Do_not_erase_const_enum_declarations_in_generated_code: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Do_not_emit_outputs_if_any_errors_were_reported: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Do_not_emit_comments_to_output: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Do_not_emit_outputs: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES2015: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Specify_module_code_generation_Colon_commonjs_amd_system_umd_or_es2015: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Print_this_message: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Print_the_compiler_s_version: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Compile_the_project_in_the_given_directory: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Syntax_Colon_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + options: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Examples_Colon_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Options_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Version_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Insert_command_line_options_and_files_from_a_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + File_change_detected_Starting_incremental_compilation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + KIND: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + FILE: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + VERSION: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + LOCATION: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + DIRECTORY: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Compilation_complete_Watching_for_file_changes: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Generates_corresponding_map_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Compiler_option_0_expects_an_argument: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unterminated_quoted_string_in_response_file_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Argument_for_0_option_must_be_Colon_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unsupported_locale_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unable_to_open_file_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Corrupted_locale_file_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Raise_error_on_expressions_and_declarations_with_an_implied_any_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + File_0_not_found: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + File_0_has_unsupported_extension_The_only_supported_extensions_are_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Do_not_emit_declarations_for_code_that_has_an_internal_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + NEWLINE: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Option_0_can_only_be_specified_in_tsconfig_json_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Enables_experimental_support_for_ES7_decorators: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Enables_experimental_support_for_emitting_type_metadata_for_decorators: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Enables_experimental_support_for_ES7_async_functions: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Successfully_created_a_tsconfig_json_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Suppress_excess_property_checks_for_object_literals: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Stylize_errors_and_messages_using_color_and_context_experimental: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Do_not_report_errors_on_unused_labels: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Report_error_when_not_all_code_paths_in_function_return_a_value: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Report_errors_for_fallthrough_cases_in_switch_statement: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Do_not_report_errors_on_unreachable_code: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Disallow_inconsistently_cased_references_to_the_same_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Specify_library_files_to_be_included_in_the_compilation_Colon: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Specify_JSX_code_generation_Colon_preserve_or_react: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Only_amd_and_system_modules_are_supported_alongside_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Base_directory_to_resolve_non_absolute_module_names: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Specify_the_object_invoked_for_createElement_and_spread_when_targeting_react_JSX_emit: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Enable_tracing_of_the_name_resolution_process: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Resolving_module_0_from_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Explicitly_specified_module_resolution_kind_Colon_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Module_resolution_kind_is_not_specified_using_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Module_name_0_was_successfully_resolved_to_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Module_name_0_was_not_resolved: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Module_name_0_matched_pattern_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Trying_substitution_0_candidate_module_location_Colon_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Resolving_module_name_0_relative_to_base_url_1_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Loading_module_as_file_Slash_folder_candidate_module_location_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + File_0_does_not_exist: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + File_0_exist_use_it_as_a_name_resolution_result: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Loading_module_0_from_node_modules_folder: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Found_package_json_at_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + package_json_does_not_have_types_field: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + package_json_has_0_field_1_that_references_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Allow_javascript_files_to_be_compiled: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Option_0_should_have_array_of_strings_as_a_value: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Checking_if_0_is_the_longest_matching_prefix_for_1_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Expected_type_of_0_field_in_package_json_to_be_string_got_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Longest_matching_prefix_for_0_is_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Loading_0_from_the_root_dir_1_candidate_location_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Trying_other_entries_in_rootDirs: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Module_resolution_using_rootDirs_has_failed: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Do_not_emit_use_strict_directives_in_module_output: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Enable_strict_null_checks: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unknown_option_excludes_Did_you_mean_exclude: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Raise_error_on_this_expressions_with_an_implied_any_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Resolving_type_reference_directive_0_containing_file_1_root_directory_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Resolving_using_primary_search_paths: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Resolving_from_node_modules_folder: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_reference_directive_0_was_not_resolved: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Resolving_with_primary_search_path_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Root_directory_cannot_be_determined_skipping_primary_search_paths: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Type_declaration_files_to_be_included_in_compilation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Looking_up_in_node_modules_folder_initial_location_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + The_config_file_0_found_doesn_t_contain_any_source_files: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Resolving_real_path_for_0_result_1: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Variable_0_implicitly_has_an_1_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Parameter_0_implicitly_has_an_1_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Member_0_implicitly_has_an_1_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Index_signature_of_object_type_implicitly_has_an_any_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Object_literal_s_property_0_implicitly_has_an_1_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Rest_parameter_0_implicitly_has_an_any_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unreachable_code_detected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unused_label: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Fallthrough_case_in_switch: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Not_all_code_paths_return_a_value: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Binding_element_0_implicitly_has_an_1_type: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + You_cannot_rename_this_element: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + import_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + export_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + type_parameter_declarations_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + implements_clauses_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + interface_declarations_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + module_declarations_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + type_aliases_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + _0_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + types_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + type_arguments_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + parameter_modifiers_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + property_declarations_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + enum_declarations_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + type_assertion_expressions_can_only_be_used_in_a_ts_file: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clauses: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + class_expressions_are_not_currently_supported: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + JSX_attributes_must_only_be_assigned_a_non_empty_expression: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + JSX_elements_cannot_have_multiple_attributes_with_the_same_name: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Expected_corresponding_JSX_closing_tag_for_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + JSX_attribute_expected: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Cannot_use_JSX_unless_the_jsx_flag_is_provided: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_constructor_cannot_contain_a_super_call_when_its_class_extends_null: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + JSX_element_0_has_no_corresponding_closing_tag: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + Unknown_typing_option_0: { + code: number; + category: DiagnosticCategory; + key: string; + message: string; + }; + }; +} +declare namespace ts { + interface ErrorCallback { + (message: DiagnosticMessage, length: number): void; + } + function tokenIsIdentifierOrKeyword(token: SyntaxKind): boolean; + interface Scanner { + getStartPos(): number; + getToken(): SyntaxKind; + getTextPos(): number; + getTokenPos(): number; + getTokenText(): string; + getTokenValue(): string; + hasExtendedUnicodeEscape(): boolean; + hasPrecedingLineBreak(): boolean; + isIdentifier(): boolean; + isReservedWord(): boolean; + isUnterminated(): boolean; + reScanGreaterToken(): SyntaxKind; + reScanSlashToken(): SyntaxKind; + reScanTemplateToken(): SyntaxKind; + scanJsxIdentifier(): SyntaxKind; + reScanJsxToken(): SyntaxKind; + scanJsxToken(): SyntaxKind; + scanJSDocToken(): SyntaxKind; + scan(): SyntaxKind; + setText(text: string, start?: number, length?: number): void; + setOnError(onError: ErrorCallback): void; + setScriptTarget(scriptTarget: ScriptTarget): void; + setLanguageVariant(variant: LanguageVariant): void; + setTextPos(textPos: number): void; + lookAhead(callback: () => T): T; + scanRange(start: number, length: number, callback: () => T): T; + tryScan(callback: () => T): T; + } + function isUnicodeIdentifierStart(code: number, languageVersion: ScriptTarget): boolean; + function tokenToString(t: SyntaxKind): string; + function stringToToken(s: string): SyntaxKind; + function computeLineStarts(text: string): number[]; + function getPositionOfLineAndCharacter(sourceFile: SourceFile, line: number, character: number): number; + function computePositionOfLineAndCharacter(lineStarts: number[], line: number, character: number): number; + function getLineStarts(sourceFile: SourceFile): number[]; + function computeLineAndCharacterOfPosition(lineStarts: number[], position: number): { + line: number; + character: number; + }; + function getLineAndCharacterOfPosition(sourceFile: SourceFile, position: number): LineAndCharacter; + function isWhiteSpace(ch: number): boolean; + function isLineBreak(ch: number): boolean; + function isOctalDigit(ch: number): boolean; + function couldStartTrivia(text: string, pos: number): boolean; + function skipTrivia(text: string, pos: number, stopAfterLineBreak?: boolean): number; + function getLeadingCommentRanges(text: string, pos: number): CommentRange[]; + function getTrailingCommentRanges(text: string, pos: number): CommentRange[]; + function getShebang(text: string): string; + function isIdentifierStart(ch: number, languageVersion: ScriptTarget): boolean; + function isIdentifierPart(ch: number, languageVersion: ScriptTarget): boolean; + function isIdentifier(name: string, languageVersion: ScriptTarget): boolean; + function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean, languageVariant?: LanguageVariant, text?: string, onError?: ErrorCallback, start?: number, length?: number): Scanner; +} +declare namespace ts { + let optionDeclarations: CommandLineOption[]; + let typingOptionDeclarations: CommandLineOption[]; + interface OptionNameMap { + optionNameMap: Map; + shortOptionNames: Map; + } + function getOptionNameMap(): OptionNameMap; + function createCompilerDiagnosticForInvalidCustomType(opt: CommandLineOptionOfCustomType): Diagnostic; + function parseCustomTypeOption(opt: CommandLineOptionOfCustomType, value: string, errors: Diagnostic[]): number | string; + function parseListTypeOption(opt: CommandLineOptionOfListType, value: string, errors: Diagnostic[]): (string | number)[]; + function parseCommandLine(commandLine: string[], readFile?: (path: string) => string): ParsedCommandLine; + function readConfigFile(fileName: string, readFile: (path: string) => string): { + config?: any; + error?: Diagnostic; + }; + function parseConfigFileTextToJson(fileName: string, jsonText: string): { + config?: any; + error?: Diagnostic; + }; + function parseJsonConfigFileContent(json: any, host: ParseConfigHost, basePath: string, existingOptions?: CompilerOptions, configFileName?: string): ParsedCommandLine; + function convertCompilerOptionsFromJson(jsonOptions: any, basePath: string, configFileName?: string): { + options: CompilerOptions; + errors: Diagnostic[]; + }; + function convertTypingOptionsFromJson(jsonOptions: any, basePath: string, configFileName?: string): { + options: CompilerOptions; + errors: Diagnostic[]; + }; +} +declare namespace ts { + interface ReferencePathMatchResult { + fileReference?: FileReference; + diagnosticMessage?: DiagnosticMessage; + isNoDefaultLib?: boolean; + isTypeReferenceDirective?: boolean; + } + interface SynthesizedNode extends Node { + leadingCommentRanges?: CommentRange[]; + trailingCommentRanges?: CommentRange[]; + startsOnNewLine: boolean; + } + function getDeclarationOfKind(symbol: Symbol, kind: SyntaxKind): Declaration; + interface StringSymbolWriter extends SymbolWriter { + string(): string; + } + interface EmitHost extends ScriptReferenceHost { + getSourceFiles(): SourceFile[]; + getCommonSourceDirectory(): string; + getCanonicalFileName(fileName: string): string; + getNewLine(): string; + isEmitBlocked(emitFileName: string): boolean; + writeFile: WriteFileCallback; + } + function getSingleLineStringWriter(): StringSymbolWriter; + function releaseStringWriter(writer: StringSymbolWriter): void; + function getFullWidth(node: Node): number; + function mapIsEqualTo(map1: Map, map2: Map): boolean; + function arrayIsEqualTo(array1: T[], array2: T[], equaler?: (a: T, b: T) => boolean): boolean; + function hasResolvedModule(sourceFile: SourceFile, moduleNameText: string): boolean; + function getResolvedModule(sourceFile: SourceFile, moduleNameText: string): ResolvedModule; + function setResolvedModule(sourceFile: SourceFile, moduleNameText: string, resolvedModule: ResolvedModule): void; + function setResolvedTypeReferenceDirective(sourceFile: SourceFile, typeReferenceDirectiveName: string, resolvedTypeReferenceDirective: ResolvedTypeReferenceDirective): void; + function moduleResolutionIsEqualTo(oldResolution: ResolvedModule, newResolution: ResolvedModule): boolean; + function typeDirectiveIsEqualTo(oldResolution: ResolvedTypeReferenceDirective, newResolution: ResolvedTypeReferenceDirective): boolean; + function hasChangesInResolutions(names: string[], newResolutions: T[], oldResolutions: Map, comparer: (oldResolution: T, newResolution: T) => boolean): boolean; + function containsParseError(node: Node): boolean; + function getSourceFileOfNode(node: Node): SourceFile; + function isStatementWithLocals(node: Node): boolean; + function getStartPositionOfLine(line: number, sourceFile: SourceFile): number; + function nodePosToString(node: Node): string; + function getStartPosOfNode(node: Node): number; + function getEndLinePosition(line: number, sourceFile: SourceFile): number; + function nodeIsMissing(node: Node): boolean; + function nodeIsPresent(node: Node): boolean; + function getTokenPosOfNode(node: Node, sourceFile?: SourceFile): number; + function getNonDecoratorTokenPosOfNode(node: Node, sourceFile?: SourceFile): number; + function getSourceTextOfNodeFromSourceFile(sourceFile: SourceFile, node: Node, includeTrivia?: boolean): string; + function getTextOfNodeFromSourceText(sourceText: string, node: Node): string; + function getTextOfNode(node: Node, includeTrivia?: boolean): string; + function escapeIdentifier(identifier: string): string; + function unescapeIdentifier(identifier: string): string; + function makeIdentifierFromModuleName(moduleName: string): string; + function isBlockOrCatchScoped(declaration: Declaration): boolean; + function isAmbientModule(node: Node): boolean; + function isBlockScopedContainerTopLevel(node: Node): boolean; + function isGlobalScopeAugmentation(module: ModuleDeclaration): boolean; + function isExternalModuleAugmentation(node: Node): boolean; + function getEnclosingBlockScopeContainer(node: Node): Node; + function isCatchClauseVariableDeclaration(declaration: Declaration): boolean; + function declarationNameToString(name: DeclarationName): string; + function createDiagnosticForNode(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): Diagnostic; + function createDiagnosticForNodeFromMessageChain(node: Node, messageChain: DiagnosticMessageChain): Diagnostic; + function getSpanOfTokenAtPosition(sourceFile: SourceFile, pos: number): TextSpan; + function getErrorSpanForNode(sourceFile: SourceFile, node: Node): TextSpan; + function isExternalOrCommonJsModule(file: SourceFile): boolean; + function isDeclarationFile(file: SourceFile): boolean; + function isConstEnumDeclaration(node: Node): boolean; + function getCombinedNodeFlags(node: Node): NodeFlags; + function isConst(node: Node): boolean; + function isLet(node: Node): boolean; + function isSuperCallExpression(n: Node): boolean; + function isPrologueDirective(node: Node): boolean; + function getLeadingCommentRangesOfNode(node: Node, sourceFileOfNode: SourceFile): CommentRange[]; + function getLeadingCommentRangesOfNodeFromText(node: Node, text: string): CommentRange[]; + function getJsDocComments(node: Node, sourceFileOfNode: SourceFile): CommentRange[]; + function getJsDocCommentsFromText(node: Node, text: string): CommentRange[]; + let fullTripleSlashReferencePathRegEx: RegExp; + let fullTripleSlashReferenceTypeReferenceDirectiveRegEx: RegExp; + let fullTripleSlashAMDReferencePathRegEx: RegExp; + function isTypeNode(node: Node): boolean; + function forEachReturnStatement(body: Block, visitor: (stmt: ReturnStatement) => T): T; + function forEachYieldExpression(body: Block, visitor: (expr: YieldExpression) => void): void; + function isVariableLike(node: Node): node is VariableLikeDeclaration; + function isAccessor(node: Node): node is AccessorDeclaration; + function isClassLike(node: Node): node is ClassLikeDeclaration; + function isFunctionLike(node: Node): node is FunctionLikeDeclaration; + function isFunctionLikeKind(kind: SyntaxKind): boolean; + function introducesArgumentsExoticObject(node: Node): boolean; + function isIterationStatement(node: Node, lookInLabeledStatements: boolean): boolean; + function isFunctionBlock(node: Node): boolean; + function isObjectLiteralMethod(node: Node): node is MethodDeclaration; + function isIdentifierTypePredicate(predicate: TypePredicate): predicate is IdentifierTypePredicate; + function isThisTypePredicate(predicate: TypePredicate): predicate is ThisTypePredicate; + function getContainingFunction(node: Node): FunctionLikeDeclaration; + function getContainingFunctionOrModule(node: Node): Node; + function getContainingClass(node: Node): ClassLikeDeclaration; + function getThisContainer(node: Node, includeArrowFunctions: boolean): Node; + function getSuperContainer(node: Node, stopOnFunctions: boolean): Node; + function isSuperPropertyOrElementAccess(node: Node): boolean; + function getEntityNameFromTypeNode(node: TypeNode): EntityName | Expression; + function getInvokedExpression(node: CallLikeExpression): Expression; + function nodeCanBeDecorated(node: Node): boolean; + function nodeIsDecorated(node: Node): boolean; + function isPropertyAccessExpression(node: Node): node is PropertyAccessExpression; + function isElementAccessExpression(node: Node): node is ElementAccessExpression; + function isJSXTagName(node: Node): boolean; + function isExpression(node: Node): boolean; + function isExternalModuleNameRelative(moduleName: string): boolean; + function isInstantiatedModule(node: ModuleDeclaration, preserveConstEnums: boolean): boolean; + function isExternalModuleImportEqualsDeclaration(node: Node): boolean; + function getExternalModuleImportEqualsDeclarationExpression(node: Node): Expression; + function isInternalModuleImportEqualsDeclaration(node: Node): node is ImportEqualsDeclaration; + function isSourceFileJavaScript(file: SourceFile): boolean; + function isInJavaScriptFile(node: Node): boolean; + function isRequireCall(expression: Node, checkArgumentIsStringLiteral: boolean): expression is CallExpression; + function isSingleOrDoubleQuote(charCode: number): boolean; + function getSpecialPropertyAssignmentKind(expression: Node): SpecialPropertyAssignmentKind; + function getExternalModuleName(node: Node): Expression; + function hasQuestionToken(node: Node): boolean; + function isJSDocConstructSignature(node: Node): boolean; + function getJSDocTypeTag(node: Node): JSDocTypeTag; + function getJSDocReturnTag(node: Node): JSDocReturnTag; + function getJSDocTemplateTag(node: Node): JSDocTemplateTag; + function getCorrespondingJSDocParameterTag(parameter: ParameterDeclaration): JSDocParameterTag; + function hasRestParameter(s: SignatureDeclaration): boolean; + function hasDeclaredRestParameter(s: SignatureDeclaration): boolean; + function isRestParameter(node: ParameterDeclaration): boolean; + function isDeclaredRestParam(node: ParameterDeclaration): boolean; + function isLiteralKind(kind: SyntaxKind): boolean; + function isTextualLiteralKind(kind: SyntaxKind): boolean; + function isTemplateLiteralKind(kind: SyntaxKind): boolean; + function isBindingPattern(node: Node): node is BindingPattern; + function isAssignmentTarget(node: Node): boolean; + function isNodeDescendentOf(node: Node, ancestor: Node): boolean; + function isInAmbientContext(node: Node): boolean; + function isDeclaration(node: Node): boolean; + function isStatement(n: Node): boolean; + function isClassElement(n: Node): boolean; + function isDeclarationName(name: Node): boolean; + function isLiteralComputedPropertyDeclarationName(node: Node): boolean; + function isIdentifierName(node: Identifier): boolean; + function isAliasSymbolDeclaration(node: Node): boolean; + function getClassExtendsHeritageClauseElement(node: ClassLikeDeclaration): ExpressionWithTypeArguments; + function getClassImplementsHeritageClauseElements(node: ClassLikeDeclaration): NodeArray; + function getInterfaceBaseTypeNodes(node: InterfaceDeclaration): NodeArray; + function getHeritageClause(clauses: NodeArray, kind: SyntaxKind): HeritageClause; + function tryResolveScriptReference(host: ScriptReferenceHost, sourceFile: SourceFile, reference: FileReference): SourceFile; + function getAncestor(node: Node, kind: SyntaxKind): Node; + function getFileReferenceFromReferencePath(comment: string, commentRange: CommentRange): ReferencePathMatchResult; + function isKeyword(token: SyntaxKind): boolean; + function isTrivia(token: SyntaxKind): boolean; + function isAsyncFunctionLike(node: Node): boolean; + function isStringOrNumericLiteral(kind: SyntaxKind): boolean; + function hasDynamicName(declaration: Declaration): boolean; + function isDynamicName(name: DeclarationName): boolean; + function isWellKnownSymbolSyntactically(node: Expression): boolean; + function getPropertyNameForPropertyNameNode(name: DeclarationName): string; + function getPropertyNameForKnownSymbolName(symbolName: string): string; + function isESSymbolIdentifier(node: Node): boolean; + function isModifierKind(token: SyntaxKind): boolean; + function isParameterDeclaration(node: VariableLikeDeclaration): boolean; + function getRootDeclaration(node: Node): Node; + function nodeStartsNewLexicalEnvironment(n: Node): boolean; + function cloneNode(node: T, location?: TextRange, flags?: NodeFlags, parent?: Node): T; + function cloneEntityName(node: EntityName, parent?: Node): EntityName; + function isQualifiedName(node: Node): node is QualifiedName; + function nodeIsSynthesized(node: Node): boolean; + function createSynthesizedNode(kind: SyntaxKind, startsOnNewLine?: boolean): Node; + function createSynthesizedNodeArray(): NodeArray; + function createDiagnosticCollection(): DiagnosticCollection; + function escapeString(s: string): string; + function isIntrinsicJsxName(name: string): boolean; + function escapeNonAsciiCharacters(s: string): string; + interface EmitTextWriter { + write(s: string): void; + writeTextOfNode(text: string, node: Node): void; + writeLine(): void; + increaseIndent(): void; + decreaseIndent(): void; + getText(): string; + rawWrite(s: string): void; + writeLiteral(s: string): void; + getTextPos(): number; + getLine(): number; + getColumn(): number; + getIndent(): number; + reset(): void; + } + function getIndentString(level: number): string; + function getIndentSize(): number; + function createTextWriter(newLine: String): EmitTextWriter; + function getExternalModuleNameFromPath(host: EmitHost, fileName: string): string; + function getOwnEmitOutputFilePath(sourceFile: SourceFile, host: EmitHost, extension: string): string; + function getDeclarationEmitOutputFilePath(sourceFile: SourceFile, host: EmitHost): string; + function getEmitScriptTarget(compilerOptions: CompilerOptions): ScriptTarget; + function getEmitModuleKind(compilerOptions: CompilerOptions): ModuleKind; + interface EmitFileNames { + jsFilePath: string; + sourceMapFilePath: string; + declarationFilePath: string; + } + function forEachExpectedEmitFile(host: EmitHost, action: (emitFileNames: EmitFileNames, sourceFiles: SourceFile[], isBundledEmit: boolean) => void, targetSourceFile?: SourceFile): void; + function getSourceFilePathInNewDir(sourceFile: SourceFile, host: EmitHost, newDirPath: string): string; + function writeFile(host: EmitHost, diagnostics: DiagnosticCollection, fileName: string, data: string, writeByteOrderMark: boolean, sourceFiles?: SourceFile[]): void; + function getLineOfLocalPosition(currentSourceFile: SourceFile, pos: number): number; + function getLineOfLocalPositionFromLineMap(lineMap: number[], pos: number): number; + function getFirstConstructorWithBody(node: ClassLikeDeclaration): ConstructorDeclaration; + function getSetAccessorTypeAnnotationNode(accessor: AccessorDeclaration): TypeNode; + function getAllAccessorDeclarations(declarations: NodeArray, accessor: AccessorDeclaration): { + firstAccessor: AccessorDeclaration; + secondAccessor: AccessorDeclaration; + getAccessor: AccessorDeclaration; + setAccessor: AccessorDeclaration; + }; + function emitNewLineBeforeLeadingComments(lineMap: number[], writer: EmitTextWriter, node: TextRange, leadingComments: CommentRange[]): void; + function emitComments(text: string, lineMap: number[], writer: EmitTextWriter, comments: CommentRange[], trailingSeparator: boolean, newLine: string, writeComment: (text: string, lineMap: number[], writer: EmitTextWriter, comment: CommentRange, newLine: string) => void): void; + function emitDetachedComments(text: string, lineMap: number[], writer: EmitTextWriter, writeComment: (text: string, lineMap: number[], writer: EmitTextWriter, comment: CommentRange, newLine: string) => void, node: TextRange, newLine: string, removeComments: boolean): { + nodePos: number; + detachedCommentEndPos: number; + }; + function writeCommentRange(text: string, lineMap: number[], writer: EmitTextWriter, comment: CommentRange, newLine: string): void; + function modifierToFlag(token: SyntaxKind): NodeFlags; + function isLeftHandSideExpression(expr: Expression): boolean; + function isAssignmentOperator(token: SyntaxKind): boolean; + function isExpressionWithTypeArgumentsInClassExtendsClause(node: Node): boolean; + function isSupportedExpressionWithTypeArguments(node: ExpressionWithTypeArguments): boolean; + function isRightSideOfQualifiedNameOrPropertyAccess(node: Node): boolean; + function isEmptyObjectLiteralOrArrayLiteral(expression: Node): boolean; + function getLocalSymbolForExportDefault(symbol: Symbol): Symbol; + function hasJavaScriptFileExtension(fileName: string): boolean; + const stringify: (value: any) => string; + function convertToBase64(input: string): string; + function convertToRelativePath(absoluteOrRelativePath: string, basePath: string, getCanonicalFileName: (path: string) => string): string; + function getNewLineCharacter(options: CompilerOptions): string; + function isWatchSet(options: CompilerOptions): boolean; +} +declare namespace ts { + function getDefaultLibFileName(options: CompilerOptions): string; + function textSpanEnd(span: TextSpan): number; + function textSpanIsEmpty(span: TextSpan): boolean; + function textSpanContainsPosition(span: TextSpan, position: number): boolean; + function textSpanContainsTextSpan(span: TextSpan, other: TextSpan): boolean; + function textSpanOverlapsWith(span: TextSpan, other: TextSpan): boolean; + function textSpanOverlap(span1: TextSpan, span2: TextSpan): TextSpan; + function textSpanIntersectsWithTextSpan(span: TextSpan, other: TextSpan): boolean; + function textSpanIntersectsWith(span: TextSpan, start: number, length: number): boolean; + function decodedTextSpanIntersectsWith(start1: number, length1: number, start2: number, length2: number): boolean; + function textSpanIntersectsWithPosition(span: TextSpan, position: number): boolean; + function textSpanIntersection(span1: TextSpan, span2: TextSpan): TextSpan; + function createTextSpan(start: number, length: number): TextSpan; + function createTextSpanFromBounds(start: number, end: number): TextSpan; + function textChangeRangeNewSpan(range: TextChangeRange): TextSpan; + function textChangeRangeIsUnchanged(range: TextChangeRange): boolean; + function createTextChangeRange(span: TextSpan, newLength: number): TextChangeRange; + let unchangedTextChangeRange: TextChangeRange; + function collapseTextChangeRangesAcrossMultipleVersions(changes: TextChangeRange[]): TextChangeRange; + function getTypeParameterOwner(d: Declaration): Declaration; + function isParameterPropertyDeclaration(node: ParameterDeclaration): boolean; + function startsWith(str: string, prefix: string): boolean; + function endsWith(str: string, suffix: string): boolean; +} +declare namespace ts { + let parseTime: number; + function createNode(kind: SyntaxKind, pos?: number, end?: number): Node; + function forEachChild(node: Node, cbNode: (node: Node) => T, cbNodeArray?: (nodes: Node[]) => T): T; + function createSourceFile(fileName: string, sourceText: string, languageVersion: ScriptTarget, setParentNodes?: boolean, scriptKind?: ScriptKind): SourceFile; + function isExternalModule(file: SourceFile): boolean; + function updateSourceFile(sourceFile: SourceFile, newText: string, textChangeRange: TextChangeRange, aggressiveChecks?: boolean): SourceFile; + function parseIsolatedJSDocComment(content: string, start?: number, length?: number): { + jsDocComment: JSDocComment; + diagnostics: Diagnostic[]; + }; + function parseJSDocTypeExpressionForTests(content: string, start?: number, length?: number): { + jsDocTypeExpression: JSDocTypeExpression; + diagnostics: Diagnostic[]; + }; +} +declare namespace ts { + let bindTime: number; + const enum ModuleInstanceState { + NonInstantiated = 0, + Instantiated = 1, + ConstEnumOnly = 2, + } + function getModuleInstanceState(node: Node): ModuleInstanceState; + function bindSourceFile(file: SourceFile, options: CompilerOptions): void; +} +declare namespace ts { + function getNodeId(node: Node): number; + let checkTime: number; + function getSymbolId(symbol: Symbol): number; + function createTypeChecker(host: TypeCheckerHost, produceDiagnostics: boolean): TypeChecker; +} +declare namespace ts { + interface SourceMapWriter { + getSourceMapData(): SourceMapData; + setSourceFile(sourceFile: SourceFile): void; + emitPos(pos: number): void; + emitStart(range: TextRange): void; + emitEnd(range: TextRange, stopOverridingSpan?: boolean): void; + changeEmitSourcePos(): void; + getText(): string; + getSourceMappingURL(): string; + initialize(filePath: string, sourceMapFilePath: string, sourceFiles: SourceFile[], isBundledEmit: boolean): void; + reset(): void; + } + function getNullSourceMapWriter(): SourceMapWriter; + function createSourceMapWriter(host: EmitHost, writer: EmitTextWriter): SourceMapWriter; +} +declare namespace ts { + function getDeclarationDiagnostics(host: EmitHost, resolver: EmitResolver, targetSourceFile: SourceFile): Diagnostic[]; + function writeDeclarationFile(declarationFilePath: string, sourceFiles: SourceFile[], isBundledEmit: boolean, host: EmitHost, resolver: EmitResolver, emitterDiagnostics: DiagnosticCollection): boolean; +} +declare namespace ts { + function getResolvedExternalModuleName(host: EmitHost, file: SourceFile): string; + function getExternalModuleNameFromDeclaration(host: EmitHost, resolver: EmitResolver, declaration: ImportEqualsDeclaration | ImportDeclaration | ExportDeclaration): string; + function emitFiles(resolver: EmitResolver, host: EmitHost, targetSourceFile: SourceFile): EmitResult; +} +declare namespace ts { + let programTime: number; + let emitTime: number; + let ioReadTime: number; + let ioWriteTime: number; + const version: string; + function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean): string; + function resolveTripleslashReference(moduleName: string, containingFile: string): string; + function computeCommonSourceDirectoryOfFilenames(fileNames: string[], currentDirectory: string, getCanonicalFileName: (fileName: string) => string): string; + function resolveTypeReferenceDirective(typeReferenceDirectiveName: string, containingFile: string, options: CompilerOptions, host: ModuleResolutionHost): ResolvedTypeReferenceDirectiveWithFailedLookupLocations; + function resolveModuleName(moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost): ResolvedModuleWithFailedLookupLocations; + function nodeModuleNameResolver(moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost): ResolvedModuleWithFailedLookupLocations; + function directoryProbablyExists(directoryName: string, host: { + directoryExists?: (directoryName: string) => boolean; + }): boolean; + function classicNameResolver(moduleName: string, containingFile: string, compilerOptions: CompilerOptions, host: ModuleResolutionHost): ResolvedModuleWithFailedLookupLocations; + const defaultInitCompilerOptions: CompilerOptions; + function createCompilerHost(options: CompilerOptions, setParentNodes?: boolean): CompilerHost; + function getPreEmitDiagnostics(program: Program, sourceFile?: SourceFile, cancellationToken?: CancellationToken): Diagnostic[]; + function flattenDiagnosticMessageText(messageText: string | DiagnosticMessageChain, newLine: string): string; + function createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost, oldProgram?: Program): Program; +} +declare namespace ts.BreakpointResolver { + function spanInSourceFileAtLocation(sourceFile: SourceFile, position: number): TextSpan; +} +declare namespace ts.OutliningElementsCollector { + function collectElements(sourceFile: SourceFile): OutliningSpan[]; +} +declare namespace ts.NavigateTo { + function getNavigateToItems(program: Program, cancellationToken: CancellationToken, searchValue: string, maxResultCount: number): NavigateToItem[]; +} +declare namespace ts.NavigationBar { + function getNavigationBarItems(sourceFile: SourceFile, compilerOptions: CompilerOptions): ts.NavigationBarItem[]; + function getJsNavigationBarItems(sourceFile: SourceFile, compilerOptions: CompilerOptions): NavigationBarItem[]; +} +declare namespace ts { + enum PatternMatchKind { + exact = 0, + prefix = 1, + substring = 2, + camelCase = 3, + } + interface PatternMatch { + kind: PatternMatchKind; + camelCaseWeight?: number; + isCaseSensitive: boolean; + punctuationStripped: boolean; + } + interface PatternMatcher { + getMatchesForLastSegmentOfPattern(candidate: string): PatternMatch[]; + getMatches(candidateContainers: string[], candidate: string): PatternMatch[]; + patternContainsDots: boolean; + } + function createPatternMatcher(pattern: string): PatternMatcher; + function breakIntoCharacterSpans(identifier: string): TextSpan[]; + function breakIntoWordSpans(identifier: string): TextSpan[]; +} +declare namespace ts.SignatureHelp { + function getSignatureHelpItems(program: Program, sourceFile: SourceFile, position: number, cancellationToken: CancellationToken): SignatureHelpItems; +} +declare namespace ts { + interface ListItemInfo { + listItemIndex: number; + list: Node; + } + function getLineStartPositionForPosition(position: number, sourceFile: SourceFile): number; + function rangeContainsRange(r1: TextRange, r2: TextRange): boolean; + function startEndContainsRange(start: number, end: number, range: TextRange): boolean; + function rangeContainsStartEnd(range: TextRange, start: number, end: number): boolean; + function rangeOverlapsWithStartEnd(r1: TextRange, start: number, end: number): boolean; + function startEndOverlapsWithStartEnd(start1: number, end1: number, start2: number, end2: number): boolean; + function positionBelongsToNode(candidate: Node, position: number, sourceFile: SourceFile): boolean; + function isCompletedNode(n: Node, sourceFile: SourceFile): boolean; + function findListItemInfo(node: Node): ListItemInfo; + function hasChildOfKind(n: Node, kind: SyntaxKind, sourceFile?: SourceFile): boolean; + function findChildOfKind(n: Node, kind: SyntaxKind, sourceFile?: SourceFile): Node; + function findContainingList(node: Node): Node; + function getTouchingWord(sourceFile: SourceFile, position: number): Node; + function getTouchingPropertyName(sourceFile: SourceFile, position: number): Node; + function getTouchingToken(sourceFile: SourceFile, position: number, includeItemAtEndPosition?: (n: Node) => boolean): Node; + function getTokenAtPosition(sourceFile: SourceFile, position: number): Node; + function findTokenOnLeftOfPosition(file: SourceFile, position: number): Node; + function findNextToken(previousToken: Node, parent: Node): Node; + function findPrecedingToken(position: number, sourceFile: SourceFile, startNode?: Node): Node; + function isInString(sourceFile: SourceFile, position: number): boolean; + function isInComment(sourceFile: SourceFile, position: number): boolean; + function isInsideJsxElementOrAttribute(sourceFile: SourceFile, position: number): boolean; + function isInTemplateString(sourceFile: SourceFile, position: number): boolean; + function isInCommentHelper(sourceFile: SourceFile, position: number, predicate?: (c: CommentRange) => boolean): boolean; + function hasDocComment(sourceFile: SourceFile, position: number): boolean; + function getJsDocTagAtPosition(sourceFile: SourceFile, position: number): JSDocTag; + function getNodeModifiers(node: Node): string; + function getTypeArgumentOrTypeParameterList(node: Node): NodeArray; + function isToken(n: Node): boolean; + function isWord(kind: SyntaxKind): boolean; + function isComment(kind: SyntaxKind): boolean; + function isStringOrRegularExpressionOrTemplateLiteral(kind: SyntaxKind): boolean; + function isPunctuation(kind: SyntaxKind): boolean; + function isInsideTemplateLiteral(node: LiteralExpression, position: number): boolean; + function isAccessibilityModifier(kind: SyntaxKind): boolean; + function compareDataObjects(dst: any, src: any): boolean; + function isArrayLiteralOrObjectLiteralDestructuringPattern(node: Node): boolean; +} +declare namespace ts { + function isFirstDeclarationOfSymbolParameter(symbol: Symbol): boolean; + function symbolPart(text: string, symbol: Symbol): SymbolDisplayPart; + function displayPart(text: string, kind: SymbolDisplayPartKind, symbol?: Symbol): SymbolDisplayPart; + function spacePart(): SymbolDisplayPart; + function keywordPart(kind: SyntaxKind): SymbolDisplayPart; + function punctuationPart(kind: SyntaxKind): SymbolDisplayPart; + function operatorPart(kind: SyntaxKind): SymbolDisplayPart; + function textOrKeywordPart(text: string): SymbolDisplayPart; + function textPart(text: string): SymbolDisplayPart; + function getNewLineOrDefaultFromHost(host: LanguageServiceHost | LanguageServiceShimHost): string; + function lineBreakPart(): SymbolDisplayPart; + function mapToDisplayParts(writeDisplayParts: (writer: DisplayPartsSymbolWriter) => void): SymbolDisplayPart[]; + function typeToDisplayParts(typechecker: TypeChecker, type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): SymbolDisplayPart[]; + function symbolToDisplayParts(typeChecker: TypeChecker, symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): SymbolDisplayPart[]; + function signatureToDisplayParts(typechecker: TypeChecker, signature: Signature, enclosingDeclaration?: Node, flags?: TypeFormatFlags): SymbolDisplayPart[]; + function getDeclaredName(typeChecker: TypeChecker, symbol: Symbol, location: Node): string; + function isImportOrExportSpecifierName(location: Node): boolean; + function stripQuotes(name: string): string; + function scriptKindIs(fileName: string, host: LanguageServiceHost, ...scriptKinds: ScriptKind[]): boolean; + function getScriptKind(fileName: string, host?: LanguageServiceHost): ScriptKind; +} +declare namespace ts.JsTyping { + interface TypingResolutionHost { + directoryExists: (path: string) => boolean; + fileExists: (fileName: string) => boolean; + readFile: (path: string, encoding?: string) => string; + readDirectory: (path: string, extension?: string, exclude?: string[], depth?: number) => string[]; + } + function discoverTypings(host: TypingResolutionHost, fileNames: string[], projectRootPath: Path, safeListPath: Path, packageNameToTypingLocation: Map, typingOptions: TypingOptions, compilerOptions: CompilerOptions): { + cachedTypingPaths: string[]; + newTypingNames: string[]; + filesToWatch: string[]; + }; +} +declare namespace ts.formatting { + interface FormattingScanner { + advance(): void; + isOnToken(): boolean; + readTokenInfo(n: Node): TokenInfo; + getCurrentLeadingTrivia(): TextRangeWithKind[]; + lastTrailingTriviaWasNewLine(): boolean; + close(): void; + } + function getFormattingScanner(sourceFile: SourceFile, startPos: number, endPos: number): FormattingScanner; +} +declare namespace ts.formatting { + class FormattingContext { + sourceFile: SourceFile; + formattingRequestKind: FormattingRequestKind; + currentTokenSpan: TextRangeWithKind; + nextTokenSpan: TextRangeWithKind; + contextNode: Node; + currentTokenParent: Node; + nextTokenParent: Node; + private contextNodeAllOnSameLine; + private nextNodeAllOnSameLine; + private tokensAreOnSameLine; + private contextNodeBlockIsOnOneLine; + private nextNodeBlockIsOnOneLine; + constructor(sourceFile: SourceFile, formattingRequestKind: FormattingRequestKind); + updateContext(currentRange: TextRangeWithKind, currentTokenParent: Node, nextRange: TextRangeWithKind, nextTokenParent: Node, commonParent: Node): void; + ContextNodeAllOnSameLine(): boolean; + NextNodeAllOnSameLine(): boolean; + TokensAreOnSameLine(): boolean; + ContextNodeBlockIsOnOneLine(): boolean; + NextNodeBlockIsOnOneLine(): boolean; + private NodeIsOnOneLine(node); + private BlockIsOnOneLine(node); + } +} +declare namespace ts.formatting { + const enum FormattingRequestKind { + FormatDocument = 0, + FormatSelection = 1, + FormatOnEnter = 2, + FormatOnSemicolon = 3, + FormatOnClosingCurlyBrace = 4, + } +} +declare namespace ts.formatting { + class Rule { + Descriptor: RuleDescriptor; + Operation: RuleOperation; + Flag: RuleFlags; + constructor(Descriptor: RuleDescriptor, Operation: RuleOperation, Flag?: RuleFlags); + toString(): string; + } +} +declare namespace ts.formatting { + const enum RuleAction { + Ignore = 1, + Space = 2, + NewLine = 4, + Delete = 8, + } +} +declare namespace ts.formatting { + class RuleDescriptor { + LeftTokenRange: Shared.TokenRange; + RightTokenRange: Shared.TokenRange; + constructor(LeftTokenRange: Shared.TokenRange, RightTokenRange: Shared.TokenRange); + toString(): string; + static create1(left: SyntaxKind, right: SyntaxKind): RuleDescriptor; + static create2(left: Shared.TokenRange, right: SyntaxKind): RuleDescriptor; + static create3(left: SyntaxKind, right: Shared.TokenRange): RuleDescriptor; + static create4(left: Shared.TokenRange, right: Shared.TokenRange): RuleDescriptor; + } +} +declare namespace ts.formatting { + const enum RuleFlags { + None = 0, + CanDeleteNewLines = 1, + } +} +declare namespace ts.formatting { + class RuleOperation { + Context: RuleOperationContext; + Action: RuleAction; + constructor(); + toString(): string; + static create1(action: RuleAction): RuleOperation; + static create2(context: RuleOperationContext, action: RuleAction): RuleOperation; + } +} +declare namespace ts.formatting { + class RuleOperationContext { + private customContextChecks; + constructor(...funcs: { + (context: FormattingContext): boolean; + }[]); + static Any: RuleOperationContext; + IsAny(): boolean; + InContext(context: FormattingContext): boolean; + } +} +declare namespace ts.formatting { + class Rules { + getRuleName(rule: Rule): string; + [name: string]: any; + IgnoreBeforeComment: Rule; + IgnoreAfterLineComment: Rule; + NoSpaceBeforeSemicolon: Rule; + NoSpaceBeforeColon: Rule; + NoSpaceBeforeQuestionMark: Rule; + SpaceAfterColon: Rule; + SpaceAfterQuestionMarkInConditionalOperator: Rule; + NoSpaceAfterQuestionMark: Rule; + SpaceAfterSemicolon: Rule; + SpaceAfterCloseBrace: Rule; + SpaceBetweenCloseBraceAndElse: Rule; + SpaceBetweenCloseBraceAndWhile: Rule; + NoSpaceAfterCloseBrace: Rule; + NoSpaceBeforeDot: Rule; + NoSpaceAfterDot: Rule; + NoSpaceBeforeOpenBracket: Rule; + NoSpaceAfterCloseBracket: Rule; + SpaceAfterOpenBrace: Rule; + SpaceBeforeCloseBrace: Rule; + NoSpaceBetweenEmptyBraceBrackets: Rule; + NewLineAfterOpenBraceInBlockContext: Rule; + NewLineBeforeCloseBraceInBlockContext: Rule; + NoSpaceAfterUnaryPrefixOperator: Rule; + NoSpaceAfterUnaryPreincrementOperator: Rule; + NoSpaceAfterUnaryPredecrementOperator: Rule; + NoSpaceBeforeUnaryPostincrementOperator: Rule; + NoSpaceBeforeUnaryPostdecrementOperator: Rule; + SpaceAfterPostincrementWhenFollowedByAdd: Rule; + SpaceAfterAddWhenFollowedByUnaryPlus: Rule; + SpaceAfterAddWhenFollowedByPreincrement: Rule; + SpaceAfterPostdecrementWhenFollowedBySubtract: Rule; + SpaceAfterSubtractWhenFollowedByUnaryMinus: Rule; + SpaceAfterSubtractWhenFollowedByPredecrement: Rule; + NoSpaceBeforeComma: Rule; + SpaceAfterCertainKeywords: Rule; + SpaceAfterLetConstInVariableDeclaration: Rule; + NoSpaceBeforeOpenParenInFuncCall: Rule; + SpaceAfterFunctionInFuncDecl: Rule; + NoSpaceBeforeOpenParenInFuncDecl: Rule; + SpaceAfterVoidOperator: Rule; + NoSpaceBetweenReturnAndSemicolon: Rule; + SpaceBetweenStatements: Rule; + SpaceAfterTryFinally: Rule; + SpaceAfterGetSetInMember: Rule; + SpaceBeforeBinaryKeywordOperator: Rule; + SpaceAfterBinaryKeywordOperator: Rule; + NoSpaceAfterConstructor: Rule; + NoSpaceAfterModuleImport: Rule; + SpaceAfterCertainTypeScriptKeywords: Rule; + SpaceBeforeCertainTypeScriptKeywords: Rule; + SpaceAfterModuleName: Rule; + SpaceBeforeArrow: Rule; + SpaceAfterArrow: Rule; + NoSpaceAfterEllipsis: Rule; + NoSpaceAfterOptionalParameters: Rule; + NoSpaceBeforeOpenAngularBracket: Rule; + NoSpaceBetweenCloseParenAndAngularBracket: Rule; + NoSpaceAfterOpenAngularBracket: Rule; + NoSpaceBeforeCloseAngularBracket: Rule; + NoSpaceAfterCloseAngularBracket: Rule; + NoSpaceAfterTypeAssertion: Rule; + NoSpaceBetweenEmptyInterfaceBraceBrackets: Rule; + HighPriorityCommonRules: Rule[]; + LowPriorityCommonRules: Rule[]; + SpaceAfterComma: Rule; + NoSpaceAfterComma: Rule; + SpaceBeforeBinaryOperator: Rule; + SpaceAfterBinaryOperator: Rule; + NoSpaceBeforeBinaryOperator: Rule; + NoSpaceAfterBinaryOperator: Rule; + SpaceAfterKeywordInControl: Rule; + NoSpaceAfterKeywordInControl: Rule; + FunctionOpenBraceLeftTokenRange: Shared.TokenRange; + SpaceBeforeOpenBraceInFunction: Rule; + NewLineBeforeOpenBraceInFunction: Rule; + TypeScriptOpenBraceLeftTokenRange: Shared.TokenRange; + SpaceBeforeOpenBraceInTypeScriptDeclWithBlock: Rule; + NewLineBeforeOpenBraceInTypeScriptDeclWithBlock: Rule; + ControlOpenBraceLeftTokenRange: Shared.TokenRange; + SpaceBeforeOpenBraceInControl: Rule; + NewLineBeforeOpenBraceInControl: Rule; + SpaceAfterSemicolonInFor: Rule; + NoSpaceAfterSemicolonInFor: Rule; + SpaceAfterOpenParen: Rule; + SpaceBeforeCloseParen: Rule; + NoSpaceBetweenParens: Rule; + NoSpaceAfterOpenParen: Rule; + NoSpaceBeforeCloseParen: Rule; + SpaceAfterOpenBracket: Rule; + SpaceBeforeCloseBracket: Rule; + NoSpaceBetweenBrackets: Rule; + NoSpaceAfterOpenBracket: Rule; + NoSpaceBeforeCloseBracket: Rule; + SpaceAfterAnonymousFunctionKeyword: Rule; + NoSpaceAfterAnonymousFunctionKeyword: Rule; + SpaceBeforeAt: Rule; + NoSpaceAfterAt: Rule; + SpaceAfterDecorator: Rule; + NoSpaceBetweenFunctionKeywordAndStar: Rule; + SpaceAfterStarInGeneratorDeclaration: Rule; + NoSpaceBetweenYieldKeywordAndStar: Rule; + SpaceBetweenYieldOrYieldStarAndOperand: Rule; + SpaceBetweenAsyncAndOpenParen: Rule; + SpaceBetweenAsyncAndFunctionKeyword: Rule; + NoSpaceBetweenTagAndTemplateString: Rule; + NoSpaceAfterTemplateHeadAndMiddle: Rule; + SpaceAfterTemplateHeadAndMiddle: Rule; + NoSpaceBeforeTemplateMiddleAndTail: Rule; + SpaceBeforeTemplateMiddleAndTail: Rule; + constructor(); + static IsForContext(context: FormattingContext): boolean; + static IsNotForContext(context: FormattingContext): boolean; + static IsBinaryOpContext(context: FormattingContext): boolean; + static IsNotBinaryOpContext(context: FormattingContext): boolean; + static IsConditionalOperatorContext(context: FormattingContext): boolean; + static IsSameLineTokenOrBeforeMultilineBlockContext(context: FormattingContext): boolean; + static IsBeforeMultilineBlockContext(context: FormattingContext): boolean; + static IsMultilineBlockContext(context: FormattingContext): boolean; + static IsSingleLineBlockContext(context: FormattingContext): boolean; + static IsBlockContext(context: FormattingContext): boolean; + static IsBeforeBlockContext(context: FormattingContext): boolean; + static NodeIsBlockContext(node: Node): boolean; + static IsFunctionDeclContext(context: FormattingContext): boolean; + static IsFunctionDeclarationOrFunctionExpressionContext(context: FormattingContext): boolean; + static IsTypeScriptDeclWithBlockContext(context: FormattingContext): boolean; + static NodeIsTypeScriptDeclWithBlockContext(node: Node): boolean; + static IsAfterCodeBlockContext(context: FormattingContext): boolean; + static IsControlDeclContext(context: FormattingContext): boolean; + static IsObjectContext(context: FormattingContext): boolean; + static IsFunctionCallContext(context: FormattingContext): boolean; + static IsNewContext(context: FormattingContext): boolean; + static IsFunctionCallOrNewContext(context: FormattingContext): boolean; + static IsPreviousTokenNotComma(context: FormattingContext): boolean; + static IsNextTokenNotCloseBracket(context: FormattingContext): boolean; + static IsArrowFunctionContext(context: FormattingContext): boolean; + static IsNonJsxSameLineTokenContext(context: FormattingContext): boolean; + static IsNotBeforeBlockInFunctionDeclarationContext(context: FormattingContext): boolean; + static IsEndOfDecoratorContextOnSameLine(context: FormattingContext): boolean; + static NodeIsInDecoratorContext(node: Node): boolean; + static IsStartOfVariableDeclarationList(context: FormattingContext): boolean; + static IsNotFormatOnEnter(context: FormattingContext): boolean; + static IsModuleDeclContext(context: FormattingContext): boolean; + static IsObjectTypeContext(context: FormattingContext): boolean; + static IsTypeArgumentOrParameterOrAssertion(token: TextRangeWithKind, parent: Node): boolean; + static IsTypeArgumentOrParameterOrAssertionContext(context: FormattingContext): boolean; + static IsTypeAssertionContext(context: FormattingContext): boolean; + static IsVoidOpContext(context: FormattingContext): boolean; + static IsYieldOrYieldStarWithOperand(context: FormattingContext): boolean; + } +} +declare namespace ts.formatting { + class RulesMap { + map: RulesBucket[]; + mapRowLength: number; + constructor(); + static create(rules: Rule[]): RulesMap; + Initialize(rules: Rule[]): RulesBucket[]; + FillRules(rules: Rule[], rulesBucketConstructionStateList: RulesBucketConstructionState[]): void; + private GetRuleBucketIndex(row, column); + private FillRule(rule, rulesBucketConstructionStateList); + GetRule(context: FormattingContext): Rule; + } + enum RulesPosition { + IgnoreRulesSpecific = 0, + IgnoreRulesAny, + ContextRulesSpecific, + ContextRulesAny, + NoContextRulesSpecific, + NoContextRulesAny, + } + class RulesBucketConstructionState { + private rulesInsertionIndexBitmap; + constructor(); + GetInsertionIndex(maskPosition: RulesPosition): number; + IncreaseInsertionIndex(maskPosition: RulesPosition): void; + } + class RulesBucket { + private rules; + constructor(); + Rules(): Rule[]; + AddRule(rule: Rule, specificTokens: boolean, constructionState: RulesBucketConstructionState[], rulesBucketIndex: number): void; + } +} +declare namespace ts.formatting { + module Shared { + interface ITokenAccess { + GetTokens(): SyntaxKind[]; + Contains(token: SyntaxKind): boolean; + } + class TokenRangeAccess implements ITokenAccess { + private tokens; + constructor(from: SyntaxKind, to: SyntaxKind, except: SyntaxKind[]); + GetTokens(): SyntaxKind[]; + Contains(token: SyntaxKind): boolean; + } + class TokenValuesAccess implements ITokenAccess { + private tokens; + constructor(tks: SyntaxKind[]); + GetTokens(): SyntaxKind[]; + Contains(token: SyntaxKind): boolean; + } + class TokenSingleValueAccess implements ITokenAccess { + token: SyntaxKind; + constructor(token: SyntaxKind); + GetTokens(): SyntaxKind[]; + Contains(tokenValue: SyntaxKind): boolean; + } + class TokenAllAccess implements ITokenAccess { + GetTokens(): SyntaxKind[]; + Contains(tokenValue: SyntaxKind): boolean; + toString(): string; + } + class TokenRange { + tokenAccess: ITokenAccess; + constructor(tokenAccess: ITokenAccess); + static FromToken(token: SyntaxKind): TokenRange; + static FromTokens(tokens: SyntaxKind[]): TokenRange; + static FromRange(f: SyntaxKind, to: SyntaxKind, except?: SyntaxKind[]): TokenRange; + static AllTokens(): TokenRange; + GetTokens(): SyntaxKind[]; + Contains(token: SyntaxKind): boolean; + toString(): string; + static Any: TokenRange; + static AnyIncludingMultilineComments: TokenRange; + static Keywords: TokenRange; + static BinaryOperators: TokenRange; + static BinaryKeywordOperators: TokenRange; + static UnaryPrefixOperators: TokenRange; + static UnaryPrefixExpressions: TokenRange; + static UnaryPreincrementExpressions: TokenRange; + static UnaryPostincrementExpressions: TokenRange; + static UnaryPredecrementExpressions: TokenRange; + static UnaryPostdecrementExpressions: TokenRange; + static Comments: TokenRange; + static TypeNames: TokenRange; + } + } +} +declare namespace ts.formatting { + class RulesProvider { + private globalRules; + private options; + private activeRules; + private rulesMap; + constructor(); + getRuleName(rule: Rule): string; + getRuleByName(name: string): Rule; + getRulesMap(): RulesMap; + ensureUpToDate(options: ts.FormatCodeOptions): void; + private createActiveRules(options); + } +} +declare namespace ts.formatting { + interface TextRangeWithKind extends TextRange { + kind: SyntaxKind; + } + interface TokenInfo { + leadingTrivia: TextRangeWithKind[]; + token: TextRangeWithKind; + trailingTrivia: TextRangeWithKind[]; + } + function formatOnEnter(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeOptions): TextChange[]; + function formatOnSemicolon(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeOptions): TextChange[]; + function formatOnClosingCurly(position: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeOptions): TextChange[]; + function formatDocument(sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeOptions): TextChange[]; + function formatSelection(start: number, end: number, sourceFile: SourceFile, rulesProvider: RulesProvider, options: FormatCodeOptions): TextChange[]; + function getIndentationString(indentation: number, options: FormatCodeOptions): string; +} +declare namespace ts.formatting { + module SmartIndenter { + function getIndentation(position: number, sourceFile: SourceFile, options: EditorOptions): number; + function getIndentationForNode(n: Node, ignoreActualIndentationRange: TextRange, sourceFile: SourceFile, options: FormatCodeOptions): number; + function childStartsOnTheSameLineWithElseInIfStatement(parent: Node, child: TextRangeWithKind, childStartLine: number, sourceFile: SourceFile): boolean; + function findFirstNonWhitespaceCharacterAndColumn(startPos: number, endPos: number, sourceFile: SourceFile, options: EditorOptions): { + column: number; + character: number; + }; + function findFirstNonWhitespaceColumn(startPos: number, endPos: number, sourceFile: SourceFile, options: EditorOptions): number; + function nodeWillIndentChild(parent: TextRangeWithKind, child: TextRangeWithKind, indentByDefault: boolean): boolean; + function shouldIndentChildNode(parent: TextRangeWithKind, child?: TextRangeWithKind): boolean; + } +} +declare namespace ts { + const servicesVersion: string; + interface Node { + getSourceFile(): SourceFile; + getChildCount(sourceFile?: SourceFile): number; + getChildAt(index: number, sourceFile?: SourceFile): Node; + getChildren(sourceFile?: SourceFile): Node[]; + getStart(sourceFile?: SourceFile): number; + getFullStart(): number; + getEnd(): number; + getWidth(sourceFile?: SourceFile): number; + getFullWidth(): number; + getLeadingTriviaWidth(sourceFile?: SourceFile): number; + getFullText(sourceFile?: SourceFile): string; + getText(sourceFile?: SourceFile): string; + getFirstToken(sourceFile?: SourceFile): Node; + getLastToken(sourceFile?: SourceFile): Node; + } + interface Symbol { + getFlags(): SymbolFlags; + getName(): string; + getDeclarations(): Declaration[]; + getDocumentationComment(): SymbolDisplayPart[]; + } + interface Type { + getFlags(): TypeFlags; + getSymbol(): Symbol; + getProperties(): Symbol[]; + getProperty(propertyName: string): Symbol; + getApparentProperties(): Symbol[]; + getCallSignatures(): Signature[]; + getConstructSignatures(): Signature[]; + getStringIndexType(): Type; + getNumberIndexType(): Type; + getBaseTypes(): ObjectType[]; + getNonNullableType(): Type; + } + interface Signature { + getDeclaration(): SignatureDeclaration; + getTypeParameters(): Type[]; + getParameters(): Symbol[]; + getReturnType(): Type; + getDocumentationComment(): SymbolDisplayPart[]; + } + interface SourceFile { + version: string; + scriptSnapshot: IScriptSnapshot; + nameTable: Map; + getNamedDeclarations(): Map; + getLineAndCharacterOfPosition(pos: number): LineAndCharacter; + getLineStarts(): number[]; + getPositionOfLineAndCharacter(line: number, character: number): number; + update(newText: string, textChangeRange: TextChangeRange): SourceFile; + } + interface IScriptSnapshot { + getText(start: number, end: number): string; + getLength(): number; + getChangeRange(oldSnapshot: IScriptSnapshot): TextChangeRange; + dispose?(): void; + } + namespace ScriptSnapshot { + function fromString(text: string): IScriptSnapshot; + } + interface PreProcessedFileInfo { + referencedFiles: FileReference[]; + typeReferenceDirectives: FileReference[]; + importedFiles: FileReference[]; + ambientExternalModules: string[]; + isLibFile: boolean; + } + interface HostCancellationToken { + isCancellationRequested(): boolean; + } + interface LanguageServiceHost { + getCompilationSettings(): CompilerOptions; + getNewLine?(): string; + getProjectVersion?(): string; + getScriptFileNames(): string[]; + getScriptKind?(fileName: string): ScriptKind; + getScriptVersion(fileName: string): string; + getScriptSnapshot(fileName: string): IScriptSnapshot | undefined; + getLocalizedDiagnosticMessages?(): any; + getCancellationToken?(): HostCancellationToken; + getCurrentDirectory(): string; + getDefaultLibFileName(options: CompilerOptions): string; + log?(s: string): void; + trace?(s: string): void; + error?(s: string): void; + useCaseSensitiveFileNames?(): boolean; + resolveModuleNames?(moduleNames: string[], containingFile: string): ResolvedModule[]; + resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[]; + directoryExists?(directoryName: string): boolean; + } + interface LanguageService { + cleanupSemanticCache(): void; + getSyntacticDiagnostics(fileName: string): Diagnostic[]; + getSemanticDiagnostics(fileName: string): Diagnostic[]; + getCompilerOptionsDiagnostics(): Diagnostic[]; + getSyntacticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[]; + getSemanticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[]; + getEncodedSyntacticClassifications(fileName: string, span: TextSpan): Classifications; + getEncodedSemanticClassifications(fileName: string, span: TextSpan): Classifications; + getCompletionsAtPosition(fileName: string, position: number): CompletionInfo; + getCompletionEntryDetails(fileName: string, position: number, entryName: string): CompletionEntryDetails; + getQuickInfoAtPosition(fileName: string, position: number): QuickInfo; + getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): TextSpan; + getBreakpointStatementAtPosition(fileName: string, position: number): TextSpan; + getSignatureHelpItems(fileName: string, position: number): SignatureHelpItems; + getRenameInfo(fileName: string, position: number): RenameInfo; + findRenameLocations(fileName: string, position: number, findInStrings: boolean, findInComments: boolean): RenameLocation[]; + getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[]; + getTypeDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[]; + getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[]; + findReferences(fileName: string, position: number): ReferencedSymbol[]; + getDocumentHighlights(fileName: string, position: number, filesToSearch: string[]): DocumentHighlights[]; + getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[]; + getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[]; + getNavigationBarItems(fileName: string): NavigationBarItem[]; + getOutliningSpans(fileName: string): OutliningSpan[]; + getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[]; + getBraceMatchingAtPosition(fileName: string, position: number): TextSpan[]; + getIndentationAtPosition(fileName: string, position: number, options: EditorOptions): number; + getFormattingEditsForRange(fileName: string, start: number, end: number, options: FormatCodeOptions): TextChange[]; + getFormattingEditsForDocument(fileName: string, options: FormatCodeOptions): TextChange[]; + getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions): TextChange[]; + getDocCommentTemplateAtPosition(fileName: string, position: number): TextInsertion; + isValidBraceCompletionAtPostion(fileName: string, position: number, openingBrace: number): boolean; + getEmitOutput(fileName: string): EmitOutput; + getProgram(): Program; + getNonBoundSourceFile(fileName: string): SourceFile; + dispose(): void; + } + interface Classifications { + spans: number[]; + endOfLineState: EndOfLineState; + } + interface ClassifiedSpan { + textSpan: TextSpan; + classificationType: string; + } + interface NavigationBarItem { + text: string; + kind: string; + kindModifiers: string; + spans: TextSpan[]; + childItems: NavigationBarItem[]; + indent: number; + bolded: boolean; + grayed: boolean; + } + interface TodoCommentDescriptor { + text: string; + priority: number; + } + interface TodoComment { + descriptor: TodoCommentDescriptor; + message: string; + position: number; + } + class TextChange { + span: TextSpan; + newText: string; + } + interface TextInsertion { + newText: string; + caretOffset: number; + } + interface RenameLocation { + textSpan: TextSpan; + fileName: string; + } + interface ReferenceEntry { + textSpan: TextSpan; + fileName: string; + isWriteAccess: boolean; + } + interface DocumentHighlights { + fileName: string; + highlightSpans: HighlightSpan[]; + } + namespace HighlightSpanKind { + const none: string; + const definition: string; + const reference: string; + const writtenReference: string; + } + interface HighlightSpan { + fileName?: string; + textSpan: TextSpan; + kind: string; + } + interface NavigateToItem { + name: string; + kind: string; + kindModifiers: string; + matchKind: string; + isCaseSensitive: boolean; + fileName: string; + textSpan: TextSpan; + containerName: string; + containerKind: string; + } + interface EditorOptions { + IndentSize: number; + TabSize: number; + NewLineCharacter: string; + ConvertTabsToSpaces: boolean; + IndentStyle: IndentStyle; + } + enum IndentStyle { + None = 0, + Block = 1, + Smart = 2, + } + interface FormatCodeOptions extends EditorOptions { + InsertSpaceAfterCommaDelimiter: boolean; + InsertSpaceAfterSemicolonInForStatements: boolean; + InsertSpaceBeforeAndAfterBinaryOperators: boolean; + InsertSpaceAfterKeywordsInControlFlowStatements: boolean; + InsertSpaceAfterFunctionKeywordForAnonymousFunctions: boolean; + InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: boolean; + InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: boolean; + InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: boolean; + PlaceOpenBraceOnNewLineForFunctions: boolean; + PlaceOpenBraceOnNewLineForControlBlocks: boolean; + [s: string]: boolean | number | string; + } + interface DefinitionInfo { + fileName: string; + textSpan: TextSpan; + kind: string; + name: string; + containerKind: string; + containerName: string; + } + interface ReferencedSymbol { + definition: DefinitionInfo; + references: ReferenceEntry[]; + } + enum SymbolDisplayPartKind { + aliasName = 0, + className = 1, + enumName = 2, + fieldName = 3, + interfaceName = 4, + keyword = 5, + lineBreak = 6, + numericLiteral = 7, + stringLiteral = 8, + localName = 9, + methodName = 10, + moduleName = 11, + operator = 12, + parameterName = 13, + propertyName = 14, + punctuation = 15, + space = 16, + text = 17, + typeParameterName = 18, + enumMemberName = 19, + functionName = 20, + regularExpressionLiteral = 21, + } + interface SymbolDisplayPart { + text: string; + kind: string; + } + interface QuickInfo { + kind: string; + kindModifiers: string; + textSpan: TextSpan; + displayParts: SymbolDisplayPart[]; + documentation: SymbolDisplayPart[]; + } + interface RenameInfo { + canRename: boolean; + localizedErrorMessage: string; + displayName: string; + fullDisplayName: string; + kind: string; + kindModifiers: string; + triggerSpan: TextSpan; + } + interface SignatureHelpParameter { + name: string; + documentation: SymbolDisplayPart[]; + displayParts: SymbolDisplayPart[]; + isOptional: boolean; + } + interface SignatureHelpItem { + isVariadic: boolean; + prefixDisplayParts: SymbolDisplayPart[]; + suffixDisplayParts: SymbolDisplayPart[]; + separatorDisplayParts: SymbolDisplayPart[]; + parameters: SignatureHelpParameter[]; + documentation: SymbolDisplayPart[]; + } + interface SignatureHelpItems { + items: SignatureHelpItem[]; + applicableSpan: TextSpan; + selectedItemIndex: number; + argumentIndex: number; + argumentCount: number; + } + interface CompletionInfo { + isMemberCompletion: boolean; + isNewIdentifierLocation: boolean; + entries: CompletionEntry[]; + } + interface CompletionEntry { + name: string; + kind: string; + kindModifiers: string; + sortText: string; + } + interface CompletionEntryDetails { + name: string; + kind: string; + kindModifiers: string; + displayParts: SymbolDisplayPart[]; + documentation: SymbolDisplayPart[]; + } + interface OutliningSpan { + textSpan: TextSpan; + hintSpan: TextSpan; + bannerText: string; + autoCollapse: boolean; + } + interface EmitOutput { + outputFiles: OutputFile[]; + emitSkipped: boolean; + } + const enum OutputFileType { + JavaScript = 0, + SourceMap = 1, + Declaration = 2, + } + interface OutputFile { + name: string; + writeByteOrderMark: boolean; + text: string; + } + const enum EndOfLineState { + None = 0, + InMultiLineCommentTrivia = 1, + InSingleQuoteStringLiteral = 2, + InDoubleQuoteStringLiteral = 3, + InTemplateHeadOrNoSubstitutionTemplate = 4, + InTemplateMiddleOrTail = 5, + InTemplateSubstitutionPosition = 6, + } + enum TokenClass { + Punctuation = 0, + Keyword = 1, + Operator = 2, + Comment = 3, + Whitespace = 4, + Identifier = 5, + NumberLiteral = 6, + StringLiteral = 7, + RegExpLiteral = 8, + } + interface ClassificationResult { + finalLexState: EndOfLineState; + entries: ClassificationInfo[]; + } + interface ClassificationInfo { + length: number; + classification: TokenClass; + } + interface Classifier { + getClassificationsForLine(text: string, lexState: EndOfLineState, syntacticClassifierAbsent: boolean): ClassificationResult; + getEncodedLexicalClassifications(text: string, endOfLineState: EndOfLineState, syntacticClassifierAbsent: boolean): Classifications; + } + interface DocumentRegistry { + acquireDocument(fileName: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string, scriptKind?: ScriptKind): SourceFile; + acquireDocumentWithKey(fileName: string, path: Path, compilationSettings: CompilerOptions, key: DocumentRegistryBucketKey, scriptSnapshot: IScriptSnapshot, version: string, scriptKind?: ScriptKind): SourceFile; + updateDocument(fileName: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string, scriptKind?: ScriptKind): SourceFile; + updateDocumentWithKey(fileName: string, path: Path, compilationSettings: CompilerOptions, key: DocumentRegistryBucketKey, scriptSnapshot: IScriptSnapshot, version: string, scriptKind?: ScriptKind): SourceFile; + getKeyForCompilationSettings(settings: CompilerOptions): DocumentRegistryBucketKey; + releaseDocument(fileName: string, compilationSettings: CompilerOptions): void; + releaseDocumentWithKey(path: Path, key: DocumentRegistryBucketKey): void; + reportStats(): string; + } + type DocumentRegistryBucketKey = string & { + __bucketKey: any; + }; + namespace ScriptElementKind { + const unknown: string; + const warning: string; + const keyword: string; + const scriptElement: string; + const moduleElement: string; + const classElement: string; + const localClassElement: string; + const interfaceElement: string; + const typeElement: string; + const enumElement: string; + const variableElement: string; + const localVariableElement: string; + const functionElement: string; + const localFunctionElement: string; + const memberFunctionElement: string; + const memberGetAccessorElement: string; + const memberSetAccessorElement: string; + const memberVariableElement: string; + const constructorImplementationElement: string; + const callSignatureElement: string; + const indexSignatureElement: string; + const constructSignatureElement: string; + const parameterElement: string; + const typeParameterElement: string; + const primitiveType: string; + const label: string; + const alias: string; + const constElement: string; + const letElement: string; + } + namespace ScriptElementKindModifier { + const none: string; + const publicMemberModifier: string; + const privateMemberModifier: string; + const protectedMemberModifier: string; + const exportedModifier: string; + const ambientModifier: string; + const staticModifier: string; + const abstractModifier: string; + } + class ClassificationTypeNames { + static comment: string; + static identifier: string; + static keyword: string; + static numericLiteral: string; + static operator: string; + static stringLiteral: string; + static whiteSpace: string; + static text: string; + static punctuation: string; + static className: string; + static enumName: string; + static interfaceName: string; + static moduleName: string; + static typeParameterName: string; + static typeAliasName: string; + static parameterName: string; + static docCommentTagName: string; + static jsxOpenTagName: string; + static jsxCloseTagName: string; + static jsxSelfClosingTagName: string; + static jsxAttribute: string; + static jsxText: string; + static jsxAttributeStringLiteralValue: string; + } + const enum ClassificationType { + comment = 1, + identifier = 2, + keyword = 3, + numericLiteral = 4, + operator = 5, + stringLiteral = 6, + regularExpressionLiteral = 7, + whiteSpace = 8, + text = 9, + punctuation = 10, + className = 11, + enumName = 12, + interfaceName = 13, + moduleName = 14, + typeParameterName = 15, + typeAliasName = 16, + parameterName = 17, + docCommentTagName = 18, + jsxOpenTagName = 19, + jsxCloseTagName = 20, + jsxSelfClosingTagName = 21, + jsxAttribute = 22, + jsxText = 23, + jsxAttributeStringLiteralValue = 24, + } + interface DisplayPartsSymbolWriter extends SymbolWriter { + displayParts(): SymbolDisplayPart[]; + } + function displayPartsToString(displayParts: SymbolDisplayPart[]): string; + function getDefaultCompilerOptions(): CompilerOptions; + interface TranspileOptions { + compilerOptions?: CompilerOptions; + fileName?: string; + reportDiagnostics?: boolean; + moduleName?: string; + renamedDependencies?: Map; + } + interface TranspileOutput { + outputText: string; + diagnostics?: Diagnostic[]; + sourceMapText?: string; + } + function transpileModule(input: string, transpileOptions: TranspileOptions): TranspileOutput; + function transpile(input: string, compilerOptions?: CompilerOptions, fileName?: string, diagnostics?: Diagnostic[], moduleName?: string): string; + function createLanguageServiceSourceFile(fileName: string, scriptSnapshot: IScriptSnapshot, scriptTarget: ScriptTarget, version: string, setNodeParents: boolean, scriptKind?: ScriptKind): SourceFile; + let disableIncrementalParsing: boolean; + function updateLanguageServiceSourceFile(sourceFile: SourceFile, scriptSnapshot: IScriptSnapshot, version: string, textChangeRange: TextChangeRange, aggressiveChecks?: boolean): SourceFile; + function createDocumentRegistry(useCaseSensitiveFileNames?: boolean, currentDirectory?: string): DocumentRegistry; + function preProcessFile(sourceText: string, readImportFiles?: boolean, detectJavaScriptImports?: boolean): PreProcessedFileInfo; + function getContainerNode(node: Node): Declaration; + function getNodeKind(node: Node): string; + function createLanguageService(host: LanguageServiceHost, documentRegistry?: DocumentRegistry): LanguageService; + function getNameTable(sourceFile: SourceFile): Map; + function createClassifier(): Classifier; + function getDefaultLibFilePath(options: CompilerOptions): string; +} +declare namespace ts.server { + function generateSpaces(n: number): string; + function generateIndentString(n: number, editorOptions: EditorOptions): string; + interface PendingErrorCheck { + fileName: string; + project: Project; + } + namespace CommandNames { + const Brace: string; + const Change: string; + const Close: string; + const Completions: string; + const CompletionDetails: string; + const Configure: string; + const Definition: string; + const Exit: string; + const Format: string; + const Formatonkey: string; + const Geterr: string; + const GeterrForProject: string; + const NavBar: string; + const Navto: string; + const Occurrences: string; + const DocumentHighlights: string; + const Open: string; + const Quickinfo: string; + const References: string; + const Reload: string; + const Rename: string; + const Saveto: string; + const SignatureHelp: string; + const TypeDefinition: string; + const ProjectInfo: string; + const ReloadProjects: string; + const Unknown: string; + } + interface ServerHost extends ts.System { + setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): any; + clearTimeout(timeoutId: any): void; + } + class Session { + private host; + private byteLength; + private hrtime; + private logger; + protected projectService: ProjectService; + private errorTimer; + private immediateId; + private changeSeq; + constructor(host: ServerHost, byteLength: (buf: string, encoding?: string) => number, hrtime: (start?: number[]) => number[], logger: Logger); + private handleEvent(eventName, project, fileName); + logError(err: Error, cmd: string): void; + private sendLineToClient(line); + send(msg: protocol.Message): void; + configFileDiagnosticEvent(triggerFile: string, configFile: string, diagnostics: ts.Diagnostic[]): void; + event(info: any, eventName: string): void; + private response(info, cmdName, reqSeq?, errorMsg?); + output(body: any, commandName: string, requestSequence?: number, errorMessage?: string): void; + private semanticCheck(file, project); + private syntacticCheck(file, project); + private reloadProjects(); + private updateProjectStructure(seq, matchSeq, ms?); + private updateErrorCheck(checkList, seq, matchSeq, ms?, followMs?, requireOpen?); + private getDefinition(line, offset, fileName); + private getTypeDefinition(line, offset, fileName); + private getOccurrences(line, offset, fileName); + private getDocumentHighlights(line, offset, fileName, filesToSearch); + private getProjectInfo(fileName, needFileNameList); + private getRenameLocations(line, offset, fileName, findInComments, findInStrings); + private getReferences(line, offset, fileName); + private openClientFile(fileName, fileContent?, scriptKind?); + private getQuickInfo(line, offset, fileName); + private getFormattingEditsForRange(line, offset, endLine, endOffset, fileName); + private getFormattingEditsAfterKeystroke(line, offset, key, fileName); + private getCompletions(line, offset, prefix, fileName); + private getCompletionEntryDetails(line, offset, entryNames, fileName); + private getSignatureHelpItems(line, offset, fileName); + private getDiagnostics(delay, fileNames); + private change(line, offset, endLine, endOffset, insertString, fileName); + private reload(fileName, tempFileName, reqSeq?); + private saveToTmp(fileName, tempFileName); + private closeClientFile(fileName); + private decorateNavigationBarItem(project, fileName, items); + private getNavigationBarItems(fileName); + private getNavigateToItems(searchValue, fileName, maxResultCount?); + private getBraceMatching(line, offset, fileName); + getDiagnosticsForProject(delay: number, fileName: string): void; + getCanonicalFileName(fileName: string): string; + exit(): void; + private handlers; + addProtocolHandler(command: string, handler: (request: protocol.Request) => { + response?: any; + responseRequired: boolean; + }): void; + executeCommand(request: protocol.Request): { + response?: any; + responseRequired?: boolean; + }; + onMessage(message: string): void; + } +} +declare namespace ts.server { + interface Logger { + close(): void; + isVerbose(): boolean; + loggingEnabled(): boolean; + perftrc(s: string): void; + info(s: string): void; + startGroup(): void; + endGroup(): void; + msg(s: string, type?: string): void; + } + class ScriptInfo { + private host; + fileName: string; + content: string; + isOpen: boolean; + svc: ScriptVersionCache; + children: ScriptInfo[]; + defaultProject: Project; + fileWatcher: FileWatcher; + formatCodeOptions: FormatCodeOptions; + path: Path; + scriptKind: ScriptKind; + constructor(host: ServerHost, fileName: string, content: string, isOpen?: boolean); + setFormatOptions(formatOptions: protocol.FormatOptions): void; + close(): void; + addChild(childInfo: ScriptInfo): void; + snap(): LineIndexSnapshot; + getText(): string; + getLineInfo(line: number): ILineInfo; + editContent(start: number, end: number, newText: string): void; + getTextChangeRangeBetweenVersions(startVersion: number, endVersion: number): ts.TextChangeRange; + getChangeRange(oldSnapshot: ts.IScriptSnapshot): ts.TextChangeRange; + } + class LSHost implements ts.LanguageServiceHost { + host: ServerHost; + project: Project; + ls: ts.LanguageService; + compilationSettings: ts.CompilerOptions; + filenameToScript: ts.FileMap; + roots: ScriptInfo[]; + private resolvedModuleNames; + private resolvedTypeReferenceDirectives; + private moduleResolutionHost; + private getCanonicalFileName; + constructor(host: ServerHost, project: Project); + private resolveNamesWithLocalCache(names, containingFile, cache, loader, getResult); + resolveTypeReferenceDirectives(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[]; + resolveModuleNames(moduleNames: string[], containingFile: string): ResolvedModule[]; + getDefaultLibFileName(): string; + getScriptSnapshot(filename: string): ts.IScriptSnapshot; + setCompilationSettings(opt: ts.CompilerOptions): void; + lineAffectsRefs(filename: string, line: number): boolean; + getCompilationSettings(): CompilerOptions; + getScriptFileNames(): string[]; + getScriptKind(fileName: string): ScriptKind; + getScriptVersion(filename: string): string; + getCurrentDirectory(): string; + getScriptIsOpen(filename: string): boolean; + removeReferencedFile(info: ScriptInfo): void; + getScriptInfo(filename: string): ScriptInfo; + addRoot(info: ScriptInfo): void; + removeRoot(info: ScriptInfo): void; + saveTo(filename: string, tmpfilename: string): void; + reloadScript(filename: string, tmpfilename: string, cb: () => any): void; + editScript(filename: string, start: number, end: number, newText: string): void; + resolvePath(path: string): string; + fileExists(path: string): boolean; + directoryExists(path: string): boolean; + lineToTextSpan(filename: string, line: number): ts.TextSpan; + lineOffsetToPosition(filename: string, line: number, offset: number): number; + positionToLineOffset(filename: string, position: number): ILineInfo; + } + interface ProjectOptions { + files?: string[]; + compilerOptions?: ts.CompilerOptions; + } + class Project { + projectService: ProjectService; + projectOptions?: ProjectOptions; + compilerService: CompilerService; + projectFilename: string; + projectFileWatcher: FileWatcher; + directoryWatcher: FileWatcher; + directoriesWatchedForTsconfig: string[]; + program: ts.Program; + filenameToSourceFile: ts.Map; + updateGraphSeq: number; + openRefCount: number; + constructor(projectService: ProjectService, projectOptions?: ProjectOptions); + addOpenRef(): void; + deleteOpenRef(): number; + openReferencedFile(filename: string): ScriptInfo; + getRootFiles(): string[]; + getFileNames(): string[]; + getSourceFile(info: ScriptInfo): SourceFile; + getSourceFileFromName(filename: string, requireOpen?: boolean): SourceFile; + isRoot(info: ScriptInfo): boolean; + removeReferencedFile(info: ScriptInfo): void; + updateFileMap(): void; + finishGraph(): void; + updateGraph(): void; + isConfiguredProject(): string; + addRoot(info: ScriptInfo): void; + removeRoot(info: ScriptInfo): void; + filesToString(): string; + setProjectOptions(projectOptions: ProjectOptions): void; + } + interface ProjectOpenResult { + success?: boolean; + errorMsg?: string; + project?: Project; + } + function combineProjectOutput(projects: Project[], action: (project: Project) => T[], comparer?: (a: T, b: T) => number, areEqual?: (a: T, b: T) => boolean): T[]; + interface ProjectServiceEventHandler { + (eventName: string, project: Project, fileName: string): void; + } + interface HostConfiguration { + formatCodeOptions: ts.FormatCodeOptions; + hostInfo: string; + } + class ProjectService { + host: ServerHost; + psLogger: Logger; + eventHandler?: ProjectServiceEventHandler; + filenameToScriptInfo: ts.Map; + openFileRoots: ScriptInfo[]; + inferredProjects: Project[]; + configuredProjects: Project[]; + openFilesReferenced: ScriptInfo[]; + openFileRootsConfigured: ScriptInfo[]; + directoryWatchersForTsconfig: ts.Map; + directoryWatchersRefCount: ts.Map; + hostConfiguration: HostConfiguration; + timerForDetectingProjectFileListChanges: Map; + constructor(host: ServerHost, psLogger: Logger, eventHandler?: ProjectServiceEventHandler); + addDefaultHostConfiguration(): void; + getFormatCodeOptions(file?: string): FormatCodeOptions; + watchedFileChanged(fileName: string): void; + directoryWatchedForSourceFilesChanged(project: Project, fileName: string): void; + startTimerForDetectingProjectFileListChanges(project: Project): void; + handleProjectFileListChanges(project: Project): void; + directoryWatchedForTsconfigChanged(fileName: string): void; + getCanonicalFileName(fileName: string): string; + watchedProjectConfigFileChanged(project: Project): void; + log(msg: string, type?: string): void; + setHostConfiguration(args: ts.server.protocol.ConfigureRequestArguments): void; + closeLog(): void; + createInferredProject(root: ScriptInfo): Project; + fileDeletedInFilesystem(info: ScriptInfo): void; + updateConfiguredProjectList(): void; + removeProject(project: Project): void; + setConfiguredProjectRoot(info: ScriptInfo): boolean; + addOpenFile(info: ScriptInfo): void; + closeOpenFile(info: ScriptInfo): void; + findReferencingProjects(info: ScriptInfo, excludedProject?: Project): Project[]; + reloadProjects(): void; + updateProjectStructure(): void; + getScriptInfo(filename: string): ScriptInfo; + openFile(fileName: string, openedByClient: boolean, fileContent?: string, scriptKind?: ScriptKind): ScriptInfo; + findConfigFile(searchPath: string): string; + openClientFile(fileName: string, fileContent?: string, scriptKind?: ScriptKind): { + configFileName?: string; + configFileErrors?: Diagnostic[]; + }; + openOrUpdateConfiguredProjectForFile(fileName: string): { + configFileName?: string; + configFileErrors?: Diagnostic[]; + }; + closeClientFile(filename: string): void; + getProjectForFile(filename: string): Project; + printProjectsForFile(filename: string): void; + printProjects(): void; + configProjectIsActive(fileName: string): boolean; + findConfiguredProjectByConfigFile(configFileName: string): Project; + configFileToProjectOptions(configFilename: string): { + succeeded: boolean; + projectOptions?: ProjectOptions; + errors?: Diagnostic[]; + }; + openConfigFile(configFilename: string, clientFileName?: string): { + success: boolean; + project?: Project; + errors?: Diagnostic[]; + }; + updateConfiguredProject(project: Project): Diagnostic[]; + createProject(projectFilename: string, projectOptions?: ProjectOptions): Project; + } + class CompilerService { + project: Project; + host: LSHost; + languageService: ts.LanguageService; + classifier: ts.Classifier; + settings: ts.CompilerOptions; + documentRegistry: DocumentRegistry; + constructor(project: Project, opt?: ts.CompilerOptions); + setCompilerOptions(opt: ts.CompilerOptions): void; + isExternalModule(filename: string): boolean; + static getDefaultFormatCodeOptions(host: ServerHost): ts.FormatCodeOptions; + } + interface LineCollection { + charCount(): number; + lineCount(): number; + isLeaf(): boolean; + walk(rangeStart: number, rangeLength: number, walkFns: ILineIndexWalker): void; + } + interface ILineInfo { + line: number; + offset: number; + text?: string; + leaf?: LineLeaf; + } + enum CharRangeSection { + PreStart = 0, + Start = 1, + Entire = 2, + Mid = 3, + End = 4, + PostEnd = 5, + } + interface ILineIndexWalker { + goSubtree: boolean; + done: boolean; + leaf(relativeStart: number, relativeLength: number, lineCollection: LineLeaf): void; + pre?(relativeStart: number, relativeLength: number, lineCollection: LineCollection, parent: LineNode, nodeType: CharRangeSection): LineCollection; + post?(relativeStart: number, relativeLength: number, lineCollection: LineCollection, parent: LineNode, nodeType: CharRangeSection): LineCollection; + } + class TextChange { + pos: number; + deleteLen: number; + insertedText?: string; + constructor(pos: number, deleteLen: number, insertedText?: string); + getTextChangeRange(): TextChangeRange; + } + class ScriptVersionCache { + changes: TextChange[]; + versions: LineIndexSnapshot[]; + minVersion: number; + private currentVersion; + private host; + static changeNumberThreshold: number; + static changeLengthThreshold: number; + static maxVersions: number; + edit(pos: number, deleteLen: number, insertedText?: string): void; + latest(): LineIndexSnapshot; + latestVersion(): number; + reloadFromFile(filename: string, cb?: () => any): void; + reload(script: string): void; + getSnapshot(): LineIndexSnapshot; + getTextChangesBetweenVersions(oldVersion: number, newVersion: number): TextChangeRange; + static fromString(host: ServerHost, script: string): ScriptVersionCache; + } + class LineIndexSnapshot implements ts.IScriptSnapshot { + version: number; + cache: ScriptVersionCache; + index: LineIndex; + changesSincePreviousVersion: TextChange[]; + constructor(version: number, cache: ScriptVersionCache); + getText(rangeStart: number, rangeEnd: number): string; + getLength(): number; + getLineStartPositions(): number[]; + getLineMapper(): (line: number) => number; + getTextChangeRangeSinceVersion(scriptVersion: number): TextChangeRange; + getChangeRange(oldSnapshot: ts.IScriptSnapshot): ts.TextChangeRange; + } + class LineIndex { + root: LineNode; + checkEdits: boolean; + charOffsetToLineNumberAndPos(charOffset: number): ILineInfo; + lineNumberToInfo(lineNumber: number): ILineInfo; + load(lines: string[]): void; + walk(rangeStart: number, rangeLength: number, walkFns: ILineIndexWalker): void; + getText(rangeStart: number, rangeLength: number): string; + getLength(): number; + every(f: (ll: LineLeaf, s: number, len: number) => boolean, rangeStart: number, rangeEnd?: number): boolean; + edit(pos: number, deleteLength: number, newText?: string): LineIndex; + static buildTreeFromBottom(nodes: LineCollection[]): LineNode; + static linesFromText(text: string): { + lines: string[]; + lineMap: number[]; + }; + } + class LineNode implements LineCollection { + totalChars: number; + totalLines: number; + children: LineCollection[]; + isLeaf(): boolean; + updateCounts(): void; + execWalk(rangeStart: number, rangeLength: number, walkFns: ILineIndexWalker, childIndex: number, nodeType: CharRangeSection): boolean; + skipChild(relativeStart: number, relativeLength: number, childIndex: number, walkFns: ILineIndexWalker, nodeType: CharRangeSection): void; + walk(rangeStart: number, rangeLength: number, walkFns: ILineIndexWalker): void; + charOffsetToLineNumberAndPos(lineNumber: number, charOffset: number): ILineInfo; + lineNumberToInfo(lineNumber: number, charOffset: number): ILineInfo; + childFromLineNumber(lineNumber: number, charOffset: number): { + child: LineCollection; + childIndex: number; + relativeLineNumber: number; + charOffset: number; + }; + childFromCharOffset(lineNumber: number, charOffset: number): { + child: LineCollection; + childIndex: number; + charOffset: number; + lineNumber: number; + }; + splitAfter(childIndex: number): LineNode; + remove(child: LineCollection): void; + findChildIndex(child: LineCollection): number; + insertAt(child: LineCollection, nodes: LineCollection[]): LineNode[]; + add(collection: LineCollection): boolean; + charCount(): number; + lineCount(): number; + } + class LineLeaf implements LineCollection { + text: string; + udata: any; + constructor(text: string); + setUdata(data: any): void; + getUdata(): any; + isLeaf(): boolean; + walk(rangeStart: number, rangeLength: number, walkFns: ILineIndexWalker): void; + charCount(): number; + lineCount(): number; + } +} +declare let debugObjectHost: any; +declare namespace ts { + interface ScriptSnapshotShim { + getText(start: number, end: number): string; + getLength(): number; + getChangeRange(oldSnapshot: ScriptSnapshotShim): string; + dispose?(): void; + } + interface Logger { + log(s: string): void; + trace(s: string): void; + error(s: string): void; + } + interface LanguageServiceShimHost extends Logger { + getCompilationSettings(): string; + getScriptFileNames(): string; + getScriptKind?(fileName: string): ScriptKind; + getScriptVersion(fileName: string): string; + getScriptSnapshot(fileName: string): ScriptSnapshotShim; + getLocalizedDiagnosticMessages(): string; + getCancellationToken(): HostCancellationToken; + getCurrentDirectory(): string; + getDefaultLibFileName(options: string): string; + getNewLine?(): string; + getProjectVersion?(): string; + useCaseSensitiveFileNames?(): boolean; + getModuleResolutionsForFile?(fileName: string): string; + getTypeReferenceDirectiveResolutionsForFile?(fileName: string): string; + directoryExists(directoryName: string): boolean; + } + interface CoreServicesShimHost extends Logger, ModuleResolutionHost { + readDirectory(rootDir: string, extension: string, exclude?: string, depth?: number): string; + trace(s: string): void; + } + interface IFileReference { + path: string; + position: number; + length: number; + } + interface ShimFactory { + registerShim(shim: Shim): void; + unregisterShim(shim: Shim): void; + } + interface Shim { + dispose(dummy: any): void; + } + interface LanguageServiceShim extends Shim { + languageService: LanguageService; + dispose(dummy: any): void; + refresh(throwOnError: boolean): void; + cleanupSemanticCache(): void; + getSyntacticDiagnostics(fileName: string): string; + getSemanticDiagnostics(fileName: string): string; + getCompilerOptionsDiagnostics(): string; + getSyntacticClassifications(fileName: string, start: number, length: number): string; + getSemanticClassifications(fileName: string, start: number, length: number): string; + getEncodedSyntacticClassifications(fileName: string, start: number, length: number): string; + getEncodedSemanticClassifications(fileName: string, start: number, length: number): string; + getCompletionsAtPosition(fileName: string, position: number): string; + getCompletionEntryDetails(fileName: string, position: number, entryName: string): string; + getQuickInfoAtPosition(fileName: string, position: number): string; + getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): string; + getBreakpointStatementAtPosition(fileName: string, position: number): string; + getSignatureHelpItems(fileName: string, position: number): string; + getRenameInfo(fileName: string, position: number): string; + findRenameLocations(fileName: string, position: number, findInStrings: boolean, findInComments: boolean): string; + getDefinitionAtPosition(fileName: string, position: number): string; + getTypeDefinitionAtPosition(fileName: string, position: number): string; + getReferencesAtPosition(fileName: string, position: number): string; + findReferences(fileName: string, position: number): string; + getOccurrencesAtPosition(fileName: string, position: number): string; + getDocumentHighlights(fileName: string, position: number, filesToSearch: string): string; + getNavigateToItems(searchValue: string, maxResultCount?: number): string; + getNavigationBarItems(fileName: string): string; + getOutliningSpans(fileName: string): string; + getTodoComments(fileName: string, todoCommentDescriptors: string): string; + getBraceMatchingAtPosition(fileName: string, position: number): string; + getIndentationAtPosition(fileName: string, position: number, options: string): string; + getFormattingEditsForRange(fileName: string, start: number, end: number, options: string): string; + getFormattingEditsForDocument(fileName: string, options: string): string; + getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: string): string; + getDocCommentTemplateAtPosition(fileName: string, position: number): string; + isValidBraceCompletionAtPostion(fileName: string, position: number, openingBrace: number): string; + getEmitOutput(fileName: string): string; + } + interface ClassifierShim extends Shim { + getEncodedLexicalClassifications(text: string, lexState: EndOfLineState, syntacticClassifierAbsent?: boolean): string; + getClassificationsForLine(text: string, lexState: EndOfLineState, syntacticClassifierAbsent?: boolean): string; + } + interface CoreServicesShim extends Shim { + getPreProcessedFileInfo(fileName: string, sourceText: IScriptSnapshot): string; + getTSConfigFileInfo(fileName: string, sourceText: IScriptSnapshot): string; + getDefaultCompilationSettings(): string; + discoverTypings(discoverTypingsJson: string): string; + } + class LanguageServiceShimHostAdapter implements LanguageServiceHost { + private shimHost; + private files; + private loggingEnabled; + private tracingEnabled; + resolveModuleNames: (moduleName: string[], containingFile: string) => ResolvedModule[]; + resolveTypeReferenceDirectives: (typeDirectiveNames: string[], containingFile: string) => ResolvedTypeReferenceDirective[]; + directoryExists: (directoryName: string) => boolean; + constructor(shimHost: LanguageServiceShimHost); + log(s: string): void; + trace(s: string): void; + error(s: string): void; + getProjectVersion(): string; + useCaseSensitiveFileNames(): boolean; + getCompilationSettings(): CompilerOptions; + getScriptFileNames(): string[]; + getScriptSnapshot(fileName: string): IScriptSnapshot; + getScriptKind(fileName: string): ScriptKind; + getScriptVersion(fileName: string): string; + getLocalizedDiagnosticMessages(): any; + getCancellationToken(): HostCancellationToken; + getCurrentDirectory(): string; + getDefaultLibFileName(options: CompilerOptions): string; + } + class CoreServicesShimHostAdapter implements ParseConfigHost, ModuleResolutionHost { + private shimHost; + directoryExists: (directoryName: string) => boolean; + realpath: (path: string) => string; + constructor(shimHost: CoreServicesShimHost); + readDirectory(rootDir: string, extension: string, exclude: string[], depth?: number): string[]; + fileExists(fileName: string): boolean; + readFile(fileName: string): string; + } + function realizeDiagnostics(diagnostics: Diagnostic[], newLine: string): { + message: string; + start: number; + length: number; + category: string; + code: number; + }[]; + class TypeScriptServicesFactory implements ShimFactory { + private _shims; + private documentRegistry; + getServicesVersion(): string; + createLanguageServiceShim(host: LanguageServiceShimHost): LanguageServiceShim; + createClassifierShim(logger: Logger): ClassifierShim; + createCoreServicesShim(host: CoreServicesShimHost): CoreServicesShim; + close(): void; + registerShim(shim: Shim): void; + unregisterShim(shim: Shim): void; + } +} +declare namespace TypeScript.Services { + const TypeScriptServicesFactory: typeof ts.TypeScriptServicesFactory; +} +declare const toolsVersion: string; diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js new file mode 100644 index 00000000000..050d9ca265d --- /dev/null +++ b/lib/tsserverlibrary.js @@ -0,0 +1,51467 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +var ts; +(function (ts) { + var OperationCanceledException = (function () { + function OperationCanceledException() { + } + return OperationCanceledException; + }()); + ts.OperationCanceledException = OperationCanceledException; + (function (ExitStatus) { + ExitStatus[ExitStatus["Success"] = 0] = "Success"; + ExitStatus[ExitStatus["DiagnosticsPresent_OutputsSkipped"] = 1] = "DiagnosticsPresent_OutputsSkipped"; + ExitStatus[ExitStatus["DiagnosticsPresent_OutputsGenerated"] = 2] = "DiagnosticsPresent_OutputsGenerated"; + })(ts.ExitStatus || (ts.ExitStatus = {})); + var ExitStatus = ts.ExitStatus; + (function (TypeReferenceSerializationKind) { + TypeReferenceSerializationKind[TypeReferenceSerializationKind["Unknown"] = 0] = "Unknown"; + TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithConstructSignatureAndValue"] = 1] = "TypeWithConstructSignatureAndValue"; + TypeReferenceSerializationKind[TypeReferenceSerializationKind["VoidType"] = 2] = "VoidType"; + TypeReferenceSerializationKind[TypeReferenceSerializationKind["NumberLikeType"] = 3] = "NumberLikeType"; + TypeReferenceSerializationKind[TypeReferenceSerializationKind["StringLikeType"] = 4] = "StringLikeType"; + TypeReferenceSerializationKind[TypeReferenceSerializationKind["BooleanType"] = 5] = "BooleanType"; + TypeReferenceSerializationKind[TypeReferenceSerializationKind["ArrayLikeType"] = 6] = "ArrayLikeType"; + TypeReferenceSerializationKind[TypeReferenceSerializationKind["ESSymbolType"] = 7] = "ESSymbolType"; + TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithCallSignature"] = 8] = "TypeWithCallSignature"; + TypeReferenceSerializationKind[TypeReferenceSerializationKind["ObjectType"] = 9] = "ObjectType"; + })(ts.TypeReferenceSerializationKind || (ts.TypeReferenceSerializationKind = {})); + var TypeReferenceSerializationKind = ts.TypeReferenceSerializationKind; + (function (DiagnosticCategory) { + DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning"; + DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error"; + DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message"; + })(ts.DiagnosticCategory || (ts.DiagnosticCategory = {})); + var DiagnosticCategory = ts.DiagnosticCategory; + (function (ModuleResolutionKind) { + ModuleResolutionKind[ModuleResolutionKind["Classic"] = 1] = "Classic"; + ModuleResolutionKind[ModuleResolutionKind["NodeJs"] = 2] = "NodeJs"; + })(ts.ModuleResolutionKind || (ts.ModuleResolutionKind = {})); + var ModuleResolutionKind = ts.ModuleResolutionKind; + (function (ModuleKind) { + ModuleKind[ModuleKind["None"] = 0] = "None"; + ModuleKind[ModuleKind["CommonJS"] = 1] = "CommonJS"; + ModuleKind[ModuleKind["AMD"] = 2] = "AMD"; + ModuleKind[ModuleKind["UMD"] = 3] = "UMD"; + ModuleKind[ModuleKind["System"] = 4] = "System"; + ModuleKind[ModuleKind["ES6"] = 5] = "ES6"; + ModuleKind[ModuleKind["ES2015"] = 5] = "ES2015"; + })(ts.ModuleKind || (ts.ModuleKind = {})); + var ModuleKind = ts.ModuleKind; +})(ts || (ts = {})); +var ts; +(function (ts) { + function createFileMap(keyMapper) { + var files = {}; + return { + get: get, + set: set, + contains: contains, + remove: remove, + forEachValue: forEachValueInMap, + clear: clear + }; + function forEachValueInMap(f) { + for (var key in files) { + f(key, files[key]); + } + } + function get(path) { + return files[toKey(path)]; + } + function set(path, value) { + files[toKey(path)] = value; + } + function contains(path) { + return hasProperty(files, toKey(path)); + } + function remove(path) { + var key = toKey(path); + delete files[key]; + } + function clear() { + files = {}; + } + function toKey(path) { + return keyMapper ? keyMapper(path) : path; + } + } + ts.createFileMap = createFileMap; + function toPath(fileName, basePath, getCanonicalFileName) { + var nonCanonicalizedPath = isRootedDiskPath(fileName) + ? normalizePath(fileName) + : getNormalizedAbsolutePath(fileName, basePath); + return getCanonicalFileName(nonCanonicalizedPath); + } + ts.toPath = toPath; + function forEach(array, callback) { + if (array) { + for (var i = 0, len = array.length; i < len; i++) { + var result = callback(array[i], i); + if (result) { + return result; + } + } + } + return undefined; + } + ts.forEach = forEach; + function contains(array, value, areEqual) { + if (array) { + for (var _i = 0, array_1 = array; _i < array_1.length; _i++) { + var v = array_1[_i]; + if (areEqual ? areEqual(v, value) : v === value) { + return true; + } + } + } + return false; + } + ts.contains = contains; + function indexOf(array, value) { + if (array) { + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + } + return -1; + } + ts.indexOf = indexOf; + function countWhere(array, predicate) { + var count = 0; + if (array) { + for (var _i = 0, array_2 = array; _i < array_2.length; _i++) { + var v = array_2[_i]; + if (predicate(v)) { + count++; + } + } + } + return count; + } + ts.countWhere = countWhere; + function filter(array, f) { + var result; + if (array) { + result = []; + for (var _i = 0, array_3 = array; _i < array_3.length; _i++) { + var item = array_3[_i]; + if (f(item)) { + result.push(item); + } + } + } + return result; + } + ts.filter = filter; + function map(array, f) { + var result; + if (array) { + result = []; + for (var _i = 0, array_4 = array; _i < array_4.length; _i++) { + var v = array_4[_i]; + result.push(f(v)); + } + } + return result; + } + ts.map = map; + function concatenate(array1, array2) { + if (!array2 || !array2.length) + return array1; + if (!array1 || !array1.length) + return array2; + return array1.concat(array2); + } + ts.concatenate = concatenate; + function deduplicate(array, areEqual) { + var result; + if (array) { + result = []; + for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { + var item = array_5[_i]; + if (!contains(result, item, areEqual)) { + result.push(item); + } + } + } + return result; + } + ts.deduplicate = deduplicate; + function sum(array, prop) { + var result = 0; + for (var _i = 0, array_6 = array; _i < array_6.length; _i++) { + var v = array_6[_i]; + result += v[prop]; + } + return result; + } + ts.sum = sum; + function addRange(to, from) { + if (to && from) { + for (var _i = 0, from_1 = from; _i < from_1.length; _i++) { + var v = from_1[_i]; + to.push(v); + } + } + } + ts.addRange = addRange; + function rangeEquals(array1, array2, pos, end) { + while (pos < end) { + if (array1[pos] !== array2[pos]) { + return false; + } + pos++; + } + return true; + } + ts.rangeEquals = rangeEquals; + function lastOrUndefined(array) { + if (array.length === 0) { + return undefined; + } + return array[array.length - 1]; + } + ts.lastOrUndefined = lastOrUndefined; + function binarySearch(array, value) { + var low = 0; + var high = array.length - 1; + while (low <= high) { + var middle = low + ((high - low) >> 1); + var midValue = array[middle]; + if (midValue === value) { + return middle; + } + else if (midValue > value) { + high = middle - 1; + } + else { + low = middle + 1; + } + } + return ~low; + } + ts.binarySearch = binarySearch; + function reduceLeft(array, f, initial) { + if (array) { + var count = array.length; + if (count > 0) { + var pos = 0; + var result = void 0; + if (arguments.length <= 2) { + result = array[pos]; + pos++; + } + else { + result = initial; + } + while (pos < count) { + result = f(result, array[pos]); + pos++; + } + return result; + } + } + return initial; + } + ts.reduceLeft = reduceLeft; + function reduceRight(array, f, initial) { + if (array) { + var pos = array.length - 1; + if (pos >= 0) { + var result = void 0; + if (arguments.length <= 2) { + result = array[pos]; + pos--; + } + else { + result = initial; + } + while (pos >= 0) { + result = f(result, array[pos]); + pos--; + } + return result; + } + } + return initial; + } + ts.reduceRight = reduceRight; + var hasOwnProperty = Object.prototype.hasOwnProperty; + function hasProperty(map, key) { + return hasOwnProperty.call(map, key); + } + ts.hasProperty = hasProperty; + function getKeys(map) { + var keys = []; + for (var key in map) { + keys.push(key); + } + return keys; + } + ts.getKeys = getKeys; + function getProperty(map, key) { + return hasOwnProperty.call(map, key) ? map[key] : undefined; + } + ts.getProperty = getProperty; + function isEmpty(map) { + for (var id in map) { + if (hasProperty(map, id)) { + return false; + } + } + return true; + } + ts.isEmpty = isEmpty; + function clone(object) { + var result = {}; + for (var id in object) { + result[id] = object[id]; + } + return result; + } + ts.clone = clone; + function extend(first, second) { + var result = {}; + for (var id in first) { + result[id] = first[id]; + } + for (var id in second) { + if (!hasProperty(result, id)) { + result[id] = second[id]; + } + } + return result; + } + ts.extend = extend; + function forEachValue(map, callback) { + var result; + for (var id in map) { + if (result = callback(map[id])) + break; + } + return result; + } + ts.forEachValue = forEachValue; + function forEachKey(map, callback) { + var result; + for (var id in map) { + if (result = callback(id)) + break; + } + return result; + } + ts.forEachKey = forEachKey; + function lookUp(map, key) { + return hasProperty(map, key) ? map[key] : undefined; + } + ts.lookUp = lookUp; + function copyMap(source, target) { + for (var p in source) { + target[p] = source[p]; + } + } + ts.copyMap = copyMap; + function arrayToMap(array, makeKey) { + var result = {}; + forEach(array, function (value) { + result[makeKey(value)] = value; + }); + return result; + } + ts.arrayToMap = arrayToMap; + function reduceProperties(map, callback, initial) { + var result = initial; + if (map) { + for (var key in map) { + if (hasProperty(map, key)) { + result = callback(result, map[key], String(key)); + } + } + } + return result; + } + ts.reduceProperties = reduceProperties; + function isArray(value) { + return Array.isArray ? Array.isArray(value) : value instanceof Array; + } + ts.isArray = isArray; + function memoize(callback) { + var value; + return function () { + if (callback) { + value = callback(); + callback = undefined; + } + return value; + }; + } + ts.memoize = memoize; + function formatStringFromArgs(text, args, baseIndex) { + baseIndex = baseIndex || 0; + return text.replace(/{(\d+)}/g, function (match, index) { return args[+index + baseIndex]; }); + } + ts.localizedDiagnosticMessages = undefined; + function getLocaleSpecificMessage(message) { + return ts.localizedDiagnosticMessages && ts.localizedDiagnosticMessages[message.key] + ? ts.localizedDiagnosticMessages[message.key] + : message.message; + } + ts.getLocaleSpecificMessage = getLocaleSpecificMessage; + function createFileDiagnostic(file, start, length, message) { + var end = start + length; + Debug.assert(start >= 0, "start must be non-negative, is " + start); + Debug.assert(length >= 0, "length must be non-negative, is " + length); + if (file) { + Debug.assert(start <= file.text.length, "start must be within the bounds of the file. " + start + " > " + file.text.length); + Debug.assert(end <= file.text.length, "end must be the bounds of the file. " + end + " > " + file.text.length); + } + var text = getLocaleSpecificMessage(message); + if (arguments.length > 4) { + text = formatStringFromArgs(text, arguments, 4); + } + return { + file: file, + start: start, + length: length, + messageText: text, + category: message.category, + code: message.code + }; + } + ts.createFileDiagnostic = createFileDiagnostic; + function formatMessage(dummy, message) { + var text = getLocaleSpecificMessage(message); + if (arguments.length > 2) { + text = formatStringFromArgs(text, arguments, 2); + } + return text; + } + ts.formatMessage = formatMessage; + function createCompilerDiagnostic(message) { + var text = getLocaleSpecificMessage(message); + if (arguments.length > 1) { + text = formatStringFromArgs(text, arguments, 1); + } + return { + file: undefined, + start: undefined, + length: undefined, + messageText: text, + category: message.category, + code: message.code + }; + } + ts.createCompilerDiagnostic = createCompilerDiagnostic; + function chainDiagnosticMessages(details, message) { + var text = getLocaleSpecificMessage(message); + if (arguments.length > 2) { + text = formatStringFromArgs(text, arguments, 2); + } + return { + messageText: text, + category: message.category, + code: message.code, + next: details + }; + } + ts.chainDiagnosticMessages = chainDiagnosticMessages; + function concatenateDiagnosticMessageChains(headChain, tailChain) { + var lastChain = headChain; + while (lastChain.next) { + lastChain = lastChain.next; + } + lastChain.next = tailChain; + return headChain; + } + ts.concatenateDiagnosticMessageChains = concatenateDiagnosticMessageChains; + function compareValues(a, b) { + if (a === b) + return 0; + if (a === undefined) + return -1; + if (b === undefined) + return 1; + return a < b ? -1 : 1; + } + ts.compareValues = compareValues; + function getDiagnosticFileName(diagnostic) { + return diagnostic.file ? diagnostic.file.fileName : undefined; + } + function compareDiagnostics(d1, d2) { + return compareValues(getDiagnosticFileName(d1), getDiagnosticFileName(d2)) || + compareValues(d1.start, d2.start) || + compareValues(d1.length, d2.length) || + compareValues(d1.code, d2.code) || + compareMessageText(d1.messageText, d2.messageText) || + 0; + } + ts.compareDiagnostics = compareDiagnostics; + function compareMessageText(text1, text2) { + while (text1 && text2) { + var string1 = typeof text1 === "string" ? text1 : text1.messageText; + var string2 = typeof text2 === "string" ? text2 : text2.messageText; + var res = compareValues(string1, string2); + if (res) { + return res; + } + text1 = typeof text1 === "string" ? undefined : text1.next; + text2 = typeof text2 === "string" ? undefined : text2.next; + } + if (!text1 && !text2) { + return 0; + } + return text1 ? 1 : -1; + } + function sortAndDeduplicateDiagnostics(diagnostics) { + return deduplicateSortedDiagnostics(diagnostics.sort(compareDiagnostics)); + } + ts.sortAndDeduplicateDiagnostics = sortAndDeduplicateDiagnostics; + function deduplicateSortedDiagnostics(diagnostics) { + if (diagnostics.length < 2) { + return diagnostics; + } + var newDiagnostics = [diagnostics[0]]; + var previousDiagnostic = diagnostics[0]; + for (var i = 1; i < diagnostics.length; i++) { + var currentDiagnostic = diagnostics[i]; + var isDupe = compareDiagnostics(currentDiagnostic, previousDiagnostic) === 0; + if (!isDupe) { + newDiagnostics.push(currentDiagnostic); + previousDiagnostic = currentDiagnostic; + } + } + return newDiagnostics; + } + ts.deduplicateSortedDiagnostics = deduplicateSortedDiagnostics; + function normalizeSlashes(path) { + return path.replace(/\\/g, "/"); + } + ts.normalizeSlashes = normalizeSlashes; + function getRootLength(path) { + if (path.charCodeAt(0) === 47) { + if (path.charCodeAt(1) !== 47) + return 1; + var p1 = path.indexOf("/", 2); + if (p1 < 0) + return 2; + var p2 = path.indexOf("/", p1 + 1); + if (p2 < 0) + return p1 + 1; + return p2 + 1; + } + if (path.charCodeAt(1) === 58) { + if (path.charCodeAt(2) === 47) + return 3; + return 2; + } + if (path.lastIndexOf("file:///", 0) === 0) { + return "file:///".length; + } + var idx = path.indexOf("://"); + if (idx !== -1) { + return idx + "://".length; + } + return 0; + } + ts.getRootLength = getRootLength; + ts.directorySeparator = "/"; + function getNormalizedParts(normalizedSlashedPath, rootLength) { + var parts = normalizedSlashedPath.substr(rootLength).split(ts.directorySeparator); + var normalized = []; + for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) { + var part = parts_1[_i]; + if (part !== ".") { + if (part === ".." && normalized.length > 0 && lastOrUndefined(normalized) !== "..") { + normalized.pop(); + } + else { + if (part) { + normalized.push(part); + } + } + } + } + return normalized; + } + function normalizePath(path) { + path = normalizeSlashes(path); + var rootLength = getRootLength(path); + var normalized = getNormalizedParts(path, rootLength); + return path.substr(0, rootLength) + normalized.join(ts.directorySeparator); + } + ts.normalizePath = normalizePath; + function getDirectoryPath(path) { + return path.substr(0, Math.max(getRootLength(path), path.lastIndexOf(ts.directorySeparator))); + } + ts.getDirectoryPath = getDirectoryPath; + function isUrl(path) { + return path && !isRootedDiskPath(path) && path.indexOf("://") !== -1; + } + ts.isUrl = isUrl; + function isRootedDiskPath(path) { + return getRootLength(path) !== 0; + } + ts.isRootedDiskPath = isRootedDiskPath; + function normalizedPathComponents(path, rootLength) { + var normalizedParts = getNormalizedParts(path, rootLength); + return [path.substr(0, rootLength)].concat(normalizedParts); + } + function getNormalizedPathComponents(path, currentDirectory) { + path = normalizeSlashes(path); + var rootLength = getRootLength(path); + if (rootLength === 0) { + path = combinePaths(normalizeSlashes(currentDirectory), path); + rootLength = getRootLength(path); + } + return normalizedPathComponents(path, rootLength); + } + ts.getNormalizedPathComponents = getNormalizedPathComponents; + function getNormalizedAbsolutePath(fileName, currentDirectory) { + return getNormalizedPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory)); + } + ts.getNormalizedAbsolutePath = getNormalizedAbsolutePath; + function getNormalizedPathFromPathComponents(pathComponents) { + if (pathComponents && pathComponents.length) { + return pathComponents[0] + pathComponents.slice(1).join(ts.directorySeparator); + } + } + ts.getNormalizedPathFromPathComponents = getNormalizedPathFromPathComponents; + function getNormalizedPathComponentsOfUrl(url) { + var urlLength = url.length; + var rootLength = url.indexOf("://") + "://".length; + while (rootLength < urlLength) { + if (url.charCodeAt(rootLength) === 47) { + rootLength++; + } + else { + break; + } + } + if (rootLength === urlLength) { + return [url]; + } + var indexOfNextSlash = url.indexOf(ts.directorySeparator, rootLength); + if (indexOfNextSlash !== -1) { + rootLength = indexOfNextSlash + 1; + return normalizedPathComponents(url, rootLength); + } + else { + return [url + ts.directorySeparator]; + } + } + function getNormalizedPathOrUrlComponents(pathOrUrl, currentDirectory) { + if (isUrl(pathOrUrl)) { + return getNormalizedPathComponentsOfUrl(pathOrUrl); + } + else { + return getNormalizedPathComponents(pathOrUrl, currentDirectory); + } + } + function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, getCanonicalFileName, isAbsolutePathAnUrl) { + var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory); + var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory); + if (directoryComponents.length > 1 && lastOrUndefined(directoryComponents) === "") { + directoryComponents.length--; + } + var joinStartIndex; + for (joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) { + if (getCanonicalFileName(directoryComponents[joinStartIndex]) !== getCanonicalFileName(pathComponents[joinStartIndex])) { + break; + } + } + if (joinStartIndex) { + var relativePath = ""; + var relativePathComponents = pathComponents.slice(joinStartIndex, pathComponents.length); + for (; joinStartIndex < directoryComponents.length; joinStartIndex++) { + if (directoryComponents[joinStartIndex] !== "") { + relativePath = relativePath + ".." + ts.directorySeparator; + } + } + return relativePath + relativePathComponents.join(ts.directorySeparator); + } + var absolutePath = getNormalizedPathFromPathComponents(pathComponents); + if (isAbsolutePathAnUrl && isRootedDiskPath(absolutePath)) { + absolutePath = "file:///" + absolutePath; + } + return absolutePath; + } + ts.getRelativePathToDirectoryOrUrl = getRelativePathToDirectoryOrUrl; + function getBaseFileName(path) { + if (path === undefined) { + return undefined; + } + var i = path.lastIndexOf(ts.directorySeparator); + return i < 0 ? path : path.substring(i + 1); + } + ts.getBaseFileName = getBaseFileName; + function combinePaths(path1, path2) { + if (!(path1 && path1.length)) + return path2; + if (!(path2 && path2.length)) + return path1; + if (getRootLength(path2) !== 0) + return path2; + if (path1.charAt(path1.length - 1) === ts.directorySeparator) + return path1 + path2; + return path1 + ts.directorySeparator + path2; + } + ts.combinePaths = combinePaths; + function fileExtensionIs(path, extension) { + var pathLen = path.length; + var extLen = extension.length; + return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; + } + ts.fileExtensionIs = fileExtensionIs; + function ensureScriptKind(fileName, scriptKind) { + return (scriptKind || getScriptKindFromFileName(fileName)) || 3; + } + ts.ensureScriptKind = ensureScriptKind; + function getScriptKindFromFileName(fileName) { + var ext = fileName.substr(fileName.lastIndexOf(".")); + switch (ext.toLowerCase()) { + case ".js": + return 1; + case ".jsx": + return 2; + case ".ts": + return 3; + case ".tsx": + return 4; + default: + return 0; + } + } + ts.getScriptKindFromFileName = getScriptKindFromFileName; + ts.supportedTypeScriptExtensions = [".ts", ".tsx", ".d.ts"]; + ts.supportedJavascriptExtensions = [".js", ".jsx"]; + var allSupportedExtensions = ts.supportedTypeScriptExtensions.concat(ts.supportedJavascriptExtensions); + function getSupportedExtensions(options) { + return options && options.allowJs ? allSupportedExtensions : ts.supportedTypeScriptExtensions; + } + ts.getSupportedExtensions = getSupportedExtensions; + function isSupportedSourceFileName(fileName, compilerOptions) { + if (!fileName) { + return false; + } + for (var _i = 0, _a = getSupportedExtensions(compilerOptions); _i < _a.length; _i++) { + var extension = _a[_i]; + if (fileExtensionIs(fileName, extension)) { + return true; + } + } + return false; + } + ts.isSupportedSourceFileName = isSupportedSourceFileName; + var extensionsToRemove = [".d.ts", ".ts", ".js", ".tsx", ".jsx"]; + function removeFileExtension(path) { + for (var _i = 0, extensionsToRemove_1 = extensionsToRemove; _i < extensionsToRemove_1.length; _i++) { + var ext = extensionsToRemove_1[_i]; + if (fileExtensionIs(path, ext)) { + return path.substr(0, path.length - ext.length); + } + } + return path; + } + ts.removeFileExtension = removeFileExtension; + function Symbol(flags, name) { + this.flags = flags; + this.name = name; + this.declarations = undefined; + } + function Type(checker, flags) { + this.flags = flags; + } + function Signature(checker) { + } + function Node(kind, pos, end) { + this.kind = kind; + this.pos = pos; + this.end = end; + this.flags = 0; + this.parent = undefined; + } + ts.objectAllocator = { + getNodeConstructor: function () { return Node; }, + getSourceFileConstructor: function () { return Node; }, + getSymbolConstructor: function () { return Symbol; }, + getTypeConstructor: function () { return Type; }, + getSignatureConstructor: function () { return Signature; } + }; + var Debug; + (function (Debug) { + var currentAssertionLevel = 0; + function shouldAssert(level) { + return currentAssertionLevel >= level; + } + Debug.shouldAssert = shouldAssert; + function assert(expression, message, verboseDebugInfo) { + if (!expression) { + var verboseDebugString = ""; + if (verboseDebugInfo) { + verboseDebugString = "\r\nVerbose Debug Information: " + verboseDebugInfo(); + } + debugger; + throw new Error("Debug Failure. False expression: " + (message || "") + verboseDebugString); + } + } + Debug.assert = assert; + function fail(message) { + Debug.assert(false, message); + } + Debug.fail = fail; + })(Debug = ts.Debug || (ts.Debug = {})); + function copyListRemovingItem(item, list) { + var copiedList = []; + for (var _i = 0, list_1 = list; _i < list_1.length; _i++) { + var e = list_1[_i]; + if (e !== item) { + copiedList.push(e); + } + } + return copiedList; + } + ts.copyListRemovingItem = copyListRemovingItem; + function createGetCanonicalFileName(useCaseSensitivefileNames) { + return useCaseSensitivefileNames + ? (function (fileName) { return fileName; }) + : (function (fileName) { return fileName.toLowerCase(); }); + } + ts.createGetCanonicalFileName = createGetCanonicalFileName; +})(ts || (ts = {})); +var ts; +(function (ts) { + ts.sys = (function () { + function getWScriptSystem() { + var fso = new ActiveXObject("Scripting.FileSystemObject"); + var fileStream = new ActiveXObject("ADODB.Stream"); + fileStream.Type = 2; + var binaryStream = new ActiveXObject("ADODB.Stream"); + binaryStream.Type = 1; + var args = []; + for (var i = 0; i < WScript.Arguments.length; i++) { + args[i] = WScript.Arguments.Item(i); + } + function readFile(fileName, encoding) { + if (!fso.FileExists(fileName)) { + return undefined; + } + fileStream.Open(); + try { + if (encoding) { + fileStream.Charset = encoding; + fileStream.LoadFromFile(fileName); + } + else { + fileStream.Charset = "x-ansi"; + fileStream.LoadFromFile(fileName); + var bom = fileStream.ReadText(2) || ""; + fileStream.Position = 0; + fileStream.Charset = bom.length >= 2 && (bom.charCodeAt(0) === 0xFF && bom.charCodeAt(1) === 0xFE || bom.charCodeAt(0) === 0xFE && bom.charCodeAt(1) === 0xFF) ? "unicode" : "utf-8"; + } + return fileStream.ReadText(); + } + catch (e) { + throw e; + } + finally { + fileStream.Close(); + } + } + function writeFile(fileName, data, writeByteOrderMark) { + fileStream.Open(); + binaryStream.Open(); + try { + fileStream.Charset = "utf-8"; + fileStream.WriteText(data); + if (writeByteOrderMark) { + fileStream.Position = 0; + } + else { + fileStream.Position = 3; + } + fileStream.CopyTo(binaryStream); + binaryStream.SaveToFile(fileName, 2); + } + finally { + binaryStream.Close(); + fileStream.Close(); + } + } + function getCanonicalPath(path) { + return path.toLowerCase(); + } + function getNames(collection) { + var result = []; + for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) { + result.push(e.item().Name); + } + return result.sort(); + } + function readDirectory(path, extension, exclude) { + var result = []; + exclude = ts.map(exclude, function (s) { return getCanonicalPath(ts.combinePaths(path, s)); }); + visitDirectory(path); + return result; + function visitDirectory(path) { + var folder = fso.GetFolder(path || "."); + var files = getNames(folder.files); + for (var _i = 0, files_1 = files; _i < files_1.length; _i++) { + var current = files_1[_i]; + var name_1 = ts.combinePaths(path, current); + if ((!extension || ts.fileExtensionIs(name_1, extension)) && !ts.contains(exclude, getCanonicalPath(name_1))) { + result.push(name_1); + } + } + var subfolders = getNames(folder.subfolders); + for (var _a = 0, subfolders_1 = subfolders; _a < subfolders_1.length; _a++) { + var current = subfolders_1[_a]; + var name_2 = ts.combinePaths(path, current); + if (!ts.contains(exclude, getCanonicalPath(name_2))) { + visitDirectory(name_2); + } + } + } + } + return { + args: args, + newLine: "\r\n", + useCaseSensitiveFileNames: false, + write: function (s) { + WScript.StdOut.Write(s); + }, + readFile: readFile, + writeFile: writeFile, + resolvePath: function (path) { + return fso.GetAbsolutePathName(path); + }, + fileExists: function (path) { + return fso.FileExists(path); + }, + directoryExists: function (path) { + return fso.FolderExists(path); + }, + createDirectory: function (directoryName) { + if (!this.directoryExists(directoryName)) { + fso.CreateFolder(directoryName); + } + }, + getExecutingFilePath: function () { + return WScript.ScriptFullName; + }, + getCurrentDirectory: function () { + return new ActiveXObject("WScript.Shell").CurrentDirectory; + }, + readDirectory: readDirectory, + exit: function (exitCode) { + try { + WScript.Quit(exitCode); + } + catch (e) { + } + } + }; + } + function getNodeSystem() { + var _fs = require("fs"); + var _path = require("path"); + var _os = require("os"); + var _crypto = require("crypto"); + var useNonPollingWatchers = process.env["TSC_NONPOLLING_WATCHER"]; + function createWatchedFileSet() { + var dirWatchers = {}; + var fileWatcherCallbacks = {}; + return { addFile: addFile, removeFile: removeFile }; + function reduceDirWatcherRefCountForFile(fileName) { + var dirName = ts.getDirectoryPath(fileName); + if (ts.hasProperty(dirWatchers, dirName)) { + var watcher = dirWatchers[dirName]; + watcher.referenceCount -= 1; + if (watcher.referenceCount <= 0) { + watcher.close(); + delete dirWatchers[dirName]; + } + } + } + function addDirWatcher(dirPath) { + if (ts.hasProperty(dirWatchers, dirPath)) { + var watcher_1 = dirWatchers[dirPath]; + watcher_1.referenceCount += 1; + return; + } + var watcher = _fs.watch(dirPath, { persistent: true }, function (eventName, relativeFileName) { return fileEventHandler(eventName, relativeFileName, dirPath); }); + watcher.referenceCount = 1; + dirWatchers[dirPath] = watcher; + return; + } + function addFileWatcherCallback(filePath, callback) { + if (ts.hasProperty(fileWatcherCallbacks, filePath)) { + fileWatcherCallbacks[filePath].push(callback); + } + else { + fileWatcherCallbacks[filePath] = [callback]; + } + } + function addFile(fileName, callback) { + addFileWatcherCallback(fileName, callback); + addDirWatcher(ts.getDirectoryPath(fileName)); + return { fileName: fileName, callback: callback }; + } + function removeFile(watchedFile) { + removeFileWatcherCallback(watchedFile.fileName, watchedFile.callback); + reduceDirWatcherRefCountForFile(watchedFile.fileName); + } + function removeFileWatcherCallback(filePath, callback) { + if (ts.hasProperty(fileWatcherCallbacks, filePath)) { + var newCallbacks = ts.copyListRemovingItem(callback, fileWatcherCallbacks[filePath]); + if (newCallbacks.length === 0) { + delete fileWatcherCallbacks[filePath]; + } + else { + fileWatcherCallbacks[filePath] = newCallbacks; + } + } + } + function fileEventHandler(eventName, relativeFileName, baseDirPath) { + var fileName = typeof relativeFileName !== "string" + ? undefined + : ts.getNormalizedAbsolutePath(relativeFileName, baseDirPath); + if ((eventName === "change" || eventName === "rename") && ts.hasProperty(fileWatcherCallbacks, fileName)) { + for (var _i = 0, _a = fileWatcherCallbacks[fileName]; _i < _a.length; _i++) { + var fileCallback = _a[_i]; + fileCallback(fileName); + } + } + } + } + var watchedFileSet = createWatchedFileSet(); + function isNode4OrLater() { + return parseInt(process.version.charAt(1)) >= 4; + } + var platform = _os.platform(); + var useCaseSensitiveFileNames = platform !== "win32" && platform !== "win64" && platform !== "darwin"; + function readFile(fileName, encoding) { + if (!fileExists(fileName)) { + return undefined; + } + var buffer = _fs.readFileSync(fileName); + var len = buffer.length; + if (len >= 2 && buffer[0] === 0xFE && buffer[1] === 0xFF) { + len &= ~1; + for (var i = 0; i < len; i += 2) { + var temp = buffer[i]; + buffer[i] = buffer[i + 1]; + buffer[i + 1] = temp; + } + return buffer.toString("utf16le", 2); + } + if (len >= 2 && buffer[0] === 0xFF && buffer[1] === 0xFE) { + return buffer.toString("utf16le", 2); + } + if (len >= 3 && buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) { + return buffer.toString("utf8", 3); + } + return buffer.toString("utf8"); + } + function writeFile(fileName, data, writeByteOrderMark) { + if (writeByteOrderMark) { + data = "\uFEFF" + data; + } + var fd; + try { + fd = _fs.openSync(fileName, "w"); + _fs.writeSync(fd, data, undefined, "utf8"); + } + finally { + if (fd !== undefined) { + _fs.closeSync(fd); + } + } + } + function getCanonicalPath(path) { + return useCaseSensitiveFileNames ? path : path.toLowerCase(); + } + function fileSystemEntryExists(path, entryKind) { + try { + var stat = _fs.statSync(path); + switch (entryKind) { + case 0: return stat.isFile(); + case 1: return stat.isDirectory(); + } + } + catch (e) { + return false; + } + } + function fileExists(path) { + return fileSystemEntryExists(path, 0); + } + function directoryExists(path) { + return fileSystemEntryExists(path, 1); + } + function readDirectory(path, extension, exclude) { + var result = []; + exclude = ts.map(exclude, function (s) { return getCanonicalPath(ts.combinePaths(path, s)); }); + visitDirectory(path); + return result; + function visitDirectory(path) { + var files = _fs.readdirSync(path || ".").sort(); + var directories = []; + for (var _i = 0, files_2 = files; _i < files_2.length; _i++) { + var current = files_2[_i]; + if (current === "." || current === "..") { + continue; + } + var name_3 = ts.combinePaths(path, current); + if (!ts.contains(exclude, getCanonicalPath(name_3))) { + var stat = _fs.statSync(name_3); + if (stat.isFile()) { + if (!extension || ts.fileExtensionIs(name_3, extension)) { + result.push(name_3); + } + } + else if (stat.isDirectory()) { + directories.push(name_3); + } + } + } + for (var _a = 0, directories_1 = directories; _a < directories_1.length; _a++) { + var current = directories_1[_a]; + visitDirectory(current); + } + } + } + return { + args: process.argv.slice(2), + newLine: _os.EOL, + useCaseSensitiveFileNames: useCaseSensitiveFileNames, + write: function (s) { + process.stdout.write(s); + }, + readFile: readFile, + writeFile: writeFile, + watchFile: function (fileName, callback) { + if (useNonPollingWatchers) { + var watchedFile_1 = watchedFileSet.addFile(fileName, callback); + return { + close: function () { return watchedFileSet.removeFile(watchedFile_1); } + }; + } + else { + _fs.watchFile(fileName, { persistent: true, interval: 250 }, fileChanged); + return { + close: function () { return _fs.unwatchFile(fileName, fileChanged); } + }; + } + function fileChanged(curr, prev) { + if (+curr.mtime <= +prev.mtime) { + return; + } + callback(fileName); + } + }, + watchDirectory: function (directoryName, callback, recursive) { + var options; + if (isNode4OrLater() && (process.platform === "win32" || process.platform === "darwin")) { + options = { persistent: true, recursive: !!recursive }; + } + else { + options = { persistent: true }; + } + return _fs.watch(directoryName, options, function (eventName, relativeFileName) { + if (eventName === "rename") { + callback(!relativeFileName ? relativeFileName : ts.normalizePath(ts.combinePaths(directoryName, relativeFileName))); + } + ; + }); + }, + resolvePath: function (path) { + return _path.resolve(path); + }, + fileExists: fileExists, + directoryExists: directoryExists, + createDirectory: function (directoryName) { + if (!this.directoryExists(directoryName)) { + _fs.mkdirSync(directoryName); + } + }, + getExecutingFilePath: function () { + return __filename; + }, + getCurrentDirectory: function () { + return process.cwd(); + }, + readDirectory: readDirectory, + getModifiedTime: function (path) { + try { + return _fs.statSync(path).mtime; + } + catch (e) { + return undefined; + } + }, + createHash: function (data) { + var hash = _crypto.createHash("md5"); + hash.update(data); + return hash.digest("hex"); + }, + getMemoryUsage: function () { + if (global.gc) { + global.gc(); + } + return process.memoryUsage().heapUsed; + }, + exit: function (exitCode) { + process.exit(exitCode); + }, + realpath: function (path) { + return _fs.realpathSync(path); + } + }; + } + 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; }, + readDirectory: ChakraHost.readDirectory, + exit: ChakraHost.quit, + realpath: realpath + }; + } + if (typeof ChakraHost !== "undefined") { + return getChakraSystem(); + } + else if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { + return getWScriptSystem(); + } + else if (typeof process !== "undefined" && process.nextTick && !process.browser && typeof require !== "undefined") { + return getNodeSystem(); + } + else { + return undefined; + } + })(); +})(ts || (ts = {})); +var ts; +(function (ts) { + ts.Diagnostics = { + Unterminated_string_literal: { code: 1002, category: ts.DiagnosticCategory.Error, key: "Unterminated_string_literal_1002", message: "Unterminated string literal." }, + Identifier_expected: { code: 1003, category: ts.DiagnosticCategory.Error, key: "Identifier_expected_1003", message: "Identifier expected." }, + _0_expected: { code: 1005, category: ts.DiagnosticCategory.Error, key: "_0_expected_1005", message: "'{0}' expected." }, + A_file_cannot_have_a_reference_to_itself: { code: 1006, category: ts.DiagnosticCategory.Error, key: "A_file_cannot_have_a_reference_to_itself_1006", message: "A file cannot have a reference to itself." }, + Trailing_comma_not_allowed: { code: 1009, category: ts.DiagnosticCategory.Error, key: "Trailing_comma_not_allowed_1009", message: "Trailing comma not allowed." }, + Asterisk_Slash_expected: { code: 1010, category: ts.DiagnosticCategory.Error, key: "Asterisk_Slash_expected_1010", message: "'*/' expected." }, + Unexpected_token: { code: 1012, category: ts.DiagnosticCategory.Error, key: "Unexpected_token_1012", message: "Unexpected token." }, + A_rest_parameter_must_be_last_in_a_parameter_list: { code: 1014, category: ts.DiagnosticCategory.Error, key: "A_rest_parameter_must_be_last_in_a_parameter_list_1014", message: "A rest parameter must be last in a parameter list." }, + Parameter_cannot_have_question_mark_and_initializer: { code: 1015, category: ts.DiagnosticCategory.Error, key: "Parameter_cannot_have_question_mark_and_initializer_1015", message: "Parameter cannot have question mark and initializer." }, + A_required_parameter_cannot_follow_an_optional_parameter: { code: 1016, category: ts.DiagnosticCategory.Error, key: "A_required_parameter_cannot_follow_an_optional_parameter_1016", message: "A required parameter cannot follow an optional parameter." }, + An_index_signature_cannot_have_a_rest_parameter: { code: 1017, category: ts.DiagnosticCategory.Error, key: "An_index_signature_cannot_have_a_rest_parameter_1017", message: "An index signature cannot have a rest parameter." }, + An_index_signature_parameter_cannot_have_an_accessibility_modifier: { code: 1018, category: ts.DiagnosticCategory.Error, key: "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018", message: "An index signature parameter cannot have an accessibility modifier." }, + An_index_signature_parameter_cannot_have_a_question_mark: { code: 1019, category: ts.DiagnosticCategory.Error, key: "An_index_signature_parameter_cannot_have_a_question_mark_1019", message: "An index signature parameter cannot have a question mark." }, + An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: ts.DiagnosticCategory.Error, key: "An_index_signature_parameter_cannot_have_an_initializer_1020", message: "An index signature parameter cannot have an initializer." }, + An_index_signature_must_have_a_type_annotation: { code: 1021, category: ts.DiagnosticCategory.Error, key: "An_index_signature_must_have_a_type_annotation_1021", message: "An index signature must have a type annotation." }, + An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: ts.DiagnosticCategory.Error, key: "An_index_signature_parameter_must_have_a_type_annotation_1022", message: "An index signature parameter must have a type annotation." }, + An_index_signature_parameter_type_must_be_string_or_number: { code: 1023, category: ts.DiagnosticCategory.Error, key: "An_index_signature_parameter_type_must_be_string_or_number_1023", message: "An index signature parameter type must be 'string' or 'number'." }, + readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature: { code: 1024, category: ts.DiagnosticCategory.Error, key: "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024", message: "'readonly' modifier can only appear on a property declaration or index signature." }, + Accessibility_modifier_already_seen: { code: 1028, category: ts.DiagnosticCategory.Error, key: "Accessibility_modifier_already_seen_1028", message: "Accessibility modifier already seen." }, + _0_modifier_must_precede_1_modifier: { code: 1029, category: ts.DiagnosticCategory.Error, key: "_0_modifier_must_precede_1_modifier_1029", message: "'{0}' modifier must precede '{1}' modifier." }, + _0_modifier_already_seen: { code: 1030, category: ts.DiagnosticCategory.Error, key: "_0_modifier_already_seen_1030", message: "'{0}' modifier already seen." }, + _0_modifier_cannot_appear_on_a_class_element: { code: 1031, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_a_class_element_1031", message: "'{0}' modifier cannot appear on a class element." }, + super_must_be_followed_by_an_argument_list_or_member_access: { code: 1034, category: ts.DiagnosticCategory.Error, key: "super_must_be_followed_by_an_argument_list_or_member_access_1034", message: "'super' must be followed by an argument list or member access." }, + Only_ambient_modules_can_use_quoted_names: { code: 1035, category: ts.DiagnosticCategory.Error, key: "Only_ambient_modules_can_use_quoted_names_1035", message: "Only ambient modules can use quoted names." }, + Statements_are_not_allowed_in_ambient_contexts: { code: 1036, category: ts.DiagnosticCategory.Error, key: "Statements_are_not_allowed_in_ambient_contexts_1036", message: "Statements are not allowed in ambient contexts." }, + A_declare_modifier_cannot_be_used_in_an_already_ambient_context: { code: 1038, category: ts.DiagnosticCategory.Error, key: "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038", message: "A 'declare' modifier cannot be used in an already ambient context." }, + Initializers_are_not_allowed_in_ambient_contexts: { code: 1039, category: ts.DiagnosticCategory.Error, key: "Initializers_are_not_allowed_in_ambient_contexts_1039", message: "Initializers are not allowed in ambient contexts." }, + _0_modifier_cannot_be_used_in_an_ambient_context: { code: 1040, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_be_used_in_an_ambient_context_1040", message: "'{0}' modifier cannot be used in an ambient context." }, + _0_modifier_cannot_be_used_with_a_class_declaration: { code: 1041, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_be_used_with_a_class_declaration_1041", message: "'{0}' modifier cannot be used with a class declaration." }, + _0_modifier_cannot_be_used_here: { code: 1042, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_be_used_here_1042", message: "'{0}' modifier cannot be used here." }, + _0_modifier_cannot_appear_on_a_data_property: { code: 1043, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_a_data_property_1043", message: "'{0}' modifier cannot appear on a data property." }, + _0_modifier_cannot_appear_on_a_module_or_namespace_element: { code: 1044, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044", message: "'{0}' modifier cannot appear on a module or namespace element." }, + A_0_modifier_cannot_be_used_with_an_interface_declaration: { code: 1045, category: ts.DiagnosticCategory.Error, key: "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045", message: "A '{0}' modifier cannot be used with an interface declaration." }, + A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: { code: 1046, category: ts.DiagnosticCategory.Error, key: "A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file_1046", message: "A 'declare' modifier is required for a top level declaration in a .d.ts file." }, + A_rest_parameter_cannot_be_optional: { code: 1047, category: ts.DiagnosticCategory.Error, key: "A_rest_parameter_cannot_be_optional_1047", message: "A rest parameter cannot be optional." }, + A_rest_parameter_cannot_have_an_initializer: { code: 1048, category: ts.DiagnosticCategory.Error, key: "A_rest_parameter_cannot_have_an_initializer_1048", message: "A rest parameter cannot have an initializer." }, + A_set_accessor_must_have_exactly_one_parameter: { code: 1049, category: ts.DiagnosticCategory.Error, key: "A_set_accessor_must_have_exactly_one_parameter_1049", message: "A 'set' accessor must have exactly one parameter." }, + A_set_accessor_cannot_have_an_optional_parameter: { code: 1051, category: ts.DiagnosticCategory.Error, key: "A_set_accessor_cannot_have_an_optional_parameter_1051", message: "A 'set' accessor cannot have an optional parameter." }, + A_set_accessor_parameter_cannot_have_an_initializer: { code: 1052, category: ts.DiagnosticCategory.Error, key: "A_set_accessor_parameter_cannot_have_an_initializer_1052", message: "A 'set' accessor parameter cannot have an initializer." }, + A_set_accessor_cannot_have_rest_parameter: { code: 1053, category: ts.DiagnosticCategory.Error, key: "A_set_accessor_cannot_have_rest_parameter_1053", message: "A 'set' accessor cannot have rest parameter." }, + A_get_accessor_cannot_have_parameters: { code: 1054, category: ts.DiagnosticCategory.Error, key: "A_get_accessor_cannot_have_parameters_1054", message: "A 'get' accessor cannot have parameters." }, + Type_0_is_not_a_valid_async_function_return_type: { code: 1055, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_a_valid_async_function_return_type_1055", message: "Type '{0}' is not a valid async function return type." }, + Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: { code: 1056, category: ts.DiagnosticCategory.Error, key: "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056", message: "Accessors are only available when targeting ECMAScript 5 and higher." }, + An_async_function_or_method_must_have_a_valid_awaitable_return_type: { code: 1057, category: ts.DiagnosticCategory.Error, key: "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057", message: "An async function or method must have a valid awaitable return type." }, + Operand_for_await_does_not_have_a_valid_callable_then_member: { code: 1058, category: ts.DiagnosticCategory.Error, key: "Operand_for_await_does_not_have_a_valid_callable_then_member_1058", message: "Operand for 'await' does not have a valid callable 'then' member." }, + Return_expression_in_async_function_does_not_have_a_valid_callable_then_member: { code: 1059, category: ts.DiagnosticCategory.Error, key: "Return_expression_in_async_function_does_not_have_a_valid_callable_then_member_1059", message: "Return expression in async function does not have a valid callable 'then' member." }, + Expression_body_for_async_arrow_function_does_not_have_a_valid_callable_then_member: { code: 1060, category: ts.DiagnosticCategory.Error, key: "Expression_body_for_async_arrow_function_does_not_have_a_valid_callable_then_member_1060", message: "Expression body for async arrow function does not have a valid callable 'then' member." }, + Enum_member_must_have_initializer: { code: 1061, category: ts.DiagnosticCategory.Error, key: "Enum_member_must_have_initializer_1061", message: "Enum member must have initializer." }, + _0_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method: { code: 1062, category: ts.DiagnosticCategory.Error, key: "_0_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062", message: "{0} is referenced directly or indirectly in the fulfillment callback of its own 'then' method." }, + An_export_assignment_cannot_be_used_in_a_namespace: { code: 1063, category: ts.DiagnosticCategory.Error, key: "An_export_assignment_cannot_be_used_in_a_namespace_1063", message: "An export assignment cannot be used in a namespace." }, + The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type: { code: 1064, category: ts.DiagnosticCategory.Error, key: "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1064", message: "The return type of an async function or method must be the global Promise type." }, + In_ambient_enum_declarations_member_initializer_must_be_constant_expression: { code: 1066, category: ts.DiagnosticCategory.Error, key: "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066", message: "In ambient enum declarations member initializer must be constant expression." }, + Unexpected_token_A_constructor_method_accessor_or_property_was_expected: { code: 1068, category: ts.DiagnosticCategory.Error, key: "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068", message: "Unexpected token. A constructor, method, accessor, or property was expected." }, + _0_modifier_cannot_appear_on_a_type_member: { code: 1070, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_a_type_member_1070", message: "'{0}' modifier cannot appear on a type member." }, + _0_modifier_cannot_appear_on_an_index_signature: { code: 1071, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_an_index_signature_1071", message: "'{0}' modifier cannot appear on an index signature." }, + A_0_modifier_cannot_be_used_with_an_import_declaration: { code: 1079, category: ts.DiagnosticCategory.Error, key: "A_0_modifier_cannot_be_used_with_an_import_declaration_1079", message: "A '{0}' modifier cannot be used with an import declaration." }, + Invalid_reference_directive_syntax: { code: 1084, category: ts.DiagnosticCategory.Error, key: "Invalid_reference_directive_syntax_1084", message: "Invalid 'reference' directive syntax." }, + Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher: { code: 1085, category: ts.DiagnosticCategory.Error, key: "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_1085", message: "Octal literals are not available when targeting ECMAScript 5 and higher." }, + An_accessor_cannot_be_declared_in_an_ambient_context: { code: 1086, category: ts.DiagnosticCategory.Error, key: "An_accessor_cannot_be_declared_in_an_ambient_context_1086", message: "An accessor cannot be declared in an ambient context." }, + _0_modifier_cannot_appear_on_a_constructor_declaration: { code: 1089, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_a_constructor_declaration_1089", message: "'{0}' modifier cannot appear on a constructor declaration." }, + _0_modifier_cannot_appear_on_a_parameter: { code: 1090, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_appear_on_a_parameter_1090", message: "'{0}' modifier cannot appear on a parameter." }, + Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: { code: 1091, category: ts.DiagnosticCategory.Error, key: "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091", message: "Only a single variable declaration is allowed in a 'for...in' statement." }, + Type_parameters_cannot_appear_on_a_constructor_declaration: { code: 1092, category: ts.DiagnosticCategory.Error, key: "Type_parameters_cannot_appear_on_a_constructor_declaration_1092", message: "Type parameters cannot appear on a constructor declaration." }, + Type_annotation_cannot_appear_on_a_constructor_declaration: { code: 1093, category: ts.DiagnosticCategory.Error, key: "Type_annotation_cannot_appear_on_a_constructor_declaration_1093", message: "Type annotation cannot appear on a constructor declaration." }, + An_accessor_cannot_have_type_parameters: { code: 1094, category: ts.DiagnosticCategory.Error, key: "An_accessor_cannot_have_type_parameters_1094", message: "An accessor cannot have type parameters." }, + A_set_accessor_cannot_have_a_return_type_annotation: { code: 1095, category: ts.DiagnosticCategory.Error, key: "A_set_accessor_cannot_have_a_return_type_annotation_1095", message: "A 'set' accessor cannot have a return type annotation." }, + An_index_signature_must_have_exactly_one_parameter: { code: 1096, category: ts.DiagnosticCategory.Error, key: "An_index_signature_must_have_exactly_one_parameter_1096", message: "An index signature must have exactly one parameter." }, + _0_list_cannot_be_empty: { code: 1097, category: ts.DiagnosticCategory.Error, key: "_0_list_cannot_be_empty_1097", message: "'{0}' list cannot be empty." }, + Type_parameter_list_cannot_be_empty: { code: 1098, category: ts.DiagnosticCategory.Error, key: "Type_parameter_list_cannot_be_empty_1098", message: "Type parameter list cannot be empty." }, + Type_argument_list_cannot_be_empty: { code: 1099, category: ts.DiagnosticCategory.Error, key: "Type_argument_list_cannot_be_empty_1099", message: "Type argument list cannot be empty." }, + Invalid_use_of_0_in_strict_mode: { code: 1100, category: ts.DiagnosticCategory.Error, key: "Invalid_use_of_0_in_strict_mode_1100", message: "Invalid use of '{0}' in strict mode." }, + with_statements_are_not_allowed_in_strict_mode: { code: 1101, category: ts.DiagnosticCategory.Error, key: "with_statements_are_not_allowed_in_strict_mode_1101", message: "'with' statements are not allowed in strict mode." }, + delete_cannot_be_called_on_an_identifier_in_strict_mode: { code: 1102, category: ts.DiagnosticCategory.Error, key: "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102", message: "'delete' cannot be called on an identifier in strict mode." }, + A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: { code: 1104, category: ts.DiagnosticCategory.Error, key: "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104", message: "A 'continue' statement can only be used within an enclosing iteration statement." }, + A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: { code: 1105, category: ts.DiagnosticCategory.Error, key: "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105", message: "A 'break' statement can only be used within an enclosing iteration or switch statement." }, + Jump_target_cannot_cross_function_boundary: { code: 1107, category: ts.DiagnosticCategory.Error, key: "Jump_target_cannot_cross_function_boundary_1107", message: "Jump target cannot cross function boundary." }, + A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: ts.DiagnosticCategory.Error, key: "A_return_statement_can_only_be_used_within_a_function_body_1108", message: "A 'return' statement can only be used within a function body." }, + Expression_expected: { code: 1109, category: ts.DiagnosticCategory.Error, key: "Expression_expected_1109", message: "Expression expected." }, + Type_expected: { code: 1110, category: ts.DiagnosticCategory.Error, key: "Type_expected_1110", message: "Type expected." }, + A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: ts.DiagnosticCategory.Error, key: "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113", message: "A 'default' clause cannot appear more than once in a 'switch' statement." }, + Duplicate_label_0: { code: 1114, category: ts.DiagnosticCategory.Error, key: "Duplicate_label_0_1114", message: "Duplicate label '{0}'" }, + A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: ts.DiagnosticCategory.Error, key: "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115", message: "A 'continue' statement can only jump to a label of an enclosing iteration statement." }, + A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: { code: 1116, category: ts.DiagnosticCategory.Error, key: "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116", message: "A 'break' statement can only jump to a label of an enclosing statement." }, + An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: { code: 1117, category: ts.DiagnosticCategory.Error, key: "An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode_1117", message: "An object literal cannot have multiple properties with the same name in strict mode." }, + An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: { code: 1118, category: ts.DiagnosticCategory.Error, key: "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118", message: "An object literal cannot have multiple get/set accessors with the same name." }, + An_object_literal_cannot_have_property_and_accessor_with_the_same_name: { code: 1119, category: ts.DiagnosticCategory.Error, key: "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119", message: "An object literal cannot have property and accessor with the same name." }, + An_export_assignment_cannot_have_modifiers: { code: 1120, category: ts.DiagnosticCategory.Error, key: "An_export_assignment_cannot_have_modifiers_1120", message: "An export assignment cannot have modifiers." }, + Octal_literals_are_not_allowed_in_strict_mode: { code: 1121, category: ts.DiagnosticCategory.Error, key: "Octal_literals_are_not_allowed_in_strict_mode_1121", message: "Octal literals are not allowed in strict mode." }, + A_tuple_type_element_list_cannot_be_empty: { code: 1122, category: ts.DiagnosticCategory.Error, key: "A_tuple_type_element_list_cannot_be_empty_1122", message: "A tuple type element list cannot be empty." }, + Variable_declaration_list_cannot_be_empty: { code: 1123, category: ts.DiagnosticCategory.Error, key: "Variable_declaration_list_cannot_be_empty_1123", message: "Variable declaration list cannot be empty." }, + Digit_expected: { code: 1124, category: ts.DiagnosticCategory.Error, key: "Digit_expected_1124", message: "Digit expected." }, + Hexadecimal_digit_expected: { code: 1125, category: ts.DiagnosticCategory.Error, key: "Hexadecimal_digit_expected_1125", message: "Hexadecimal digit expected." }, + Unexpected_end_of_text: { code: 1126, category: ts.DiagnosticCategory.Error, key: "Unexpected_end_of_text_1126", message: "Unexpected end of text." }, + Invalid_character: { code: 1127, category: ts.DiagnosticCategory.Error, key: "Invalid_character_1127", message: "Invalid character." }, + Declaration_or_statement_expected: { code: 1128, category: ts.DiagnosticCategory.Error, key: "Declaration_or_statement_expected_1128", message: "Declaration or statement expected." }, + Statement_expected: { code: 1129, category: ts.DiagnosticCategory.Error, key: "Statement_expected_1129", message: "Statement expected." }, + case_or_default_expected: { code: 1130, category: ts.DiagnosticCategory.Error, key: "case_or_default_expected_1130", message: "'case' or 'default' expected." }, + Property_or_signature_expected: { code: 1131, category: ts.DiagnosticCategory.Error, key: "Property_or_signature_expected_1131", message: "Property or signature expected." }, + Enum_member_expected: { code: 1132, category: ts.DiagnosticCategory.Error, key: "Enum_member_expected_1132", message: "Enum member expected." }, + Variable_declaration_expected: { code: 1134, category: ts.DiagnosticCategory.Error, key: "Variable_declaration_expected_1134", message: "Variable declaration expected." }, + Argument_expression_expected: { code: 1135, category: ts.DiagnosticCategory.Error, key: "Argument_expression_expected_1135", message: "Argument expression expected." }, + Property_assignment_expected: { code: 1136, category: ts.DiagnosticCategory.Error, key: "Property_assignment_expected_1136", message: "Property assignment expected." }, + Expression_or_comma_expected: { code: 1137, category: ts.DiagnosticCategory.Error, key: "Expression_or_comma_expected_1137", message: "Expression or comma expected." }, + Parameter_declaration_expected: { code: 1138, category: ts.DiagnosticCategory.Error, key: "Parameter_declaration_expected_1138", message: "Parameter declaration expected." }, + Type_parameter_declaration_expected: { code: 1139, category: ts.DiagnosticCategory.Error, key: "Type_parameter_declaration_expected_1139", message: "Type parameter declaration expected." }, + Type_argument_expected: { code: 1140, category: ts.DiagnosticCategory.Error, key: "Type_argument_expected_1140", message: "Type argument expected." }, + String_literal_expected: { code: 1141, category: ts.DiagnosticCategory.Error, key: "String_literal_expected_1141", message: "String literal expected." }, + Line_break_not_permitted_here: { code: 1142, category: ts.DiagnosticCategory.Error, key: "Line_break_not_permitted_here_1142", message: "Line break not permitted here." }, + or_expected: { code: 1144, category: ts.DiagnosticCategory.Error, key: "or_expected_1144", message: "'{' or ';' expected." }, + Declaration_expected: { code: 1146, category: ts.DiagnosticCategory.Error, key: "Declaration_expected_1146", message: "Declaration expected." }, + Import_declarations_in_a_namespace_cannot_reference_a_module: { code: 1147, category: ts.DiagnosticCategory.Error, key: "Import_declarations_in_a_namespace_cannot_reference_a_module_1147", message: "Import declarations in a namespace cannot reference a module." }, + Cannot_compile_modules_unless_the_module_flag_is_provided_with_a_valid_module_type_Consider_setting_the_module_compiler_option_in_a_tsconfig_json_file: { code: 1148, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_modules_unless_the_module_flag_is_provided_with_a_valid_module_type_Consider_setting__1148", message: "Cannot compile modules unless the '--module' flag is provided with a valid module type. Consider setting the 'module' compiler option in a 'tsconfig.json' file." }, + File_name_0_differs_from_already_included_file_name_1_only_in_casing: { code: 1149, category: ts.DiagnosticCategory.Error, key: "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149", message: "File name '{0}' differs from already included file name '{1}' only in casing" }, + new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: { code: 1150, category: ts.DiagnosticCategory.Error, key: "new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead_1150", message: "'new T[]' cannot be used to create an array. Use 'new Array()' instead." }, + const_declarations_must_be_initialized: { code: 1155, category: ts.DiagnosticCategory.Error, key: "const_declarations_must_be_initialized_1155", message: "'const' declarations must be initialized" }, + const_declarations_can_only_be_declared_inside_a_block: { code: 1156, category: ts.DiagnosticCategory.Error, key: "const_declarations_can_only_be_declared_inside_a_block_1156", message: "'const' declarations can only be declared inside a block." }, + let_declarations_can_only_be_declared_inside_a_block: { code: 1157, category: ts.DiagnosticCategory.Error, key: "let_declarations_can_only_be_declared_inside_a_block_1157", message: "'let' declarations can only be declared inside a block." }, + Unterminated_template_literal: { code: 1160, category: ts.DiagnosticCategory.Error, key: "Unterminated_template_literal_1160", message: "Unterminated template literal." }, + Unterminated_regular_expression_literal: { code: 1161, category: ts.DiagnosticCategory.Error, key: "Unterminated_regular_expression_literal_1161", message: "Unterminated regular expression literal." }, + An_object_member_cannot_be_declared_optional: { code: 1162, category: ts.DiagnosticCategory.Error, key: "An_object_member_cannot_be_declared_optional_1162", message: "An object member cannot be declared optional." }, + A_yield_expression_is_only_allowed_in_a_generator_body: { code: 1163, category: ts.DiagnosticCategory.Error, key: "A_yield_expression_is_only_allowed_in_a_generator_body_1163", message: "A 'yield' expression is only allowed in a generator body." }, + Computed_property_names_are_not_allowed_in_enums: { code: 1164, category: ts.DiagnosticCategory.Error, key: "Computed_property_names_are_not_allowed_in_enums_1164", message: "Computed property names are not allowed in enums." }, + A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol: { code: 1165, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol_1165", message: "A computed property name in an ambient context must directly refer to a built-in symbol." }, + A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol: { code: 1166, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol_1166", message: "A computed property name in a class property declaration must directly refer to a built-in symbol." }, + A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol: { code: 1168, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol_1168", message: "A computed property name in a method overload must directly refer to a built-in symbol." }, + A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol: { code: 1169, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol_1169", message: "A computed property name in an interface must directly refer to a built-in symbol." }, + A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol: { code: 1170, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol_1170", message: "A computed property name in a type literal must directly refer to a built-in symbol." }, + A_comma_expression_is_not_allowed_in_a_computed_property_name: { code: 1171, category: ts.DiagnosticCategory.Error, key: "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171", message: "A comma expression is not allowed in a computed property name." }, + extends_clause_already_seen: { code: 1172, category: ts.DiagnosticCategory.Error, key: "extends_clause_already_seen_1172", message: "'extends' clause already seen." }, + extends_clause_must_precede_implements_clause: { code: 1173, category: ts.DiagnosticCategory.Error, key: "extends_clause_must_precede_implements_clause_1173", message: "'extends' clause must precede 'implements' clause." }, + Classes_can_only_extend_a_single_class: { code: 1174, category: ts.DiagnosticCategory.Error, key: "Classes_can_only_extend_a_single_class_1174", message: "Classes can only extend a single class." }, + implements_clause_already_seen: { code: 1175, category: ts.DiagnosticCategory.Error, key: "implements_clause_already_seen_1175", message: "'implements' clause already seen." }, + Interface_declaration_cannot_have_implements_clause: { code: 1176, category: ts.DiagnosticCategory.Error, key: "Interface_declaration_cannot_have_implements_clause_1176", message: "Interface declaration cannot have 'implements' clause." }, + Binary_digit_expected: { code: 1177, category: ts.DiagnosticCategory.Error, key: "Binary_digit_expected_1177", message: "Binary digit expected." }, + Octal_digit_expected: { code: 1178, category: ts.DiagnosticCategory.Error, key: "Octal_digit_expected_1178", message: "Octal digit expected." }, + Unexpected_token_expected: { code: 1179, category: ts.DiagnosticCategory.Error, key: "Unexpected_token_expected_1179", message: "Unexpected token. '{' expected." }, + Property_destructuring_pattern_expected: { code: 1180, category: ts.DiagnosticCategory.Error, key: "Property_destructuring_pattern_expected_1180", message: "Property destructuring pattern expected." }, + Array_element_destructuring_pattern_expected: { code: 1181, category: ts.DiagnosticCategory.Error, key: "Array_element_destructuring_pattern_expected_1181", message: "Array element destructuring pattern expected." }, + A_destructuring_declaration_must_have_an_initializer: { code: 1182, category: ts.DiagnosticCategory.Error, key: "A_destructuring_declaration_must_have_an_initializer_1182", message: "A destructuring declaration must have an initializer." }, + An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1183, category: ts.DiagnosticCategory.Error, key: "An_implementation_cannot_be_declared_in_ambient_contexts_1183", message: "An implementation cannot be declared in ambient contexts." }, + Modifiers_cannot_appear_here: { code: 1184, category: ts.DiagnosticCategory.Error, key: "Modifiers_cannot_appear_here_1184", message: "Modifiers cannot appear here." }, + Merge_conflict_marker_encountered: { code: 1185, category: ts.DiagnosticCategory.Error, key: "Merge_conflict_marker_encountered_1185", message: "Merge conflict marker encountered." }, + A_rest_element_cannot_have_an_initializer: { code: 1186, category: ts.DiagnosticCategory.Error, key: "A_rest_element_cannot_have_an_initializer_1186", message: "A rest element cannot have an initializer." }, + A_parameter_property_may_not_be_a_binding_pattern: { code: 1187, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_may_not_be_a_binding_pattern_1187", message: "A parameter property may not be a binding pattern." }, + Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement: { code: 1188, category: ts.DiagnosticCategory.Error, key: "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188", message: "Only a single variable declaration is allowed in a 'for...of' statement." }, + The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer: { code: 1189, category: ts.DiagnosticCategory.Error, key: "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189", message: "The variable declaration of a 'for...in' statement cannot have an initializer." }, + The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer: { code: 1190, category: ts.DiagnosticCategory.Error, key: "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190", message: "The variable declaration of a 'for...of' statement cannot have an initializer." }, + An_import_declaration_cannot_have_modifiers: { code: 1191, category: ts.DiagnosticCategory.Error, key: "An_import_declaration_cannot_have_modifiers_1191", message: "An import declaration cannot have modifiers." }, + Module_0_has_no_default_export: { code: 1192, category: ts.DiagnosticCategory.Error, key: "Module_0_has_no_default_export_1192", message: "Module '{0}' has no default export." }, + An_export_declaration_cannot_have_modifiers: { code: 1193, category: ts.DiagnosticCategory.Error, key: "An_export_declaration_cannot_have_modifiers_1193", message: "An export declaration cannot have modifiers." }, + Export_declarations_are_not_permitted_in_a_namespace: { code: 1194, category: ts.DiagnosticCategory.Error, key: "Export_declarations_are_not_permitted_in_a_namespace_1194", message: "Export declarations are not permitted in a namespace." }, + Catch_clause_variable_name_must_be_an_identifier: { code: 1195, category: ts.DiagnosticCategory.Error, key: "Catch_clause_variable_name_must_be_an_identifier_1195", message: "Catch clause variable name must be an identifier." }, + Catch_clause_variable_cannot_have_a_type_annotation: { code: 1196, category: ts.DiagnosticCategory.Error, key: "Catch_clause_variable_cannot_have_a_type_annotation_1196", message: "Catch clause variable cannot have a type annotation." }, + Catch_clause_variable_cannot_have_an_initializer: { code: 1197, category: ts.DiagnosticCategory.Error, key: "Catch_clause_variable_cannot_have_an_initializer_1197", message: "Catch clause variable cannot have an initializer." }, + An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive: { code: 1198, category: ts.DiagnosticCategory.Error, key: "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198", message: "An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive." }, + Unterminated_Unicode_escape_sequence: { code: 1199, category: ts.DiagnosticCategory.Error, key: "Unterminated_Unicode_escape_sequence_1199", message: "Unterminated Unicode escape sequence." }, + Line_terminator_not_permitted_before_arrow: { code: 1200, category: ts.DiagnosticCategory.Error, key: "Line_terminator_not_permitted_before_arrow_1200", message: "Line terminator not permitted before arrow." }, + Import_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead: { code: 1202, category: ts.DiagnosticCategory.Error, key: "Import_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_import_Asterisk__1202", message: "Import assignment cannot be used when targeting ECMAScript 6 modules. Consider using 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"', or another module format instead." }, + Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_export_default_or_another_module_format_instead: { code: 1203, category: ts.DiagnosticCategory.Error, key: "Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_export_default_o_1203", message: "Export assignment cannot be used when targeting ECMAScript 6 modules. Consider using 'export default' or another module format instead." }, + Cannot_compile_modules_into_es2015_when_targeting_ES5_or_lower: { code: 1204, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_modules_into_es2015_when_targeting_ES5_or_lower_1204", message: "Cannot compile modules into 'es2015' when targeting 'ES5' or lower." }, + Decorators_are_not_valid_here: { code: 1206, category: ts.DiagnosticCategory.Error, key: "Decorators_are_not_valid_here_1206", message: "Decorators are not valid here." }, + Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: { code: 1207, category: ts.DiagnosticCategory.Error, key: "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207", message: "Decorators cannot be applied to multiple get/set accessors of the same name." }, + Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided: { code: 1208, category: ts.DiagnosticCategory.Error, key: "Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided_1208", message: "Cannot compile namespaces when the '--isolatedModules' flag is provided." }, + Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided: { code: 1209, category: ts.DiagnosticCategory.Error, key: "Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209", message: "Ambient const enums are not allowed when the '--isolatedModules' flag is provided." }, + Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: { code: 1210, category: ts.DiagnosticCategory.Error, key: "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210", message: "Invalid use of '{0}'. Class definitions are automatically in strict mode." }, + A_class_declaration_without_the_default_modifier_must_have_a_name: { code: 1211, category: ts.DiagnosticCategory.Error, key: "A_class_declaration_without_the_default_modifier_must_have_a_name_1211", message: "A class declaration without the 'default' modifier must have a name" }, + Identifier_expected_0_is_a_reserved_word_in_strict_mode: { code: 1212, category: ts.DiagnosticCategory.Error, key: "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212", message: "Identifier expected. '{0}' is a reserved word in strict mode" }, + Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: { code: 1213, category: ts.DiagnosticCategory.Error, key: "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213", message: "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode." }, + Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode: { code: 1214, category: ts.DiagnosticCategory.Error, key: "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214", message: "Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode." }, + Invalid_use_of_0_Modules_are_automatically_in_strict_mode: { code: 1215, category: ts.DiagnosticCategory.Error, key: "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215", message: "Invalid use of '{0}'. Modules are automatically in strict mode." }, + Export_assignment_is_not_supported_when_module_flag_is_system: { code: 1218, category: ts.DiagnosticCategory.Error, key: "Export_assignment_is_not_supported_when_module_flag_is_system_1218", message: "Export assignment is not supported when '--module' flag is 'system'." }, + Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning: { code: 1219, category: ts.DiagnosticCategory.Error, key: "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219", message: "Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option to remove this warning." }, + Generators_are_only_available_when_targeting_ECMAScript_6_or_higher: { code: 1220, category: ts.DiagnosticCategory.Error, key: "Generators_are_only_available_when_targeting_ECMAScript_6_or_higher_1220", message: "Generators are only available when targeting ECMAScript 6 or higher." }, + Generators_are_not_allowed_in_an_ambient_context: { code: 1221, category: ts.DiagnosticCategory.Error, key: "Generators_are_not_allowed_in_an_ambient_context_1221", message: "Generators are not allowed in an ambient context." }, + An_overload_signature_cannot_be_declared_as_a_generator: { code: 1222, category: ts.DiagnosticCategory.Error, key: "An_overload_signature_cannot_be_declared_as_a_generator_1222", message: "An overload signature cannot be declared as a generator." }, + _0_tag_already_specified: { code: 1223, category: ts.DiagnosticCategory.Error, key: "_0_tag_already_specified_1223", message: "'{0}' tag already specified." }, + Signature_0_must_have_a_type_predicate: { code: 1224, category: ts.DiagnosticCategory.Error, key: "Signature_0_must_have_a_type_predicate_1224", message: "Signature '{0}' must have a type predicate." }, + Cannot_find_parameter_0: { code: 1225, category: ts.DiagnosticCategory.Error, key: "Cannot_find_parameter_0_1225", message: "Cannot find parameter '{0}'." }, + Type_predicate_0_is_not_assignable_to_1: { code: 1226, category: ts.DiagnosticCategory.Error, key: "Type_predicate_0_is_not_assignable_to_1_1226", message: "Type predicate '{0}' is not assignable to '{1}'." }, + Parameter_0_is_not_in_the_same_position_as_parameter_1: { code: 1227, category: ts.DiagnosticCategory.Error, key: "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227", message: "Parameter '{0}' is not in the same position as parameter '{1}'." }, + A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods: { code: 1228, category: ts.DiagnosticCategory.Error, key: "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228", message: "A type predicate is only allowed in return type position for functions and methods." }, + A_type_predicate_cannot_reference_a_rest_parameter: { code: 1229, category: ts.DiagnosticCategory.Error, key: "A_type_predicate_cannot_reference_a_rest_parameter_1229", message: "A type predicate cannot reference a rest parameter." }, + A_type_predicate_cannot_reference_element_0_in_a_binding_pattern: { code: 1230, category: ts.DiagnosticCategory.Error, key: "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230", message: "A type predicate cannot reference element '{0}' in a binding pattern." }, + An_export_assignment_can_only_be_used_in_a_module: { code: 1231, category: ts.DiagnosticCategory.Error, key: "An_export_assignment_can_only_be_used_in_a_module_1231", message: "An export assignment can only be used in a module." }, + An_import_declaration_can_only_be_used_in_a_namespace_or_module: { code: 1232, category: ts.DiagnosticCategory.Error, key: "An_import_declaration_can_only_be_used_in_a_namespace_or_module_1232", message: "An import declaration can only be used in a namespace or module." }, + An_export_declaration_can_only_be_used_in_a_module: { code: 1233, category: ts.DiagnosticCategory.Error, key: "An_export_declaration_can_only_be_used_in_a_module_1233", message: "An export declaration can only be used in a module." }, + An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file: { code: 1234, category: ts.DiagnosticCategory.Error, key: "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234", message: "An ambient module declaration is only allowed at the top level in a file." }, + A_namespace_declaration_is_only_allowed_in_a_namespace_or_module: { code: 1235, category: ts.DiagnosticCategory.Error, key: "A_namespace_declaration_is_only_allowed_in_a_namespace_or_module_1235", message: "A namespace declaration is only allowed in a namespace or module." }, + The_return_type_of_a_property_decorator_function_must_be_either_void_or_any: { code: 1236, category: ts.DiagnosticCategory.Error, key: "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236", message: "The return type of a property decorator function must be either 'void' or 'any'." }, + The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any: { code: 1237, category: ts.DiagnosticCategory.Error, key: "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237", message: "The return type of a parameter decorator function must be either 'void' or 'any'." }, + Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression: { code: 1238, category: ts.DiagnosticCategory.Error, key: "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238", message: "Unable to resolve signature of class decorator when called as an expression." }, + Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression: { code: 1239, category: ts.DiagnosticCategory.Error, key: "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239", message: "Unable to resolve signature of parameter decorator when called as an expression." }, + Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression: { code: 1240, category: ts.DiagnosticCategory.Error, key: "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240", message: "Unable to resolve signature of property decorator when called as an expression." }, + Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression: { code: 1241, category: ts.DiagnosticCategory.Error, key: "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241", message: "Unable to resolve signature of method decorator when called as an expression." }, + abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration: { code: 1242, category: ts.DiagnosticCategory.Error, key: "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242", message: "'abstract' modifier can only appear on a class, method, or property declaration." }, + _0_modifier_cannot_be_used_with_1_modifier: { code: 1243, category: ts.DiagnosticCategory.Error, key: "_0_modifier_cannot_be_used_with_1_modifier_1243", message: "'{0}' modifier cannot be used with '{1}' modifier." }, + Abstract_methods_can_only_appear_within_an_abstract_class: { code: 1244, category: ts.DiagnosticCategory.Error, key: "Abstract_methods_can_only_appear_within_an_abstract_class_1244", message: "Abstract methods can only appear within an abstract class." }, + Method_0_cannot_have_an_implementation_because_it_is_marked_abstract: { code: 1245, category: ts.DiagnosticCategory.Error, key: "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245", message: "Method '{0}' cannot have an implementation because it is marked abstract." }, + An_interface_property_cannot_have_an_initializer: { code: 1246, category: ts.DiagnosticCategory.Error, key: "An_interface_property_cannot_have_an_initializer_1246", message: "An interface property cannot have an initializer." }, + A_type_literal_property_cannot_have_an_initializer: { code: 1247, category: ts.DiagnosticCategory.Error, key: "A_type_literal_property_cannot_have_an_initializer_1247", message: "A type literal property cannot have an initializer." }, + A_class_member_cannot_have_the_0_keyword: { code: 1248, category: ts.DiagnosticCategory.Error, key: "A_class_member_cannot_have_the_0_keyword_1248", message: "A class member cannot have the '{0}' keyword." }, + A_decorator_can_only_decorate_a_method_implementation_not_an_overload: { code: 1249, category: ts.DiagnosticCategory.Error, key: "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249", message: "A decorator can only decorate a method implementation, not an overload." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5: { code: 1250, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode: { code: 1251, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode: { code: 1252, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Modules are automatically in strict mode." }, + with_statements_are_not_allowed_in_an_async_function_block: { code: 1300, category: ts.DiagnosticCategory.Error, key: "with_statements_are_not_allowed_in_an_async_function_block_1300", message: "'with' statements are not allowed in an async function block." }, + await_expression_is_only_allowed_within_an_async_function: { code: 1308, category: ts.DiagnosticCategory.Error, key: "await_expression_is_only_allowed_within_an_async_function_1308", message: "'await' expression is only allowed within an async function." }, + Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1311, category: ts.DiagnosticCategory.Error, key: "Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher_1311", message: "Async functions are only available when targeting ECMAScript 6 and higher." }, + can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment: { code: 1312, category: ts.DiagnosticCategory.Error, key: "can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment_1312", message: "'=' can only be used in an object literal property inside a destructuring assignment." }, + The_body_of_an_if_statement_cannot_be_the_empty_statement: { code: 1313, category: ts.DiagnosticCategory.Error, key: "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313", message: "The body of an 'if' statement cannot be the empty statement." }, + Global_module_exports_may_only_appear_in_module_files: { code: 1314, category: ts.DiagnosticCategory.Error, key: "Global_module_exports_may_only_appear_in_module_files_1314", message: "Global module exports may only appear in module files." }, + Global_module_exports_may_only_appear_in_declaration_files: { code: 1315, category: ts.DiagnosticCategory.Error, key: "Global_module_exports_may_only_appear_in_declaration_files_1315", message: "Global module exports may only appear in declaration files." }, + Global_module_exports_may_only_appear_at_top_level: { code: 1316, category: ts.DiagnosticCategory.Error, key: "Global_module_exports_may_only_appear_at_top_level_1316", message: "Global module exports may only appear at top level." }, + Duplicate_identifier_0: { code: 2300, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_0_2300", message: "Duplicate identifier '{0}'." }, + Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: ts.DiagnosticCategory.Error, key: "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301", message: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." }, + Static_members_cannot_reference_class_type_parameters: { code: 2302, category: ts.DiagnosticCategory.Error, key: "Static_members_cannot_reference_class_type_parameters_2302", message: "Static members cannot reference class type parameters." }, + Circular_definition_of_import_alias_0: { code: 2303, category: ts.DiagnosticCategory.Error, key: "Circular_definition_of_import_alias_0_2303", message: "Circular definition of import alias '{0}'." }, + Cannot_find_name_0: { code: 2304, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_2304", message: "Cannot find name '{0}'." }, + Module_0_has_no_exported_member_1: { code: 2305, category: ts.DiagnosticCategory.Error, key: "Module_0_has_no_exported_member_1_2305", message: "Module '{0}' has no exported member '{1}'." }, + File_0_is_not_a_module: { code: 2306, category: ts.DiagnosticCategory.Error, key: "File_0_is_not_a_module_2306", message: "File '{0}' is not a module." }, + Cannot_find_module_0: { code: 2307, category: ts.DiagnosticCategory.Error, key: "Cannot_find_module_0_2307", message: "Cannot find module '{0}'." }, + Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity: { code: 2308, category: ts.DiagnosticCategory.Error, key: "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308", message: "Module {0} has already exported a member named '{1}'. Consider explicitly re-exporting to resolve the ambiguity." }, + An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: { code: 2309, category: ts.DiagnosticCategory.Error, key: "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309", message: "An export assignment cannot be used in a module with other exported elements." }, + Type_0_recursively_references_itself_as_a_base_type: { code: 2310, category: ts.DiagnosticCategory.Error, key: "Type_0_recursively_references_itself_as_a_base_type_2310", message: "Type '{0}' recursively references itself as a base type." }, + A_class_may_only_extend_another_class: { code: 2311, category: ts.DiagnosticCategory.Error, key: "A_class_may_only_extend_another_class_2311", message: "A class may only extend another class." }, + An_interface_may_only_extend_a_class_or_another_interface: { code: 2312, category: ts.DiagnosticCategory.Error, key: "An_interface_may_only_extend_a_class_or_another_interface_2312", message: "An interface may only extend a class or another interface." }, + Type_parameter_0_has_a_circular_constraint: { code: 2313, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_has_a_circular_constraint_2313", message: "Type parameter '{0}' has a circular constraint." }, + Generic_type_0_requires_1_type_argument_s: { code: 2314, category: ts.DiagnosticCategory.Error, key: "Generic_type_0_requires_1_type_argument_s_2314", message: "Generic type '{0}' requires {1} type argument(s)." }, + Type_0_is_not_generic: { code: 2315, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_generic_2315", message: "Type '{0}' is not generic." }, + Global_type_0_must_be_a_class_or_interface_type: { code: 2316, category: ts.DiagnosticCategory.Error, key: "Global_type_0_must_be_a_class_or_interface_type_2316", message: "Global type '{0}' must be a class or interface type." }, + Global_type_0_must_have_1_type_parameter_s: { code: 2317, category: ts.DiagnosticCategory.Error, key: "Global_type_0_must_have_1_type_parameter_s_2317", message: "Global type '{0}' must have {1} type parameter(s)." }, + Cannot_find_global_type_0: { code: 2318, category: ts.DiagnosticCategory.Error, key: "Cannot_find_global_type_0_2318", message: "Cannot find global type '{0}'." }, + Named_property_0_of_types_1_and_2_are_not_identical: { code: 2319, category: ts.DiagnosticCategory.Error, key: "Named_property_0_of_types_1_and_2_are_not_identical_2319", message: "Named property '{0}' of types '{1}' and '{2}' are not identical." }, + Interface_0_cannot_simultaneously_extend_types_1_and_2: { code: 2320, category: ts.DiagnosticCategory.Error, key: "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320", message: "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'." }, + Excessive_stack_depth_comparing_types_0_and_1: { code: 2321, category: ts.DiagnosticCategory.Error, key: "Excessive_stack_depth_comparing_types_0_and_1_2321", message: "Excessive stack depth comparing types '{0}' and '{1}'." }, + Type_0_is_not_assignable_to_type_1: { code: 2322, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_assignable_to_type_1_2322", message: "Type '{0}' is not assignable to type '{1}'." }, + Cannot_redeclare_exported_variable_0: { code: 2323, category: ts.DiagnosticCategory.Error, key: "Cannot_redeclare_exported_variable_0_2323", message: "Cannot redeclare exported variable '{0}'." }, + Property_0_is_missing_in_type_1: { code: 2324, category: ts.DiagnosticCategory.Error, key: "Property_0_is_missing_in_type_1_2324", message: "Property '{0}' is missing in type '{1}'." }, + Property_0_is_private_in_type_1_but_not_in_type_2: { code: 2325, category: ts.DiagnosticCategory.Error, key: "Property_0_is_private_in_type_1_but_not_in_type_2_2325", message: "Property '{0}' is private in type '{1}' but not in type '{2}'." }, + Types_of_property_0_are_incompatible: { code: 2326, category: ts.DiagnosticCategory.Error, key: "Types_of_property_0_are_incompatible_2326", message: "Types of property '{0}' are incompatible." }, + Property_0_is_optional_in_type_1_but_required_in_type_2: { code: 2327, category: ts.DiagnosticCategory.Error, key: "Property_0_is_optional_in_type_1_but_required_in_type_2_2327", message: "Property '{0}' is optional in type '{1}' but required in type '{2}'." }, + Types_of_parameters_0_and_1_are_incompatible: { code: 2328, category: ts.DiagnosticCategory.Error, key: "Types_of_parameters_0_and_1_are_incompatible_2328", message: "Types of parameters '{0}' and '{1}' are incompatible." }, + Index_signature_is_missing_in_type_0: { code: 2329, category: ts.DiagnosticCategory.Error, key: "Index_signature_is_missing_in_type_0_2329", message: "Index signature is missing in type '{0}'." }, + Index_signatures_are_incompatible: { code: 2330, category: ts.DiagnosticCategory.Error, key: "Index_signatures_are_incompatible_2330", message: "Index signatures are incompatible." }, + this_cannot_be_referenced_in_a_module_or_namespace_body: { code: 2331, category: ts.DiagnosticCategory.Error, key: "this_cannot_be_referenced_in_a_module_or_namespace_body_2331", message: "'this' cannot be referenced in a module or namespace body." }, + this_cannot_be_referenced_in_current_location: { code: 2332, category: ts.DiagnosticCategory.Error, key: "this_cannot_be_referenced_in_current_location_2332", message: "'this' cannot be referenced in current location." }, + this_cannot_be_referenced_in_constructor_arguments: { code: 2333, category: ts.DiagnosticCategory.Error, key: "this_cannot_be_referenced_in_constructor_arguments_2333", message: "'this' cannot be referenced in constructor arguments." }, + this_cannot_be_referenced_in_a_static_property_initializer: { code: 2334, category: ts.DiagnosticCategory.Error, key: "this_cannot_be_referenced_in_a_static_property_initializer_2334", message: "'this' cannot be referenced in a static property initializer." }, + super_can_only_be_referenced_in_a_derived_class: { code: 2335, category: ts.DiagnosticCategory.Error, key: "super_can_only_be_referenced_in_a_derived_class_2335", message: "'super' can only be referenced in a derived class." }, + super_cannot_be_referenced_in_constructor_arguments: { code: 2336, category: ts.DiagnosticCategory.Error, key: "super_cannot_be_referenced_in_constructor_arguments_2336", message: "'super' cannot be referenced in constructor arguments." }, + Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: { code: 2337, category: ts.DiagnosticCategory.Error, key: "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337", message: "Super calls are not permitted outside constructors or in nested functions inside constructors." }, + super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: { code: 2338, category: ts.DiagnosticCategory.Error, key: "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338", message: "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class." }, + Property_0_does_not_exist_on_type_1: { code: 2339, category: ts.DiagnosticCategory.Error, key: "Property_0_does_not_exist_on_type_1_2339", message: "Property '{0}' does not exist on type '{1}'." }, + Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword: { code: 2340, category: ts.DiagnosticCategory.Error, key: "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340", message: "Only public and protected methods of the base class are accessible via the 'super' keyword." }, + Property_0_is_private_and_only_accessible_within_class_1: { code: 2341, category: ts.DiagnosticCategory.Error, key: "Property_0_is_private_and_only_accessible_within_class_1_2341", message: "Property '{0}' is private and only accessible within class '{1}'." }, + An_index_expression_argument_must_be_of_type_string_number_symbol_or_any: { code: 2342, category: ts.DiagnosticCategory.Error, key: "An_index_expression_argument_must_be_of_type_string_number_symbol_or_any_2342", message: "An index expression argument must be of type 'string', 'number', 'symbol', or 'any'." }, + Type_0_does_not_satisfy_the_constraint_1: { code: 2344, category: ts.DiagnosticCategory.Error, key: "Type_0_does_not_satisfy_the_constraint_1_2344", message: "Type '{0}' does not satisfy the constraint '{1}'." }, + Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: { code: 2345, category: ts.DiagnosticCategory.Error, key: "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", message: "Argument of type '{0}' is not assignable to parameter of type '{1}'." }, + Supplied_parameters_do_not_match_any_signature_of_call_target: { code: 2346, category: ts.DiagnosticCategory.Error, key: "Supplied_parameters_do_not_match_any_signature_of_call_target_2346", message: "Supplied parameters do not match any signature of call target." }, + Untyped_function_calls_may_not_accept_type_arguments: { code: 2347, category: ts.DiagnosticCategory.Error, key: "Untyped_function_calls_may_not_accept_type_arguments_2347", message: "Untyped function calls may not accept type arguments." }, + Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: { code: 2348, category: ts.DiagnosticCategory.Error, key: "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348", message: "Value of type '{0}' is not callable. Did you mean to include 'new'?" }, + Cannot_invoke_an_expression_whose_type_lacks_a_call_signature: { code: 2349, category: ts.DiagnosticCategory.Error, key: "Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_2349", message: "Cannot invoke an expression whose type lacks a call signature." }, + Only_a_void_function_can_be_called_with_the_new_keyword: { code: 2350, category: ts.DiagnosticCategory.Error, key: "Only_a_void_function_can_be_called_with_the_new_keyword_2350", message: "Only a void function can be called with the 'new' keyword." }, + Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: { code: 2351, category: ts.DiagnosticCategory.Error, key: "Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature_2351", message: "Cannot use 'new' with an expression whose type lacks a call or construct signature." }, + Type_0_cannot_be_converted_to_type_1: { code: 2352, category: ts.DiagnosticCategory.Error, key: "Type_0_cannot_be_converted_to_type_1_2352", message: "Type '{0}' cannot be converted to type '{1}'." }, + Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1: { code: 2353, category: ts.DiagnosticCategory.Error, key: "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353", message: "Object literal may only specify known properties, and '{0}' does not exist in type '{1}'." }, + No_best_common_type_exists_among_return_expressions: { code: 2354, category: ts.DiagnosticCategory.Error, key: "No_best_common_type_exists_among_return_expressions_2354", message: "No best common type exists among return expressions." }, + A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value: { code: 2355, category: ts.DiagnosticCategory.Error, key: "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355", message: "A function whose declared type is neither 'void' nor 'any' must return a value." }, + An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: { code: 2356, category: ts.DiagnosticCategory.Error, key: "An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type_2356", message: "An arithmetic operand must be of type 'any', 'number' or an enum type." }, + The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer: { code: 2357, category: ts.DiagnosticCategory.Error, key: "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_property_or_indexer_2357", message: "The operand of an increment or decrement operator must be a variable, property or indexer." }, + The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2358, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358", message: "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter." }, + The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: { code: 2359, category: ts.DiagnosticCategory.Error, key: "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359", message: "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type." }, + The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol: { code: 2360, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol_2360", message: "The left-hand side of an 'in' expression must be of type 'any', 'string', 'number', or 'symbol'." }, + The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2361, category: ts.DiagnosticCategory.Error, key: "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361", message: "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter" }, + The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2362, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type_2362", message: "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: { code: 2363, category: ts.DiagnosticCategory.Error, key: "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type_2363", message: "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type." }, + Invalid_left_hand_side_of_assignment_expression: { code: 2364, category: ts.DiagnosticCategory.Error, key: "Invalid_left_hand_side_of_assignment_expression_2364", message: "Invalid left-hand side of assignment expression." }, + Operator_0_cannot_be_applied_to_types_1_and_2: { code: 2365, category: ts.DiagnosticCategory.Error, key: "Operator_0_cannot_be_applied_to_types_1_and_2_2365", message: "Operator '{0}' cannot be applied to types '{1}' and '{2}'." }, + Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined: { code: 2366, category: ts.DiagnosticCategory.Error, key: "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366", message: "Function lacks ending return statement and return type does not include 'undefined'." }, + Type_parameter_name_cannot_be_0: { code: 2368, category: ts.DiagnosticCategory.Error, key: "Type_parameter_name_cannot_be_0_2368", message: "Type parameter name cannot be '{0}'" }, + A_parameter_property_is_only_allowed_in_a_constructor_implementation: { code: 2369, category: ts.DiagnosticCategory.Error, key: "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369", message: "A parameter property is only allowed in a constructor implementation." }, + A_rest_parameter_must_be_of_an_array_type: { code: 2370, category: ts.DiagnosticCategory.Error, key: "A_rest_parameter_must_be_of_an_array_type_2370", message: "A rest parameter must be of an array type." }, + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: { code: 2371, category: ts.DiagnosticCategory.Error, key: "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371", message: "A parameter initializer is only allowed in a function or constructor implementation." }, + Parameter_0_cannot_be_referenced_in_its_initializer: { code: 2372, category: ts.DiagnosticCategory.Error, key: "Parameter_0_cannot_be_referenced_in_its_initializer_2372", message: "Parameter '{0}' cannot be referenced in its initializer." }, + Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: { code: 2373, category: ts.DiagnosticCategory.Error, key: "Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it_2373", message: "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it." }, + Duplicate_string_index_signature: { code: 2374, category: ts.DiagnosticCategory.Error, key: "Duplicate_string_index_signature_2374", message: "Duplicate string index signature." }, + Duplicate_number_index_signature: { code: 2375, category: ts.DiagnosticCategory.Error, key: "Duplicate_number_index_signature_2375", message: "Duplicate number index signature." }, + A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: { code: 2376, category: ts.DiagnosticCategory.Error, key: "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376", message: "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties." }, + Constructors_for_derived_classes_must_contain_a_super_call: { code: 2377, category: ts.DiagnosticCategory.Error, key: "Constructors_for_derived_classes_must_contain_a_super_call_2377", message: "Constructors for derived classes must contain a 'super' call." }, + A_get_accessor_must_return_a_value: { code: 2378, category: ts.DiagnosticCategory.Error, key: "A_get_accessor_must_return_a_value_2378", message: "A 'get' accessor must return a value." }, + Getter_and_setter_accessors_do_not_agree_in_visibility: { code: 2379, category: ts.DiagnosticCategory.Error, key: "Getter_and_setter_accessors_do_not_agree_in_visibility_2379", message: "Getter and setter accessors do not agree in visibility." }, + get_and_set_accessor_must_have_the_same_type: { code: 2380, category: ts.DiagnosticCategory.Error, key: "get_and_set_accessor_must_have_the_same_type_2380", message: "'get' and 'set' accessor must have the same type." }, + A_signature_with_an_implementation_cannot_use_a_string_literal_type: { code: 2381, category: ts.DiagnosticCategory.Error, key: "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381", message: "A signature with an implementation cannot use a string literal type." }, + Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: { code: 2382, category: ts.DiagnosticCategory.Error, key: "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382", message: "Specialized overload signature is not assignable to any non-specialized signature." }, + Overload_signatures_must_all_be_exported_or_non_exported: { code: 2383, category: ts.DiagnosticCategory.Error, key: "Overload_signatures_must_all_be_exported_or_non_exported_2383", message: "Overload signatures must all be exported or non-exported." }, + Overload_signatures_must_all_be_ambient_or_non_ambient: { code: 2384, category: ts.DiagnosticCategory.Error, key: "Overload_signatures_must_all_be_ambient_or_non_ambient_2384", message: "Overload signatures must all be ambient or non-ambient." }, + Overload_signatures_must_all_be_public_private_or_protected: { code: 2385, category: ts.DiagnosticCategory.Error, key: "Overload_signatures_must_all_be_public_private_or_protected_2385", message: "Overload signatures must all be public, private or protected." }, + Overload_signatures_must_all_be_optional_or_required: { code: 2386, category: ts.DiagnosticCategory.Error, key: "Overload_signatures_must_all_be_optional_or_required_2386", message: "Overload signatures must all be optional or required." }, + Function_overload_must_be_static: { code: 2387, category: ts.DiagnosticCategory.Error, key: "Function_overload_must_be_static_2387", message: "Function overload must be static." }, + Function_overload_must_not_be_static: { code: 2388, category: ts.DiagnosticCategory.Error, key: "Function_overload_must_not_be_static_2388", message: "Function overload must not be static." }, + Function_implementation_name_must_be_0: { code: 2389, category: ts.DiagnosticCategory.Error, key: "Function_implementation_name_must_be_0_2389", message: "Function implementation name must be '{0}'." }, + Constructor_implementation_is_missing: { code: 2390, category: ts.DiagnosticCategory.Error, key: "Constructor_implementation_is_missing_2390", message: "Constructor implementation is missing." }, + Function_implementation_is_missing_or_not_immediately_following_the_declaration: { code: 2391, category: ts.DiagnosticCategory.Error, key: "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391", message: "Function implementation is missing or not immediately following the declaration." }, + Multiple_constructor_implementations_are_not_allowed: { code: 2392, category: ts.DiagnosticCategory.Error, key: "Multiple_constructor_implementations_are_not_allowed_2392", message: "Multiple constructor implementations are not allowed." }, + Duplicate_function_implementation: { code: 2393, category: ts.DiagnosticCategory.Error, key: "Duplicate_function_implementation_2393", message: "Duplicate function implementation." }, + Overload_signature_is_not_compatible_with_function_implementation: { code: 2394, category: ts.DiagnosticCategory.Error, key: "Overload_signature_is_not_compatible_with_function_implementation_2394", message: "Overload signature is not compatible with function implementation." }, + Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: { code: 2395, category: ts.DiagnosticCategory.Error, key: "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395", message: "Individual declarations in merged declaration '{0}' must be all exported or all local." }, + Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: { code: 2396, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396", message: "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters." }, + Declaration_name_conflicts_with_built_in_global_identifier_0: { code: 2397, category: ts.DiagnosticCategory.Error, key: "Declaration_name_conflicts_with_built_in_global_identifier_0_2397", message: "Declaration name conflicts with built-in global identifier '{0}'." }, + Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: { code: 2399, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399", message: "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference." }, + Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: { code: 2400, category: ts.DiagnosticCategory.Error, key: "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400", message: "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference." }, + Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: { code: 2401, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401", message: "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference." }, + Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: { code: 2402, category: ts.DiagnosticCategory.Error, key: "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402", message: "Expression resolves to '_super' that compiler uses to capture base class reference." }, + Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: { code: 2403, category: ts.DiagnosticCategory.Error, key: "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403", message: "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'." }, + The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: { code: 2404, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404", message: "The left-hand side of a 'for...in' statement cannot use a type annotation." }, + The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: { code: 2405, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405", message: "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'." }, + Invalid_left_hand_side_in_for_in_statement: { code: 2406, category: ts.DiagnosticCategory.Error, key: "Invalid_left_hand_side_in_for_in_statement_2406", message: "Invalid left-hand side in 'for...in' statement." }, + The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: ts.DiagnosticCategory.Error, key: "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_2407", message: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." }, + Setters_cannot_return_a_value: { code: 2408, category: ts.DiagnosticCategory.Error, key: "Setters_cannot_return_a_value_2408", message: "Setters cannot return a value." }, + Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: ts.DiagnosticCategory.Error, key: "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409", message: "Return type of constructor signature must be assignable to the instance type of the class" }, + All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: ts.DiagnosticCategory.Error, key: "All_symbols_within_a_with_block_will_be_resolved_to_any_2410", message: "All symbols within a 'with' block will be resolved to 'any'." }, + Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: ts.DiagnosticCategory.Error, key: "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411", message: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." }, + Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: ts.DiagnosticCategory.Error, key: "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412", message: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." }, + Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: ts.DiagnosticCategory.Error, key: "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413", message: "Numeric index type '{0}' is not assignable to string index type '{1}'." }, + Class_name_cannot_be_0: { code: 2414, category: ts.DiagnosticCategory.Error, key: "Class_name_cannot_be_0_2414", message: "Class name cannot be '{0}'" }, + Class_0_incorrectly_extends_base_class_1: { code: 2415, category: ts.DiagnosticCategory.Error, key: "Class_0_incorrectly_extends_base_class_1_2415", message: "Class '{0}' incorrectly extends base class '{1}'." }, + Class_static_side_0_incorrectly_extends_base_class_static_side_1: { code: 2417, category: ts.DiagnosticCategory.Error, key: "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417", message: "Class static side '{0}' incorrectly extends base class static side '{1}'." }, + Class_0_incorrectly_implements_interface_1: { code: 2420, category: ts.DiagnosticCategory.Error, key: "Class_0_incorrectly_implements_interface_1_2420", message: "Class '{0}' incorrectly implements interface '{1}'." }, + A_class_may_only_implement_another_class_or_interface: { code: 2422, category: ts.DiagnosticCategory.Error, key: "A_class_may_only_implement_another_class_or_interface_2422", message: "A class may only implement another class or interface." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: { code: 2423, category: ts.DiagnosticCategory.Error, key: "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423", message: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor." }, + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: { code: 2424, category: ts.DiagnosticCategory.Error, key: "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_proper_2424", message: "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property." }, + Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2425, category: ts.DiagnosticCategory.Error, key: "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425", message: "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function." }, + Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: { code: 2426, category: ts.DiagnosticCategory.Error, key: "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426", message: "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function." }, + Interface_name_cannot_be_0: { code: 2427, category: ts.DiagnosticCategory.Error, key: "Interface_name_cannot_be_0_2427", message: "Interface name cannot be '{0}'" }, + All_declarations_of_0_must_have_identical_type_parameters: { code: 2428, category: ts.DiagnosticCategory.Error, key: "All_declarations_of_0_must_have_identical_type_parameters_2428", message: "All declarations of '{0}' must have identical type parameters." }, + Interface_0_incorrectly_extends_interface_1: { code: 2430, category: ts.DiagnosticCategory.Error, key: "Interface_0_incorrectly_extends_interface_1_2430", message: "Interface '{0}' incorrectly extends interface '{1}'." }, + Enum_name_cannot_be_0: { code: 2431, category: ts.DiagnosticCategory.Error, key: "Enum_name_cannot_be_0_2431", message: "Enum name cannot be '{0}'" }, + In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: { code: 2432, category: ts.DiagnosticCategory.Error, key: "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432", message: "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element." }, + A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: { code: 2433, category: ts.DiagnosticCategory.Error, key: "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433", message: "A namespace declaration cannot be in a different file from a class or function with which it is merged" }, + A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: { code: 2434, category: ts.DiagnosticCategory.Error, key: "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434", message: "A namespace declaration cannot be located prior to a class or function with which it is merged" }, + Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces: { code: 2435, category: ts.DiagnosticCategory.Error, key: "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435", message: "Ambient modules cannot be nested in other modules or namespaces." }, + Ambient_module_declaration_cannot_specify_relative_module_name: { code: 2436, category: ts.DiagnosticCategory.Error, key: "Ambient_module_declaration_cannot_specify_relative_module_name_2436", message: "Ambient module declaration cannot specify relative module name." }, + Module_0_is_hidden_by_a_local_declaration_with_the_same_name: { code: 2437, category: ts.DiagnosticCategory.Error, key: "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437", message: "Module '{0}' is hidden by a local declaration with the same name" }, + Import_name_cannot_be_0: { code: 2438, category: ts.DiagnosticCategory.Error, key: "Import_name_cannot_be_0_2438", message: "Import name cannot be '{0}'" }, + Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name: { code: 2439, category: ts.DiagnosticCategory.Error, key: "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439", message: "Import or export declaration in an ambient module declaration cannot reference module through relative module name." }, + Import_declaration_conflicts_with_local_declaration_of_0: { code: 2440, category: ts.DiagnosticCategory.Error, key: "Import_declaration_conflicts_with_local_declaration_of_0_2440", message: "Import declaration conflicts with local declaration of '{0}'" }, + Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module: { code: 2441, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441", message: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module." }, + Types_have_separate_declarations_of_a_private_property_0: { code: 2442, category: ts.DiagnosticCategory.Error, key: "Types_have_separate_declarations_of_a_private_property_0_2442", message: "Types have separate declarations of a private property '{0}'." }, + Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2: { code: 2443, category: ts.DiagnosticCategory.Error, key: "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443", message: "Property '{0}' is protected but type '{1}' is not a class derived from '{2}'." }, + Property_0_is_protected_in_type_1_but_public_in_type_2: { code: 2444, category: ts.DiagnosticCategory.Error, key: "Property_0_is_protected_in_type_1_but_public_in_type_2_2444", message: "Property '{0}' is protected in type '{1}' but public in type '{2}'." }, + Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: { code: 2445, category: ts.DiagnosticCategory.Error, key: "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445", message: "Property '{0}' is protected and only accessible within class '{1}' and its subclasses." }, + Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: { code: 2446, category: ts.DiagnosticCategory.Error, key: "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446", message: "Property '{0}' is protected and only accessible through an instance of class '{1}'." }, + The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { code: 2447, category: ts.DiagnosticCategory.Error, key: "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447", message: "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead." }, + Block_scoped_variable_0_used_before_its_declaration: { code: 2448, category: ts.DiagnosticCategory.Error, key: "Block_scoped_variable_0_used_before_its_declaration_2448", message: "Block-scoped variable '{0}' used before its declaration." }, + The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant_or_a_read_only_property: { code: 2449, category: ts.DiagnosticCategory.Error, key: "The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant_or_a_read_only_property_2449", message: "The operand of an increment or decrement operator cannot be a constant or a read-only property." }, + Left_hand_side_of_assignment_expression_cannot_be_a_constant_or_a_read_only_property: { code: 2450, category: ts.DiagnosticCategory.Error, key: "Left_hand_side_of_assignment_expression_cannot_be_a_constant_or_a_read_only_property_2450", message: "Left-hand side of assignment expression cannot be a constant or a read-only property." }, + Cannot_redeclare_block_scoped_variable_0: { code: 2451, category: ts.DiagnosticCategory.Error, key: "Cannot_redeclare_block_scoped_variable_0_2451", message: "Cannot redeclare block-scoped variable '{0}'." }, + An_enum_member_cannot_have_a_numeric_name: { code: 2452, category: ts.DiagnosticCategory.Error, key: "An_enum_member_cannot_have_a_numeric_name_2452", message: "An enum member cannot have a numeric name." }, + The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: { code: 2453, category: ts.DiagnosticCategory.Error, key: "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453", message: "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly." }, + Variable_0_is_used_before_being_assigned: { code: 2454, category: ts.DiagnosticCategory.Error, key: "Variable_0_is_used_before_being_assigned_2454", message: "Variable '{0}' is used before being assigned." }, + Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: { code: 2455, category: ts.DiagnosticCategory.Error, key: "Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0_2455", message: "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'." }, + Type_alias_0_circularly_references_itself: { code: 2456, category: ts.DiagnosticCategory.Error, key: "Type_alias_0_circularly_references_itself_2456", message: "Type alias '{0}' circularly references itself." }, + Type_alias_name_cannot_be_0: { code: 2457, category: ts.DiagnosticCategory.Error, key: "Type_alias_name_cannot_be_0_2457", message: "Type alias name cannot be '{0}'" }, + An_AMD_module_cannot_have_multiple_name_assignments: { code: 2458, category: ts.DiagnosticCategory.Error, key: "An_AMD_module_cannot_have_multiple_name_assignments_2458", message: "An AMD module cannot have multiple name assignments." }, + Type_0_has_no_property_1_and_no_string_index_signature: { code: 2459, category: ts.DiagnosticCategory.Error, key: "Type_0_has_no_property_1_and_no_string_index_signature_2459", message: "Type '{0}' has no property '{1}' and no string index signature." }, + Type_0_has_no_property_1: { code: 2460, category: ts.DiagnosticCategory.Error, key: "Type_0_has_no_property_1_2460", message: "Type '{0}' has no property '{1}'." }, + Type_0_is_not_an_array_type: { code: 2461, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_an_array_type_2461", message: "Type '{0}' is not an array type." }, + A_rest_element_must_be_last_in_an_array_destructuring_pattern: { code: 2462, category: ts.DiagnosticCategory.Error, key: "A_rest_element_must_be_last_in_an_array_destructuring_pattern_2462", message: "A rest element must be last in an array destructuring pattern" }, + A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature: { code: 2463, category: ts.DiagnosticCategory.Error, key: "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463", message: "A binding pattern parameter cannot be optional in an implementation signature." }, + A_computed_property_name_must_be_of_type_string_number_symbol_or_any: { code: 2464, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464", message: "A computed property name must be of type 'string', 'number', 'symbol', or 'any'." }, + this_cannot_be_referenced_in_a_computed_property_name: { code: 2465, category: ts.DiagnosticCategory.Error, key: "this_cannot_be_referenced_in_a_computed_property_name_2465", message: "'this' cannot be referenced in a computed property name." }, + super_cannot_be_referenced_in_a_computed_property_name: { code: 2466, category: ts.DiagnosticCategory.Error, key: "super_cannot_be_referenced_in_a_computed_property_name_2466", message: "'super' cannot be referenced in a computed property name." }, + A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type: { code: 2467, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467", message: "A computed property name cannot reference a type parameter from its containing type." }, + Cannot_find_global_value_0: { code: 2468, category: ts.DiagnosticCategory.Error, key: "Cannot_find_global_value_0_2468", message: "Cannot find global value '{0}'." }, + The_0_operator_cannot_be_applied_to_type_symbol: { code: 2469, category: ts.DiagnosticCategory.Error, key: "The_0_operator_cannot_be_applied_to_type_symbol_2469", message: "The '{0}' operator cannot be applied to type 'symbol'." }, + Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object: { code: 2470, category: ts.DiagnosticCategory.Error, key: "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470", message: "'Symbol' reference does not refer to the global Symbol constructor object." }, + A_computed_property_name_of_the_form_0_must_be_of_type_symbol: { code: 2471, category: ts.DiagnosticCategory.Error, key: "A_computed_property_name_of_the_form_0_must_be_of_type_symbol_2471", message: "A computed property name of the form '{0}' must be of type 'symbol'." }, + Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher: { code: 2472, category: ts.DiagnosticCategory.Error, key: "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472", message: "Spread operator in 'new' expressions is only available when targeting ECMAScript 5 and higher." }, + Enum_declarations_must_all_be_const_or_non_const: { code: 2473, category: ts.DiagnosticCategory.Error, key: "Enum_declarations_must_all_be_const_or_non_const_2473", message: "Enum declarations must all be const or non-const." }, + In_const_enum_declarations_member_initializer_must_be_constant_expression: { code: 2474, category: ts.DiagnosticCategory.Error, key: "In_const_enum_declarations_member_initializer_must_be_constant_expression_2474", message: "In 'const' enum declarations member initializer must be constant expression." }, + const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment: { code: 2475, category: ts.DiagnosticCategory.Error, key: "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475", message: "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment." }, + A_const_enum_member_can_only_be_accessed_using_a_string_literal: { code: 2476, category: ts.DiagnosticCategory.Error, key: "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476", message: "A const enum member can only be accessed using a string literal." }, + const_enum_member_initializer_was_evaluated_to_a_non_finite_value: { code: 2477, category: ts.DiagnosticCategory.Error, key: "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477", message: "'const' enum member initializer was evaluated to a non-finite value." }, + const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: { code: 2478, category: ts.DiagnosticCategory.Error, key: "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478", message: "'const' enum member initializer was evaluated to disallowed value 'NaN'." }, + Property_0_does_not_exist_on_const_enum_1: { code: 2479, category: ts.DiagnosticCategory.Error, key: "Property_0_does_not_exist_on_const_enum_1_2479", message: "Property '{0}' does not exist on 'const' enum '{1}'." }, + let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations: { code: 2480, category: ts.DiagnosticCategory.Error, key: "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480", message: "'let' is not allowed to be used as a name in 'let' or 'const' declarations." }, + Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1: { code: 2481, category: ts.DiagnosticCategory.Error, key: "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481", message: "Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'." }, + The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation: { code: 2483, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483", message: "The left-hand side of a 'for...of' statement cannot use a type annotation." }, + Export_declaration_conflicts_with_exported_declaration_of_0: { code: 2484, category: ts.DiagnosticCategory.Error, key: "Export_declaration_conflicts_with_exported_declaration_of_0_2484", message: "Export declaration conflicts with exported declaration of '{0}'" }, + The_left_hand_side_of_a_for_of_statement_cannot_be_a_constant_or_a_read_only_property: { code: 2485, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_a_for_of_statement_cannot_be_a_constant_or_a_read_only_property_2485", message: "The left-hand side of a 'for...of' statement cannot be a constant or a read-only property." }, + The_left_hand_side_of_a_for_in_statement_cannot_be_a_constant_or_a_read_only_property: { code: 2486, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_a_for_in_statement_cannot_be_a_constant_or_a_read_only_property_2486", message: "The left-hand side of a 'for...in' statement cannot be a constant or a read-only property." }, + Invalid_left_hand_side_in_for_of_statement: { code: 2487, category: ts.DiagnosticCategory.Error, key: "Invalid_left_hand_side_in_for_of_statement_2487", message: "Invalid left-hand side in 'for...of' statement." }, + Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator: { code: 2488, category: ts.DiagnosticCategory.Error, key: "Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488", message: "Type must have a '[Symbol.iterator]()' method that returns an iterator." }, + An_iterator_must_have_a_next_method: { code: 2489, category: ts.DiagnosticCategory.Error, key: "An_iterator_must_have_a_next_method_2489", message: "An iterator must have a 'next()' method." }, + The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property: { code: 2490, category: ts.DiagnosticCategory.Error, key: "The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property_2490", message: "The type returned by the 'next()' method of an iterator must have a 'value' property." }, + The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern: { code: 2491, category: ts.DiagnosticCategory.Error, key: "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491", message: "The left-hand side of a 'for...in' statement cannot be a destructuring pattern." }, + Cannot_redeclare_identifier_0_in_catch_clause: { code: 2492, category: ts.DiagnosticCategory.Error, key: "Cannot_redeclare_identifier_0_in_catch_clause_2492", message: "Cannot redeclare identifier '{0}' in catch clause" }, + Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2: { code: 2493, category: ts.DiagnosticCategory.Error, key: "Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2_2493", message: "Tuple type '{0}' with length '{1}' cannot be assigned to tuple with length '{2}'." }, + Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher: { code: 2494, category: ts.DiagnosticCategory.Error, key: "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494", message: "Using a string in a 'for...of' statement is only supported in ECMAScript 5 and higher." }, + Type_0_is_not_an_array_type_or_a_string_type: { code: 2495, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_an_array_type_or_a_string_type_2495", message: "Type '{0}' is not an array type or a string type." }, + The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression: { code: 2496, category: ts.DiagnosticCategory.Error, key: "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496", message: "The 'arguments' object cannot be referenced in an arrow function in ES3 and ES5. Consider using a standard function expression." }, + Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct: { code: 2497, category: ts.DiagnosticCategory.Error, key: "Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct_2497", message: "Module '{0}' resolves to a non-module entity and cannot be imported using this construct." }, + Module_0_uses_export_and_cannot_be_used_with_export_Asterisk: { code: 2498, category: ts.DiagnosticCategory.Error, key: "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498", message: "Module '{0}' uses 'export =' and cannot be used with 'export *'." }, + An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments: { code: 2499, category: ts.DiagnosticCategory.Error, key: "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499", message: "An interface can only extend an identifier/qualified-name with optional type arguments." }, + A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments: { code: 2500, category: ts.DiagnosticCategory.Error, key: "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500", message: "A class can only implement an identifier/qualified-name with optional type arguments." }, + A_rest_element_cannot_contain_a_binding_pattern: { code: 2501, category: ts.DiagnosticCategory.Error, key: "A_rest_element_cannot_contain_a_binding_pattern_2501", message: "A rest element cannot contain a binding pattern." }, + _0_is_referenced_directly_or_indirectly_in_its_own_type_annotation: { code: 2502, category: ts.DiagnosticCategory.Error, key: "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502", message: "'{0}' is referenced directly or indirectly in its own type annotation." }, + Cannot_find_namespace_0: { code: 2503, category: ts.DiagnosticCategory.Error, key: "Cannot_find_namespace_0_2503", message: "Cannot find namespace '{0}'." }, + No_best_common_type_exists_among_yield_expressions: { code: 2504, category: ts.DiagnosticCategory.Error, key: "No_best_common_type_exists_among_yield_expressions_2504", message: "No best common type exists among yield expressions." }, + A_generator_cannot_have_a_void_type_annotation: { code: 2505, category: ts.DiagnosticCategory.Error, key: "A_generator_cannot_have_a_void_type_annotation_2505", message: "A generator cannot have a 'void' type annotation." }, + _0_is_referenced_directly_or_indirectly_in_its_own_base_expression: { code: 2506, category: ts.DiagnosticCategory.Error, key: "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506", message: "'{0}' is referenced directly or indirectly in its own base expression." }, + Type_0_is_not_a_constructor_function_type: { code: 2507, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_a_constructor_function_type_2507", message: "Type '{0}' is not a constructor function type." }, + No_base_constructor_has_the_specified_number_of_type_arguments: { code: 2508, category: ts.DiagnosticCategory.Error, key: "No_base_constructor_has_the_specified_number_of_type_arguments_2508", message: "No base constructor has the specified number of type arguments." }, + Base_constructor_return_type_0_is_not_a_class_or_interface_type: { code: 2509, category: ts.DiagnosticCategory.Error, key: "Base_constructor_return_type_0_is_not_a_class_or_interface_type_2509", message: "Base constructor return type '{0}' is not a class or interface type." }, + Base_constructors_must_all_have_the_same_return_type: { code: 2510, category: ts.DiagnosticCategory.Error, key: "Base_constructors_must_all_have_the_same_return_type_2510", message: "Base constructors must all have the same return type." }, + Cannot_create_an_instance_of_the_abstract_class_0: { code: 2511, category: ts.DiagnosticCategory.Error, key: "Cannot_create_an_instance_of_the_abstract_class_0_2511", message: "Cannot create an instance of the abstract class '{0}'." }, + Overload_signatures_must_all_be_abstract_or_non_abstract: { code: 2512, category: ts.DiagnosticCategory.Error, key: "Overload_signatures_must_all_be_abstract_or_non_abstract_2512", message: "Overload signatures must all be abstract or non-abstract." }, + Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression: { code: 2513, category: ts.DiagnosticCategory.Error, key: "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513", message: "Abstract method '{0}' in class '{1}' cannot be accessed via super expression." }, + Classes_containing_abstract_methods_must_be_marked_abstract: { code: 2514, category: ts.DiagnosticCategory.Error, key: "Classes_containing_abstract_methods_must_be_marked_abstract_2514", message: "Classes containing abstract methods must be marked abstract." }, + Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2: { code: 2515, category: ts.DiagnosticCategory.Error, key: "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515", message: "Non-abstract class '{0}' does not implement inherited abstract member '{1}' from class '{2}'." }, + All_declarations_of_an_abstract_method_must_be_consecutive: { code: 2516, category: ts.DiagnosticCategory.Error, key: "All_declarations_of_an_abstract_method_must_be_consecutive_2516", message: "All declarations of an abstract method must be consecutive." }, + Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type: { code: 2517, category: ts.DiagnosticCategory.Error, key: "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517", message: "Cannot assign an abstract constructor type to a non-abstract constructor type." }, + A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard: { code: 2518, category: ts.DiagnosticCategory.Error, key: "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518", message: "A 'this'-based type guard is not compatible with a parameter-based type guard." }, + Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions: { code: 2520, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520", message: "Duplicate identifier '{0}'. Compiler uses declaration '{1}' to support async functions." }, + Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions: { code: 2521, category: ts.DiagnosticCategory.Error, key: "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521", message: "Expression resolves to variable declaration '{0}' that compiler uses to support async functions." }, + The_arguments_object_cannot_be_referenced_in_an_async_arrow_function_Consider_using_a_standard_async_function_expression: { code: 2522, category: ts.DiagnosticCategory.Error, key: "The_arguments_object_cannot_be_referenced_in_an_async_arrow_function_Consider_using_a_standard_async_2522", message: "The 'arguments' object cannot be referenced in an async arrow function. Consider using a standard async function expression." }, + yield_expressions_cannot_be_used_in_a_parameter_initializer: { code: 2523, category: ts.DiagnosticCategory.Error, key: "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523", message: "'yield' expressions cannot be used in a parameter initializer." }, + await_expressions_cannot_be_used_in_a_parameter_initializer: { code: 2524, category: ts.DiagnosticCategory.Error, key: "await_expressions_cannot_be_used_in_a_parameter_initializer_2524", message: "'await' expressions cannot be used in a parameter initializer." }, + Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value: { code: 2525, category: ts.DiagnosticCategory.Error, key: "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525", message: "Initializer provides no value for this binding element and the binding element has no default value." }, + A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface: { code: 2526, category: ts.DiagnosticCategory.Error, key: "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526", message: "A 'this' type is available only in a non-static member of a class or interface." }, + The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary: { code: 2527, category: ts.DiagnosticCategory.Error, key: "The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary_2527", message: "The inferred type of '{0}' references an inaccessible 'this' type. A type annotation is necessary." }, + A_module_cannot_have_multiple_default_exports: { code: 2528, category: ts.DiagnosticCategory.Error, key: "A_module_cannot_have_multiple_default_exports_2528", message: "A module cannot have multiple default exports." }, + Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions: { code: 2529, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529", message: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions." }, + Property_0_is_incompatible_with_index_signature: { code: 2530, category: ts.DiagnosticCategory.Error, key: "Property_0_is_incompatible_with_index_signature_2530", message: "Property '{0}' is incompatible with index signature." }, + Object_is_possibly_null: { code: 2531, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_2531", message: "Object is possibly 'null'." }, + Object_is_possibly_undefined: { code: 2532, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_undefined_2532", message: "Object is possibly 'undefined'." }, + Object_is_possibly_null_or_undefined: { code: 2533, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_or_undefined_2533", message: "Object is possibly 'null' or 'undefined'." }, + A_function_returning_never_cannot_have_a_reachable_end_point: { code: 2534, category: ts.DiagnosticCategory.Error, key: "A_function_returning_never_cannot_have_a_reachable_end_point_2534", message: "A function returning 'never' cannot have a reachable end point." }, + JSX_element_attributes_type_0_may_not_be_a_union_type: { code: 2600, category: ts.DiagnosticCategory.Error, key: "JSX_element_attributes_type_0_may_not_be_a_union_type_2600", message: "JSX element attributes type '{0}' may not be a union type." }, + The_return_type_of_a_JSX_element_constructor_must_return_an_object_type: { code: 2601, category: ts.DiagnosticCategory.Error, key: "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601", message: "The return type of a JSX element constructor must return an object type." }, + JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist: { code: 2602, category: ts.DiagnosticCategory.Error, key: "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602", message: "JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist." }, + Property_0_in_type_1_is_not_assignable_to_type_2: { code: 2603, category: ts.DiagnosticCategory.Error, key: "Property_0_in_type_1_is_not_assignable_to_type_2_2603", message: "Property '{0}' in type '{1}' is not assignable to type '{2}'" }, + JSX_element_type_0_does_not_have_any_construct_or_call_signatures: { code: 2604, category: ts.DiagnosticCategory.Error, key: "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604", message: "JSX element type '{0}' does not have any construct or call signatures." }, + JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements: { code: 2605, category: ts.DiagnosticCategory.Error, key: "JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements_2605", message: "JSX element type '{0}' is not a constructor function for JSX elements." }, + Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property: { code: 2606, category: ts.DiagnosticCategory.Error, key: "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606", message: "Property '{0}' of JSX spread attribute is not assignable to target property." }, + JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property: { code: 2607, category: ts.DiagnosticCategory.Error, key: "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607", message: "JSX element class does not support attributes because it does not have a '{0}' property" }, + The_global_type_JSX_0_may_not_have_more_than_one_property: { code: 2608, category: ts.DiagnosticCategory.Error, key: "The_global_type_JSX_0_may_not_have_more_than_one_property_2608", message: "The global type 'JSX.{0}' may not have more than one property" }, + Cannot_emit_namespaced_JSX_elements_in_React: { code: 2650, category: ts.DiagnosticCategory.Error, key: "Cannot_emit_namespaced_JSX_elements_in_React_2650", message: "Cannot emit namespaced JSX elements in React" }, + A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: { code: 2651, category: ts.DiagnosticCategory.Error, key: "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651", message: "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums." }, + Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: { code: 2652, category: ts.DiagnosticCategory.Error, key: "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652", message: "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead." }, + Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1: { code: 2653, category: ts.DiagnosticCategory.Error, key: "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653", message: "Non-abstract class expression does not implement inherited abstract member '{0}' from class '{1}'." }, + Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_package_author_to_update_the_package_definition: { code: 2654, category: ts.DiagnosticCategory.Error, key: "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654", message: "Exported external package typings file cannot contain tripleslash references. Please contact the package author to update the package definition." }, + Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_the_package_definition: { code: 2656, category: ts.DiagnosticCategory.Error, key: "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656", message: "Exported external package typings file '{0}' is not a module. Please contact the package author to update the package definition." }, + JSX_expressions_must_have_one_parent_element: { code: 2657, category: ts.DiagnosticCategory.Error, key: "JSX_expressions_must_have_one_parent_element_2657", message: "JSX expressions must have one parent element" }, + Type_0_provides_no_match_for_the_signature_1: { code: 2658, category: ts.DiagnosticCategory.Error, key: "Type_0_provides_no_match_for_the_signature_1_2658", message: "Type '{0}' provides no match for the signature '{1}'" }, + super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher: { code: 2659, category: ts.DiagnosticCategory.Error, key: "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659", message: "'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher." }, + super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions: { code: 2660, category: ts.DiagnosticCategory.Error, key: "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660", message: "'super' can only be referenced in members of derived classes or object literal expressions." }, + Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module: { code: 2661, category: ts.DiagnosticCategory.Error, key: "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661", message: "Cannot export '{0}'. Only local declarations can be exported from a module." }, + Cannot_find_name_0_Did_you_mean_the_static_member_1_0: { code: 2662, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662", message: "Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?" }, + Cannot_find_name_0_Did_you_mean_the_instance_member_this_0: { code: 2663, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663", message: "Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?" }, + Invalid_module_name_in_augmentation_module_0_cannot_be_found: { code: 2664, category: ts.DiagnosticCategory.Error, key: "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664", message: "Invalid module name in augmentation, module '{0}' cannot be found." }, + Exports_and_export_assignments_are_not_permitted_in_module_augmentations: { code: 2666, category: ts.DiagnosticCategory.Error, key: "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666", message: "Exports and export assignments are not permitted in module augmentations." }, + Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module: { code: 2667, category: ts.DiagnosticCategory.Error, key: "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667", message: "Imports are not permitted in module augmentations. Consider moving them to the enclosing external module." }, + export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible: { code: 2668, category: ts.DiagnosticCategory.Error, key: "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668", message: "'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible." }, + Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations: { code: 2669, category: ts.DiagnosticCategory.Error, key: "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669", message: "Augmentations for the global scope can only be directly nested in external modules or ambient module declarations." }, + Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context: { code: 2670, category: ts.DiagnosticCategory.Error, key: "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670", message: "Augmentations for the global scope should have 'declare' modifier unless they appear in already ambient context." }, + Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity: { code: 2671, category: ts.DiagnosticCategory.Error, key: "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671", message: "Cannot augment module '{0}' because it resolves to a non-module entity." }, + Cannot_assign_a_0_constructor_type_to_a_1_constructor_type: { code: 2672, category: ts.DiagnosticCategory.Error, key: "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672", message: "Cannot assign a '{0}' constructor type to a '{1}' constructor type." }, + Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration: { code: 2673, category: ts.DiagnosticCategory.Error, key: "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673", message: "Constructor of class '{0}' is private and only accessible within the class declaration." }, + Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration: { code: 2674, category: ts.DiagnosticCategory.Error, key: "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674", message: "Constructor of class '{0}' is protected and only accessible within the class declaration." }, + Cannot_extend_a_class_0_Class_constructor_is_marked_as_private: { code: 2675, category: ts.DiagnosticCategory.Error, key: "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675", message: "Cannot extend a class '{0}'. Class constructor is marked as private." }, + Accessors_must_both_be_abstract_or_non_abstract: { code: 2676, category: ts.DiagnosticCategory.Error, key: "Accessors_must_both_be_abstract_or_non_abstract_2676", message: "Accessors must both be abstract or non-abstract." }, + A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type: { code: 2677, category: ts.DiagnosticCategory.Error, key: "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677", message: "A type predicate's type must be assignable to its parameter's type." }, + Type_0_is_not_comparable_to_type_1: { code: 2678, category: ts.DiagnosticCategory.Error, key: "Type_0_is_not_comparable_to_type_1_2678", message: "Type '{0}' is not comparable to type '{1}'." }, + A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void: { code: 2679, category: ts.DiagnosticCategory.Error, key: "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679", message: "A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'." }, + A_this_parameter_must_be_the_first_parameter: { code: 2680, category: ts.DiagnosticCategory.Error, key: "A_this_parameter_must_be_the_first_parameter_2680", message: "A 'this' parameter must be the first parameter." }, + A_constructor_cannot_have_a_this_parameter: { code: 2681, category: ts.DiagnosticCategory.Error, key: "A_constructor_cannot_have_a_this_parameter_2681", message: "A constructor cannot have a 'this' parameter." }, + get_and_set_accessor_must_have_the_same_this_type: { code: 2682, category: ts.DiagnosticCategory.Error, key: "get_and_set_accessor_must_have_the_same_this_type_2682", message: "'get' and 'set' accessor must have the same 'this' type." }, + this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation: { code: 2683, category: ts.DiagnosticCategory.Error, key: "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683", message: "'this' implicitly has type 'any' because it does not have a type annotation." }, + The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1: { code: 2684, category: ts.DiagnosticCategory.Error, key: "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684", message: "The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'." }, + The_this_types_of_each_signature_are_incompatible: { code: 2685, category: ts.DiagnosticCategory.Error, key: "The_this_types_of_each_signature_are_incompatible_2685", message: "The 'this' types of each signature are incompatible." }, + Import_declaration_0_is_using_private_name_1: { code: 4000, category: ts.DiagnosticCategory.Error, key: "Import_declaration_0_is_using_private_name_1_4000", message: "Import declaration '{0}' is using private name '{1}'." }, + Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", message: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, + Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4004, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", message: "Type parameter '{0}' of exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4006, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006", message: "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4008, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008", message: "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4010, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010", message: "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4012, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012", message: "Type parameter '{0}' of public method from exported class has or is using private name '{1}'." }, + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4014, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014", message: "Type parameter '{0}' of method from exported interface has or is using private name '{1}'." }, + Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4016, category: ts.DiagnosticCategory.Error, key: "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016", message: "Type parameter '{0}' of exported function has or is using private name '{1}'." }, + Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4019, category: ts.DiagnosticCategory.Error, key: "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019", message: "Implements clause of exported class '{0}' has or is using private name '{1}'." }, + Extends_clause_of_exported_class_0_has_or_is_using_private_name_1: { code: 4020, category: ts.DiagnosticCategory.Error, key: "Extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020", message: "Extends clause of exported class '{0}' has or is using private name '{1}'." }, + Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: { code: 4022, category: ts.DiagnosticCategory.Error, key: "Extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022", message: "Extends clause of exported interface '{0}' has or is using private name '{1}'." }, + Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4023, category: ts.DiagnosticCategory.Error, key: "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023", message: "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named." }, + Exported_variable_0_has_or_is_using_name_1_from_private_module_2: { code: 4024, category: ts.DiagnosticCategory.Error, key: "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024", message: "Exported variable '{0}' has or is using name '{1}' from private module '{2}'." }, + Exported_variable_0_has_or_is_using_private_name_1: { code: 4025, category: ts.DiagnosticCategory.Error, key: "Exported_variable_0_has_or_is_using_private_name_1_4025", message: "Exported variable '{0}' has or is using private name '{1}'." }, + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4026, category: ts.DiagnosticCategory.Error, key: "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026", message: "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4027, category: ts.DiagnosticCategory.Error, key: "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027", message: "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4028, category: ts.DiagnosticCategory.Error, key: "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028", message: "Public static property '{0}' of exported class has or is using private name '{1}'." }, + Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4029, category: ts.DiagnosticCategory.Error, key: "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029", message: "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4030, category: ts.DiagnosticCategory.Error, key: "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030", message: "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, + Public_property_0_of_exported_class_has_or_is_using_private_name_1: { code: 4031, category: ts.DiagnosticCategory.Error, key: "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031", message: "Public property '{0}' of exported class has or is using private name '{1}'." }, + Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4032, category: ts.DiagnosticCategory.Error, key: "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032", message: "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'." }, + Property_0_of_exported_interface_has_or_is_using_private_name_1: { code: 4033, category: ts.DiagnosticCategory.Error, key: "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033", message: "Property '{0}' of exported interface has or is using private name '{1}'." }, + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4034, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_4034", message: "Parameter '{0}' of public static property setter from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4035, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1_4035", message: "Parameter '{0}' of public static property setter from exported class has or is using private name '{1}'." }, + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4036, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_4036", message: "Parameter '{0}' of public property setter from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1: { code: 4037, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1_4037", message: "Parameter '{0}' of public property setter from exported class has or is using private name '{1}'." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4038, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_externa_4038", message: "Return type of public static property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4039, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_4039", message: "Return type of public static property getter from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4040, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0_4040", message: "Return type of public static property getter from exported class has or is using private name '{0}'." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4041, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_modul_4041", message: "Return type of public property getter from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4042, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_4042", message: "Return type of public property getter from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0: { code: 4043, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0_4043", message: "Return type of public property getter from exported class has or is using private name '{0}'." }, + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4044, category: ts.DiagnosticCategory.Error, key: "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044", message: "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4045, category: ts.DiagnosticCategory.Error, key: "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045", message: "Return type of constructor signature from exported interface has or is using private name '{0}'." }, + Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4046, category: ts.DiagnosticCategory.Error, key: "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046", message: "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4047, category: ts.DiagnosticCategory.Error, key: "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047", message: "Return type of call signature from exported interface has or is using private name '{0}'." }, + Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4048, category: ts.DiagnosticCategory.Error, key: "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048", message: "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: { code: 4049, category: ts.DiagnosticCategory.Error, key: "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049", message: "Return type of index signature from exported interface has or is using private name '{0}'." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4050, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050", message: "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4051, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051", message: "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: { code: 4052, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052", message: "Return type of public static method from exported class has or is using private name '{0}'." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4053, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053", message: "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: { code: 4054, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054", message: "Return type of public method from exported class has or is using name '{0}' from private module '{1}'." }, + Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: { code: 4055, category: ts.DiagnosticCategory.Error, key: "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055", message: "Return type of public method from exported class has or is using private name '{0}'." }, + Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: { code: 4056, category: ts.DiagnosticCategory.Error, key: "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056", message: "Return type of method from exported interface has or is using name '{0}' from private module '{1}'." }, + Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: { code: 4057, category: ts.DiagnosticCategory.Error, key: "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057", message: "Return type of method from exported interface has or is using private name '{0}'." }, + Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: { code: 4058, category: ts.DiagnosticCategory.Error, key: "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058", message: "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named." }, + Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: { code: 4059, category: ts.DiagnosticCategory.Error, key: "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059", message: "Return type of exported function has or is using name '{0}' from private module '{1}'." }, + Return_type_of_exported_function_has_or_is_using_private_name_0: { code: 4060, category: ts.DiagnosticCategory.Error, key: "Return_type_of_exported_function_has_or_is_using_private_name_0_4060", message: "Return type of exported function has or is using private name '{0}'." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4061, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061", message: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4062, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062", message: "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: { code: 4063, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063", message: "Parameter '{0}' of constructor from exported class has or is using private name '{1}'." }, + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4064, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064", message: "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4065, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065", message: "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'." }, + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4066, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066", message: "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: { code: 4067, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067", message: "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4068, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068", message: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4069, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069", message: "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: { code: 4070, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070", message: "Parameter '{0}' of public static method from exported class has or is using private name '{1}'." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4071, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071", message: "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4072, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072", message: "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: { code: 4073, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073", message: "Parameter '{0}' of public method from exported class has or is using private name '{1}'." }, + Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: { code: 4074, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074", message: "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: { code: 4075, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075", message: "Parameter '{0}' of method from exported interface has or is using private name '{1}'." }, + Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: { code: 4076, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076", message: "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named." }, + Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077", message: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, + Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: ts.DiagnosticCategory.Error, key: "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078", message: "Parameter '{0}' of exported function has or is using private name '{1}'." }, + Exported_type_alias_0_has_or_is_using_private_name_1: { code: 4081, category: ts.DiagnosticCategory.Error, key: "Exported_type_alias_0_has_or_is_using_private_name_1_4081", message: "Exported type alias '{0}' has or is using private name '{1}'." }, + Default_export_of_the_module_has_or_is_using_private_name_0: { code: 4082, category: ts.DiagnosticCategory.Error, key: "Default_export_of_the_module_has_or_is_using_private_name_0_4082", message: "Default export of the module has or is using private name '{0}'." }, + Conflicting_library_definitions_for_0_found_at_1_and_2_Copy_the_correct_file_to_the_typings_folder_to_resolve_this_conflict: { code: 4090, category: ts.DiagnosticCategory.Message, key: "Conflicting_library_definitions_for_0_found_at_1_and_2_Copy_the_correct_file_to_the_typings_folder_t_4090", message: "Conflicting library definitions for '{0}' found at '{1}' and '{2}'. Copy the correct file to the 'typings' folder to resolve this conflict." }, + The_current_host_does_not_support_the_0_option: { code: 5001, category: ts.DiagnosticCategory.Error, key: "The_current_host_does_not_support_the_0_option_5001", message: "The current host does not support the '{0}' option." }, + Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: ts.DiagnosticCategory.Error, key: "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", message: "Cannot find the common subdirectory path for the input files." }, + Cannot_read_file_0_Colon_1: { code: 5012, category: ts.DiagnosticCategory.Error, key: "Cannot_read_file_0_Colon_1_5012", message: "Cannot read file '{0}': {1}" }, + Unsupported_file_encoding: { code: 5013, category: ts.DiagnosticCategory.Error, key: "Unsupported_file_encoding_5013", message: "Unsupported file encoding." }, + Failed_to_parse_file_0_Colon_1: { code: 5014, category: ts.DiagnosticCategory.Error, key: "Failed_to_parse_file_0_Colon_1_5014", message: "Failed to parse file '{0}': {1}." }, + Unknown_compiler_option_0: { code: 5023, category: ts.DiagnosticCategory.Error, key: "Unknown_compiler_option_0_5023", message: "Unknown compiler option '{0}'." }, + Compiler_option_0_requires_a_value_of_type_1: { code: 5024, category: ts.DiagnosticCategory.Error, key: "Compiler_option_0_requires_a_value_of_type_1_5024", message: "Compiler option '{0}' requires a value of type {1}." }, + Could_not_write_file_0_Colon_1: { code: 5033, category: ts.DiagnosticCategory.Error, key: "Could_not_write_file_0_Colon_1_5033", message: "Could not write file '{0}': {1}" }, + Option_project_cannot_be_mixed_with_source_files_on_a_command_line: { code: 5042, category: ts.DiagnosticCategory.Error, key: "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042", message: "Option 'project' cannot be mixed with source files on a command line." }, + Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher: { code: 5047, category: ts.DiagnosticCategory.Error, key: "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047", message: "Option 'isolatedModules' can only be used when either option '--module' is provided or option 'target' is 'ES2015' or higher." }, + Option_inlineSources_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided: { code: 5051, category: ts.DiagnosticCategory.Error, key: "Option_inlineSources_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_prov_5051", message: "Option 'inlineSources' can only be used when either option '--inlineSourceMap' or option '--sourceMap' is provided." }, + Option_0_cannot_be_specified_without_specifying_option_1: { code: 5052, category: ts.DiagnosticCategory.Error, key: "Option_0_cannot_be_specified_without_specifying_option_1_5052", message: "Option '{0}' cannot be specified without specifying option '{1}'." }, + Option_0_cannot_be_specified_with_option_1: { code: 5053, category: ts.DiagnosticCategory.Error, key: "Option_0_cannot_be_specified_with_option_1_5053", message: "Option '{0}' cannot be specified with option '{1}'." }, + A_tsconfig_json_file_is_already_defined_at_Colon_0: { code: 5054, category: ts.DiagnosticCategory.Error, key: "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054", message: "A 'tsconfig.json' file is already defined at: '{0}'." }, + Cannot_write_file_0_because_it_would_overwrite_input_file: { code: 5055, category: ts.DiagnosticCategory.Error, key: "Cannot_write_file_0_because_it_would_overwrite_input_file_5055", message: "Cannot write file '{0}' because it would overwrite input file." }, + Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files: { code: 5056, category: ts.DiagnosticCategory.Error, key: "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056", message: "Cannot write file '{0}' because it would be overwritten by multiple input files." }, + Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0: { code: 5057, category: ts.DiagnosticCategory.Error, key: "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057", message: "Cannot find a tsconfig.json file at the specified directory: '{0}'" }, + The_specified_path_does_not_exist_Colon_0: { code: 5058, category: ts.DiagnosticCategory.Error, key: "The_specified_path_does_not_exist_Colon_0_5058", message: "The specified path does not exist: '{0}'" }, + Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier: { code: 5059, category: ts.DiagnosticCategory.Error, key: "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059", message: "Invalid value for '--reactNamespace'. '{0}' is not a valid identifier." }, + Option_paths_cannot_be_used_without_specifying_baseUrl_option: { code: 5060, category: ts.DiagnosticCategory.Error, key: "Option_paths_cannot_be_used_without_specifying_baseUrl_option_5060", message: "Option 'paths' cannot be used without specifying '--baseUrl' option." }, + Pattern_0_can_have_at_most_one_Asterisk_character: { code: 5061, category: ts.DiagnosticCategory.Error, key: "Pattern_0_can_have_at_most_one_Asterisk_character_5061", message: "Pattern '{0}' can have at most one '*' character" }, + Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character: { code: 5062, category: ts.DiagnosticCategory.Error, key: "Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character_5062", message: "Substitution '{0}' in pattern '{1}' in can have at most one '*' character" }, + Substututions_for_pattern_0_should_be_an_array: { code: 5063, category: ts.DiagnosticCategory.Error, key: "Substututions_for_pattern_0_should_be_an_array_5063", message: "Substututions for pattern '{0}' should be an array." }, + Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2: { code: 5064, category: ts.DiagnosticCategory.Error, key: "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064", message: "Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'." }, + Concatenate_and_emit_output_to_single_file: { code: 6001, category: ts.DiagnosticCategory.Message, key: "Concatenate_and_emit_output_to_single_file_6001", message: "Concatenate and emit output to single file." }, + Generates_corresponding_d_ts_file: { code: 6002, category: ts.DiagnosticCategory.Message, key: "Generates_corresponding_d_ts_file_6002", message: "Generates corresponding '.d.ts' file." }, + Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: ts.DiagnosticCategory.Message, key: "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", message: "Specify the location where debugger should locate map files instead of generated locations." }, + Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { code: 6004, category: ts.DiagnosticCategory.Message, key: "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004", message: "Specify the location where debugger should locate TypeScript files instead of source locations." }, + Watch_input_files: { code: 6005, category: ts.DiagnosticCategory.Message, key: "Watch_input_files_6005", message: "Watch input files." }, + Redirect_output_structure_to_the_directory: { code: 6006, category: ts.DiagnosticCategory.Message, key: "Redirect_output_structure_to_the_directory_6006", message: "Redirect output structure to the directory." }, + Do_not_erase_const_enum_declarations_in_generated_code: { code: 6007, category: ts.DiagnosticCategory.Message, key: "Do_not_erase_const_enum_declarations_in_generated_code_6007", message: "Do not erase const enum declarations in generated code." }, + Do_not_emit_outputs_if_any_errors_were_reported: { code: 6008, category: ts.DiagnosticCategory.Message, key: "Do_not_emit_outputs_if_any_errors_were_reported_6008", message: "Do not emit outputs if any errors were reported." }, + Do_not_emit_comments_to_output: { code: 6009, category: ts.DiagnosticCategory.Message, key: "Do_not_emit_comments_to_output_6009", message: "Do not emit comments to output." }, + Do_not_emit_outputs: { code: 6010, category: ts.DiagnosticCategory.Message, key: "Do_not_emit_outputs_6010", message: "Do not emit outputs." }, + Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking: { code: 6011, category: ts.DiagnosticCategory.Message, key: "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011", message: "Allow default imports from modules with no default export. This does not affect code emit, just typechecking." }, + Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES2015: { code: 6015, category: ts.DiagnosticCategory.Message, key: "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES2015_6015", message: "Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES2015'" }, + Specify_module_code_generation_Colon_commonjs_amd_system_umd_or_es2015: { code: 6016, category: ts.DiagnosticCategory.Message, key: "Specify_module_code_generation_Colon_commonjs_amd_system_umd_or_es2015_6016", message: "Specify module code generation: 'commonjs', 'amd', 'system', 'umd' or 'es2015'" }, + Print_this_message: { code: 6017, category: ts.DiagnosticCategory.Message, key: "Print_this_message_6017", message: "Print this message." }, + Print_the_compiler_s_version: { code: 6019, category: ts.DiagnosticCategory.Message, key: "Print_the_compiler_s_version_6019", message: "Print the compiler's version." }, + Compile_the_project_in_the_given_directory: { code: 6020, category: ts.DiagnosticCategory.Message, key: "Compile_the_project_in_the_given_directory_6020", message: "Compile the project in the given directory." }, + Syntax_Colon_0: { code: 6023, category: ts.DiagnosticCategory.Message, key: "Syntax_Colon_0_6023", message: "Syntax: {0}" }, + options: { code: 6024, category: ts.DiagnosticCategory.Message, key: "options_6024", message: "options" }, + file: { code: 6025, category: ts.DiagnosticCategory.Message, key: "file_6025", message: "file" }, + Examples_Colon_0: { code: 6026, category: ts.DiagnosticCategory.Message, key: "Examples_Colon_0_6026", message: "Examples: {0}" }, + Options_Colon: { code: 6027, category: ts.DiagnosticCategory.Message, key: "Options_Colon_6027", message: "Options:" }, + Version_0: { code: 6029, category: ts.DiagnosticCategory.Message, key: "Version_0_6029", message: "Version {0}" }, + Insert_command_line_options_and_files_from_a_file: { code: 6030, category: ts.DiagnosticCategory.Message, key: "Insert_command_line_options_and_files_from_a_file_6030", message: "Insert command line options and files from a file." }, + File_change_detected_Starting_incremental_compilation: { code: 6032, category: ts.DiagnosticCategory.Message, key: "File_change_detected_Starting_incremental_compilation_6032", message: "File change detected. Starting incremental compilation..." }, + KIND: { code: 6034, category: ts.DiagnosticCategory.Message, key: "KIND_6034", message: "KIND" }, + FILE: { code: 6035, category: ts.DiagnosticCategory.Message, key: "FILE_6035", message: "FILE" }, + VERSION: { code: 6036, category: ts.DiagnosticCategory.Message, key: "VERSION_6036", message: "VERSION" }, + LOCATION: { code: 6037, category: ts.DiagnosticCategory.Message, key: "LOCATION_6037", message: "LOCATION" }, + DIRECTORY: { code: 6038, category: ts.DiagnosticCategory.Message, key: "DIRECTORY_6038", message: "DIRECTORY" }, + Compilation_complete_Watching_for_file_changes: { code: 6042, category: ts.DiagnosticCategory.Message, key: "Compilation_complete_Watching_for_file_changes_6042", message: "Compilation complete. Watching for file changes." }, + Generates_corresponding_map_file: { code: 6043, category: ts.DiagnosticCategory.Message, key: "Generates_corresponding_map_file_6043", message: "Generates corresponding '.map' file." }, + Compiler_option_0_expects_an_argument: { code: 6044, category: ts.DiagnosticCategory.Error, key: "Compiler_option_0_expects_an_argument_6044", message: "Compiler option '{0}' expects an argument." }, + Unterminated_quoted_string_in_response_file_0: { code: 6045, category: ts.DiagnosticCategory.Error, key: "Unterminated_quoted_string_in_response_file_0_6045", message: "Unterminated quoted string in response file '{0}'." }, + Argument_for_0_option_must_be_Colon_1: { code: 6046, category: ts.DiagnosticCategory.Error, key: "Argument_for_0_option_must_be_Colon_1_6046", message: "Argument for '{0}' option must be: {1}" }, + Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: { code: 6048, category: ts.DiagnosticCategory.Error, key: "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048", message: "Locale must be of the form or -. For example '{0}' or '{1}'." }, + Unsupported_locale_0: { code: 6049, category: ts.DiagnosticCategory.Error, key: "Unsupported_locale_0_6049", message: "Unsupported locale '{0}'." }, + Unable_to_open_file_0: { code: 6050, category: ts.DiagnosticCategory.Error, key: "Unable_to_open_file_0_6050", message: "Unable to open file '{0}'." }, + Corrupted_locale_file_0: { code: 6051, category: ts.DiagnosticCategory.Error, key: "Corrupted_locale_file_0_6051", message: "Corrupted locale file {0}." }, + Raise_error_on_expressions_and_declarations_with_an_implied_any_type: { code: 6052, category: ts.DiagnosticCategory.Message, key: "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052", message: "Raise error on expressions and declarations with an implied 'any' type." }, + File_0_not_found: { code: 6053, category: ts.DiagnosticCategory.Error, key: "File_0_not_found_6053", message: "File '{0}' not found." }, + File_0_has_unsupported_extension_The_only_supported_extensions_are_1: { code: 6054, category: ts.DiagnosticCategory.Error, key: "File_0_has_unsupported_extension_The_only_supported_extensions_are_1_6054", message: "File '{0}' has unsupported extension. The only supported extensions are {1}." }, + Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: { code: 6055, category: ts.DiagnosticCategory.Message, key: "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055", message: "Suppress noImplicitAny errors for indexing objects lacking index signatures." }, + Do_not_emit_declarations_for_code_that_has_an_internal_annotation: { code: 6056, category: ts.DiagnosticCategory.Message, key: "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056", message: "Do not emit declarations for code that has an '@internal' annotation." }, + Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir: { code: 6058, category: ts.DiagnosticCategory.Message, key: "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058", message: "Specify the root directory of input files. Use to control the output directory structure with --outDir." }, + File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files: { code: 6059, category: ts.DiagnosticCategory.Error, key: "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059", message: "File '{0}' is not under 'rootDir' '{1}'. 'rootDir' is expected to contain all source files." }, + Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix: { code: 6060, category: ts.DiagnosticCategory.Message, key: "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060", message: "Specify the end of line sequence to be used when emitting files: 'CRLF' (dos) or 'LF' (unix)." }, + NEWLINE: { code: 6061, category: ts.DiagnosticCategory.Message, key: "NEWLINE_6061", message: "NEWLINE" }, + Option_0_can_only_be_specified_in_tsconfig_json_file: { code: 6064, category: ts.DiagnosticCategory.Error, key: "Option_0_can_only_be_specified_in_tsconfig_json_file_6064", message: "Option '{0}' can only be specified in 'tsconfig.json' file." }, + Enables_experimental_support_for_ES7_decorators: { code: 6065, category: ts.DiagnosticCategory.Message, key: "Enables_experimental_support_for_ES7_decorators_6065", message: "Enables experimental support for ES7 decorators." }, + Enables_experimental_support_for_emitting_type_metadata_for_decorators: { code: 6066, category: ts.DiagnosticCategory.Message, key: "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066", message: "Enables experimental support for emitting type metadata for decorators." }, + Enables_experimental_support_for_ES7_async_functions: { code: 6068, category: ts.DiagnosticCategory.Message, key: "Enables_experimental_support_for_ES7_async_functions_6068", message: "Enables experimental support for ES7 async functions." }, + Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6: { code: 6069, category: ts.DiagnosticCategory.Message, key: "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069", message: "Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6)." }, + Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file: { code: 6070, category: ts.DiagnosticCategory.Message, key: "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070", message: "Initializes a TypeScript project and creates a tsconfig.json file." }, + Successfully_created_a_tsconfig_json_file: { code: 6071, category: ts.DiagnosticCategory.Message, key: "Successfully_created_a_tsconfig_json_file_6071", message: "Successfully created a tsconfig.json file." }, + Suppress_excess_property_checks_for_object_literals: { code: 6072, category: ts.DiagnosticCategory.Message, key: "Suppress_excess_property_checks_for_object_literals_6072", message: "Suppress excess property checks for object literals." }, + Stylize_errors_and_messages_using_color_and_context_experimental: { code: 6073, category: ts.DiagnosticCategory.Message, key: "Stylize_errors_and_messages_using_color_and_context_experimental_6073", message: "Stylize errors and messages using color and context. (experimental)" }, + Do_not_report_errors_on_unused_labels: { code: 6074, category: ts.DiagnosticCategory.Message, key: "Do_not_report_errors_on_unused_labels_6074", message: "Do not report errors on unused labels." }, + Report_error_when_not_all_code_paths_in_function_return_a_value: { code: 6075, category: ts.DiagnosticCategory.Message, key: "Report_error_when_not_all_code_paths_in_function_return_a_value_6075", message: "Report error when not all code paths in function return a value." }, + Report_errors_for_fallthrough_cases_in_switch_statement: { code: 6076, category: ts.DiagnosticCategory.Message, key: "Report_errors_for_fallthrough_cases_in_switch_statement_6076", message: "Report errors for fallthrough cases in switch statement." }, + Do_not_report_errors_on_unreachable_code: { code: 6077, category: ts.DiagnosticCategory.Message, key: "Do_not_report_errors_on_unreachable_code_6077", message: "Do not report errors on unreachable code." }, + Disallow_inconsistently_cased_references_to_the_same_file: { code: 6078, category: ts.DiagnosticCategory.Message, key: "Disallow_inconsistently_cased_references_to_the_same_file_6078", message: "Disallow inconsistently-cased references to the same file." }, + Specify_library_files_to_be_included_in_the_compilation_Colon: { code: 6079, category: ts.DiagnosticCategory.Message, key: "Specify_library_files_to_be_included_in_the_compilation_Colon_6079", message: "Specify library files to be included in the compilation: " }, + Specify_JSX_code_generation_Colon_preserve_or_react: { code: 6080, category: ts.DiagnosticCategory.Message, key: "Specify_JSX_code_generation_Colon_preserve_or_react_6080", message: "Specify JSX code generation: 'preserve' or 'react'" }, + Only_amd_and_system_modules_are_supported_alongside_0: { code: 6082, category: ts.DiagnosticCategory.Error, key: "Only_amd_and_system_modules_are_supported_alongside_0_6082", message: "Only 'amd' and 'system' modules are supported alongside --{0}." }, + Base_directory_to_resolve_non_absolute_module_names: { code: 6083, category: ts.DiagnosticCategory.Message, key: "Base_directory_to_resolve_non_absolute_module_names_6083", message: "Base directory to resolve non-absolute module names." }, + Specify_the_object_invoked_for_createElement_and_spread_when_targeting_react_JSX_emit: { code: 6084, category: ts.DiagnosticCategory.Message, key: "Specify_the_object_invoked_for_createElement_and_spread_when_targeting_react_JSX_emit_6084", message: "Specify the object invoked for createElement and __spread when targeting 'react' JSX emit" }, + Enable_tracing_of_the_name_resolution_process: { code: 6085, category: ts.DiagnosticCategory.Message, key: "Enable_tracing_of_the_name_resolution_process_6085", message: "Enable tracing of the name resolution process." }, + Resolving_module_0_from_1: { code: 6086, category: ts.DiagnosticCategory.Message, key: "Resolving_module_0_from_1_6086", message: "======== Resolving module '{0}' from '{1}'. ========" }, + Explicitly_specified_module_resolution_kind_Colon_0: { code: 6087, category: ts.DiagnosticCategory.Message, key: "Explicitly_specified_module_resolution_kind_Colon_0_6087", message: "Explicitly specified module resolution kind: '{0}'." }, + Module_resolution_kind_is_not_specified_using_0: { code: 6088, category: ts.DiagnosticCategory.Message, key: "Module_resolution_kind_is_not_specified_using_0_6088", message: "Module resolution kind is not specified, using '{0}'." }, + Module_name_0_was_successfully_resolved_to_1: { code: 6089, category: ts.DiagnosticCategory.Message, key: "Module_name_0_was_successfully_resolved_to_1_6089", message: "======== Module name '{0}' was successfully resolved to '{1}'. ========" }, + Module_name_0_was_not_resolved: { code: 6090, category: ts.DiagnosticCategory.Message, key: "Module_name_0_was_not_resolved_6090", message: "======== Module name '{0}' was not resolved. ========" }, + paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0: { code: 6091, category: ts.DiagnosticCategory.Message, key: "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091", message: "'paths' option is specified, looking for a pattern to match module name '{0}'." }, + Module_name_0_matched_pattern_1: { code: 6092, category: ts.DiagnosticCategory.Message, key: "Module_name_0_matched_pattern_1_6092", message: "Module name '{0}', matched pattern '{1}'." }, + Trying_substitution_0_candidate_module_location_Colon_1: { code: 6093, category: ts.DiagnosticCategory.Message, key: "Trying_substitution_0_candidate_module_location_Colon_1_6093", message: "Trying substitution '{0}', candidate module location: '{1}'." }, + Resolving_module_name_0_relative_to_base_url_1_2: { code: 6094, category: ts.DiagnosticCategory.Message, key: "Resolving_module_name_0_relative_to_base_url_1_2_6094", message: "Resolving module name '{0}' relative to base url '{1}' - '{2}'." }, + Loading_module_as_file_Slash_folder_candidate_module_location_0: { code: 6095, category: ts.DiagnosticCategory.Message, key: "Loading_module_as_file_Slash_folder_candidate_module_location_0_6095", message: "Loading module as file / folder, candidate module location '{0}'." }, + File_0_does_not_exist: { code: 6096, category: ts.DiagnosticCategory.Message, key: "File_0_does_not_exist_6096", message: "File '{0}' does not exist." }, + File_0_exist_use_it_as_a_name_resolution_result: { code: 6097, category: ts.DiagnosticCategory.Message, key: "File_0_exist_use_it_as_a_name_resolution_result_6097", message: "File '{0}' exist - use it as a name resolution result." }, + Loading_module_0_from_node_modules_folder: { code: 6098, category: ts.DiagnosticCategory.Message, key: "Loading_module_0_from_node_modules_folder_6098", message: "Loading module '{0}' from 'node_modules' folder." }, + Found_package_json_at_0: { code: 6099, category: ts.DiagnosticCategory.Message, key: "Found_package_json_at_0_6099", message: "Found 'package.json' at '{0}'." }, + package_json_does_not_have_types_field: { code: 6100, category: ts.DiagnosticCategory.Message, key: "package_json_does_not_have_types_field_6100", message: "'package.json' does not have 'types' field." }, + package_json_has_0_field_1_that_references_2: { code: 6101, category: ts.DiagnosticCategory.Message, key: "package_json_has_0_field_1_that_references_2_6101", message: "'package.json' has '{0}' field '{1}' that references '{2}'." }, + Allow_javascript_files_to_be_compiled: { code: 6102, category: ts.DiagnosticCategory.Message, key: "Allow_javascript_files_to_be_compiled_6102", message: "Allow javascript files to be compiled." }, + Option_0_should_have_array_of_strings_as_a_value: { code: 6103, category: ts.DiagnosticCategory.Error, key: "Option_0_should_have_array_of_strings_as_a_value_6103", message: "Option '{0}' should have array of strings as a value." }, + Checking_if_0_is_the_longest_matching_prefix_for_1_2: { code: 6104, category: ts.DiagnosticCategory.Message, key: "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104", message: "Checking if '{0}' is the longest matching prefix for '{1}' - '{2}'." }, + Expected_type_of_0_field_in_package_json_to_be_string_got_1: { code: 6105, category: ts.DiagnosticCategory.Message, key: "Expected_type_of_0_field_in_package_json_to_be_string_got_1_6105", message: "Expected type of '{0}' field in 'package.json' to be 'string', got '{1}'." }, + baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1: { code: 6106, category: ts.DiagnosticCategory.Message, key: "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106", message: "'baseUrl' option is set to '{0}', using this value to resolve non-relative module name '{1}'" }, + rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0: { code: 6107, category: ts.DiagnosticCategory.Message, key: "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107", message: "'rootDirs' option is set, using it to resolve relative module name '{0}'" }, + Longest_matching_prefix_for_0_is_1: { code: 6108, category: ts.DiagnosticCategory.Message, key: "Longest_matching_prefix_for_0_is_1_6108", message: "Longest matching prefix for '{0}' is '{1}'" }, + Loading_0_from_the_root_dir_1_candidate_location_2: { code: 6109, category: ts.DiagnosticCategory.Message, key: "Loading_0_from_the_root_dir_1_candidate_location_2_6109", message: "Loading '{0}' from the root dir '{1}', candidate location '{2}'" }, + Trying_other_entries_in_rootDirs: { code: 6110, category: ts.DiagnosticCategory.Message, key: "Trying_other_entries_in_rootDirs_6110", message: "Trying other entries in 'rootDirs'" }, + Module_resolution_using_rootDirs_has_failed: { code: 6111, category: ts.DiagnosticCategory.Message, key: "Module_resolution_using_rootDirs_has_failed_6111", message: "Module resolution using 'rootDirs' has failed" }, + Do_not_emit_use_strict_directives_in_module_output: { code: 6112, category: ts.DiagnosticCategory.Message, key: "Do_not_emit_use_strict_directives_in_module_output_6112", message: "Do not emit 'use strict' directives in module output." }, + Enable_strict_null_checks: { code: 6113, category: ts.DiagnosticCategory.Message, key: "Enable_strict_null_checks_6113", message: "Enable strict null checks." }, + Unknown_option_excludes_Did_you_mean_exclude: { code: 6114, category: ts.DiagnosticCategory.Error, key: "Unknown_option_excludes_Did_you_mean_exclude_6114", message: "Unknown option 'excludes'. Did you mean 'exclude'?" }, + Raise_error_on_this_expressions_with_an_implied_any_type: { code: 6115, category: ts.DiagnosticCategory.Message, key: "Raise_error_on_this_expressions_with_an_implied_any_type_6115", message: "Raise error on 'this' expressions with an implied 'any' type." }, + Resolving_type_reference_directive_0_containing_file_1_root_directory_2: { code: 6116, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116", message: "======== Resolving type reference directive '{0}', containing file '{1}', root directory '{2}'. ========" }, + Resolving_using_primary_search_paths: { code: 6117, category: ts.DiagnosticCategory.Message, key: "Resolving_using_primary_search_paths_6117", message: "Resolving using primary search paths..." }, + Resolving_from_node_modules_folder: { code: 6118, category: ts.DiagnosticCategory.Message, key: "Resolving_from_node_modules_folder_6118", message: "Resolving from node_modules folder..." }, + Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2: { code: 6119, category: ts.DiagnosticCategory.Message, key: "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119", message: "======== Type reference directive '{0}' was successfully resolved to '{1}', primary: {2}. ========" }, + Type_reference_directive_0_was_not_resolved: { code: 6120, category: ts.DiagnosticCategory.Message, key: "Type_reference_directive_0_was_not_resolved_6120", message: "======== Type reference directive '{0}' was not resolved. ========" }, + Resolving_with_primary_search_path_0: { code: 6121, category: ts.DiagnosticCategory.Message, key: "Resolving_with_primary_search_path_0_6121", message: "Resolving with primary search path '{0}'" }, + Root_directory_cannot_be_determined_skipping_primary_search_paths: { code: 6122, category: ts.DiagnosticCategory.Message, key: "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122", message: "Root directory cannot be determined, skipping primary search paths." }, + Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set: { code: 6123, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123", message: "======== Resolving type reference directive '{0}', containing file '{1}', root directory not set. ========" }, + Type_declaration_files_to_be_included_in_compilation: { code: 6124, category: ts.DiagnosticCategory.Message, key: "Type_declaration_files_to_be_included_in_compilation_6124", message: "Type declaration files to be included in compilation." }, + Looking_up_in_node_modules_folder_initial_location_0: { code: 6125, category: ts.DiagnosticCategory.Message, key: "Looking_up_in_node_modules_folder_initial_location_0_6125", message: "Looking up in 'node_modules' folder, initial location '{0}'" }, + Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder: { code: 6126, category: ts.DiagnosticCategory.Message, key: "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126", message: "Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder." }, + Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1: { code: 6127, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127", message: "======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========" }, + Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set: { code: 6128, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128", message: "======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========" }, + The_config_file_0_found_doesn_t_contain_any_source_files: { code: 6129, category: ts.DiagnosticCategory.Error, key: "The_config_file_0_found_doesn_t_contain_any_source_files_6129", message: "The config file '{0}' found doesn't contain any source files." }, + Resolving_real_path_for_0_result_1: { code: 6130, category: ts.DiagnosticCategory.Message, key: "Resolving_real_path_for_0_result_1_6130", message: "Resolving real path for '{0}', result '{1}'" }, + Variable_0_implicitly_has_an_1_type: { code: 7005, category: ts.DiagnosticCategory.Error, key: "Variable_0_implicitly_has_an_1_type_7005", message: "Variable '{0}' implicitly has an '{1}' type." }, + Parameter_0_implicitly_has_an_1_type: { code: 7006, category: ts.DiagnosticCategory.Error, key: "Parameter_0_implicitly_has_an_1_type_7006", message: "Parameter '{0}' implicitly has an '{1}' type." }, + Member_0_implicitly_has_an_1_type: { code: 7008, category: ts.DiagnosticCategory.Error, key: "Member_0_implicitly_has_an_1_type_7008", message: "Member '{0}' implicitly has an '{1}' type." }, + new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: { code: 7009, category: ts.DiagnosticCategory.Error, key: "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009", message: "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type." }, + _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: { code: 7010, category: ts.DiagnosticCategory.Error, key: "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010", message: "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type." }, + Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: { code: 7011, category: ts.DiagnosticCategory.Error, key: "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011", message: "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type." }, + Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7013, category: ts.DiagnosticCategory.Error, key: "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013", message: "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type." }, + Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number: { code: 7015, category: ts.DiagnosticCategory.Error, key: "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015", message: "Element implicitly has an 'any' type because index expression is not of type 'number'." }, + Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation: { code: 7016, category: ts.DiagnosticCategory.Error, key: "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation_7016", message: "Property '{0}' implicitly has type 'any', because its 'set' accessor lacks a type annotation." }, + Index_signature_of_object_type_implicitly_has_an_any_type: { code: 7017, category: ts.DiagnosticCategory.Error, key: "Index_signature_of_object_type_implicitly_has_an_any_type_7017", message: "Index signature of object type implicitly has an 'any' type." }, + Object_literal_s_property_0_implicitly_has_an_1_type: { code: 7018, category: ts.DiagnosticCategory.Error, key: "Object_literal_s_property_0_implicitly_has_an_1_type_7018", message: "Object literal's property '{0}' implicitly has an '{1}' type." }, + Rest_parameter_0_implicitly_has_an_any_type: { code: 7019, category: ts.DiagnosticCategory.Error, key: "Rest_parameter_0_implicitly_has_an_any_type_7019", message: "Rest parameter '{0}' implicitly has an 'any[]' type." }, + Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: { code: 7020, category: ts.DiagnosticCategory.Error, key: "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020", message: "Call signature, which lacks return-type annotation, implicitly has an 'any' return type." }, + _0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer: { code: 7022, category: ts.DiagnosticCategory.Error, key: "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022", message: "'{0}' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer." }, + _0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7023, category: ts.DiagnosticCategory.Error, key: "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023", message: "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, + Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: { code: 7024, category: ts.DiagnosticCategory.Error, key: "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024", message: "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions." }, + Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type: { code: 7025, category: ts.DiagnosticCategory.Error, key: "Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_typ_7025", message: "Generator implicitly has type '{0}' because it does not yield any values. Consider supplying a return type." }, + JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists: { code: 7026, category: ts.DiagnosticCategory.Error, key: "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026", message: "JSX element implicitly has type 'any' because no interface 'JSX.{0}' exists" }, + Unreachable_code_detected: { code: 7027, category: ts.DiagnosticCategory.Error, key: "Unreachable_code_detected_7027", message: "Unreachable code detected." }, + Unused_label: { code: 7028, category: ts.DiagnosticCategory.Error, key: "Unused_label_7028", message: "Unused label." }, + Fallthrough_case_in_switch: { code: 7029, category: ts.DiagnosticCategory.Error, key: "Fallthrough_case_in_switch_7029", message: "Fallthrough case in switch." }, + Not_all_code_paths_return_a_value: { code: 7030, category: ts.DiagnosticCategory.Error, key: "Not_all_code_paths_return_a_value_7030", message: "Not all code paths return a value." }, + Binding_element_0_implicitly_has_an_1_type: { code: 7031, category: ts.DiagnosticCategory.Error, key: "Binding_element_0_implicitly_has_an_1_type_7031", message: "Binding element '{0}' implicitly has an '{1}' type." }, + You_cannot_rename_this_element: { code: 8000, category: ts.DiagnosticCategory.Error, key: "You_cannot_rename_this_element_8000", message: "You cannot rename this element." }, + You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: { code: 8001, category: ts.DiagnosticCategory.Error, key: "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001", message: "You cannot rename elements that are defined in the standard TypeScript library." }, + import_can_only_be_used_in_a_ts_file: { code: 8002, category: ts.DiagnosticCategory.Error, key: "import_can_only_be_used_in_a_ts_file_8002", message: "'import ... =' can only be used in a .ts file." }, + export_can_only_be_used_in_a_ts_file: { code: 8003, category: ts.DiagnosticCategory.Error, key: "export_can_only_be_used_in_a_ts_file_8003", message: "'export=' can only be used in a .ts file." }, + type_parameter_declarations_can_only_be_used_in_a_ts_file: { code: 8004, category: ts.DiagnosticCategory.Error, key: "type_parameter_declarations_can_only_be_used_in_a_ts_file_8004", message: "'type parameter declarations' can only be used in a .ts file." }, + implements_clauses_can_only_be_used_in_a_ts_file: { code: 8005, category: ts.DiagnosticCategory.Error, key: "implements_clauses_can_only_be_used_in_a_ts_file_8005", message: "'implements clauses' can only be used in a .ts file." }, + interface_declarations_can_only_be_used_in_a_ts_file: { code: 8006, category: ts.DiagnosticCategory.Error, key: "interface_declarations_can_only_be_used_in_a_ts_file_8006", message: "'interface declarations' can only be used in a .ts file." }, + module_declarations_can_only_be_used_in_a_ts_file: { code: 8007, category: ts.DiagnosticCategory.Error, key: "module_declarations_can_only_be_used_in_a_ts_file_8007", message: "'module declarations' can only be used in a .ts file." }, + type_aliases_can_only_be_used_in_a_ts_file: { code: 8008, category: ts.DiagnosticCategory.Error, key: "type_aliases_can_only_be_used_in_a_ts_file_8008", message: "'type aliases' can only be used in a .ts file." }, + _0_can_only_be_used_in_a_ts_file: { code: 8009, category: ts.DiagnosticCategory.Error, key: "_0_can_only_be_used_in_a_ts_file_8009", message: "'{0}' can only be used in a .ts file." }, + types_can_only_be_used_in_a_ts_file: { code: 8010, category: ts.DiagnosticCategory.Error, key: "types_can_only_be_used_in_a_ts_file_8010", message: "'types' can only be used in a .ts file." }, + type_arguments_can_only_be_used_in_a_ts_file: { code: 8011, category: ts.DiagnosticCategory.Error, key: "type_arguments_can_only_be_used_in_a_ts_file_8011", message: "'type arguments' can only be used in a .ts file." }, + parameter_modifiers_can_only_be_used_in_a_ts_file: { code: 8012, category: ts.DiagnosticCategory.Error, key: "parameter_modifiers_can_only_be_used_in_a_ts_file_8012", message: "'parameter modifiers' can only be used in a .ts file." }, + property_declarations_can_only_be_used_in_a_ts_file: { code: 8014, category: ts.DiagnosticCategory.Error, key: "property_declarations_can_only_be_used_in_a_ts_file_8014", message: "'property declarations' can only be used in a .ts file." }, + enum_declarations_can_only_be_used_in_a_ts_file: { code: 8015, category: ts.DiagnosticCategory.Error, key: "enum_declarations_can_only_be_used_in_a_ts_file_8015", message: "'enum declarations' can only be used in a .ts file." }, + type_assertion_expressions_can_only_be_used_in_a_ts_file: { code: 8016, category: ts.DiagnosticCategory.Error, key: "type_assertion_expressions_can_only_be_used_in_a_ts_file_8016", message: "'type assertion expressions' can only be used in a .ts file." }, + Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clauses: { code: 9002, category: ts.DiagnosticCategory.Error, key: "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002", message: "Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clauses." }, + class_expressions_are_not_currently_supported: { code: 9003, category: ts.DiagnosticCategory.Error, key: "class_expressions_are_not_currently_supported_9003", message: "'class' expressions are not currently supported." }, + JSX_attributes_must_only_be_assigned_a_non_empty_expression: { code: 17000, category: ts.DiagnosticCategory.Error, key: "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000", message: "JSX attributes must only be assigned a non-empty 'expression'." }, + JSX_elements_cannot_have_multiple_attributes_with_the_same_name: { code: 17001, category: ts.DiagnosticCategory.Error, key: "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001", message: "JSX elements cannot have multiple attributes with the same name." }, + Expected_corresponding_JSX_closing_tag_for_0: { code: 17002, category: ts.DiagnosticCategory.Error, key: "Expected_corresponding_JSX_closing_tag_for_0_17002", message: "Expected corresponding JSX closing tag for '{0}'." }, + JSX_attribute_expected: { code: 17003, category: ts.DiagnosticCategory.Error, key: "JSX_attribute_expected_17003", message: "JSX attribute expected." }, + Cannot_use_JSX_unless_the_jsx_flag_is_provided: { code: 17004, category: ts.DiagnosticCategory.Error, key: "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004", message: "Cannot use JSX unless the '--jsx' flag is provided." }, + A_constructor_cannot_contain_a_super_call_when_its_class_extends_null: { code: 17005, category: ts.DiagnosticCategory.Error, key: "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005", message: "A constructor cannot contain a 'super' call when its class extends 'null'" }, + An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: { code: 17006, category: ts.DiagnosticCategory.Error, key: "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006", message: "An unary expression with the '{0}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses." }, + A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: { code: 17007, category: ts.DiagnosticCategory.Error, key: "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007", message: "A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses." }, + JSX_element_0_has_no_corresponding_closing_tag: { code: 17008, category: ts.DiagnosticCategory.Error, key: "JSX_element_0_has_no_corresponding_closing_tag_17008", message: "JSX element '{0}' has no corresponding closing tag." }, + super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class: { code: 17009, category: ts.DiagnosticCategory.Error, key: "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009", message: "'super' must be called before accessing 'this' in the constructor of a derived class." }, + Unknown_typing_option_0: { code: 17010, category: ts.DiagnosticCategory.Error, key: "Unknown_typing_option_0_17010", message: "Unknown typing option '{0}'." } + }; +})(ts || (ts = {})); +var ts; +(function (ts) { + function tokenIsIdentifierOrKeyword(token) { + return token >= 69; + } + ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword; + var textToToken = { + "abstract": 115, + "any": 117, + "as": 116, + "boolean": 120, + "break": 70, + "case": 71, + "catch": 72, + "class": 73, + "continue": 75, + "const": 74, + "constructor": 121, + "debugger": 76, + "declare": 122, + "default": 77, + "delete": 78, + "do": 79, + "else": 80, + "enum": 81, + "export": 82, + "extends": 83, + "false": 84, + "finally": 85, + "for": 86, + "from": 136, + "function": 87, + "get": 123, + "if": 88, + "implements": 106, + "import": 89, + "in": 90, + "instanceof": 91, + "interface": 107, + "is": 124, + "let": 108, + "module": 125, + "namespace": 126, + "never": 127, + "new": 92, + "null": 93, + "number": 130, + "package": 109, + "private": 110, + "protected": 111, + "public": 112, + "readonly": 128, + "require": 129, + "global": 137, + "return": 94, + "set": 131, + "static": 113, + "string": 132, + "super": 95, + "switch": 96, + "symbol": 133, + "this": 97, + "throw": 98, + "true": 99, + "try": 100, + "type": 134, + "typeof": 101, + "undefined": 135, + "var": 102, + "void": 103, + "while": 104, + "with": 105, + "yield": 114, + "async": 118, + "await": 119, + "of": 138, + "{": 15, + "}": 16, + "(": 17, + ")": 18, + "[": 19, + "]": 20, + ".": 21, + "...": 22, + ";": 23, + ",": 24, + "<": 25, + ">": 27, + "<=": 28, + ">=": 29, + "==": 30, + "!=": 31, + "===": 32, + "!==": 33, + "=>": 34, + "+": 35, + "-": 36, + "**": 38, + "*": 37, + "/": 39, + "%": 40, + "++": 41, + "--": 42, + "<<": 43, + ">": 44, + ">>>": 45, + "&": 46, + "|": 47, + "^": 48, + "!": 49, + "~": 50, + "&&": 51, + "||": 52, + "?": 53, + ":": 54, + "=": 56, + "+=": 57, + "-=": 58, + "*=": 59, + "**=": 60, + "/=": 61, + "%=": 62, + "<<=": 63, + ">>=": 64, + ">>>=": 65, + "&=": 66, + "|=": 67, + "^=": 68, + "@": 55 + }; + var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,]; + function lookupInUnicodeMap(code, map) { + if (code < map[0]) { + return false; + } + var lo = 0; + var hi = map.length; + var mid; + while (lo + 1 < hi) { + mid = lo + (hi - lo) / 2; + mid -= mid % 2; + if (map[mid] <= code && code <= map[mid + 1]) { + return true; + } + if (code < map[mid]) { + hi = mid; + } + else { + lo = mid + 2; + } + } + return false; + } + function isUnicodeIdentifierStart(code, languageVersion) { + return languageVersion >= 1 ? + lookupInUnicodeMap(code, unicodeES5IdentifierStart) : + lookupInUnicodeMap(code, unicodeES3IdentifierStart); + } + ts.isUnicodeIdentifierStart = isUnicodeIdentifierStart; + function isUnicodeIdentifierPart(code, languageVersion) { + return languageVersion >= 1 ? + lookupInUnicodeMap(code, unicodeES5IdentifierPart) : + lookupInUnicodeMap(code, unicodeES3IdentifierPart); + } + function makeReverseMap(source) { + var result = []; + for (var name_4 in source) { + if (source.hasOwnProperty(name_4)) { + result[source[name_4]] = name_4; + } + } + return result; + } + var tokenStrings = makeReverseMap(textToToken); + function tokenToString(t) { + return tokenStrings[t]; + } + ts.tokenToString = tokenToString; + function stringToToken(s) { + return textToToken[s]; + } + ts.stringToToken = stringToToken; + function computeLineStarts(text) { + var result = new Array(); + var pos = 0; + var lineStart = 0; + while (pos < text.length) { + var ch = text.charCodeAt(pos); + pos++; + switch (ch) { + case 13: + if (text.charCodeAt(pos) === 10) { + pos++; + } + case 10: + result.push(lineStart); + lineStart = pos; + break; + default: + if (ch > 127 && isLineBreak(ch)) { + result.push(lineStart); + lineStart = pos; + } + break; + } + } + result.push(lineStart); + return result; + } + ts.computeLineStarts = computeLineStarts; + function getPositionOfLineAndCharacter(sourceFile, line, character) { + return computePositionOfLineAndCharacter(getLineStarts(sourceFile), line, character); + } + ts.getPositionOfLineAndCharacter = getPositionOfLineAndCharacter; + function computePositionOfLineAndCharacter(lineStarts, line, character) { + ts.Debug.assert(line >= 0 && line < lineStarts.length); + return lineStarts[line] + character; + } + ts.computePositionOfLineAndCharacter = computePositionOfLineAndCharacter; + function getLineStarts(sourceFile) { + return sourceFile.lineMap || (sourceFile.lineMap = computeLineStarts(sourceFile.text)); + } + ts.getLineStarts = getLineStarts; + function computeLineAndCharacterOfPosition(lineStarts, position) { + var lineNumber = ts.binarySearch(lineStarts, position); + if (lineNumber < 0) { + lineNumber = ~lineNumber - 1; + ts.Debug.assert(lineNumber !== -1, "position cannot precede the beginning of the file"); + } + return { + line: lineNumber, + character: position - lineStarts[lineNumber] + }; + } + ts.computeLineAndCharacterOfPosition = computeLineAndCharacterOfPosition; + function getLineAndCharacterOfPosition(sourceFile, position) { + return computeLineAndCharacterOfPosition(getLineStarts(sourceFile), position); + } + ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition; + var hasOwnProperty = Object.prototype.hasOwnProperty; + function isWhiteSpace(ch) { + return ch === 32 || + ch === 9 || + ch === 11 || + ch === 12 || + ch === 160 || + ch === 133 || + ch === 5760 || + ch >= 8192 && ch <= 8203 || + ch === 8239 || + ch === 8287 || + ch === 12288 || + ch === 65279; + } + ts.isWhiteSpace = isWhiteSpace; + function isLineBreak(ch) { + return ch === 10 || + ch === 13 || + ch === 8232 || + ch === 8233; + } + ts.isLineBreak = isLineBreak; + function isDigit(ch) { + return ch >= 48 && ch <= 57; + } + function isOctalDigit(ch) { + return ch >= 48 && ch <= 55; + } + ts.isOctalDigit = isOctalDigit; + function couldStartTrivia(text, pos) { + var ch = text.charCodeAt(pos); + switch (ch) { + case 13: + case 10: + case 9: + case 11: + case 12: + case 32: + case 47: + case 60: + case 61: + case 62: + return true; + case 35: + return pos === 0; + default: + return ch > 127; + } + } + ts.couldStartTrivia = couldStartTrivia; + function skipTrivia(text, pos, stopAfterLineBreak) { + if (!(pos >= 0)) { + return pos; + } + while (true) { + var ch = text.charCodeAt(pos); + switch (ch) { + case 13: + if (text.charCodeAt(pos + 1) === 10) { + pos++; + } + case 10: + pos++; + if (stopAfterLineBreak) { + return pos; + } + continue; + case 9: + case 11: + case 12: + case 32: + pos++; + continue; + case 47: + if (text.charCodeAt(pos + 1) === 47) { + pos += 2; + while (pos < text.length) { + if (isLineBreak(text.charCodeAt(pos))) { + break; + } + pos++; + } + continue; + } + if (text.charCodeAt(pos + 1) === 42) { + pos += 2; + while (pos < text.length) { + if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) { + pos += 2; + break; + } + pos++; + } + continue; + } + break; + case 60: + case 61: + case 62: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos); + continue; + } + break; + case 35: + if (pos === 0 && isShebangTrivia(text, pos)) { + pos = scanShebangTrivia(text, pos); + continue; + } + break; + default: + if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) { + pos++; + continue; + } + break; + } + return pos; + } + } + ts.skipTrivia = skipTrivia; + var mergeConflictMarkerLength = "<<<<<<<".length; + function isConflictMarkerTrivia(text, pos) { + ts.Debug.assert(pos >= 0); + if (pos === 0 || isLineBreak(text.charCodeAt(pos - 1))) { + var ch = text.charCodeAt(pos); + if ((pos + mergeConflictMarkerLength) < text.length) { + for (var i = 0, n = mergeConflictMarkerLength; i < n; i++) { + if (text.charCodeAt(pos + i) !== ch) { + return false; + } + } + return ch === 61 || + text.charCodeAt(pos + mergeConflictMarkerLength) === 32; + } + } + return false; + } + function scanConflictMarkerTrivia(text, pos, error) { + if (error) { + error(ts.Diagnostics.Merge_conflict_marker_encountered, mergeConflictMarkerLength); + } + var ch = text.charCodeAt(pos); + var len = text.length; + if (ch === 60 || ch === 62) { + while (pos < len && !isLineBreak(text.charCodeAt(pos))) { + pos++; + } + } + else { + ts.Debug.assert(ch === 61); + while (pos < len) { + var ch_1 = text.charCodeAt(pos); + if (ch_1 === 62 && isConflictMarkerTrivia(text, pos)) { + break; + } + pos++; + } + } + return pos; + } + var shebangTriviaRegex = /^#!.*/; + function isShebangTrivia(text, pos) { + ts.Debug.assert(pos === 0); + return shebangTriviaRegex.test(text); + } + function scanShebangTrivia(text, pos) { + var shebang = shebangTriviaRegex.exec(text)[0]; + pos = pos + shebang.length; + return pos; + } + function getCommentRanges(text, pos, trailing) { + var result; + var collecting = trailing || pos === 0; + while (pos < text.length) { + var ch = text.charCodeAt(pos); + switch (ch) { + case 13: + if (text.charCodeAt(pos + 1) === 10) { + pos++; + } + case 10: + pos++; + if (trailing) { + return result; + } + collecting = true; + if (result && result.length) { + ts.lastOrUndefined(result).hasTrailingNewLine = true; + } + continue; + case 9: + case 11: + case 12: + case 32: + pos++; + continue; + case 47: + var nextChar = text.charCodeAt(pos + 1); + var hasTrailingNewLine = false; + if (nextChar === 47 || nextChar === 42) { + var kind = nextChar === 47 ? 2 : 3; + var startPos = pos; + pos += 2; + if (nextChar === 47) { + while (pos < text.length) { + if (isLineBreak(text.charCodeAt(pos))) { + hasTrailingNewLine = true; + break; + } + pos++; + } + } + else { + while (pos < text.length) { + if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) { + pos += 2; + break; + } + pos++; + } + } + if (collecting) { + if (!result) { + result = []; + } + result.push({ pos: startPos, end: pos, hasTrailingNewLine: hasTrailingNewLine, kind: kind }); + } + continue; + } + break; + default: + if (ch > 127 && (isWhiteSpace(ch) || isLineBreak(ch))) { + if (result && result.length && isLineBreak(ch)) { + ts.lastOrUndefined(result).hasTrailingNewLine = true; + } + pos++; + continue; + } + break; + } + return result; + } + return result; + } + function getLeadingCommentRanges(text, pos) { + return getCommentRanges(text, pos, false); + } + ts.getLeadingCommentRanges = getLeadingCommentRanges; + function getTrailingCommentRanges(text, pos) { + return getCommentRanges(text, pos, true); + } + ts.getTrailingCommentRanges = getTrailingCommentRanges; + function getShebang(text) { + return shebangTriviaRegex.test(text) + ? shebangTriviaRegex.exec(text)[0] + : undefined; + } + ts.getShebang = getShebang; + function isIdentifierStart(ch, languageVersion) { + return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || + ch === 36 || ch === 95 || + ch > 127 && isUnicodeIdentifierStart(ch, languageVersion); + } + ts.isIdentifierStart = isIdentifierStart; + function isIdentifierPart(ch, languageVersion) { + return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || + ch >= 48 && ch <= 57 || ch === 36 || ch === 95 || + ch > 127 && isUnicodeIdentifierPart(ch, languageVersion); + } + ts.isIdentifierPart = isIdentifierPart; + function isIdentifier(name, languageVersion) { + if (!isIdentifierStart(name.charCodeAt(0), languageVersion)) { + return false; + } + for (var i = 1, n = name.length; i < n; i++) { + if (!isIdentifierPart(name.charCodeAt(i), languageVersion)) { + return false; + } + } + return true; + } + ts.isIdentifier = isIdentifier; + function createScanner(languageVersion, skipTrivia, languageVariant, text, onError, start, length) { + if (languageVariant === void 0) { languageVariant = 0; } + var pos; + var end; + var startPos; + var tokenPos; + var token; + var tokenValue; + var precedingLineBreak; + var hasExtendedUnicodeEscape; + var tokenIsUnterminated; + setText(text, start, length); + return { + getStartPos: function () { return startPos; }, + getTextPos: function () { return pos; }, + getToken: function () { return token; }, + getTokenPos: function () { return tokenPos; }, + getTokenText: function () { return text.substring(tokenPos, pos); }, + getTokenValue: function () { return tokenValue; }, + hasExtendedUnicodeEscape: function () { return hasExtendedUnicodeEscape; }, + hasPrecedingLineBreak: function () { return precedingLineBreak; }, + isIdentifier: function () { return token === 69 || token > 105; }, + isReservedWord: function () { return token >= 70 && token <= 105; }, + isUnterminated: function () { return tokenIsUnterminated; }, + reScanGreaterToken: reScanGreaterToken, + reScanSlashToken: reScanSlashToken, + reScanTemplateToken: reScanTemplateToken, + scanJsxIdentifier: scanJsxIdentifier, + reScanJsxToken: reScanJsxToken, + scanJsxToken: scanJsxToken, + scanJSDocToken: scanJSDocToken, + scan: scan, + setText: setText, + setScriptTarget: setScriptTarget, + setLanguageVariant: setLanguageVariant, + setOnError: setOnError, + setTextPos: setTextPos, + tryScan: tryScan, + lookAhead: lookAhead, + scanRange: scanRange + }; + function error(message, length) { + if (onError) { + onError(message, length || 0); + } + } + function scanNumber() { + var start = pos; + while (isDigit(text.charCodeAt(pos))) + pos++; + if (text.charCodeAt(pos) === 46) { + pos++; + while (isDigit(text.charCodeAt(pos))) + pos++; + } + var end = pos; + if (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101) { + pos++; + if (text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45) + pos++; + if (isDigit(text.charCodeAt(pos))) { + pos++; + while (isDigit(text.charCodeAt(pos))) + pos++; + end = pos; + } + else { + error(ts.Diagnostics.Digit_expected); + } + } + return "" + +(text.substring(start, end)); + } + function scanOctalDigits() { + var start = pos; + while (isOctalDigit(text.charCodeAt(pos))) { + pos++; + } + return +(text.substring(start, pos)); + } + function scanExactNumberOfHexDigits(count) { + return scanHexDigits(count, false); + } + function scanMinimumNumberOfHexDigits(count) { + return scanHexDigits(count, true); + } + function scanHexDigits(minCount, scanAsManyAsPossible) { + var digits = 0; + var value = 0; + while (digits < minCount || scanAsManyAsPossible) { + var ch = text.charCodeAt(pos); + if (ch >= 48 && ch <= 57) { + value = value * 16 + ch - 48; + } + else if (ch >= 65 && ch <= 70) { + value = value * 16 + ch - 65 + 10; + } + else if (ch >= 97 && ch <= 102) { + value = value * 16 + ch - 97 + 10; + } + else { + break; + } + pos++; + digits++; + } + if (digits < minCount) { + value = -1; + } + return value; + } + function scanString() { + var quote = text.charCodeAt(pos); + pos++; + var result = ""; + var start = pos; + while (true) { + if (pos >= end) { + result += text.substring(start, pos); + tokenIsUnterminated = true; + error(ts.Diagnostics.Unterminated_string_literal); + break; + } + var ch = text.charCodeAt(pos); + if (ch === quote) { + result += text.substring(start, pos); + pos++; + break; + } + if (ch === 92) { + result += text.substring(start, pos); + result += scanEscapeSequence(); + start = pos; + continue; + } + if (isLineBreak(ch)) { + result += text.substring(start, pos); + tokenIsUnterminated = true; + error(ts.Diagnostics.Unterminated_string_literal); + break; + } + pos++; + } + return result; + } + function scanTemplateAndSetTokenValue() { + var startedWithBacktick = text.charCodeAt(pos) === 96; + pos++; + var start = pos; + var contents = ""; + var resultingToken; + while (true) { + if (pos >= end) { + contents += text.substring(start, pos); + tokenIsUnterminated = true; + error(ts.Diagnostics.Unterminated_template_literal); + resultingToken = startedWithBacktick ? 11 : 14; + break; + } + var currChar = text.charCodeAt(pos); + if (currChar === 96) { + contents += text.substring(start, pos); + pos++; + resultingToken = startedWithBacktick ? 11 : 14; + break; + } + if (currChar === 36 && pos + 1 < end && text.charCodeAt(pos + 1) === 123) { + contents += text.substring(start, pos); + pos += 2; + resultingToken = startedWithBacktick ? 12 : 13; + break; + } + if (currChar === 92) { + contents += text.substring(start, pos); + contents += scanEscapeSequence(); + start = pos; + continue; + } + if (currChar === 13) { + contents += text.substring(start, pos); + pos++; + if (pos < end && text.charCodeAt(pos) === 10) { + pos++; + } + contents += "\n"; + start = pos; + continue; + } + pos++; + } + ts.Debug.assert(resultingToken !== undefined); + tokenValue = contents; + return resultingToken; + } + function scanEscapeSequence() { + pos++; + if (pos >= end) { + error(ts.Diagnostics.Unexpected_end_of_text); + return ""; + } + var ch = text.charCodeAt(pos); + pos++; + switch (ch) { + case 48: + return "\0"; + case 98: + return "\b"; + case 116: + return "\t"; + case 110: + return "\n"; + case 118: + return "\v"; + case 102: + return "\f"; + case 114: + return "\r"; + case 39: + return "\'"; + case 34: + return "\""; + case 117: + if (pos < end && text.charCodeAt(pos) === 123) { + hasExtendedUnicodeEscape = true; + pos++; + return scanExtendedUnicodeEscape(); + } + return scanHexadecimalEscape(4); + case 120: + return scanHexadecimalEscape(2); + case 13: + if (pos < end && text.charCodeAt(pos) === 10) { + pos++; + } + case 10: + case 8232: + case 8233: + return ""; + default: + return String.fromCharCode(ch); + } + } + function scanHexadecimalEscape(numDigits) { + var escapedValue = scanExactNumberOfHexDigits(numDigits); + if (escapedValue >= 0) { + return String.fromCharCode(escapedValue); + } + else { + error(ts.Diagnostics.Hexadecimal_digit_expected); + return ""; + } + } + function scanExtendedUnicodeEscape() { + var escapedValue = scanMinimumNumberOfHexDigits(1); + var isInvalidExtendedEscape = false; + if (escapedValue < 0) { + error(ts.Diagnostics.Hexadecimal_digit_expected); + isInvalidExtendedEscape = true; + } + else if (escapedValue > 0x10FFFF) { + error(ts.Diagnostics.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive); + isInvalidExtendedEscape = true; + } + if (pos >= end) { + error(ts.Diagnostics.Unexpected_end_of_text); + isInvalidExtendedEscape = true; + } + else if (text.charCodeAt(pos) === 125) { + pos++; + } + else { + error(ts.Diagnostics.Unterminated_Unicode_escape_sequence); + isInvalidExtendedEscape = true; + } + if (isInvalidExtendedEscape) { + return ""; + } + return utf16EncodeAsString(escapedValue); + } + function utf16EncodeAsString(codePoint) { + ts.Debug.assert(0x0 <= codePoint && codePoint <= 0x10FFFF); + if (codePoint <= 65535) { + return String.fromCharCode(codePoint); + } + var codeUnit1 = Math.floor((codePoint - 65536) / 1024) + 0xD800; + var codeUnit2 = ((codePoint - 65536) % 1024) + 0xDC00; + return String.fromCharCode(codeUnit1, codeUnit2); + } + function peekUnicodeEscape() { + if (pos + 5 < end && text.charCodeAt(pos + 1) === 117) { + var start_1 = pos; + pos += 2; + var value = scanExactNumberOfHexDigits(4); + pos = start_1; + return value; + } + return -1; + } + function scanIdentifierParts() { + var result = ""; + var start = pos; + while (pos < end) { + var ch = text.charCodeAt(pos); + if (isIdentifierPart(ch, languageVersion)) { + pos++; + } + else if (ch === 92) { + ch = peekUnicodeEscape(); + if (!(ch >= 0 && isIdentifierPart(ch, languageVersion))) { + break; + } + result += text.substring(start, pos); + result += String.fromCharCode(ch); + pos += 6; + start = pos; + } + else { + break; + } + } + result += text.substring(start, pos); + return result; + } + function getIdentifierToken() { + var len = tokenValue.length; + if (len >= 2 && len <= 11) { + var ch = tokenValue.charCodeAt(0); + if (ch >= 97 && ch <= 122 && hasOwnProperty.call(textToToken, tokenValue)) { + return token = textToToken[tokenValue]; + } + } + return token = 69; + } + function scanBinaryOrOctalDigits(base) { + ts.Debug.assert(base !== 2 || base !== 8, "Expected either base 2 or base 8"); + var value = 0; + var numberOfDigits = 0; + while (true) { + var ch = text.charCodeAt(pos); + var valueOfCh = ch - 48; + if (!isDigit(ch) || valueOfCh >= base) { + break; + } + value = value * base + valueOfCh; + pos++; + numberOfDigits++; + } + if (numberOfDigits === 0) { + return -1; + } + return value; + } + function scan() { + startPos = pos; + hasExtendedUnicodeEscape = false; + precedingLineBreak = false; + tokenIsUnterminated = false; + while (true) { + tokenPos = pos; + if (pos >= end) { + return token = 1; + } + var ch = text.charCodeAt(pos); + if (ch === 35 && pos === 0 && isShebangTrivia(text, pos)) { + pos = scanShebangTrivia(text, pos); + if (skipTrivia) { + continue; + } + else { + return token = 6; + } + } + switch (ch) { + case 10: + case 13: + precedingLineBreak = true; + if (skipTrivia) { + pos++; + continue; + } + else { + if (ch === 13 && pos + 1 < end && text.charCodeAt(pos + 1) === 10) { + pos += 2; + } + else { + pos++; + } + return token = 4; + } + case 9: + case 11: + case 12: + case 32: + if (skipTrivia) { + pos++; + continue; + } + else { + while (pos < end && isWhiteSpace(text.charCodeAt(pos))) { + pos++; + } + return token = 5; + } + case 33: + if (text.charCodeAt(pos + 1) === 61) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 33; + } + return pos += 2, token = 31; + } + pos++; + return token = 49; + case 34: + case 39: + tokenValue = scanString(); + return token = 9; + case 96: + return token = scanTemplateAndSetTokenValue(); + case 37: + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 62; + } + pos++; + return token = 40; + case 38: + if (text.charCodeAt(pos + 1) === 38) { + return pos += 2, token = 51; + } + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 66; + } + pos++; + return token = 46; + case 40: + pos++; + return token = 17; + case 41: + pos++; + return token = 18; + case 42: + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 59; + } + if (text.charCodeAt(pos + 1) === 42) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 60; + } + return pos += 2, token = 38; + } + pos++; + return token = 37; + case 43: + if (text.charCodeAt(pos + 1) === 43) { + return pos += 2, token = 41; + } + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 57; + } + pos++; + return token = 35; + case 44: + pos++; + return token = 24; + case 45: + if (text.charCodeAt(pos + 1) === 45) { + return pos += 2, token = 42; + } + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 58; + } + pos++; + return token = 36; + case 46: + if (isDigit(text.charCodeAt(pos + 1))) { + tokenValue = scanNumber(); + return token = 8; + } + if (text.charCodeAt(pos + 1) === 46 && text.charCodeAt(pos + 2) === 46) { + return pos += 3, token = 22; + } + pos++; + return token = 21; + case 47: + if (text.charCodeAt(pos + 1) === 47) { + pos += 2; + while (pos < end) { + if (isLineBreak(text.charCodeAt(pos))) { + break; + } + pos++; + } + if (skipTrivia) { + continue; + } + else { + return token = 2; + } + } + if (text.charCodeAt(pos + 1) === 42) { + pos += 2; + var commentClosed = false; + while (pos < end) { + var ch_2 = text.charCodeAt(pos); + if (ch_2 === 42 && text.charCodeAt(pos + 1) === 47) { + pos += 2; + commentClosed = true; + break; + } + if (isLineBreak(ch_2)) { + precedingLineBreak = true; + } + pos++; + } + if (!commentClosed) { + error(ts.Diagnostics.Asterisk_Slash_expected); + } + if (skipTrivia) { + continue; + } + else { + tokenIsUnterminated = !commentClosed; + return token = 3; + } + } + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 61; + } + pos++; + return token = 39; + case 48: + if (pos + 2 < end && (text.charCodeAt(pos + 1) === 88 || text.charCodeAt(pos + 1) === 120)) { + pos += 2; + var value = scanMinimumNumberOfHexDigits(1); + if (value < 0) { + error(ts.Diagnostics.Hexadecimal_digit_expected); + value = 0; + } + tokenValue = "" + value; + return token = 8; + } + else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 66 || text.charCodeAt(pos + 1) === 98)) { + pos += 2; + var value = scanBinaryOrOctalDigits(2); + if (value < 0) { + error(ts.Diagnostics.Binary_digit_expected); + value = 0; + } + tokenValue = "" + value; + return token = 8; + } + else if (pos + 2 < end && (text.charCodeAt(pos + 1) === 79 || text.charCodeAt(pos + 1) === 111)) { + pos += 2; + var value = scanBinaryOrOctalDigits(8); + if (value < 0) { + error(ts.Diagnostics.Octal_digit_expected); + value = 0; + } + tokenValue = "" + value; + return token = 8; + } + if (pos + 1 < end && isOctalDigit(text.charCodeAt(pos + 1))) { + tokenValue = "" + scanOctalDigits(); + return token = 8; + } + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + tokenValue = scanNumber(); + return token = 8; + case 58: + pos++; + return token = 54; + case 59: + pos++; + return token = 23; + case 60: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos, error); + if (skipTrivia) { + continue; + } + else { + return token = 7; + } + } + if (text.charCodeAt(pos + 1) === 60) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 63; + } + return pos += 2, token = 43; + } + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 28; + } + if (languageVariant === 1 && + text.charCodeAt(pos + 1) === 47 && + text.charCodeAt(pos + 2) !== 42) { + return pos += 2, token = 26; + } + pos++; + return token = 25; + case 61: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos, error); + if (skipTrivia) { + continue; + } + else { + return token = 7; + } + } + if (text.charCodeAt(pos + 1) === 61) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 32; + } + return pos += 2, token = 30; + } + if (text.charCodeAt(pos + 1) === 62) { + return pos += 2, token = 34; + } + pos++; + return token = 56; + case 62: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos, error); + if (skipTrivia) { + continue; + } + else { + return token = 7; + } + } + pos++; + return token = 27; + case 63: + pos++; + return token = 53; + case 91: + pos++; + return token = 19; + case 93: + pos++; + return token = 20; + case 94: + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 68; + } + pos++; + return token = 48; + case 123: + pos++; + return token = 15; + case 124: + if (text.charCodeAt(pos + 1) === 124) { + return pos += 2, token = 52; + } + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 67; + } + pos++; + return token = 47; + case 125: + pos++; + return token = 16; + case 126: + pos++; + return token = 50; + case 64: + pos++; + return token = 55; + case 92: + var cookedChar = peekUnicodeEscape(); + if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) { + pos += 6; + tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts(); + return token = getIdentifierToken(); + } + error(ts.Diagnostics.Invalid_character); + pos++; + return token = 0; + default: + if (isIdentifierStart(ch, languageVersion)) { + pos++; + while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos), languageVersion)) + pos++; + tokenValue = text.substring(tokenPos, pos); + if (ch === 92) { + tokenValue += scanIdentifierParts(); + } + return token = getIdentifierToken(); + } + else if (isWhiteSpace(ch)) { + pos++; + continue; + } + else if (isLineBreak(ch)) { + precedingLineBreak = true; + pos++; + continue; + } + error(ts.Diagnostics.Invalid_character); + pos++; + return token = 0; + } + } + } + function reScanGreaterToken() { + if (token === 27) { + if (text.charCodeAt(pos) === 62) { + if (text.charCodeAt(pos + 1) === 62) { + if (text.charCodeAt(pos + 2) === 61) { + return pos += 3, token = 65; + } + return pos += 2, token = 45; + } + if (text.charCodeAt(pos + 1) === 61) { + return pos += 2, token = 64; + } + pos++; + return token = 44; + } + if (text.charCodeAt(pos) === 61) { + pos++; + return token = 29; + } + } + return token; + } + function reScanSlashToken() { + if (token === 39 || token === 61) { + var p = tokenPos + 1; + var inEscape = false; + var inCharacterClass = false; + while (true) { + if (p >= end) { + tokenIsUnterminated = true; + error(ts.Diagnostics.Unterminated_regular_expression_literal); + break; + } + var ch = text.charCodeAt(p); + if (isLineBreak(ch)) { + tokenIsUnterminated = true; + error(ts.Diagnostics.Unterminated_regular_expression_literal); + break; + } + if (inEscape) { + inEscape = false; + } + else if (ch === 47 && !inCharacterClass) { + p++; + break; + } + else if (ch === 91) { + inCharacterClass = true; + } + else if (ch === 92) { + inEscape = true; + } + else if (ch === 93) { + inCharacterClass = false; + } + p++; + } + while (p < end && isIdentifierPart(text.charCodeAt(p), languageVersion)) { + p++; + } + pos = p; + tokenValue = text.substring(tokenPos, pos); + token = 10; + } + return token; + } + function reScanTemplateToken() { + ts.Debug.assert(token === 16, "'reScanTemplateToken' should only be called on a '}'"); + pos = tokenPos; + return token = scanTemplateAndSetTokenValue(); + } + function reScanJsxToken() { + pos = tokenPos = startPos; + return token = scanJsxToken(); + } + function scanJsxToken() { + startPos = tokenPos = pos; + if (pos >= end) { + return token = 1; + } + var char = text.charCodeAt(pos); + if (char === 60) { + if (text.charCodeAt(pos + 1) === 47) { + pos += 2; + return token = 26; + } + pos++; + return token = 25; + } + if (char === 123) { + pos++; + return token = 15; + } + while (pos < end) { + pos++; + char = text.charCodeAt(pos); + if ((char === 123) || (char === 60)) { + break; + } + } + return token = 244; + } + function scanJsxIdentifier() { + if (tokenIsIdentifierOrKeyword(token)) { + var firstCharPosition = pos; + while (pos < end) { + var ch = text.charCodeAt(pos); + if (ch === 45 || ((firstCharPosition === pos) ? isIdentifierStart(ch, languageVersion) : isIdentifierPart(ch, languageVersion))) { + pos++; + } + else { + break; + } + } + tokenValue += text.substr(firstCharPosition, pos - firstCharPosition); + } + return token; + } + function scanJSDocToken() { + if (pos >= end) { + return token = 1; + } + startPos = pos; + var ch = text.charCodeAt(pos); + while (pos < end) { + ch = text.charCodeAt(pos); + if (isWhiteSpace(ch)) { + pos++; + } + else { + break; + } + } + tokenPos = pos; + switch (ch) { + case 64: + return pos += 1, token = 55; + case 10: + case 13: + return pos += 1, token = 4; + case 42: + return pos += 1, token = 37; + case 123: + return pos += 1, token = 15; + case 125: + return pos += 1, token = 16; + case 91: + return pos += 1, token = 19; + case 93: + return pos += 1, token = 20; + case 61: + return pos += 1, token = 56; + case 44: + return pos += 1, token = 24; + } + if (isIdentifierStart(ch, 2)) { + pos++; + while (isIdentifierPart(text.charCodeAt(pos), 2) && pos < end) { + pos++; + } + return token = 69; + } + else { + return pos += 1, token = 0; + } + } + function speculationHelper(callback, isLookahead) { + var savePos = pos; + var saveStartPos = startPos; + var saveTokenPos = tokenPos; + var saveToken = token; + var saveTokenValue = tokenValue; + var savePrecedingLineBreak = precedingLineBreak; + var result = callback(); + if (!result || isLookahead) { + pos = savePos; + startPos = saveStartPos; + tokenPos = saveTokenPos; + token = saveToken; + tokenValue = saveTokenValue; + precedingLineBreak = savePrecedingLineBreak; + } + return result; + } + function scanRange(start, length, callback) { + var saveEnd = end; + var savePos = pos; + var saveStartPos = startPos; + var saveTokenPos = tokenPos; + var saveToken = token; + var savePrecedingLineBreak = precedingLineBreak; + var saveTokenValue = tokenValue; + var saveHasExtendedUnicodeEscape = hasExtendedUnicodeEscape; + var saveTokenIsUnterminated = tokenIsUnterminated; + setText(text, start, length); + var result = callback(); + end = saveEnd; + pos = savePos; + startPos = saveStartPos; + tokenPos = saveTokenPos; + token = saveToken; + precedingLineBreak = savePrecedingLineBreak; + tokenValue = saveTokenValue; + hasExtendedUnicodeEscape = saveHasExtendedUnicodeEscape; + tokenIsUnterminated = saveTokenIsUnterminated; + return result; + } + function lookAhead(callback) { + return speculationHelper(callback, true); + } + function tryScan(callback) { + return speculationHelper(callback, false); + } + function setText(newText, start, length) { + text = newText || ""; + end = length === undefined ? text.length : start + length; + setTextPos(start || 0); + } + function setOnError(errorCallback) { + onError = errorCallback; + } + function setScriptTarget(scriptTarget) { + languageVersion = scriptTarget; + } + function setLanguageVariant(variant) { + languageVariant = variant; + } + function setTextPos(textPos) { + ts.Debug.assert(textPos >= 0); + pos = textPos; + startPos = textPos; + tokenPos = textPos; + token = 0; + precedingLineBreak = false; + tokenValue = undefined; + hasExtendedUnicodeEscape = false; + tokenIsUnterminated = false; + } + } + ts.createScanner = createScanner; +})(ts || (ts = {})); +var ts; +(function (ts) { + ts.optionDeclarations = [ + { + name: "charset", + type: "string" + }, + { + name: "declaration", + shortName: "d", + type: "boolean", + description: ts.Diagnostics.Generates_corresponding_d_ts_file + }, + { + name: "declarationDir", + type: "string", + isFilePath: true, + paramType: ts.Diagnostics.DIRECTORY + }, + { + name: "diagnostics", + type: "boolean" + }, + { + name: "emitBOM", + type: "boolean" + }, + { + name: "help", + shortName: "h", + type: "boolean", + description: ts.Diagnostics.Print_this_message + }, + { + name: "init", + type: "boolean", + description: ts.Diagnostics.Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file + }, + { + name: "inlineSourceMap", + type: "boolean" + }, + { + name: "inlineSources", + type: "boolean" + }, + { + name: "jsx", + type: { + "preserve": 1, + "react": 2 + }, + paramType: ts.Diagnostics.KIND, + description: ts.Diagnostics.Specify_JSX_code_generation_Colon_preserve_or_react + }, + { + name: "reactNamespace", + type: "string", + description: ts.Diagnostics.Specify_the_object_invoked_for_createElement_and_spread_when_targeting_react_JSX_emit + }, + { + name: "listFiles", + type: "boolean" + }, + { + name: "locale", + type: "string" + }, + { + name: "mapRoot", + type: "string", + isFilePath: true, + description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations, + paramType: ts.Diagnostics.LOCATION + }, + { + name: "module", + shortName: "m", + type: { + "none": ts.ModuleKind.None, + "commonjs": ts.ModuleKind.CommonJS, + "amd": ts.ModuleKind.AMD, + "system": ts.ModuleKind.System, + "umd": ts.ModuleKind.UMD, + "es6": ts.ModuleKind.ES6, + "es2015": ts.ModuleKind.ES2015 + }, + description: ts.Diagnostics.Specify_module_code_generation_Colon_commonjs_amd_system_umd_or_es2015, + paramType: ts.Diagnostics.KIND + }, + { + name: "newLine", + type: { + "crlf": 0, + "lf": 1 + }, + description: ts.Diagnostics.Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix, + paramType: ts.Diagnostics.NEWLINE + }, + { + name: "noEmit", + type: "boolean", + description: ts.Diagnostics.Do_not_emit_outputs + }, + { + name: "noEmitHelpers", + type: "boolean" + }, + { + name: "noEmitOnError", + type: "boolean", + description: ts.Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported + }, + { + name: "noImplicitAny", + type: "boolean", + description: ts.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type + }, + { + name: "noImplicitThis", + type: "boolean", + description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type + }, + { + name: "noLib", + type: "boolean" + }, + { + name: "noResolve", + type: "boolean" + }, + { + name: "skipDefaultLibCheck", + type: "boolean" + }, + { + name: "out", + type: "string", + isFilePath: false, + paramType: ts.Diagnostics.FILE + }, + { + name: "outFile", + type: "string", + isFilePath: true, + description: ts.Diagnostics.Concatenate_and_emit_output_to_single_file, + paramType: ts.Diagnostics.FILE + }, + { + name: "outDir", + type: "string", + isFilePath: true, + description: ts.Diagnostics.Redirect_output_structure_to_the_directory, + paramType: ts.Diagnostics.DIRECTORY + }, + { + name: "preserveConstEnums", + type: "boolean", + description: ts.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code + }, + { + name: "pretty", + description: ts.Diagnostics.Stylize_errors_and_messages_using_color_and_context_experimental, + type: "boolean" + }, + { + name: "project", + shortName: "p", + type: "string", + isFilePath: true, + description: ts.Diagnostics.Compile_the_project_in_the_given_directory, + paramType: ts.Diagnostics.DIRECTORY + }, + { + name: "removeComments", + type: "boolean", + description: ts.Diagnostics.Do_not_emit_comments_to_output + }, + { + name: "rootDir", + type: "string", + isFilePath: true, + paramType: ts.Diagnostics.LOCATION, + description: ts.Diagnostics.Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir + }, + { + name: "isolatedModules", + type: "boolean" + }, + { + name: "sourceMap", + type: "boolean", + description: ts.Diagnostics.Generates_corresponding_map_file + }, + { + name: "sourceRoot", + type: "string", + isFilePath: true, + description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations, + paramType: ts.Diagnostics.LOCATION + }, + { + name: "suppressExcessPropertyErrors", + type: "boolean", + description: ts.Diagnostics.Suppress_excess_property_checks_for_object_literals, + experimental: true + }, + { + name: "suppressImplicitAnyIndexErrors", + type: "boolean", + description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures + }, + { + name: "stripInternal", + type: "boolean", + description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation, + experimental: true + }, + { + name: "target", + shortName: "t", + type: { + "es3": 0, + "es5": 1, + "es6": 2, + "es2015": 2 + }, + description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_or_ES2015, + paramType: ts.Diagnostics.VERSION + }, + { + name: "version", + shortName: "v", + type: "boolean", + description: ts.Diagnostics.Print_the_compiler_s_version + }, + { + name: "watch", + shortName: "w", + type: "boolean", + description: ts.Diagnostics.Watch_input_files + }, + { + name: "experimentalDecorators", + type: "boolean", + description: ts.Diagnostics.Enables_experimental_support_for_ES7_decorators + }, + { + name: "emitDecoratorMetadata", + type: "boolean", + experimental: true, + description: ts.Diagnostics.Enables_experimental_support_for_emitting_type_metadata_for_decorators + }, + { + name: "moduleResolution", + type: { + "node": ts.ModuleResolutionKind.NodeJs, + "classic": ts.ModuleResolutionKind.Classic + }, + description: ts.Diagnostics.Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6 + }, + { + name: "allowUnusedLabels", + type: "boolean", + description: ts.Diagnostics.Do_not_report_errors_on_unused_labels + }, + { + name: "noImplicitReturns", + type: "boolean", + description: ts.Diagnostics.Report_error_when_not_all_code_paths_in_function_return_a_value + }, + { + name: "noFallthroughCasesInSwitch", + type: "boolean", + description: ts.Diagnostics.Report_errors_for_fallthrough_cases_in_switch_statement + }, + { + name: "allowUnreachableCode", + type: "boolean", + description: ts.Diagnostics.Do_not_report_errors_on_unreachable_code + }, + { + name: "forceConsistentCasingInFileNames", + type: "boolean", + description: ts.Diagnostics.Disallow_inconsistently_cased_references_to_the_same_file + }, + { + name: "baseUrl", + type: "string", + isFilePath: true, + description: ts.Diagnostics.Base_directory_to_resolve_non_absolute_module_names + }, + { + name: "paths", + type: "object", + isTSConfigOnly: true + }, + { + name: "rootDirs", + type: "list", + isTSConfigOnly: true, + element: { + name: "rootDirs", + type: "string", + isFilePath: true + } + }, + { + name: "typesSearchPaths", + type: "list", + isTSConfigOnly: true, + element: { + name: "typesSearchPaths", + type: "string", + isFilePath: true + } + }, + { + name: "typesRoot", + type: "string" + }, + { + name: "types", + type: "list", + element: { + name: "types", + type: "string" + }, + description: ts.Diagnostics.Type_declaration_files_to_be_included_in_compilation + }, + { + name: "traceResolution", + type: "boolean", + description: ts.Diagnostics.Enable_tracing_of_the_name_resolution_process + }, + { + name: "allowJs", + type: "boolean", + description: ts.Diagnostics.Allow_javascript_files_to_be_compiled + }, + { + name: "allowSyntheticDefaultImports", + type: "boolean", + description: ts.Diagnostics.Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking + }, + { + name: "noImplicitUseStrict", + type: "boolean", + description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output + }, + { + name: "listEmittedFiles", + type: "boolean" + }, + { + name: "lib", + type: "list", + element: { + name: "lib", + type: { + "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", + "dom": "lib.dom.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" + } + }, + description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon + }, + { + name: "strictNullChecks", + type: "boolean", + description: ts.Diagnostics.Enable_strict_null_checks + } + ]; + ts.typingOptionDeclarations = [ + { + name: "enableAutoDiscovery", + type: "boolean" + }, + { + name: "include", + type: "list", + element: { + name: "include", + type: "string" + } + }, + { + name: "exclude", + type: "list", + element: { + name: "exclude", + type: "string" + } + } + ]; + var optionNameMapCache; + function getOptionNameMap() { + if (optionNameMapCache) { + return optionNameMapCache; + } + var optionNameMap = {}; + var shortOptionNames = {}; + ts.forEach(ts.optionDeclarations, function (option) { + optionNameMap[option.name.toLowerCase()] = option; + if (option.shortName) { + shortOptionNames[option.shortName] = option.name; + } + }); + optionNameMapCache = { optionNameMap: optionNameMap, shortOptionNames: shortOptionNames }; + return optionNameMapCache; + } + ts.getOptionNameMap = getOptionNameMap; + function createCompilerDiagnosticForInvalidCustomType(opt) { + var namesOfType = []; + ts.forEachKey(opt.type, function (key) { + namesOfType.push(" '" + key + "'"); + }); + return ts.createCompilerDiagnostic(ts.Diagnostics.Argument_for_0_option_must_be_Colon_1, "--" + opt.name, namesOfType); + } + ts.createCompilerDiagnosticForInvalidCustomType = createCompilerDiagnosticForInvalidCustomType; + function parseCustomTypeOption(opt, value, errors) { + var key = trimString((value || "")).toLowerCase(); + var map = opt.type; + if (ts.hasProperty(map, key)) { + return map[key]; + } + else { + errors.push(createCompilerDiagnosticForInvalidCustomType(opt)); + } + } + ts.parseCustomTypeOption = parseCustomTypeOption; + function parseListTypeOption(opt, value, errors) { + var values = trimString((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 = []; + var _a = getOptionNameMap(), optionNameMap = _a.optionNameMap, shortOptionNames = _a.shortOptionNames; + 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) { + s = s.slice(s.charCodeAt(1) === 45 ? 2 : 1).toLowerCase(); + if (ts.hasProperty(shortOptionNames, s)) { + s = shortOptionNames[s]; + } + if (ts.hasProperty(optionNameMap, s)) { + var opt = optionNameMap[s]; + 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": + options[opt.name] = true; + break; + case "string": + options[opt.name] = args[i] || ""; + i++; + break; + case "list": + options[opt.name] = parseListTypeOption(opt, args[i], errors); + 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 readConfigFile(fileName, readFile) { + var text = ""; + try { + text = readFile(fileName); + } + catch (e) { + return { error: ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, e.message) }; + } + return parseConfigFileTextToJson(fileName, text); + } + ts.readConfigFile = readConfigFile; + function parseConfigFileTextToJson(fileName, jsonText) { + try { + var jsonTextWithoutComments = removeComments(jsonText); + return { config: /\S/.test(jsonTextWithoutComments) ? JSON.parse(jsonTextWithoutComments) : {} }; + } + catch (e) { + return { error: ts.createCompilerDiagnostic(ts.Diagnostics.Failed_to_parse_file_0_Colon_1, fileName, e.message) }; + } + } + ts.parseConfigFileTextToJson = parseConfigFileTextToJson; + function removeComments(jsonText) { + var output = ""; + var scanner = ts.createScanner(1, false, 0, jsonText); + var token; + while ((token = scanner.scan()) !== 1) { + switch (token) { + case 2: + case 3: + output += scanner.getTokenText().replace(/\S/g, " "); + break; + default: + output += scanner.getTokenText(); + break; + } + } + return output; + } + var IgnoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; + function parseJsonConfigFileContent(json, host, basePath, existingOptions, configFileName) { + if (existingOptions === void 0) { existingOptions = {}; } + var errors = []; + var compilerOptions = convertCompilerOptionsFromJsonWorker(json["compilerOptions"], basePath, errors, configFileName); + var options = ts.extend(existingOptions, compilerOptions); + var typingOptions = convertTypingOptionsFromJsonWorker(json["typingOptions"], basePath, errors, configFileName); + options.configFilePath = configFileName; + var fileNames = getFileNames(errors); + return { + options: options, + fileNames: fileNames, + typingOptions: typingOptions, + raw: json, + errors: errors + }; + function getFileNames(errors) { + var fileNames = []; + if (ts.hasProperty(json, "files")) { + if (ts.isArray(json["files"])) { + fileNames = ts.map(json["files"], function (s) { return ts.combinePaths(basePath, s); }); + } + else { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "files", "Array")); + } + } + else { + var filesSeen = {}; + var exclude = []; + if (ts.isArray(json["exclude"])) { + exclude = json["exclude"]; + } + else { + exclude = ["node_modules", "bower_components", "jspm_packages"]; + } + var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + exclude.push(outDir); + } + exclude = ts.map(exclude, ts.normalizeSlashes); + var supportedExtensions = ts.getSupportedExtensions(options); + ts.Debug.assert(ts.indexOf(supportedExtensions, ".ts") < ts.indexOf(supportedExtensions, ".d.ts"), "Changed priority of extensions to pick"); + for (var _i = 0, supportedExtensions_1 = supportedExtensions; _i < supportedExtensions_1.length; _i++) { + var extension = supportedExtensions_1[_i]; + var filesInDirWithExtension = host.readDirectory(basePath, extension, exclude); + for (var _a = 0, filesInDirWithExtension_1 = filesInDirWithExtension; _a < filesInDirWithExtension_1.length; _a++) { + var fileName = filesInDirWithExtension_1[_a]; + if (extension === ".ts" && ts.fileExtensionIs(fileName, ".d.ts")) { + continue; + } + if (IgnoreFileNamePattern.test(fileName)) { + continue; + } + if (extension === ".d.ts" || (options.allowJs && ts.contains(ts.supportedJavascriptExtensions, extension))) { + var baseName = fileName.substr(0, fileName.length - extension.length); + if (ts.hasProperty(filesSeen, baseName + ".ts") || ts.hasProperty(filesSeen, baseName + ".tsx")) { + continue; + } + } + filesSeen[fileName] = true; + fileNames.push(fileName); + } + } + } + if (ts.hasProperty(json, "excludes") && !ts.hasProperty(json, "exclude")) { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); + } + return fileNames; + } + } + ts.parseJsonConfigFileContent = parseJsonConfigFileContent; + function convertCompilerOptionsFromJson(jsonOptions, basePath, configFileName) { + var errors = []; + var options = convertCompilerOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName); + return { options: options, errors: errors }; + } + ts.convertCompilerOptionsFromJson = convertCompilerOptionsFromJson; + function convertTypingOptionsFromJson(jsonOptions, basePath, configFileName) { + var errors = []; + var options = convertTypingOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName); + return { options: options, errors: errors }; + } + ts.convertTypingOptionsFromJson = convertTypingOptionsFromJson; + function convertCompilerOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName) { + var options = ts.getBaseFileName(configFileName) === "jsconfig.json" ? { allowJs: true } : {}; + convertOptionsFromJson(ts.optionDeclarations, jsonOptions, basePath, options, ts.Diagnostics.Unknown_compiler_option_0, errors); + return options; + } + function convertTypingOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName) { + var options = ts.getBaseFileName(configFileName) === "jsconfig.json" + ? { enableAutoDiscovery: true, include: [], exclude: [] } + : { enableAutoDiscovery: false, include: [], exclude: [] }; + convertOptionsFromJson(ts.typingOptionDeclarations, jsonOptions, basePath, options, ts.Diagnostics.Unknown_typing_option_0, errors); + return options; + } + function convertOptionsFromJson(optionDeclarations, jsonOptions, basePath, defaultOptions, diagnosticMessage, errors) { + if (!jsonOptions) { + return; + } + var optionNameMap = ts.arrayToMap(optionDeclarations, function (opt) { return opt.name; }); + for (var id in jsonOptions) { + if (ts.hasProperty(optionNameMap, id)) { + var opt = optionNameMap[id]; + defaultOptions[opt.name] = convertJsonOption(opt, jsonOptions[id], basePath, errors); + } + else { + errors.push(ts.createCompilerDiagnostic(diagnosticMessage, id)); + } + } + } + function convertJsonOption(opt, value, basePath, errors) { + var optType = opt.type; + var expectedType = typeof optType === "string" ? optType : "string"; + if (optType === "list" && ts.isArray(value)) { + return convertJsonOptionOfListType(opt, value, basePath, errors); + } + else if (typeof value === expectedType) { + if (typeof optType !== "string") { + return convertJsonOptionOfCustomType(opt, value, errors); + } + else { + if (opt.isFilePath) { + value = ts.normalizePath(ts.combinePaths(basePath, value)); + if (value === "") { + value = "."; + } + } + } + return value; + } + else { + errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, opt.name, expectedType)); + } + } + function convertJsonOptionOfCustomType(opt, value, errors) { + var key = value.toLowerCase(); + if (ts.hasProperty(opt.type, key)) { + return opt.type[key]; + } + 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, ""); + } +})(ts || (ts = {})); +var ts; +(function (ts) { + function getDeclarationOfKind(symbol, kind) { + var declarations = symbol.declarations; + if (declarations) { + for (var _i = 0, declarations_1 = declarations; _i < declarations_1.length; _i++) { + var declaration = declarations_1[_i]; + if (declaration.kind === kind) { + return declaration; + } + } + } + return undefined; + } + ts.getDeclarationOfKind = getDeclarationOfKind; + var stringWriters = []; + function getSingleLineStringWriter() { + if (stringWriters.length === 0) { + var str_1 = ""; + var writeText = function (text) { return str_1 += text; }; + return { + string: function () { return str_1; }, + writeKeyword: writeText, + writeOperator: writeText, + writePunctuation: writeText, + writeSpace: writeText, + writeStringLiteral: writeText, + writeParameter: writeText, + writeSymbol: writeText, + writeLine: function () { return str_1 += " "; }, + increaseIndent: function () { }, + decreaseIndent: function () { }, + clear: function () { return str_1 = ""; }, + trackSymbol: function () { }, + reportInaccessibleThisError: function () { } + }; + } + return stringWriters.pop(); + } + ts.getSingleLineStringWriter = getSingleLineStringWriter; + function releaseStringWriter(writer) { + writer.clear(); + stringWriters.push(writer); + } + ts.releaseStringWriter = releaseStringWriter; + function getFullWidth(node) { + return node.end - node.pos; + } + ts.getFullWidth = getFullWidth; + function mapIsEqualTo(map1, map2) { + if (!map1 || !map2) { + return map1 === map2; + } + return containsAll(map1, map2) && containsAll(map2, map1); + } + ts.mapIsEqualTo = mapIsEqualTo; + function containsAll(map, other) { + for (var key in map) { + if (!ts.hasProperty(map, key)) { + continue; + } + if (!ts.hasProperty(other, key) || map[key] !== other[key]) { + return false; + } + } + return true; + } + function arrayIsEqualTo(array1, array2, equaler) { + if (!array1 || !array2) { + return array1 === array2; + } + if (array1.length !== array2.length) { + return false; + } + for (var i = 0; i < array1.length; i++) { + var equals = equaler ? equaler(array1[i], array2[i]) : array1[i] === array2[i]; + if (!equals) { + return false; + } + } + return true; + } + ts.arrayIsEqualTo = arrayIsEqualTo; + function hasResolvedModule(sourceFile, moduleNameText) { + return sourceFile.resolvedModules && ts.hasProperty(sourceFile.resolvedModules, moduleNameText); + } + ts.hasResolvedModule = hasResolvedModule; + function getResolvedModule(sourceFile, moduleNameText) { + return hasResolvedModule(sourceFile, moduleNameText) ? sourceFile.resolvedModules[moduleNameText] : undefined; + } + ts.getResolvedModule = getResolvedModule; + function setResolvedModule(sourceFile, moduleNameText, resolvedModule) { + if (!sourceFile.resolvedModules) { + sourceFile.resolvedModules = {}; + } + sourceFile.resolvedModules[moduleNameText] = resolvedModule; + } + ts.setResolvedModule = setResolvedModule; + function setResolvedTypeReferenceDirective(sourceFile, typeReferenceDirectiveName, resolvedTypeReferenceDirective) { + if (!sourceFile.resolvedTypeReferenceDirectiveNames) { + sourceFile.resolvedTypeReferenceDirectiveNames = {}; + } + sourceFile.resolvedTypeReferenceDirectiveNames[typeReferenceDirectiveName] = resolvedTypeReferenceDirective; + } + ts.setResolvedTypeReferenceDirective = setResolvedTypeReferenceDirective; + function moduleResolutionIsEqualTo(oldResolution, newResolution) { + return oldResolution.resolvedFileName === newResolution.resolvedFileName && oldResolution.isExternalLibraryImport === newResolution.isExternalLibraryImport; + } + ts.moduleResolutionIsEqualTo = moduleResolutionIsEqualTo; + function typeDirectiveIsEqualTo(oldResolution, newResolution) { + return oldResolution.resolvedFileName === newResolution.resolvedFileName && oldResolution.primary === newResolution.primary; + } + ts.typeDirectiveIsEqualTo = typeDirectiveIsEqualTo; + function hasChangesInResolutions(names, newResolutions, oldResolutions, comparer) { + if (names.length !== newResolutions.length) { + return false; + } + for (var i = 0; i < names.length; i++) { + var newResolution = newResolutions[i]; + var oldResolution = oldResolutions && ts.hasProperty(oldResolutions, names[i]) ? oldResolutions[names[i]] : undefined; + var changed = oldResolution + ? !newResolution || !comparer(oldResolution, newResolution) + : newResolution; + if (changed) { + return true; + } + } + return false; + } + ts.hasChangesInResolutions = hasChangesInResolutions; + function containsParseError(node) { + aggregateChildData(node); + return (node.flags & 268435456) !== 0; + } + ts.containsParseError = containsParseError; + function aggregateChildData(node) { + if (!(node.flags & 536870912)) { + var thisNodeOrAnySubNodesHasError = ((node.flags & 67108864) !== 0) || + ts.forEachChild(node, containsParseError); + if (thisNodeOrAnySubNodesHasError) { + node.flags |= 268435456; + } + node.flags |= 536870912; + } + } + function getSourceFileOfNode(node) { + while (node && node.kind !== 256) { + node = node.parent; + } + return node; + } + ts.getSourceFileOfNode = getSourceFileOfNode; + function isStatementWithLocals(node) { + switch (node.kind) { + case 199: + case 227: + case 206: + case 207: + case 208: + return true; + } + return false; + } + ts.isStatementWithLocals = isStatementWithLocals; + function getStartPositionOfLine(line, sourceFile) { + ts.Debug.assert(line >= 0); + return ts.getLineStarts(sourceFile)[line]; + } + ts.getStartPositionOfLine = getStartPositionOfLine; + function nodePosToString(node) { + var file = getSourceFileOfNode(node); + var loc = ts.getLineAndCharacterOfPosition(file, node.pos); + return file.fileName + "(" + (loc.line + 1) + "," + (loc.character + 1) + ")"; + } + ts.nodePosToString = nodePosToString; + function getStartPosOfNode(node) { + return node.pos; + } + ts.getStartPosOfNode = getStartPosOfNode; + function getEndLinePosition(line, sourceFile) { + ts.Debug.assert(line >= 0); + var lineStarts = ts.getLineStarts(sourceFile); + var lineIndex = line; + var sourceText = sourceFile.text; + if (lineIndex + 1 === lineStarts.length) { + return sourceText.length - 1; + } + else { + var start = lineStarts[lineIndex]; + var pos = lineStarts[lineIndex + 1] - 1; + ts.Debug.assert(ts.isLineBreak(sourceText.charCodeAt(pos))); + while (start <= pos && ts.isLineBreak(sourceText.charCodeAt(pos))) { + pos--; + } + return pos; + } + } + ts.getEndLinePosition = getEndLinePosition; + function nodeIsMissing(node) { + if (!node) { + return true; + } + return node.pos === node.end && node.pos >= 0 && node.kind !== 1; + } + ts.nodeIsMissing = nodeIsMissing; + function nodeIsPresent(node) { + return !nodeIsMissing(node); + } + ts.nodeIsPresent = nodeIsPresent; + function getTokenPosOfNode(node, sourceFile) { + if (nodeIsMissing(node)) { + return node.pos; + } + return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos); + } + ts.getTokenPosOfNode = getTokenPosOfNode; + function getNonDecoratorTokenPosOfNode(node, sourceFile) { + if (nodeIsMissing(node) || !node.decorators) { + return getTokenPosOfNode(node, sourceFile); + } + return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.decorators.end); + } + ts.getNonDecoratorTokenPosOfNode = getNonDecoratorTokenPosOfNode; + function getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia) { + if (includeTrivia === void 0) { includeTrivia = false; } + if (nodeIsMissing(node)) { + return ""; + } + var text = sourceFile.text; + return text.substring(includeTrivia ? node.pos : ts.skipTrivia(text, node.pos), node.end); + } + ts.getSourceTextOfNodeFromSourceFile = getSourceTextOfNodeFromSourceFile; + function getTextOfNodeFromSourceText(sourceText, node) { + if (nodeIsMissing(node)) { + return ""; + } + return sourceText.substring(ts.skipTrivia(sourceText, node.pos), node.end); + } + ts.getTextOfNodeFromSourceText = getTextOfNodeFromSourceText; + function getTextOfNode(node, includeTrivia) { + if (includeTrivia === void 0) { includeTrivia = false; } + return getSourceTextOfNodeFromSourceFile(getSourceFileOfNode(node), node, includeTrivia); + } + ts.getTextOfNode = getTextOfNode; + function escapeIdentifier(identifier) { + return identifier.length >= 2 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 ? "_" + identifier : identifier; + } + ts.escapeIdentifier = escapeIdentifier; + function unescapeIdentifier(identifier) { + return identifier.length >= 3 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 && identifier.charCodeAt(2) === 95 ? identifier.substr(1) : identifier; + } + ts.unescapeIdentifier = unescapeIdentifier; + function makeIdentifierFromModuleName(moduleName) { + return ts.getBaseFileName(moduleName).replace(/^(\d)/, "_$1").replace(/\W/g, "_"); + } + ts.makeIdentifierFromModuleName = makeIdentifierFromModuleName; + function isBlockOrCatchScoped(declaration) { + return (getCombinedNodeFlags(declaration) & 3072) !== 0 || + isCatchClauseVariableDeclaration(declaration); + } + ts.isBlockOrCatchScoped = isBlockOrCatchScoped; + function isAmbientModule(node) { + return node && node.kind === 225 && + (node.name.kind === 9 || isGlobalScopeAugmentation(node)); + } + ts.isAmbientModule = isAmbientModule; + function isBlockScopedContainerTopLevel(node) { + return node.kind === 256 || + node.kind === 225 || + isFunctionLike(node) || + isFunctionBlock(node); + } + ts.isBlockScopedContainerTopLevel = isBlockScopedContainerTopLevel; + function isGlobalScopeAugmentation(module) { + return !!(module.flags & 131072); + } + ts.isGlobalScopeAugmentation = isGlobalScopeAugmentation; + function isExternalModuleAugmentation(node) { + if (!node || !isAmbientModule(node)) { + return false; + } + switch (node.parent.kind) { + case 256: + return ts.isExternalModule(node.parent); + case 226: + return isAmbientModule(node.parent.parent) && !ts.isExternalModule(node.parent.parent.parent); + } + return false; + } + ts.isExternalModuleAugmentation = isExternalModuleAugmentation; + function getEnclosingBlockScopeContainer(node) { + var current = node.parent; + while (current) { + if (isFunctionLike(current)) { + return current; + } + switch (current.kind) { + case 256: + case 227: + case 252: + case 225: + case 206: + case 207: + case 208: + return current; + case 199: + if (!isFunctionLike(current.parent)) { + return current; + } + } + current = current.parent; + } + } + ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer; + function isCatchClauseVariableDeclaration(declaration) { + return declaration && + declaration.kind === 218 && + declaration.parent && + declaration.parent.kind === 252; + } + ts.isCatchClauseVariableDeclaration = isCatchClauseVariableDeclaration; + function declarationNameToString(name) { + return getFullWidth(name) === 0 ? "(Missing)" : getTextOfNode(name); + } + ts.declarationNameToString = declarationNameToString; + function createDiagnosticForNode(node, message, arg0, arg1, arg2) { + var sourceFile = getSourceFileOfNode(node); + var span = getErrorSpanForNode(sourceFile, node); + return ts.createFileDiagnostic(sourceFile, span.start, span.length, message, arg0, arg1, arg2); + } + ts.createDiagnosticForNode = createDiagnosticForNode; + function createDiagnosticForNodeFromMessageChain(node, messageChain) { + var sourceFile = getSourceFileOfNode(node); + var span = getErrorSpanForNode(sourceFile, node); + return { + file: sourceFile, + start: span.start, + length: span.length, + code: messageChain.code, + category: messageChain.category, + messageText: messageChain.next ? messageChain : messageChain.messageText + }; + } + ts.createDiagnosticForNodeFromMessageChain = createDiagnosticForNodeFromMessageChain; + function getSpanOfTokenAtPosition(sourceFile, pos) { + var scanner = ts.createScanner(sourceFile.languageVersion, true, sourceFile.languageVariant, sourceFile.text, undefined, pos); + scanner.scan(); + var start = scanner.getTokenPos(); + return ts.createTextSpanFromBounds(start, scanner.getTextPos()); + } + ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition; + function getErrorSpanForArrowFunction(sourceFile, node) { + var pos = ts.skipTrivia(sourceFile.text, node.pos); + if (node.body && node.body.kind === 199) { + 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 256: + 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 218: + case 169: + case 221: + case 192: + case 222: + case 225: + case 224: + case 255: + case 220: + case 179: + case 147: + case 149: + case 150: + case 223: + errorNode = node.name; + break; + case 180: + return getErrorSpanForArrowFunction(sourceFile, node); + } + if (errorNode === undefined) { + return getSpanOfTokenAtPosition(sourceFile, node.pos); + } + var pos = nodeIsMissing(errorNode) + ? errorNode.pos + : ts.skipTrivia(sourceFile.text, errorNode.pos); + return ts.createTextSpanFromBounds(pos, errorNode.end); + } + ts.getErrorSpanForNode = getErrorSpanForNode; + function isExternalOrCommonJsModule(file) { + return (file.externalModuleIndicator || file.commonJsModuleIndicator) !== undefined; + } + ts.isExternalOrCommonJsModule = isExternalOrCommonJsModule; + function isDeclarationFile(file) { + return file.isDeclarationFile; + } + ts.isDeclarationFile = isDeclarationFile; + function isConstEnumDeclaration(node) { + return node.kind === 224 && isConst(node); + } + ts.isConstEnumDeclaration = isConstEnumDeclaration; + function walkUpBindingElementsAndPatterns(node) { + while (node && (node.kind === 169 || isBindingPattern(node))) { + node = node.parent; + } + return node; + } + function getCombinedNodeFlags(node) { + node = walkUpBindingElementsAndPatterns(node); + var flags = node.flags; + if (node.kind === 218) { + node = node.parent; + } + if (node && node.kind === 219) { + flags |= node.flags; + node = node.parent; + } + if (node && node.kind === 200) { + flags |= node.flags; + } + return flags; + } + ts.getCombinedNodeFlags = getCombinedNodeFlags; + function isConst(node) { + return !!(getCombinedNodeFlags(node) & 2048); + } + ts.isConst = isConst; + function isLet(node) { + return !!(getCombinedNodeFlags(node) & 1024); + } + ts.isLet = isLet; + function isSuperCallExpression(n) { + return n.kind === 174 && n.expression.kind === 95; + } + ts.isSuperCallExpression = isSuperCallExpression; + function isPrologueDirective(node) { + return node.kind === 202 && node.expression.kind === 9; + } + ts.isPrologueDirective = isPrologueDirective; + function getLeadingCommentRangesOfNode(node, sourceFileOfNode) { + return ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos); + } + ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode; + function getLeadingCommentRangesOfNodeFromText(node, text) { + return ts.getLeadingCommentRanges(text, node.pos); + } + ts.getLeadingCommentRangesOfNodeFromText = getLeadingCommentRangesOfNodeFromText; + function getJsDocComments(node, sourceFileOfNode) { + return getJsDocCommentsFromText(node, sourceFileOfNode.text); + } + ts.getJsDocComments = getJsDocComments; + function getJsDocCommentsFromText(node, text) { + var commentRanges = (node.kind === 142 || node.kind === 141) ? + ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) : + getLeadingCommentRangesOfNodeFromText(node, text); + return ts.filter(commentRanges, isJsDocComment); + function isJsDocComment(comment) { + return text.charCodeAt(comment.pos + 1) === 42 && + text.charCodeAt(comment.pos + 2) === 42 && + text.charCodeAt(comment.pos + 3) !== 47; + } + } + ts.getJsDocCommentsFromText = getJsDocCommentsFromText; + ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*/; + ts.fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*/; + ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*/; + function isTypeNode(node) { + if (154 <= node.kind && node.kind <= 166) { + return true; + } + switch (node.kind) { + case 117: + case 130: + case 132: + case 120: + case 133: + case 135: + case 127: + return true; + case 103: + return node.parent.kind !== 183; + case 194: + return !isExpressionWithTypeArgumentsInClassExtendsClause(node); + case 69: + if (node.parent.kind === 139 && node.parent.right === node) { + node = node.parent; + } + else if (node.parent.kind === 172 && node.parent.name === node) { + node = node.parent; + } + ts.Debug.assert(node.kind === 69 || node.kind === 139 || node.kind === 172, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'."); + case 139: + case 172: + case 97: + var parent_1 = node.parent; + if (parent_1.kind === 158) { + return false; + } + if (154 <= parent_1.kind && parent_1.kind <= 166) { + return true; + } + switch (parent_1.kind) { + case 194: + return !isExpressionWithTypeArgumentsInClassExtendsClause(parent_1); + case 141: + return node === parent_1.constraint; + case 145: + case 144: + case 142: + case 218: + return node === parent_1.type; + case 220: + case 179: + case 180: + case 148: + case 147: + case 146: + case 149: + case 150: + return node === parent_1.type; + case 151: + case 152: + case 153: + return node === parent_1.type; + case 177: + return node === parent_1.type; + case 174: + case 175: + return parent_1.typeArguments && ts.indexOf(parent_1.typeArguments, node) >= 0; + case 176: + return false; + } + } + return false; + } + ts.isTypeNode = isTypeNode; + function forEachReturnStatement(body, visitor) { + return traverse(body); + function traverse(node) { + switch (node.kind) { + case 211: + return visitor(node); + case 227: + case 199: + case 203: + case 204: + case 205: + case 206: + case 207: + case 208: + case 212: + case 213: + case 249: + case 250: + case 214: + case 216: + case 252: + return ts.forEachChild(node, traverse); + } + } + } + ts.forEachReturnStatement = forEachReturnStatement; + function forEachYieldExpression(body, visitor) { + return traverse(body); + function traverse(node) { + switch (node.kind) { + case 190: + visitor(node); + var operand = node.expression; + if (operand) { + traverse(operand); + } + case 224: + case 222: + case 225: + case 223: + case 221: + case 192: + return; + default: + if (isFunctionLike(node)) { + var name_5 = node.name; + if (name_5 && name_5.kind === 140) { + traverse(name_5.expression); + return; + } + } + else if (!isTypeNode(node)) { + ts.forEachChild(node, traverse); + } + } + } + } + ts.forEachYieldExpression = forEachYieldExpression; + function isVariableLike(node) { + if (node) { + switch (node.kind) { + case 169: + case 255: + case 142: + case 253: + case 145: + case 144: + case 254: + case 218: + return true; + } + } + return false; + } + ts.isVariableLike = isVariableLike; + function isAccessor(node) { + return node && (node.kind === 149 || node.kind === 150); + } + ts.isAccessor = isAccessor; + function isClassLike(node) { + return node && (node.kind === 221 || node.kind === 192); + } + ts.isClassLike = isClassLike; + function isFunctionLike(node) { + return node && isFunctionLikeKind(node.kind); + } + ts.isFunctionLike = isFunctionLike; + function isFunctionLikeKind(kind) { + switch (kind) { + case 148: + case 179: + case 220: + case 180: + case 147: + case 146: + case 149: + case 150: + case 151: + case 152: + case 153: + case 156: + case 157: + return true; + } + } + ts.isFunctionLikeKind = isFunctionLikeKind; + function introducesArgumentsExoticObject(node) { + switch (node.kind) { + case 147: + case 146: + case 148: + case 149: + case 150: + case 220: + case 179: + return true; + } + return false; + } + ts.introducesArgumentsExoticObject = introducesArgumentsExoticObject; + function isIterationStatement(node, lookInLabeledStatements) { + switch (node.kind) { + case 206: + case 207: + case 208: + case 204: + case 205: + return true; + case 214: + return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements); + } + return false; + } + ts.isIterationStatement = isIterationStatement; + function isFunctionBlock(node) { + return node && node.kind === 199 && isFunctionLike(node.parent); + } + ts.isFunctionBlock = isFunctionBlock; + function isObjectLiteralMethod(node) { + return node && node.kind === 147 && node.parent.kind === 171; + } + ts.isObjectLiteralMethod = isObjectLiteralMethod; + function isIdentifierTypePredicate(predicate) { + return predicate && predicate.kind === 1; + } + ts.isIdentifierTypePredicate = isIdentifierTypePredicate; + function isThisTypePredicate(predicate) { + return predicate && predicate.kind === 0; + } + ts.isThisTypePredicate = isThisTypePredicate; + function getContainingFunction(node) { + while (true) { + node = node.parent; + if (!node || isFunctionLike(node)) { + return node; + } + } + } + ts.getContainingFunction = getContainingFunction; + function getContainingFunctionOrModule(node) { + while (true) { + node = node.parent; + if (isFunctionLike(node) || node.kind === 225 || node.kind === 256) { + return node; + } + } + } + ts.getContainingFunctionOrModule = getContainingFunctionOrModule; + function getContainingClass(node) { + while (true) { + node = node.parent; + if (!node || isClassLike(node)) { + return node; + } + } + } + ts.getContainingClass = getContainingClass; + function getThisContainer(node, includeArrowFunctions) { + while (true) { + node = node.parent; + if (!node) { + return undefined; + } + switch (node.kind) { + case 140: + if (isClassLike(node.parent.parent)) { + return node; + } + node = node.parent; + break; + case 143: + if (node.parent.kind === 142 && isClassElement(node.parent.parent)) { + node = node.parent.parent; + } + else if (isClassElement(node.parent)) { + node = node.parent; + } + break; + case 180: + if (!includeArrowFunctions) { + continue; + } + case 220: + case 179: + case 225: + case 145: + case 144: + case 147: + case 146: + case 148: + case 149: + case 150: + case 151: + case 152: + case 153: + case 224: + case 256: + return node; + } + } + } + ts.getThisContainer = getThisContainer; + function getSuperContainer(node, stopOnFunctions) { + while (true) { + node = node.parent; + if (!node) { + return node; + } + switch (node.kind) { + case 140: + node = node.parent; + break; + case 220: + case 179: + case 180: + if (!stopOnFunctions) { + continue; + } + case 145: + case 144: + case 147: + case 146: + case 148: + case 149: + case 150: + return node; + case 143: + if (node.parent.kind === 142 && isClassElement(node.parent.parent)) { + node = node.parent.parent; + } + else if (isClassElement(node.parent)) { + node = node.parent; + } + break; + } + } + } + ts.getSuperContainer = getSuperContainer; + function isSuperPropertyOrElementAccess(node) { + return (node.kind === 172 + || node.kind === 173) + && node.expression.kind === 95; + } + ts.isSuperPropertyOrElementAccess = isSuperPropertyOrElementAccess; + function getEntityNameFromTypeNode(node) { + if (node) { + switch (node.kind) { + case 155: + return node.typeName; + case 194: + return node.expression; + case 69: + case 139: + return node; + } + } + return undefined; + } + ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode; + function getInvokedExpression(node) { + if (node.kind === 176) { + return node.tag; + } + return node.expression; + } + ts.getInvokedExpression = getInvokedExpression; + function nodeCanBeDecorated(node) { + switch (node.kind) { + case 221: + return true; + case 145: + return node.parent.kind === 221; + case 149: + case 150: + case 147: + return node.body !== undefined + && node.parent.kind === 221; + case 142: + return node.parent.body !== undefined + && (node.parent.kind === 148 + || node.parent.kind === 147 + || node.parent.kind === 150) + && node.parent.parent.kind === 221; + } + return false; + } + ts.nodeCanBeDecorated = nodeCanBeDecorated; + function nodeIsDecorated(node) { + return node.decorators !== undefined + && nodeCanBeDecorated(node); + } + ts.nodeIsDecorated = nodeIsDecorated; + function isPropertyAccessExpression(node) { + return node.kind === 172; + } + ts.isPropertyAccessExpression = isPropertyAccessExpression; + function isElementAccessExpression(node) { + return node.kind === 173; + } + ts.isElementAccessExpression = isElementAccessExpression; + function isJSXTagName(node) { + var parent = node.parent; + if (parent.kind === 243 || + parent.kind === 242 || + parent.kind === 245) { + return parent.tagName === node; + } + return false; + } + ts.isJSXTagName = isJSXTagName; + function isExpression(node) { + switch (node.kind) { + case 97: + case 95: + case 93: + case 99: + case 84: + case 10: + case 170: + case 171: + case 172: + case 173: + case 174: + case 175: + case 176: + case 195: + case 177: + case 196: + case 178: + case 179: + case 192: + case 180: + case 183: + case 181: + case 182: + case 185: + case 186: + case 187: + case 188: + case 191: + case 189: + case 11: + case 193: + case 241: + case 242: + case 190: + case 184: + return true; + case 139: + while (node.parent.kind === 139) { + node = node.parent; + } + return node.parent.kind === 158 || isJSXTagName(node); + case 69: + if (node.parent.kind === 158 || isJSXTagName(node)) { + return true; + } + case 8: + case 9: + case 97: + var parent_2 = node.parent; + switch (parent_2.kind) { + case 218: + case 142: + case 145: + case 144: + case 255: + case 253: + case 169: + return parent_2.initializer === node; + case 202: + case 203: + case 204: + case 205: + case 211: + case 212: + case 213: + case 249: + case 215: + case 213: + return parent_2.expression === node; + case 206: + var forStatement = parent_2; + return (forStatement.initializer === node && forStatement.initializer.kind !== 219) || + forStatement.condition === node || + forStatement.incrementor === node; + case 207: + case 208: + var forInStatement = parent_2; + return (forInStatement.initializer === node && forInStatement.initializer.kind !== 219) || + forInStatement.expression === node; + case 177: + case 195: + return node === parent_2.expression; + case 197: + return node === parent_2.expression; + case 140: + return node === parent_2.expression; + case 143: + case 248: + case 247: + return true; + case 194: + return parent_2.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent_2); + default: + if (isExpression(parent_2)) { + return true; + } + } + } + return false; + } + ts.isExpression = isExpression; + function isExternalModuleNameRelative(moduleName) { + return moduleName.substr(0, 2) === "./" || moduleName.substr(0, 3) === "../" || moduleName.substr(0, 2) === ".\\" || moduleName.substr(0, 3) === "..\\"; + } + ts.isExternalModuleNameRelative = isExternalModuleNameRelative; + function isInstantiatedModule(node, preserveConstEnums) { + var moduleState = ts.getModuleInstanceState(node); + return moduleState === 1 || + (preserveConstEnums && moduleState === 2); + } + ts.isInstantiatedModule = isInstantiatedModule; + function isExternalModuleImportEqualsDeclaration(node) { + return node.kind === 229 && node.moduleReference.kind === 240; + } + ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration; + function getExternalModuleImportEqualsDeclarationExpression(node) { + ts.Debug.assert(isExternalModuleImportEqualsDeclaration(node)); + return node.moduleReference.expression; + } + ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression; + function isInternalModuleImportEqualsDeclaration(node) { + return node.kind === 229 && node.moduleReference.kind !== 240; + } + ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration; + function isSourceFileJavaScript(file) { + return isInJavaScriptFile(file); + } + ts.isSourceFileJavaScript = isSourceFileJavaScript; + function isInJavaScriptFile(node) { + return node && !!(node.flags & 134217728); + } + ts.isInJavaScriptFile = isInJavaScriptFile; + function isRequireCall(expression, checkArgumentIsStringLiteral) { + var isRequire = expression.kind === 174 && + expression.expression.kind === 69 && + expression.expression.text === "require" && + expression.arguments.length === 1; + return isRequire && (!checkArgumentIsStringLiteral || expression.arguments[0].kind === 9); + } + ts.isRequireCall = isRequireCall; + function isSingleOrDoubleQuote(charCode) { + return charCode === 39 || charCode === 34; + } + ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; + function getSpecialPropertyAssignmentKind(expression) { + if (!isInJavaScriptFile(expression)) { + return 0; + } + if (expression.kind !== 187) { + return 0; + } + var expr = expression; + if (expr.operatorToken.kind !== 56 || expr.left.kind !== 172) { + return 0; + } + var lhs = expr.left; + if (lhs.expression.kind === 69) { + var lhsId = lhs.expression; + if (lhsId.text === "exports") { + return 1; + } + else if (lhsId.text === "module" && lhs.name.text === "exports") { + return 2; + } + } + else if (lhs.expression.kind === 97) { + return 4; + } + else if (lhs.expression.kind === 172) { + var innerPropertyAccess = lhs.expression; + if (innerPropertyAccess.expression.kind === 69) { + var innerPropertyAccessIdentifier = innerPropertyAccess.expression; + if (innerPropertyAccessIdentifier.text === "module" && innerPropertyAccess.name.text === "exports") { + return 1; + } + if (innerPropertyAccess.name.text === "prototype") { + return 3; + } + } + } + return 0; + } + ts.getSpecialPropertyAssignmentKind = getSpecialPropertyAssignmentKind; + function getExternalModuleName(node) { + if (node.kind === 230) { + return node.moduleSpecifier; + } + if (node.kind === 229) { + var reference = node.moduleReference; + if (reference.kind === 240) { + return reference.expression; + } + } + if (node.kind === 236) { + return node.moduleSpecifier; + } + if (node.kind === 225 && node.name.kind === 9) { + return node.name; + } + } + ts.getExternalModuleName = getExternalModuleName; + function hasQuestionToken(node) { + if (node) { + switch (node.kind) { + case 142: + case 147: + case 146: + case 254: + case 253: + case 145: + case 144: + return node.questionToken !== undefined; + } + } + return false; + } + ts.hasQuestionToken = hasQuestionToken; + function isJSDocConstructSignature(node) { + return node.kind === 269 && + node.parameters.length > 0 && + node.parameters[0].type.kind === 271; + } + ts.isJSDocConstructSignature = isJSDocConstructSignature; + function getJSDocTag(node, kind, checkParentVariableStatement) { + if (!node) { + return undefined; + } + var jsDocComment = getJSDocComment(node, checkParentVariableStatement); + if (!jsDocComment) { + return undefined; + } + for (var _i = 0, _a = jsDocComment.tags; _i < _a.length; _i++) { + var tag = _a[_i]; + if (tag.kind === kind) { + return tag; + } + } + } + function getJSDocComment(node, checkParentVariableStatement) { + if (node.jsDocComment) { + return node.jsDocComment; + } + if (checkParentVariableStatement) { + var isInitializerOfVariableDeclarationInStatement = node.parent.kind === 218 && + node.parent.initializer === node && + node.parent.parent.parent.kind === 200; + var variableStatementNode = isInitializerOfVariableDeclarationInStatement ? node.parent.parent.parent : undefined; + if (variableStatementNode) { + return variableStatementNode.jsDocComment; + } + var parent_3 = node.parent; + var isSourceOfAssignmentExpressionStatement = parent_3 && parent_3.parent && + parent_3.kind === 187 && + parent_3.operatorToken.kind === 56 && + parent_3.parent.kind === 202; + if (isSourceOfAssignmentExpressionStatement) { + return parent_3.parent.jsDocComment; + } + var isPropertyAssignmentExpression = parent_3 && parent_3.kind === 253; + if (isPropertyAssignmentExpression) { + return parent_3.jsDocComment; + } + } + return undefined; + } + function getJSDocTypeTag(node) { + return getJSDocTag(node, 277, false); + } + ts.getJSDocTypeTag = getJSDocTypeTag; + function getJSDocReturnTag(node) { + return getJSDocTag(node, 276, true); + } + ts.getJSDocReturnTag = getJSDocReturnTag; + function getJSDocTemplateTag(node) { + return getJSDocTag(node, 278, false); + } + ts.getJSDocTemplateTag = getJSDocTemplateTag; + function getCorrespondingJSDocParameterTag(parameter) { + if (parameter.name && parameter.name.kind === 69) { + var parameterName = parameter.name.text; + var jsDocComment = getJSDocComment(parameter.parent, true); + if (jsDocComment) { + for (var _i = 0, _a = jsDocComment.tags; _i < _a.length; _i++) { + var tag = _a[_i]; + if (tag.kind === 275) { + var parameterTag = tag; + var name_6 = parameterTag.preParameterName || parameterTag.postParameterName; + if (name_6.text === parameterName) { + return parameterTag; + } + } + } + } + } + return undefined; + } + ts.getCorrespondingJSDocParameterTag = getCorrespondingJSDocParameterTag; + function hasRestParameter(s) { + return isRestParameter(ts.lastOrUndefined(s.parameters)); + } + ts.hasRestParameter = hasRestParameter; + function hasDeclaredRestParameter(s) { + return isDeclaredRestParam(ts.lastOrUndefined(s.parameters)); + } + ts.hasDeclaredRestParameter = hasDeclaredRestParameter; + function isRestParameter(node) { + if (node && (node.flags & 134217728)) { + if (node.type && node.type.kind === 270) { + return true; + } + var paramTag = getCorrespondingJSDocParameterTag(node); + if (paramTag && paramTag.typeExpression) { + return paramTag.typeExpression.type.kind === 270; + } + } + return isDeclaredRestParam(node); + } + ts.isRestParameter = isRestParameter; + function isDeclaredRestParam(node) { + return node && node.dotDotDotToken !== undefined; + } + ts.isDeclaredRestParam = isDeclaredRestParam; + function isLiteralKind(kind) { + return 8 <= kind && kind <= 11; + } + ts.isLiteralKind = isLiteralKind; + function isTextualLiteralKind(kind) { + return kind === 9 || kind === 11; + } + ts.isTextualLiteralKind = isTextualLiteralKind; + function isTemplateLiteralKind(kind) { + return 11 <= kind && kind <= 14; + } + ts.isTemplateLiteralKind = isTemplateLiteralKind; + function isBindingPattern(node) { + return !!node && (node.kind === 168 || node.kind === 167); + } + ts.isBindingPattern = isBindingPattern; + function isAssignmentTarget(node) { + while (node.parent.kind === 178) { + node = node.parent; + } + while (true) { + var parent_4 = node.parent; + if (parent_4.kind === 170 || parent_4.kind === 191) { + node = parent_4; + continue; + } + if (parent_4.kind === 253 || parent_4.kind === 254) { + node = parent_4.parent; + continue; + } + return parent_4.kind === 187 && + parent_4.operatorToken.kind === 56 && + parent_4.left === node || + (parent_4.kind === 207 || parent_4.kind === 208) && + parent_4.initializer === node; + } + } + ts.isAssignmentTarget = isAssignmentTarget; + function isNodeDescendentOf(node, ancestor) { + while (node) { + if (node === ancestor) + return true; + node = node.parent; + } + return false; + } + ts.isNodeDescendentOf = isNodeDescendentOf; + function isInAmbientContext(node) { + while (node) { + if (node.flags & 2 || (node.kind === 256 && node.isDeclarationFile)) { + return true; + } + node = node.parent; + } + return false; + } + ts.isInAmbientContext = isInAmbientContext; + function isDeclaration(node) { + switch (node.kind) { + case 180: + case 169: + case 221: + case 192: + case 148: + case 224: + case 255: + case 238: + case 220: + case 179: + case 149: + case 231: + case 229: + case 234: + case 222: + case 147: + case 146: + case 225: + case 232: + case 142: + case 253: + case 145: + case 144: + case 150: + case 254: + case 223: + case 141: + case 218: + return true; + } + return false; + } + ts.isDeclaration = isDeclaration; + function isStatement(n) { + switch (n.kind) { + case 210: + case 209: + case 217: + case 204: + case 202: + case 201: + case 207: + case 208: + case 206: + case 203: + case 214: + case 211: + case 213: + case 215: + case 216: + case 200: + case 205: + case 212: + case 235: + return true; + default: + return false; + } + } + ts.isStatement = isStatement; + function isClassElement(n) { + switch (n.kind) { + case 148: + case 145: + case 147: + case 149: + case 150: + case 146: + case 153: + return true; + default: + return false; + } + } + ts.isClassElement = isClassElement; + function isDeclarationName(name) { + if (name.kind !== 69 && name.kind !== 9 && name.kind !== 8) { + return false; + } + var parent = name.parent; + if (parent.kind === 234 || parent.kind === 238) { + if (parent.propertyName) { + return true; + } + } + if (isDeclaration(parent)) { + return parent.name === name; + } + return false; + } + ts.isDeclarationName = isDeclarationName; + function isLiteralComputedPropertyDeclarationName(node) { + return (node.kind === 9 || node.kind === 8) && + node.parent.kind === 140 && + isDeclaration(node.parent.parent); + } + ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName; + function isIdentifierName(node) { + var parent = node.parent; + switch (parent.kind) { + case 145: + case 144: + case 147: + case 146: + case 149: + case 150: + case 255: + case 253: + case 172: + return parent.name === node; + case 139: + if (parent.right === node) { + while (parent.kind === 139) { + parent = parent.parent; + } + return parent.kind === 158; + } + return false; + case 169: + case 234: + return parent.propertyName === node; + case 238: + return true; + } + return false; + } + ts.isIdentifierName = isIdentifierName; + function isAliasSymbolDeclaration(node) { + return node.kind === 229 || + node.kind === 228 || + node.kind === 231 && !!node.name || + node.kind === 232 || + node.kind === 234 || + node.kind === 238 || + node.kind === 235 && node.expression.kind === 69; + } + ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration; + function getClassExtendsHeritageClauseElement(node) { + var heritageClause = getHeritageClause(node.heritageClauses, 83); + return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined; + } + ts.getClassExtendsHeritageClauseElement = getClassExtendsHeritageClauseElement; + function getClassImplementsHeritageClauseElements(node) { + var heritageClause = getHeritageClause(node.heritageClauses, 106); + return heritageClause ? heritageClause.types : undefined; + } + ts.getClassImplementsHeritageClauseElements = getClassImplementsHeritageClauseElements; + function getInterfaceBaseTypeNodes(node) { + var heritageClause = getHeritageClause(node.heritageClauses, 83); + return heritageClause ? heritageClause.types : undefined; + } + ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes; + function getHeritageClause(clauses, kind) { + if (clauses) { + for (var _i = 0, clauses_1 = clauses; _i < clauses_1.length; _i++) { + var clause = clauses_1[_i]; + if (clause.token === kind) { + return clause; + } + } + } + return undefined; + } + ts.getHeritageClause = getHeritageClause; + function tryResolveScriptReference(host, sourceFile, reference) { + if (!host.getCompilerOptions().noResolve) { + var referenceFileName = ts.isRootedDiskPath(reference.fileName) ? reference.fileName : ts.combinePaths(ts.getDirectoryPath(sourceFile.fileName), reference.fileName); + return host.getSourceFile(referenceFileName); + } + } + ts.tryResolveScriptReference = tryResolveScriptReference; + function getAncestor(node, kind) { + while (node) { + if (node.kind === kind) { + return node; + } + node = node.parent; + } + return undefined; + } + ts.getAncestor = getAncestor; + function getFileReferenceFromReferencePath(comment, commentRange) { + var simpleReferenceRegEx = /^\/\/\/\s*/gim; + if (simpleReferenceRegEx.test(comment)) { + if (isNoDefaultLibRegEx.test(comment)) { + return { + isNoDefaultLib: true + }; + } + else { + var refMatchResult = ts.fullTripleSlashReferencePathRegEx.exec(comment); + var refLibResult = !refMatchResult && ts.fullTripleSlashReferenceTypeReferenceDirectiveRegEx.exec(comment); + if (refMatchResult || refLibResult) { + var start = commentRange.pos; + var end = commentRange.end; + return { + fileReference: { + pos: start, + end: end, + fileName: (refMatchResult || refLibResult)[3] + }, + isNoDefaultLib: false, + isTypeReferenceDirective: !!refLibResult + }; + } + return { + diagnosticMessage: ts.Diagnostics.Invalid_reference_directive_syntax, + isNoDefaultLib: false + }; + } + } + return undefined; + } + ts.getFileReferenceFromReferencePath = getFileReferenceFromReferencePath; + function isKeyword(token) { + return 70 <= token && token <= 138; + } + ts.isKeyword = isKeyword; + function isTrivia(token) { + return 2 <= token && token <= 7; + } + ts.isTrivia = isTrivia; + function isAsyncFunctionLike(node) { + return isFunctionLike(node) && (node.flags & 256) !== 0 && !isAccessor(node); + } + ts.isAsyncFunctionLike = isAsyncFunctionLike; + function isStringOrNumericLiteral(kind) { + return kind === 9 || kind === 8; + } + ts.isStringOrNumericLiteral = isStringOrNumericLiteral; + function hasDynamicName(declaration) { + return declaration.name && isDynamicName(declaration.name); + } + ts.hasDynamicName = hasDynamicName; + function isDynamicName(name) { + return name.kind === 140 && + !isStringOrNumericLiteral(name.expression.kind) && + !isWellKnownSymbolSyntactically(name.expression); + } + ts.isDynamicName = isDynamicName; + function isWellKnownSymbolSyntactically(node) { + return isPropertyAccessExpression(node) && isESSymbolIdentifier(node.expression); + } + ts.isWellKnownSymbolSyntactically = isWellKnownSymbolSyntactically; + function getPropertyNameForPropertyNameNode(name) { + if (name.kind === 69 || name.kind === 9 || name.kind === 8) { + return name.text; + } + if (name.kind === 140) { + var nameExpression = name.expression; + if (isWellKnownSymbolSyntactically(nameExpression)) { + var rightHandSideName = nameExpression.name.text; + return getPropertyNameForKnownSymbolName(rightHandSideName); + } + else if (nameExpression.kind === 9 || nameExpression.kind === 8) { + return nameExpression.text; + } + } + return undefined; + } + ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode; + function getPropertyNameForKnownSymbolName(symbolName) { + return "__@" + symbolName; + } + ts.getPropertyNameForKnownSymbolName = getPropertyNameForKnownSymbolName; + function isESSymbolIdentifier(node) { + return node.kind === 69 && node.text === "Symbol"; + } + ts.isESSymbolIdentifier = isESSymbolIdentifier; + function isModifierKind(token) { + switch (token) { + case 115: + case 118: + case 74: + case 122: + case 77: + case 82: + case 112: + case 110: + case 111: + case 128: + case 113: + return true; + } + return false; + } + ts.isModifierKind = isModifierKind; + function isParameterDeclaration(node) { + var root = getRootDeclaration(node); + return root.kind === 142; + } + ts.isParameterDeclaration = isParameterDeclaration; + function getRootDeclaration(node) { + while (node.kind === 169) { + node = node.parent.parent; + } + return node; + } + ts.getRootDeclaration = getRootDeclaration; + function nodeStartsNewLexicalEnvironment(n) { + return isFunctionLike(n) || n.kind === 225 || n.kind === 256; + } + ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment; + function cloneNode(node, location, flags, parent) { + var clone = location !== undefined + ? ts.createNode(node.kind, location.pos, location.end) + : createSynthesizedNode(node.kind); + for (var key in node) { + if (clone.hasOwnProperty(key) || !node.hasOwnProperty(key)) { + continue; + } + clone[key] = node[key]; + } + if (flags !== undefined) { + clone.flags = flags; + } + if (parent !== undefined) { + clone.parent = parent; + } + return clone; + } + ts.cloneNode = cloneNode; + function cloneEntityName(node, parent) { + var clone = cloneNode(node, node, node.flags, parent); + if (isQualifiedName(clone)) { + var left = clone.left, right = clone.right; + clone.left = cloneEntityName(left, clone); + clone.right = cloneNode(right, right, right.flags, parent); + } + return clone; + } + ts.cloneEntityName = cloneEntityName; + function isQualifiedName(node) { + return node.kind === 139; + } + ts.isQualifiedName = isQualifiedName; + function nodeIsSynthesized(node) { + return node.pos === -1; + } + ts.nodeIsSynthesized = nodeIsSynthesized; + function createSynthesizedNode(kind, startsOnNewLine) { + var node = ts.createNode(kind, -1, -1); + node.startsOnNewLine = startsOnNewLine; + return node; + } + ts.createSynthesizedNode = createSynthesizedNode; + function createSynthesizedNodeArray() { + var array = []; + array.pos = -1; + array.end = -1; + return array; + } + ts.createSynthesizedNodeArray = createSynthesizedNodeArray; + function createDiagnosticCollection() { + var nonFileDiagnostics = []; + var fileDiagnostics = {}; + var diagnosticsModified = false; + var modificationCount = 0; + return { + add: add, + getGlobalDiagnostics: getGlobalDiagnostics, + getDiagnostics: getDiagnostics, + getModificationCount: getModificationCount, + reattachFileDiagnostics: reattachFileDiagnostics + }; + function getModificationCount() { + return modificationCount; + } + function reattachFileDiagnostics(newFile) { + if (!ts.hasProperty(fileDiagnostics, newFile.fileName)) { + return; + } + for (var _i = 0, _a = fileDiagnostics[newFile.fileName]; _i < _a.length; _i++) { + var diagnostic = _a[_i]; + diagnostic.file = newFile; + } + } + function add(diagnostic) { + var diagnostics; + if (diagnostic.file) { + diagnostics = fileDiagnostics[diagnostic.file.fileName]; + if (!diagnostics) { + diagnostics = []; + fileDiagnostics[diagnostic.file.fileName] = diagnostics; + } + } + else { + diagnostics = nonFileDiagnostics; + } + diagnostics.push(diagnostic); + diagnosticsModified = true; + modificationCount++; + } + function getGlobalDiagnostics() { + sortAndDeduplicate(); + return nonFileDiagnostics; + } + function getDiagnostics(fileName) { + sortAndDeduplicate(); + if (fileName) { + return fileDiagnostics[fileName] || []; + } + var allDiagnostics = []; + function pushDiagnostic(d) { + allDiagnostics.push(d); + } + ts.forEach(nonFileDiagnostics, pushDiagnostic); + for (var key in fileDiagnostics) { + if (ts.hasProperty(fileDiagnostics, key)) { + ts.forEach(fileDiagnostics[key], pushDiagnostic); + } + } + return ts.sortAndDeduplicateDiagnostics(allDiagnostics); + } + function sortAndDeduplicate() { + if (!diagnosticsModified) { + return; + } + diagnosticsModified = false; + nonFileDiagnostics = ts.sortAndDeduplicateDiagnostics(nonFileDiagnostics); + for (var key in fileDiagnostics) { + if (ts.hasProperty(fileDiagnostics, key)) { + fileDiagnostics[key] = ts.sortAndDeduplicateDiagnostics(fileDiagnostics[key]); + } + } + } + } + ts.createDiagnosticCollection = createDiagnosticCollection; + var escapedCharsRegExp = /[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g; + var escapedCharsMap = { + "\0": "\\0", + "\t": "\\t", + "\v": "\\v", + "\f": "\\f", + "\b": "\\b", + "\r": "\\r", + "\n": "\\n", + "\\": "\\\\", + "\"": "\\\"", + "\u2028": "\\u2028", + "\u2029": "\\u2029", + "\u0085": "\\u0085" + }; + function escapeString(s) { + s = escapedCharsRegExp.test(s) ? s.replace(escapedCharsRegExp, getReplacement) : s; + return s; + function getReplacement(c) { + return escapedCharsMap[c] || get16BitUnicodeEscapeSequence(c.charCodeAt(0)); + } + } + ts.escapeString = escapeString; + function isIntrinsicJsxName(name) { + var ch = name.substr(0, 1); + return ch.toLowerCase() === ch; + } + ts.isIntrinsicJsxName = isIntrinsicJsxName; + function get16BitUnicodeEscapeSequence(charCode) { + var hexCharCode = charCode.toString(16).toUpperCase(); + var paddedHexCode = ("0000" + hexCharCode).slice(-4); + return "\\u" + paddedHexCode; + } + var nonAsciiCharacters = /[^\u0000-\u007F]/g; + function escapeNonAsciiCharacters(s) { + return nonAsciiCharacters.test(s) ? + s.replace(nonAsciiCharacters, function (c) { return get16BitUnicodeEscapeSequence(c.charCodeAt(0)); }) : + s; + } + ts.escapeNonAsciiCharacters = escapeNonAsciiCharacters; + var indentStrings = ["", " "]; + function getIndentString(level) { + if (indentStrings[level] === undefined) { + indentStrings[level] = getIndentString(level - 1) + indentStrings[1]; + } + return indentStrings[level]; + } + ts.getIndentString = getIndentString; + function getIndentSize() { + return indentStrings[1].length; + } + ts.getIndentSize = getIndentSize; + function createTextWriter(newLine) { + var output; + var indent; + var lineStart; + var lineCount; + var linePos; + function write(s) { + if (s && s.length) { + if (lineStart) { + output += getIndentString(indent); + lineStart = false; + } + output += s; + } + } + function reset() { + output = ""; + indent = 0; + lineStart = true; + lineCount = 0; + linePos = 0; + } + function rawWrite(s) { + if (s !== undefined) { + if (lineStart) { + lineStart = false; + } + output += s; + } + } + function writeLiteral(s) { + if (s && s.length) { + write(s); + var lineStartsOfS = ts.computeLineStarts(s); + if (lineStartsOfS.length > 1) { + lineCount = lineCount + lineStartsOfS.length - 1; + linePos = output.length - s.length + ts.lastOrUndefined(lineStartsOfS); + } + } + } + function writeLine() { + if (!lineStart) { + output += newLine; + lineCount++; + linePos = output.length; + lineStart = true; + } + } + function writeTextOfNode(text, node) { + write(getTextOfNodeFromSourceText(text, node)); + } + reset(); + return { + write: write, + rawWrite: rawWrite, + writeTextOfNode: writeTextOfNode, + writeLiteral: writeLiteral, + writeLine: writeLine, + increaseIndent: function () { indent++; }, + decreaseIndent: function () { indent--; }, + getIndent: function () { return indent; }, + getTextPos: function () { return output.length; }, + getLine: function () { return lineCount + 1; }, + getColumn: function () { return lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1; }, + getText: function () { return output; }, + reset: reset + }; + } + ts.createTextWriter = createTextWriter; + function getExternalModuleNameFromPath(host, fileName) { + var getCanonicalFileName = function (f) { return host.getCanonicalFileName(f); }; + var dir = ts.toPath(host.getCommonSourceDirectory(), host.getCurrentDirectory(), getCanonicalFileName); + var filePath = ts.getNormalizedAbsolutePath(fileName, host.getCurrentDirectory()); + var relativePath = ts.getRelativePathToDirectoryOrUrl(dir, filePath, dir, getCanonicalFileName, false); + return ts.removeFileExtension(relativePath); + } + ts.getExternalModuleNameFromPath = getExternalModuleNameFromPath; + function getOwnEmitOutputFilePath(sourceFile, host, extension) { + var compilerOptions = host.getCompilerOptions(); + var emitOutputFilePathWithoutExtension; + if (compilerOptions.outDir) { + emitOutputFilePathWithoutExtension = ts.removeFileExtension(getSourceFilePathInNewDir(sourceFile, host, compilerOptions.outDir)); + } + else { + emitOutputFilePathWithoutExtension = ts.removeFileExtension(sourceFile.fileName); + } + return emitOutputFilePathWithoutExtension + extension; + } + ts.getOwnEmitOutputFilePath = getOwnEmitOutputFilePath; + function getDeclarationEmitOutputFilePath(sourceFile, host) { + var options = host.getCompilerOptions(); + var outputDir = options.declarationDir || options.outDir; + if (options.declaration) { + var path = outputDir + ? getSourceFilePathInNewDir(sourceFile, host, outputDir) + : sourceFile.fileName; + return ts.removeFileExtension(path) + ".d.ts"; + } + } + ts.getDeclarationEmitOutputFilePath = getDeclarationEmitOutputFilePath; + function getEmitScriptTarget(compilerOptions) { + return compilerOptions.target || 0; + } + ts.getEmitScriptTarget = getEmitScriptTarget; + function getEmitModuleKind(compilerOptions) { + return typeof compilerOptions.module === "number" ? + compilerOptions.module : + getEmitScriptTarget(compilerOptions) === 2 ? ts.ModuleKind.ES6 : ts.ModuleKind.CommonJS; + } + ts.getEmitModuleKind = getEmitModuleKind; + function forEachExpectedEmitFile(host, action, targetSourceFile) { + var options = host.getCompilerOptions(); + if (options.outFile || options.out) { + onBundledEmit(host); + } + else { + var sourceFiles = targetSourceFile === undefined ? host.getSourceFiles() : [targetSourceFile]; + for (var _i = 0, sourceFiles_1 = sourceFiles; _i < sourceFiles_1.length; _i++) { + var sourceFile = sourceFiles_1[_i]; + if (!isDeclarationFile(sourceFile)) { + onSingleFileEmit(host, sourceFile); + } + } + } + function onSingleFileEmit(host, sourceFile) { + var extension = ".js"; + if (options.jsx === 1) { + if (isSourceFileJavaScript(sourceFile)) { + if (ts.fileExtensionIs(sourceFile.fileName, ".jsx")) { + extension = ".jsx"; + } + } + else if (sourceFile.languageVariant === 1) { + extension = ".jsx"; + } + } + var jsFilePath = getOwnEmitOutputFilePath(sourceFile, host, extension); + var emitFileNames = { + jsFilePath: jsFilePath, + sourceMapFilePath: getSourceMapFilePath(jsFilePath, options), + declarationFilePath: !isSourceFileJavaScript(sourceFile) ? getDeclarationEmitOutputFilePath(sourceFile, host) : undefined + }; + action(emitFileNames, [sourceFile], false); + } + function onBundledEmit(host) { + var bundledSources = ts.filter(host.getSourceFiles(), function (sourceFile) { + return !isDeclarationFile(sourceFile) + && (!ts.isExternalModule(sourceFile) || !!getEmitModuleKind(options)); + }); + if (bundledSources.length) { + var jsFilePath = options.outFile || options.out; + var emitFileNames = { + jsFilePath: jsFilePath, + sourceMapFilePath: getSourceMapFilePath(jsFilePath, options), + declarationFilePath: options.declaration ? ts.removeFileExtension(jsFilePath) + ".d.ts" : undefined + }; + action(emitFileNames, bundledSources, true); + } + } + function getSourceMapFilePath(jsFilePath, options) { + return options.sourceMap ? jsFilePath + ".map" : undefined; + } + } + ts.forEachExpectedEmitFile = forEachExpectedEmitFile; + function getSourceFilePathInNewDir(sourceFile, host, newDirPath) { + var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory()); + sourceFilePath = sourceFilePath.replace(host.getCommonSourceDirectory(), ""); + return ts.combinePaths(newDirPath, sourceFilePath); + } + ts.getSourceFilePathInNewDir = getSourceFilePathInNewDir; + function writeFile(host, diagnostics, fileName, data, writeByteOrderMark, sourceFiles) { + host.writeFile(fileName, data, writeByteOrderMark, function (hostErrorMessage) { + diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage)); + }, sourceFiles); + } + ts.writeFile = writeFile; + function getLineOfLocalPosition(currentSourceFile, pos) { + return ts.getLineAndCharacterOfPosition(currentSourceFile, pos).line; + } + ts.getLineOfLocalPosition = getLineOfLocalPosition; + function getLineOfLocalPositionFromLineMap(lineMap, pos) { + return ts.computeLineAndCharacterOfPosition(lineMap, pos).line; + } + ts.getLineOfLocalPositionFromLineMap = getLineOfLocalPositionFromLineMap; + function getFirstConstructorWithBody(node) { + return ts.forEach(node.members, function (member) { + if (member.kind === 148 && nodeIsPresent(member.body)) { + return member; + } + }); + } + ts.getFirstConstructorWithBody = getFirstConstructorWithBody; + function getSetAccessorTypeAnnotationNode(accessor) { + if (accessor && accessor.parameters.length > 0) { + var hasThis = accessor.parameters.length === 2 && + accessor.parameters[0].name.kind === 69 && + accessor.parameters[0].name.originalKeywordKind === 97; + return accessor.parameters[hasThis ? 1 : 0].type; + } + } + ts.getSetAccessorTypeAnnotationNode = getSetAccessorTypeAnnotationNode; + function getAllAccessorDeclarations(declarations, accessor) { + var firstAccessor; + var secondAccessor; + var getAccessor; + var setAccessor; + if (hasDynamicName(accessor)) { + firstAccessor = accessor; + if (accessor.kind === 149) { + getAccessor = accessor; + } + else if (accessor.kind === 150) { + setAccessor = accessor; + } + else { + ts.Debug.fail("Accessor has wrong kind"); + } + } + else { + ts.forEach(declarations, function (member) { + if ((member.kind === 149 || member.kind === 150) + && (member.flags & 32) === (accessor.flags & 32)) { + var memberName = getPropertyNameForPropertyNameNode(member.name); + var accessorName = getPropertyNameForPropertyNameNode(accessor.name); + if (memberName === accessorName) { + if (!firstAccessor) { + firstAccessor = member; + } + else if (!secondAccessor) { + secondAccessor = member; + } + if (member.kind === 149 && !getAccessor) { + getAccessor = member; + } + if (member.kind === 150 && !setAccessor) { + setAccessor = member; + } + } + } + }); + } + return { + firstAccessor: firstAccessor, + secondAccessor: secondAccessor, + getAccessor: getAccessor, + setAccessor: setAccessor + }; + } + ts.getAllAccessorDeclarations = getAllAccessorDeclarations; + function emitNewLineBeforeLeadingComments(lineMap, writer, node, leadingComments) { + if (leadingComments && leadingComments.length && node.pos !== leadingComments[0].pos && + getLineOfLocalPositionFromLineMap(lineMap, node.pos) !== getLineOfLocalPositionFromLineMap(lineMap, leadingComments[0].pos)) { + writer.writeLine(); + } + } + ts.emitNewLineBeforeLeadingComments = emitNewLineBeforeLeadingComments; + function emitComments(text, lineMap, writer, comments, trailingSeparator, newLine, writeComment) { + var emitLeadingSpace = !trailingSeparator; + ts.forEach(comments, function (comment) { + if (emitLeadingSpace) { + writer.write(" "); + emitLeadingSpace = false; + } + writeComment(text, lineMap, writer, comment, newLine); + if (comment.hasTrailingNewLine) { + writer.writeLine(); + } + else if (trailingSeparator) { + writer.write(" "); + } + else { + emitLeadingSpace = true; + } + }); + } + ts.emitComments = emitComments; + function emitDetachedComments(text, lineMap, writer, writeComment, node, newLine, removeComments) { + var leadingComments; + var currentDetachedCommentInfo; + if (removeComments) { + if (node.pos === 0) { + leadingComments = ts.filter(ts.getLeadingCommentRanges(text, node.pos), isPinnedComment); + } + } + else { + leadingComments = ts.getLeadingCommentRanges(text, node.pos); + } + if (leadingComments) { + var detachedComments = []; + var lastComment = void 0; + for (var _i = 0, leadingComments_1 = leadingComments; _i < leadingComments_1.length; _i++) { + var comment = leadingComments_1[_i]; + if (lastComment) { + var lastCommentLine = getLineOfLocalPositionFromLineMap(lineMap, lastComment.end); + var commentLine = getLineOfLocalPositionFromLineMap(lineMap, comment.pos); + if (commentLine >= lastCommentLine + 2) { + break; + } + } + detachedComments.push(comment); + lastComment = comment; + } + if (detachedComments.length) { + var lastCommentLine = getLineOfLocalPositionFromLineMap(lineMap, ts.lastOrUndefined(detachedComments).end); + var nodeLine = getLineOfLocalPositionFromLineMap(lineMap, ts.skipTrivia(text, node.pos)); + if (nodeLine >= lastCommentLine + 2) { + emitNewLineBeforeLeadingComments(lineMap, writer, node, leadingComments); + emitComments(text, lineMap, writer, detachedComments, true, newLine, writeComment); + currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: ts.lastOrUndefined(detachedComments).end }; + } + } + } + return currentDetachedCommentInfo; + function isPinnedComment(comment) { + return text.charCodeAt(comment.pos + 1) === 42 && + text.charCodeAt(comment.pos + 2) === 33; + } + } + ts.emitDetachedComments = emitDetachedComments; + function writeCommentRange(text, lineMap, writer, comment, newLine) { + if (text.charCodeAt(comment.pos + 1) === 42) { + var firstCommentLineAndCharacter = ts.computeLineAndCharacterOfPosition(lineMap, comment.pos); + var lineCount = lineMap.length; + var firstCommentLineIndent = void 0; + for (var pos = comment.pos, currentLine = firstCommentLineAndCharacter.line; pos < comment.end; currentLine++) { + var nextLineStart = (currentLine + 1) === lineCount + ? text.length + 1 + : lineMap[currentLine + 1]; + if (pos !== comment.pos) { + if (firstCommentLineIndent === undefined) { + firstCommentLineIndent = calculateIndent(text, lineMap[firstCommentLineAndCharacter.line], comment.pos); + } + var currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); + var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(text, pos, nextLineStart); + if (spacesToEmit > 0) { + var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); + var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); + writer.rawWrite(indentSizeSpaceString); + while (numberOfSingleSpacesToEmit) { + writer.rawWrite(" "); + numberOfSingleSpacesToEmit--; + } + } + else { + writer.rawWrite(""); + } + } + writeTrimmedCurrentLine(text, comment, writer, newLine, pos, nextLineStart); + pos = nextLineStart; + } + } + else { + writer.write(text.substring(comment.pos, comment.end)); + } + } + ts.writeCommentRange = writeCommentRange; + function writeTrimmedCurrentLine(text, comment, writer, newLine, pos, nextLineStart) { + var end = Math.min(comment.end, nextLineStart - 1); + var currentLineText = text.substring(pos, end).replace(/^\s+|\s+$/g, ""); + if (currentLineText) { + writer.write(currentLineText); + if (end !== comment.end) { + writer.writeLine(); + } + } + else { + writer.writeLiteral(newLine); + } + } + function calculateIndent(text, pos, end) { + var currentLineIndent = 0; + for (; pos < end && ts.isWhiteSpace(text.charCodeAt(pos)); pos++) { + if (text.charCodeAt(pos) === 9) { + currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize()); + } + else { + currentLineIndent++; + } + } + return currentLineIndent; + } + function modifierToFlag(token) { + switch (token) { + case 113: return 32; + case 112: return 4; + case 111: return 16; + case 110: return 8; + case 115: return 128; + case 82: return 1; + case 122: return 2; + case 74: return 2048; + case 77: return 512; + case 118: return 256; + case 128: return 64; + } + return 0; + } + ts.modifierToFlag = modifierToFlag; + function isLeftHandSideExpression(expr) { + if (expr) { + switch (expr.kind) { + case 172: + case 173: + case 175: + case 174: + case 196: + case 241: + case 242: + case 176: + case 170: + case 178: + case 171: + case 192: + case 179: + case 69: + case 10: + case 8: + case 9: + case 11: + case 189: + case 84: + case 93: + case 97: + case 99: + case 95: + return true; + } + } + return false; + } + ts.isLeftHandSideExpression = isLeftHandSideExpression; + function isAssignmentOperator(token) { + return token >= 56 && token <= 68; + } + ts.isAssignmentOperator = isAssignmentOperator; + function isExpressionWithTypeArgumentsInClassExtendsClause(node) { + return node.kind === 194 && + node.parent.token === 83 && + isClassLike(node.parent.parent); + } + ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause; + function isSupportedExpressionWithTypeArguments(node) { + return isSupportedExpressionWithTypeArgumentsRest(node.expression); + } + ts.isSupportedExpressionWithTypeArguments = isSupportedExpressionWithTypeArguments; + function isSupportedExpressionWithTypeArgumentsRest(node) { + if (node.kind === 69) { + return true; + } + else if (isPropertyAccessExpression(node)) { + return isSupportedExpressionWithTypeArgumentsRest(node.expression); + } + else { + return false; + } + } + function isRightSideOfQualifiedNameOrPropertyAccess(node) { + return (node.parent.kind === 139 && node.parent.right === node) || + (node.parent.kind === 172 && node.parent.name === node); + } + ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess; + function isEmptyObjectLiteralOrArrayLiteral(expression) { + var kind = expression.kind; + if (kind === 171) { + return expression.properties.length === 0; + } + if (kind === 170) { + return expression.elements.length === 0; + } + return false; + } + ts.isEmptyObjectLiteralOrArrayLiteral = isEmptyObjectLiteralOrArrayLiteral; + function getLocalSymbolForExportDefault(symbol) { + return symbol && symbol.valueDeclaration && (symbol.valueDeclaration.flags & 512) ? symbol.valueDeclaration.localSymbol : undefined; + } + ts.getLocalSymbolForExportDefault = getLocalSymbolForExportDefault; + function hasJavaScriptFileExtension(fileName) { + return ts.forEach(ts.supportedJavascriptExtensions, function (extension) { return ts.fileExtensionIs(fileName, extension); }); + } + ts.hasJavaScriptFileExtension = hasJavaScriptFileExtension; + function getExpandedCharCodes(input) { + var output = []; + var length = input.length; + for (var i = 0; i < length; i++) { + var charCode = input.charCodeAt(i); + if (charCode < 0x80) { + output.push(charCode); + } + else if (charCode < 0x800) { + output.push((charCode >> 6) | 192); + output.push((charCode & 63) | 128); + } + else if (charCode < 0x10000) { + output.push((charCode >> 12) | 224); + output.push(((charCode >> 6) & 63) | 128); + output.push((charCode & 63) | 128); + } + else if (charCode < 0x20000) { + output.push((charCode >> 18) | 240); + output.push(((charCode >> 12) & 63) | 128); + output.push(((charCode >> 6) & 63) | 128); + output.push((charCode & 63) | 128); + } + else { + ts.Debug.assert(false, "Unexpected code point"); + } + } + return output; + } + ts.stringify = typeof JSON !== "undefined" && JSON.stringify + ? JSON.stringify + : stringifyFallback; + function stringifyFallback(value) { + return value === undefined ? undefined : stringifyValue(value); + } + function stringifyValue(value) { + return typeof value === "string" ? "\"" + escapeString(value) + "\"" + : typeof value === "number" ? isFinite(value) ? String(value) : "null" + : typeof value === "boolean" ? value ? "true" : "false" + : typeof value === "object" && value ? ts.isArray(value) ? cycleCheck(stringifyArray, value) : cycleCheck(stringifyObject, value) + : "null"; + } + function cycleCheck(cb, value) { + ts.Debug.assert(!value.hasOwnProperty("__cycle"), "Converting circular structure to JSON"); + value.__cycle = true; + var result = cb(value); + delete value.__cycle; + return result; + } + function stringifyArray(value) { + return "[" + ts.reduceLeft(value, stringifyElement, "") + "]"; + } + function stringifyElement(memo, value) { + return (memo ? memo + "," : memo) + stringifyValue(value); + } + function stringifyObject(value) { + return "{" + ts.reduceProperties(value, stringifyProperty, "") + "}"; + } + function stringifyProperty(memo, value, key) { + return value === undefined || typeof value === "function" || key === "__cycle" ? memo + : (memo ? memo + "," : memo) + ("\"" + escapeString(key) + "\":" + stringifyValue(value)); + } + var base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + function convertToBase64(input) { + var result = ""; + var charCodes = getExpandedCharCodes(input); + var i = 0; + var length = charCodes.length; + var byte1, byte2, byte3, byte4; + while (i < length) { + byte1 = charCodes[i] >> 2; + byte2 = (charCodes[i] & 3) << 4 | charCodes[i + 1] >> 4; + byte3 = (charCodes[i + 1] & 15) << 2 | charCodes[i + 2] >> 6; + byte4 = charCodes[i + 2] & 63; + if (i + 1 >= length) { + byte3 = byte4 = 64; + } + else if (i + 2 >= length) { + byte4 = 64; + } + result += base64Digits.charAt(byte1) + base64Digits.charAt(byte2) + base64Digits.charAt(byte3) + base64Digits.charAt(byte4); + i += 3; + } + return result; + } + ts.convertToBase64 = convertToBase64; + function convertToRelativePath(absoluteOrRelativePath, basePath, getCanonicalFileName) { + return !ts.isRootedDiskPath(absoluteOrRelativePath) + ? absoluteOrRelativePath + : ts.getRelativePathToDirectoryOrUrl(basePath, absoluteOrRelativePath, basePath, getCanonicalFileName, false); + } + ts.convertToRelativePath = convertToRelativePath; + var carriageReturnLineFeed = "\r\n"; + var lineFeed = "\n"; + function getNewLineCharacter(options) { + if (options.newLine === 0) { + return carriageReturnLineFeed; + } + else if (options.newLine === 1) { + return lineFeed; + } + else if (ts.sys) { + return ts.sys.newLine; + } + return carriageReturnLineFeed; + } + ts.getNewLineCharacter = getNewLineCharacter; + function isWatchSet(options) { + return options.watch && options.hasOwnProperty("watch"); + } + ts.isWatchSet = isWatchSet; +})(ts || (ts = {})); +var ts; +(function (ts) { + function getDefaultLibFileName(options) { + return options.target === 2 ? "lib.es6.d.ts" : "lib.d.ts"; + } + ts.getDefaultLibFileName = getDefaultLibFileName; + function textSpanEnd(span) { + return span.start + span.length; + } + ts.textSpanEnd = textSpanEnd; + function textSpanIsEmpty(span) { + return span.length === 0; + } + ts.textSpanIsEmpty = textSpanIsEmpty; + function textSpanContainsPosition(span, position) { + return position >= span.start && position < textSpanEnd(span); + } + ts.textSpanContainsPosition = textSpanContainsPosition; + function textSpanContainsTextSpan(span, other) { + return other.start >= span.start && textSpanEnd(other) <= textSpanEnd(span); + } + ts.textSpanContainsTextSpan = textSpanContainsTextSpan; + function textSpanOverlapsWith(span, other) { + var overlapStart = Math.max(span.start, other.start); + var overlapEnd = Math.min(textSpanEnd(span), textSpanEnd(other)); + return overlapStart < overlapEnd; + } + ts.textSpanOverlapsWith = textSpanOverlapsWith; + function textSpanOverlap(span1, span2) { + var overlapStart = Math.max(span1.start, span2.start); + var overlapEnd = Math.min(textSpanEnd(span1), textSpanEnd(span2)); + if (overlapStart < overlapEnd) { + return createTextSpanFromBounds(overlapStart, overlapEnd); + } + return undefined; + } + ts.textSpanOverlap = textSpanOverlap; + function textSpanIntersectsWithTextSpan(span, other) { + return other.start <= textSpanEnd(span) && textSpanEnd(other) >= span.start; + } + ts.textSpanIntersectsWithTextSpan = textSpanIntersectsWithTextSpan; + function textSpanIntersectsWith(span, start, length) { + var end = start + length; + return start <= textSpanEnd(span) && end >= span.start; + } + ts.textSpanIntersectsWith = textSpanIntersectsWith; + function decodedTextSpanIntersectsWith(start1, length1, start2, length2) { + var end1 = start1 + length1; + var end2 = start2 + length2; + return start2 <= end1 && end2 >= start1; + } + ts.decodedTextSpanIntersectsWith = decodedTextSpanIntersectsWith; + function textSpanIntersectsWithPosition(span, position) { + return position <= textSpanEnd(span) && position >= span.start; + } + ts.textSpanIntersectsWithPosition = textSpanIntersectsWithPosition; + function textSpanIntersection(span1, span2) { + var intersectStart = Math.max(span1.start, span2.start); + var intersectEnd = Math.min(textSpanEnd(span1), textSpanEnd(span2)); + if (intersectStart <= intersectEnd) { + return createTextSpanFromBounds(intersectStart, intersectEnd); + } + return undefined; + } + ts.textSpanIntersection = textSpanIntersection; + function createTextSpan(start, length) { + if (start < 0) { + throw new Error("start < 0"); + } + if (length < 0) { + throw new Error("length < 0"); + } + return { start: start, length: length }; + } + ts.createTextSpan = createTextSpan; + function createTextSpanFromBounds(start, end) { + return createTextSpan(start, end - start); + } + ts.createTextSpanFromBounds = createTextSpanFromBounds; + function textChangeRangeNewSpan(range) { + return createTextSpan(range.span.start, range.newLength); + } + ts.textChangeRangeNewSpan = textChangeRangeNewSpan; + function textChangeRangeIsUnchanged(range) { + return textSpanIsEmpty(range.span) && range.newLength === 0; + } + ts.textChangeRangeIsUnchanged = textChangeRangeIsUnchanged; + function createTextChangeRange(span, newLength) { + if (newLength < 0) { + throw new Error("newLength < 0"); + } + return { span: span, newLength: newLength }; + } + ts.createTextChangeRange = createTextChangeRange; + ts.unchangedTextChangeRange = createTextChangeRange(createTextSpan(0, 0), 0); + function collapseTextChangeRangesAcrossMultipleVersions(changes) { + if (changes.length === 0) { + return ts.unchangedTextChangeRange; + } + if (changes.length === 1) { + return changes[0]; + } + var change0 = changes[0]; + var oldStartN = change0.span.start; + var oldEndN = textSpanEnd(change0.span); + var newEndN = oldStartN + change0.newLength; + for (var i = 1; i < changes.length; i++) { + var nextChange = changes[i]; + var oldStart1 = oldStartN; + var oldEnd1 = oldEndN; + var newEnd1 = newEndN; + var oldStart2 = nextChange.span.start; + var oldEnd2 = textSpanEnd(nextChange.span); + var newEnd2 = oldStart2 + nextChange.newLength; + oldStartN = Math.min(oldStart1, oldStart2); + oldEndN = Math.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1)); + newEndN = Math.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2)); + } + return createTextChangeRange(createTextSpanFromBounds(oldStartN, oldEndN), newEndN - oldStartN); + } + ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions; + function getTypeParameterOwner(d) { + if (d && d.kind === 141) { + for (var current = d; current; current = current.parent) { + if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 222) { + return current; + } + } + } + } + ts.getTypeParameterOwner = getTypeParameterOwner; + function isParameterPropertyDeclaration(node) { + return node.flags & 92 && node.parent.kind === 148 && ts.isClassLike(node.parent.parent); + } + ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration; + function startsWith(str, prefix) { + return str.lastIndexOf(prefix, 0) === 0; + } + ts.startsWith = startsWith; + function endsWith(str, suffix) { + var expectedPos = str.length - suffix.length; + return str.indexOf(suffix, expectedPos) === expectedPos; + } + ts.endsWith = endsWith; +})(ts || (ts = {})); +var ts; +(function (ts) { + ts.parseTime = 0; + var NodeConstructor; + var SourceFileConstructor; + function createNode(kind, pos, end) { + if (kind === 256) { + return new (SourceFileConstructor || (SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor()))(kind, pos, end); + } + else { + return new (NodeConstructor || (NodeConstructor = ts.objectAllocator.getNodeConstructor()))(kind, pos, end); + } + } + ts.createNode = createNode; + function visitNode(cbNode, node) { + if (node) { + return cbNode(node); + } + } + function visitNodeArray(cbNodes, nodes) { + if (nodes) { + return cbNodes(nodes); + } + } + function visitEachNode(cbNode, nodes) { + if (nodes) { + for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { + var node = nodes_1[_i]; + var result = cbNode(node); + if (result) { + return result; + } + } + } + } + function forEachChild(node, cbNode, cbNodeArray) { + if (!node) { + return; + } + var visitNodes = cbNodeArray ? visitNodeArray : visitEachNode; + var cbNodes = cbNodeArray || cbNode; + switch (node.kind) { + case 139: + return visitNode(cbNode, node.left) || + visitNode(cbNode, node.right); + case 141: + return visitNode(cbNode, node.name) || + visitNode(cbNode, node.constraint) || + visitNode(cbNode, node.expression); + case 254: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.name) || + visitNode(cbNode, node.questionToken) || + visitNode(cbNode, node.equalsToken) || + visitNode(cbNode, node.objectAssignmentInitializer); + case 142: + case 145: + case 144: + case 253: + case 218: + case 169: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.propertyName) || + visitNode(cbNode, node.dotDotDotToken) || + visitNode(cbNode, node.name) || + visitNode(cbNode, node.questionToken) || + visitNode(cbNode, node.type) || + visitNode(cbNode, node.initializer); + case 156: + case 157: + case 151: + case 152: + case 153: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNodes(cbNodes, node.typeParameters) || + visitNodes(cbNodes, node.parameters) || + visitNode(cbNode, node.type); + case 147: + case 146: + case 148: + case 149: + case 150: + case 179: + case 220: + case 180: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.asteriskToken) || + visitNode(cbNode, node.name) || + visitNode(cbNode, node.questionToken) || + visitNodes(cbNodes, node.typeParameters) || + visitNodes(cbNodes, node.parameters) || + visitNode(cbNode, node.type) || + visitNode(cbNode, node.equalsGreaterThanToken) || + visitNode(cbNode, node.body); + case 155: + return visitNode(cbNode, node.typeName) || + visitNodes(cbNodes, node.typeArguments); + case 154: + return visitNode(cbNode, node.parameterName) || + visitNode(cbNode, node.type); + case 158: + return visitNode(cbNode, node.exprName); + case 159: + return visitNodes(cbNodes, node.members); + case 160: + return visitNode(cbNode, node.elementType); + case 161: + return visitNodes(cbNodes, node.elementTypes); + case 162: + case 163: + return visitNodes(cbNodes, node.types); + case 164: + return visitNode(cbNode, node.type); + case 167: + case 168: + return visitNodes(cbNodes, node.elements); + case 170: + return visitNodes(cbNodes, node.elements); + case 171: + return visitNodes(cbNodes, node.properties); + case 172: + return visitNode(cbNode, node.expression) || + visitNode(cbNode, node.dotToken) || + visitNode(cbNode, node.name); + case 173: + return visitNode(cbNode, node.expression) || + visitNode(cbNode, node.argumentExpression); + case 174: + case 175: + return visitNode(cbNode, node.expression) || + visitNodes(cbNodes, node.typeArguments) || + visitNodes(cbNodes, node.arguments); + case 176: + return visitNode(cbNode, node.tag) || + visitNode(cbNode, node.template); + case 177: + return visitNode(cbNode, node.type) || + visitNode(cbNode, node.expression); + case 178: + return visitNode(cbNode, node.expression); + case 181: + return visitNode(cbNode, node.expression); + case 182: + return visitNode(cbNode, node.expression); + case 183: + return visitNode(cbNode, node.expression); + case 185: + return visitNode(cbNode, node.operand); + case 190: + return visitNode(cbNode, node.asteriskToken) || + visitNode(cbNode, node.expression); + case 184: + return visitNode(cbNode, node.expression); + case 186: + return visitNode(cbNode, node.operand); + case 187: + return visitNode(cbNode, node.left) || + visitNode(cbNode, node.operatorToken) || + visitNode(cbNode, node.right); + case 195: + return visitNode(cbNode, node.expression) || + visitNode(cbNode, node.type); + case 196: + return visitNode(cbNode, node.expression); + case 188: + return visitNode(cbNode, node.condition) || + visitNode(cbNode, node.questionToken) || + visitNode(cbNode, node.whenTrue) || + visitNode(cbNode, node.colonToken) || + visitNode(cbNode, node.whenFalse); + case 191: + return visitNode(cbNode, node.expression); + case 199: + case 226: + return visitNodes(cbNodes, node.statements); + case 256: + return visitNodes(cbNodes, node.statements) || + visitNode(cbNode, node.endOfFileToken); + case 200: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.declarationList); + case 219: + return visitNodes(cbNodes, node.declarations); + case 202: + return visitNode(cbNode, node.expression); + case 203: + return visitNode(cbNode, node.expression) || + visitNode(cbNode, node.thenStatement) || + visitNode(cbNode, node.elseStatement); + case 204: + return visitNode(cbNode, node.statement) || + visitNode(cbNode, node.expression); + case 205: + return visitNode(cbNode, node.expression) || + visitNode(cbNode, node.statement); + case 206: + return visitNode(cbNode, node.initializer) || + visitNode(cbNode, node.condition) || + visitNode(cbNode, node.incrementor) || + visitNode(cbNode, node.statement); + case 207: + return visitNode(cbNode, node.initializer) || + visitNode(cbNode, node.expression) || + visitNode(cbNode, node.statement); + case 208: + return visitNode(cbNode, node.initializer) || + visitNode(cbNode, node.expression) || + visitNode(cbNode, node.statement); + case 209: + case 210: + return visitNode(cbNode, node.label); + case 211: + return visitNode(cbNode, node.expression); + case 212: + return visitNode(cbNode, node.expression) || + visitNode(cbNode, node.statement); + case 213: + return visitNode(cbNode, node.expression) || + visitNode(cbNode, node.caseBlock); + case 227: + return visitNodes(cbNodes, node.clauses); + case 249: + return visitNode(cbNode, node.expression) || + visitNodes(cbNodes, node.statements); + case 250: + return visitNodes(cbNodes, node.statements); + case 214: + return visitNode(cbNode, node.label) || + visitNode(cbNode, node.statement); + case 215: + return visitNode(cbNode, node.expression); + case 216: + return visitNode(cbNode, node.tryBlock) || + visitNode(cbNode, node.catchClause) || + visitNode(cbNode, node.finallyBlock); + case 252: + return visitNode(cbNode, node.variableDeclaration) || + visitNode(cbNode, node.block); + case 143: + return visitNode(cbNode, node.expression); + case 221: + case 192: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.name) || + visitNodes(cbNodes, node.typeParameters) || + visitNodes(cbNodes, node.heritageClauses) || + visitNodes(cbNodes, node.members); + case 222: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.name) || + visitNodes(cbNodes, node.typeParameters) || + visitNodes(cbNodes, node.heritageClauses) || + visitNodes(cbNodes, node.members); + case 223: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.name) || + visitNodes(cbNodes, node.typeParameters) || + visitNode(cbNode, node.type); + case 224: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.name) || + visitNodes(cbNodes, node.members); + case 255: + return visitNode(cbNode, node.name) || + visitNode(cbNode, node.initializer); + case 225: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.name) || + visitNode(cbNode, node.body); + case 229: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.name) || + visitNode(cbNode, node.moduleReference); + case 230: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.importClause) || + visitNode(cbNode, node.moduleSpecifier); + case 231: + return visitNode(cbNode, node.name) || + visitNode(cbNode, node.namedBindings); + case 228: + return visitNode(cbNode, node.name); + case 232: + return visitNode(cbNode, node.name); + case 233: + case 237: + return visitNodes(cbNodes, node.elements); + case 236: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.exportClause) || + visitNode(cbNode, node.moduleSpecifier); + case 234: + case 238: + return visitNode(cbNode, node.propertyName) || + visitNode(cbNode, node.name); + case 235: + return visitNodes(cbNodes, node.decorators) || + visitNodes(cbNodes, node.modifiers) || + visitNode(cbNode, node.expression); + case 189: + return visitNode(cbNode, node.head) || visitNodes(cbNodes, node.templateSpans); + case 197: + return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal); + case 140: + return visitNode(cbNode, node.expression); + case 251: + return visitNodes(cbNodes, node.types); + case 194: + return visitNode(cbNode, node.expression) || + visitNodes(cbNodes, node.typeArguments); + case 240: + return visitNode(cbNode, node.expression); + case 239: + return visitNodes(cbNodes, node.decorators); + case 241: + return visitNode(cbNode, node.openingElement) || + visitNodes(cbNodes, node.children) || + visitNode(cbNode, node.closingElement); + case 242: + case 243: + return visitNode(cbNode, node.tagName) || + visitNodes(cbNodes, node.attributes); + case 246: + return visitNode(cbNode, node.name) || + visitNode(cbNode, node.initializer); + case 247: + return visitNode(cbNode, node.expression); + case 248: + return visitNode(cbNode, node.expression); + case 245: + return visitNode(cbNode, node.tagName); + case 257: + return visitNode(cbNode, node.type); + case 261: + return visitNodes(cbNodes, node.types); + case 262: + return visitNodes(cbNodes, node.types); + case 260: + return visitNode(cbNode, node.elementType); + case 264: + return visitNode(cbNode, node.type); + case 263: + return visitNode(cbNode, node.type); + case 265: + return visitNodes(cbNodes, node.members); + case 267: + return visitNode(cbNode, node.name) || + visitNodes(cbNodes, node.typeArguments); + case 268: + return visitNode(cbNode, node.type); + case 269: + return visitNodes(cbNodes, node.parameters) || + visitNode(cbNode, node.type); + case 270: + return visitNode(cbNode, node.type); + case 271: + return visitNode(cbNode, node.type); + case 272: + return visitNode(cbNode, node.type); + case 266: + return visitNode(cbNode, node.name) || + visitNode(cbNode, node.type); + case 273: + return visitNodes(cbNodes, node.tags); + case 275: + return visitNode(cbNode, node.preParameterName) || + visitNode(cbNode, node.typeExpression) || + visitNode(cbNode, node.postParameterName); + case 276: + return visitNode(cbNode, node.typeExpression); + case 277: + return visitNode(cbNode, node.typeExpression); + case 278: + return visitNodes(cbNodes, node.typeParameters); + } + } + ts.forEachChild = forEachChild; + function createSourceFile(fileName, sourceText, languageVersion, setParentNodes, scriptKind) { + if (setParentNodes === void 0) { setParentNodes = false; } + var start = new Date().getTime(); + var result = Parser.parseSourceFile(fileName, sourceText, languageVersion, undefined, setParentNodes, scriptKind); + ts.parseTime += new Date().getTime() - start; + return result; + } + ts.createSourceFile = createSourceFile; + function isExternalModule(file) { + return file.externalModuleIndicator !== undefined; + } + ts.isExternalModule = isExternalModule; + function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) { + return IncrementalParser.updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks); + } + ts.updateSourceFile = updateSourceFile; + function parseIsolatedJSDocComment(content, start, length) { + return Parser.JSDocParser.parseIsolatedJSDocComment(content, start, length); + } + ts.parseIsolatedJSDocComment = parseIsolatedJSDocComment; + function parseJSDocTypeExpressionForTests(content, start, length) { + return Parser.JSDocParser.parseJSDocTypeExpressionForTests(content, start, length); + } + ts.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests; + var Parser; + (function (Parser) { + var scanner = ts.createScanner(2, true); + var disallowInAndDecoratorContext = 4194304 | 16777216; + var NodeConstructor; + var SourceFileConstructor; + var sourceFile; + var parseDiagnostics; + var syntaxCursor; + var token; + var sourceText; + var nodeCount; + var identifiers; + var identifierCount; + var parsingContext; + var contextFlags; + var parseErrorBeforeNextFinishedNode = false; + function parseSourceFile(fileName, _sourceText, languageVersion, _syntaxCursor, setParentNodes, scriptKind) { + scriptKind = ts.ensureScriptKind(fileName, scriptKind); + initializeState(fileName, _sourceText, languageVersion, _syntaxCursor, scriptKind); + var result = parseSourceFileWorker(fileName, languageVersion, setParentNodes, scriptKind); + clearState(); + return result; + } + Parser.parseSourceFile = parseSourceFile; + function getLanguageVariant(scriptKind) { + return scriptKind === 4 || scriptKind === 2 || scriptKind === 1 ? 1 : 0; + } + function initializeState(fileName, _sourceText, languageVersion, _syntaxCursor, scriptKind) { + NodeConstructor = ts.objectAllocator.getNodeConstructor(); + SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor(); + sourceText = _sourceText; + syntaxCursor = _syntaxCursor; + parseDiagnostics = []; + parsingContext = 0; + identifiers = {}; + identifierCount = 0; + nodeCount = 0; + contextFlags = scriptKind === 1 || scriptKind === 2 ? 134217728 : 0; + parseErrorBeforeNextFinishedNode = false; + scanner.setText(sourceText); + scanner.setOnError(scanError); + scanner.setScriptTarget(languageVersion); + scanner.setLanguageVariant(getLanguageVariant(scriptKind)); + } + function clearState() { + scanner.setText(""); + scanner.setOnError(undefined); + parseDiagnostics = undefined; + sourceFile = undefined; + identifiers = undefined; + syntaxCursor = undefined; + sourceText = undefined; + } + function parseSourceFileWorker(fileName, languageVersion, setParentNodes, scriptKind) { + sourceFile = createSourceFile(fileName, languageVersion, scriptKind); + sourceFile.flags = contextFlags; + token = nextToken(); + processReferenceComments(sourceFile); + sourceFile.statements = parseList(0, parseStatement); + ts.Debug.assert(token === 1); + sourceFile.endOfFileToken = parseTokenNode(); + setExternalModuleIndicator(sourceFile); + sourceFile.nodeCount = nodeCount; + sourceFile.identifierCount = identifierCount; + sourceFile.identifiers = identifiers; + sourceFile.parseDiagnostics = parseDiagnostics; + if (setParentNodes) { + fixupParentReferences(sourceFile); + } + return sourceFile; + } + function addJSDocComment(node) { + if (contextFlags & 134217728) { + var comments = ts.getLeadingCommentRangesOfNode(node, sourceFile); + if (comments) { + for (var _i = 0, comments_1 = comments; _i < comments_1.length; _i++) { + var comment = comments_1[_i]; + var jsDocComment = JSDocParser.parseJSDocComment(node, comment.pos, comment.end - comment.pos); + if (jsDocComment) { + node.jsDocComment = jsDocComment; + } + } + } + } + return node; + } + function fixupParentReferences(sourceFile) { + var parent = sourceFile; + forEachChild(sourceFile, visitNode); + return; + function visitNode(n) { + if (n.parent !== parent) { + n.parent = parent; + var saveParent = parent; + parent = n; + forEachChild(n, visitNode); + parent = saveParent; + } + } + } + Parser.fixupParentReferences = fixupParentReferences; + function createSourceFile(fileName, languageVersion, scriptKind) { + var sourceFile = new SourceFileConstructor(256, 0, sourceText.length); + nodeCount++; + sourceFile.text = sourceText; + sourceFile.bindDiagnostics = []; + sourceFile.languageVersion = languageVersion; + sourceFile.fileName = ts.normalizePath(fileName); + sourceFile.languageVariant = getLanguageVariant(scriptKind); + sourceFile.isDeclarationFile = ts.fileExtensionIs(sourceFile.fileName, ".d.ts"); + sourceFile.scriptKind = scriptKind; + return sourceFile; + } + function setContextFlag(val, flag) { + if (val) { + contextFlags |= flag; + } + else { + contextFlags &= ~flag; + } + } + function setDisallowInContext(val) { + setContextFlag(val, 4194304); + } + function setYieldContext(val) { + setContextFlag(val, 8388608); + } + function setDecoratorContext(val) { + setContextFlag(val, 16777216); + } + function setAwaitContext(val) { + setContextFlag(val, 33554432); + } + function doOutsideOfContext(context, func) { + var contextFlagsToClear = context & contextFlags; + if (contextFlagsToClear) { + setContextFlag(false, contextFlagsToClear); + var result = func(); + setContextFlag(true, contextFlagsToClear); + return result; + } + return func(); + } + function doInsideOfContext(context, func) { + var contextFlagsToSet = context & ~contextFlags; + if (contextFlagsToSet) { + setContextFlag(true, contextFlagsToSet); + var result = func(); + setContextFlag(false, contextFlagsToSet); + return result; + } + return func(); + } + function allowInAnd(func) { + return doOutsideOfContext(4194304, func); + } + function disallowInAnd(func) { + return doInsideOfContext(4194304, func); + } + function doInYieldContext(func) { + return doInsideOfContext(8388608, func); + } + function doInDecoratorContext(func) { + return doInsideOfContext(16777216, func); + } + function doInAwaitContext(func) { + return doInsideOfContext(33554432, func); + } + function doOutsideOfAwaitContext(func) { + return doOutsideOfContext(33554432, func); + } + function doInYieldAndAwaitContext(func) { + return doInsideOfContext(8388608 | 33554432, func); + } + function inContext(flags) { + return (contextFlags & flags) !== 0; + } + function inYieldContext() { + return inContext(8388608); + } + function inDisallowInContext() { + return inContext(4194304); + } + function inDecoratorContext() { + return inContext(16777216); + } + function inAwaitContext() { + return inContext(33554432); + } + function parseErrorAtCurrentToken(message, arg0) { + var start = scanner.getTokenPos(); + var length = scanner.getTextPos() - start; + parseErrorAtPosition(start, length, message, arg0); + } + function parseErrorAtPosition(start, length, message, arg0) { + var lastError = ts.lastOrUndefined(parseDiagnostics); + if (!lastError || start !== lastError.start) { + parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, start, length, message, arg0)); + } + parseErrorBeforeNextFinishedNode = true; + } + function scanError(message, length) { + var pos = scanner.getTextPos(); + parseErrorAtPosition(pos, length || 0, message); + } + function getNodePos() { + return scanner.getStartPos(); + } + function getNodeEnd() { + return scanner.getStartPos(); + } + function nextToken() { + return token = scanner.scan(); + } + function reScanGreaterToken() { + return token = scanner.reScanGreaterToken(); + } + function reScanSlashToken() { + return token = scanner.reScanSlashToken(); + } + function reScanTemplateToken() { + return token = scanner.reScanTemplateToken(); + } + function scanJsxIdentifier() { + return token = scanner.scanJsxIdentifier(); + } + function scanJsxText() { + return token = scanner.scanJsxToken(); + } + function speculationHelper(callback, isLookAhead) { + var saveToken = token; + var saveParseDiagnosticsLength = parseDiagnostics.length; + var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode; + var saveContextFlags = contextFlags; + var result = isLookAhead + ? scanner.lookAhead(callback) + : scanner.tryScan(callback); + ts.Debug.assert(saveContextFlags === contextFlags); + if (!result || isLookAhead) { + token = saveToken; + parseDiagnostics.length = saveParseDiagnosticsLength; + parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode; + } + return result; + } + function lookAhead(callback) { + return speculationHelper(callback, true); + } + function tryParse(callback) { + return speculationHelper(callback, false); + } + function isIdentifier() { + if (token === 69) { + return true; + } + if (token === 114 && inYieldContext()) { + return false; + } + if (token === 119 && inAwaitContext()) { + return false; + } + return token > 105; + } + function parseExpected(kind, diagnosticMessage, shouldAdvance) { + if (shouldAdvance === void 0) { shouldAdvance = true; } + if (token === kind) { + if (shouldAdvance) { + nextToken(); + } + return true; + } + if (diagnosticMessage) { + parseErrorAtCurrentToken(diagnosticMessage); + } + else { + parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(kind)); + } + return false; + } + function parseOptional(t) { + if (token === t) { + nextToken(); + return true; + } + return false; + } + function parseOptionalToken(t) { + if (token === t) { + return parseTokenNode(); + } + return undefined; + } + function parseExpectedToken(t, reportAtCurrentPosition, diagnosticMessage, arg0) { + return parseOptionalToken(t) || + createMissingNode(t, reportAtCurrentPosition, diagnosticMessage, arg0); + } + function parseTokenNode() { + var node = createNode(token); + nextToken(); + return finishNode(node); + } + function canParseSemicolon() { + if (token === 23) { + return true; + } + return token === 16 || token === 1 || scanner.hasPrecedingLineBreak(); + } + function parseSemicolon() { + if (canParseSemicolon()) { + if (token === 23) { + nextToken(); + } + return true; + } + else { + return parseExpected(23); + } + } + function createNode(kind, pos) { + nodeCount++; + if (!(pos >= 0)) { + pos = scanner.getStartPos(); + } + return new NodeConstructor(kind, pos, pos); + } + function finishNode(node, end) { + node.end = end === undefined ? scanner.getStartPos() : end; + if (contextFlags) { + node.flags |= contextFlags; + } + if (parseErrorBeforeNextFinishedNode) { + parseErrorBeforeNextFinishedNode = false; + node.flags |= 67108864; + } + return node; + } + function createMissingNode(kind, reportAtCurrentPosition, diagnosticMessage, arg0) { + if (reportAtCurrentPosition) { + parseErrorAtPosition(scanner.getStartPos(), 0, diagnosticMessage, arg0); + } + else { + parseErrorAtCurrentToken(diagnosticMessage, arg0); + } + var result = createNode(kind, scanner.getStartPos()); + result.text = ""; + return finishNode(result); + } + function internIdentifier(text) { + text = ts.escapeIdentifier(text); + return ts.hasProperty(identifiers, text) ? identifiers[text] : (identifiers[text] = text); + } + function createIdentifier(isIdentifier, diagnosticMessage) { + identifierCount++; + if (isIdentifier) { + var node = createNode(69); + if (token !== 69) { + node.originalKeywordKind = token; + } + node.text = internIdentifier(scanner.getTokenValue()); + nextToken(); + return finishNode(node); + } + return createMissingNode(69, false, diagnosticMessage || ts.Diagnostics.Identifier_expected); + } + function parseIdentifier(diagnosticMessage) { + return createIdentifier(isIdentifier(), diagnosticMessage); + } + function parseIdentifierName() { + return createIdentifier(ts.tokenIsIdentifierOrKeyword(token)); + } + function isLiteralPropertyName() { + return ts.tokenIsIdentifierOrKeyword(token) || + token === 9 || + token === 8; + } + function parsePropertyNameWorker(allowComputedPropertyNames) { + if (token === 9 || token === 8) { + return parseLiteralNode(true); + } + if (allowComputedPropertyNames && token === 19) { + return parseComputedPropertyName(); + } + return parseIdentifierName(); + } + function parsePropertyName() { + return parsePropertyNameWorker(true); + } + function parseSimplePropertyName() { + return parsePropertyNameWorker(false); + } + function isSimplePropertyName() { + return token === 9 || token === 8 || ts.tokenIsIdentifierOrKeyword(token); + } + function parseComputedPropertyName() { + var node = createNode(140); + parseExpected(19); + node.expression = allowInAnd(parseExpression); + parseExpected(20); + return finishNode(node); + } + function parseContextualModifier(t) { + return token === t && tryParse(nextTokenCanFollowModifier); + } + function nextTokenIsOnSameLineAndCanFollowModifier() { + nextToken(); + if (scanner.hasPrecedingLineBreak()) { + return false; + } + return canFollowModifier(); + } + function nextTokenCanFollowModifier() { + if (token === 74) { + return nextToken() === 81; + } + if (token === 82) { + nextToken(); + if (token === 77) { + return lookAhead(nextTokenIsClassOrFunction); + } + return token !== 37 && token !== 116 && token !== 15 && canFollowModifier(); + } + if (token === 77) { + return nextTokenIsClassOrFunction(); + } + if (token === 113) { + nextToken(); + return canFollowModifier(); + } + return nextTokenIsOnSameLineAndCanFollowModifier(); + } + function parseAnyContextualModifier() { + return ts.isModifierKind(token) && tryParse(nextTokenCanFollowModifier); + } + function canFollowModifier() { + return token === 19 + || token === 15 + || token === 37 + || isLiteralPropertyName(); + } + function nextTokenIsClassOrFunction() { + nextToken(); + return token === 73 || token === 87; + } + function isListElement(parsingContext, inErrorRecovery) { + var node = currentNode(parsingContext); + if (node) { + return true; + } + switch (parsingContext) { + case 0: + case 1: + case 3: + return !(token === 23 && inErrorRecovery) && isStartOfStatement(); + case 2: + return token === 71 || token === 77; + case 4: + return lookAhead(isTypeMemberStart); + case 5: + return lookAhead(isClassMemberStart) || (token === 23 && !inErrorRecovery); + case 6: + return token === 19 || isLiteralPropertyName(); + case 12: + return token === 19 || token === 37 || isLiteralPropertyName(); + case 9: + return token === 19 || isLiteralPropertyName(); + case 7: + if (token === 15) { + return lookAhead(isValidHeritageClauseObjectLiteral); + } + if (!inErrorRecovery) { + return isStartOfLeftHandSideExpression() && !isHeritageClauseExtendsOrImplementsKeyword(); + } + else { + return isIdentifier() && !isHeritageClauseExtendsOrImplementsKeyword(); + } + case 8: + return isIdentifierOrPattern(); + case 10: + return token === 24 || token === 22 || isIdentifierOrPattern(); + case 17: + return isIdentifier(); + case 11: + case 15: + return token === 24 || token === 22 || isStartOfExpression(); + case 16: + return isStartOfParameter(); + case 18: + case 19: + return token === 24 || isStartOfType(); + case 20: + return isHeritageClause(); + case 21: + return ts.tokenIsIdentifierOrKeyword(token); + case 13: + return ts.tokenIsIdentifierOrKeyword(token) || token === 15; + case 14: + return true; + case 22: + case 23: + case 25: + return JSDocParser.isJSDocType(); + case 24: + return isSimplePropertyName(); + } + ts.Debug.fail("Non-exhaustive case in 'isListElement'."); + } + function isValidHeritageClauseObjectLiteral() { + ts.Debug.assert(token === 15); + if (nextToken() === 16) { + var next = nextToken(); + return next === 24 || next === 15 || next === 83 || next === 106; + } + return true; + } + function nextTokenIsIdentifier() { + nextToken(); + return isIdentifier(); + } + function nextTokenIsIdentifierOrKeyword() { + nextToken(); + return ts.tokenIsIdentifierOrKeyword(token); + } + function isHeritageClauseExtendsOrImplementsKeyword() { + if (token === 106 || + token === 83) { + return lookAhead(nextTokenIsStartOfExpression); + } + return false; + } + function nextTokenIsStartOfExpression() { + nextToken(); + return isStartOfExpression(); + } + function isListTerminator(kind) { + if (token === 1) { + return true; + } + switch (kind) { + case 1: + case 2: + case 4: + case 5: + case 6: + case 12: + case 9: + case 21: + return token === 16; + case 3: + return token === 16 || token === 71 || token === 77; + case 7: + return token === 15 || token === 83 || token === 106; + case 8: + return isVariableDeclaratorListTerminator(); + case 17: + return token === 27 || token === 17 || token === 15 || token === 83 || token === 106; + case 11: + return token === 18 || token === 23; + case 15: + case 19: + case 10: + return token === 20; + case 16: + return token === 18 || token === 20; + case 18: + return token === 27 || token === 17; + case 20: + return token === 15 || token === 16; + case 13: + return token === 27 || token === 39; + case 14: + return token === 25 && lookAhead(nextTokenIsSlash); + case 22: + return token === 18 || token === 54 || token === 16; + case 23: + return token === 27 || token === 16; + case 25: + return token === 20 || token === 16; + case 24: + return token === 16; + } + } + function isVariableDeclaratorListTerminator() { + if (canParseSemicolon()) { + return true; + } + if (isInOrOfKeyword(token)) { + return true; + } + if (token === 34) { + return true; + } + return false; + } + function isInSomeParsingContext() { + for (var kind = 0; kind < 26; kind++) { + if (parsingContext & (1 << kind)) { + if (isListElement(kind, true) || isListTerminator(kind)) { + return true; + } + } + } + return false; + } + function parseList(kind, parseElement) { + var saveParsingContext = parsingContext; + parsingContext |= 1 << kind; + var result = []; + result.pos = getNodePos(); + while (!isListTerminator(kind)) { + if (isListElement(kind, false)) { + var element = parseListElement(kind, parseElement); + result.push(element); + continue; + } + if (abortParsingListOrMoveToNextToken(kind)) { + break; + } + } + result.end = getNodeEnd(); + parsingContext = saveParsingContext; + return result; + } + function parseListElement(parsingContext, parseElement) { + var node = currentNode(parsingContext); + if (node) { + return consumeNode(node); + } + return parseElement(); + } + function currentNode(parsingContext) { + if (parseErrorBeforeNextFinishedNode) { + return undefined; + } + if (!syntaxCursor) { + return undefined; + } + var node = syntaxCursor.currentNode(scanner.getStartPos()); + if (ts.nodeIsMissing(node)) { + return undefined; + } + if (node.intersectsChange) { + return undefined; + } + if (ts.containsParseError(node)) { + return undefined; + } + var nodeContextFlags = node.flags & 197132288; + if (nodeContextFlags !== contextFlags) { + return undefined; + } + if (!canReuseNode(node, parsingContext)) { + return undefined; + } + return node; + } + function consumeNode(node) { + scanner.setTextPos(node.end); + nextToken(); + return node; + } + function canReuseNode(node, parsingContext) { + switch (parsingContext) { + case 5: + return isReusableClassMember(node); + case 2: + return isReusableSwitchClause(node); + case 0: + case 1: + case 3: + return isReusableStatement(node); + case 6: + return isReusableEnumMember(node); + case 4: + return isReusableTypeMember(node); + case 8: + return isReusableVariableDeclaration(node); + case 16: + return isReusableParameter(node); + case 20: + case 17: + case 19: + case 18: + case 11: + case 12: + case 7: + case 13: + case 14: + } + return false; + } + function isReusableClassMember(node) { + if (node) { + switch (node.kind) { + case 148: + case 153: + case 149: + case 150: + case 145: + case 198: + return true; + case 147: + var methodDeclaration = node; + var nameIsConstructor = methodDeclaration.name.kind === 69 && + methodDeclaration.name.originalKeywordKind === 121; + return !nameIsConstructor; + } + } + return false; + } + function isReusableSwitchClause(node) { + if (node) { + switch (node.kind) { + case 249: + case 250: + return true; + } + } + return false; + } + function isReusableStatement(node) { + if (node) { + switch (node.kind) { + case 220: + case 200: + case 199: + case 203: + case 202: + case 215: + case 211: + case 213: + case 210: + case 209: + case 207: + case 208: + case 206: + case 205: + case 212: + case 201: + case 216: + case 214: + case 204: + case 217: + case 230: + case 229: + case 236: + case 235: + case 225: + case 221: + case 222: + case 224: + case 223: + return true; + } + } + return false; + } + function isReusableEnumMember(node) { + return node.kind === 255; + } + function isReusableTypeMember(node) { + if (node) { + switch (node.kind) { + case 152: + case 146: + case 153: + case 144: + case 151: + return true; + } + } + return false; + } + function isReusableVariableDeclaration(node) { + if (node.kind !== 218) { + return false; + } + var variableDeclarator = node; + return variableDeclarator.initializer === undefined; + } + function isReusableParameter(node) { + if (node.kind !== 142) { + return false; + } + var parameter = node; + return parameter.initializer === undefined; + } + function abortParsingListOrMoveToNextToken(kind) { + parseErrorAtCurrentToken(parsingContextErrors(kind)); + if (isInSomeParsingContext()) { + return true; + } + nextToken(); + return false; + } + function parsingContextErrors(context) { + switch (context) { + case 0: return ts.Diagnostics.Declaration_or_statement_expected; + case 1: return ts.Diagnostics.Declaration_or_statement_expected; + case 2: return ts.Diagnostics.case_or_default_expected; + case 3: return ts.Diagnostics.Statement_expected; + case 4: return ts.Diagnostics.Property_or_signature_expected; + case 5: return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected; + case 6: return ts.Diagnostics.Enum_member_expected; + case 7: return ts.Diagnostics.Expression_expected; + case 8: return ts.Diagnostics.Variable_declaration_expected; + case 9: return ts.Diagnostics.Property_destructuring_pattern_expected; + case 10: return ts.Diagnostics.Array_element_destructuring_pattern_expected; + case 11: return ts.Diagnostics.Argument_expression_expected; + case 12: return ts.Diagnostics.Property_assignment_expected; + case 15: return ts.Diagnostics.Expression_or_comma_expected; + case 16: return ts.Diagnostics.Parameter_declaration_expected; + case 17: return ts.Diagnostics.Type_parameter_declaration_expected; + case 18: return ts.Diagnostics.Type_argument_expected; + case 19: return ts.Diagnostics.Type_expected; + case 20: return ts.Diagnostics.Unexpected_token_expected; + case 21: return ts.Diagnostics.Identifier_expected; + case 13: return ts.Diagnostics.Identifier_expected; + case 14: return ts.Diagnostics.Identifier_expected; + case 22: return ts.Diagnostics.Parameter_declaration_expected; + case 23: return ts.Diagnostics.Type_argument_expected; + case 25: return ts.Diagnostics.Type_expected; + case 24: return ts.Diagnostics.Property_assignment_expected; + } + } + ; + function parseDelimitedList(kind, parseElement, considerSemicolonAsDelimiter) { + var saveParsingContext = parsingContext; + parsingContext |= 1 << kind; + var result = []; + result.pos = getNodePos(); + var commaStart = -1; + while (true) { + if (isListElement(kind, false)) { + result.push(parseListElement(kind, parseElement)); + commaStart = scanner.getTokenPos(); + if (parseOptional(24)) { + continue; + } + commaStart = -1; + if (isListTerminator(kind)) { + break; + } + parseExpected(24); + if (considerSemicolonAsDelimiter && token === 23 && !scanner.hasPrecedingLineBreak()) { + nextToken(); + } + continue; + } + if (isListTerminator(kind)) { + break; + } + if (abortParsingListOrMoveToNextToken(kind)) { + break; + } + } + if (commaStart >= 0) { + result.hasTrailingComma = true; + } + result.end = getNodeEnd(); + parsingContext = saveParsingContext; + return result; + } + function createMissingList() { + var pos = getNodePos(); + var result = []; + result.pos = pos; + result.end = pos; + return result; + } + function parseBracketedList(kind, parseElement, open, close) { + if (parseExpected(open)) { + var result = parseDelimitedList(kind, parseElement); + parseExpected(close); + return result; + } + return createMissingList(); + } + function parseEntityName(allowReservedWords, diagnosticMessage) { + var entity = parseIdentifier(diagnosticMessage); + while (parseOptional(21)) { + var node = createNode(139, entity.pos); + node.left = entity; + node.right = parseRightSideOfDot(allowReservedWords); + entity = finishNode(node); + } + return entity; + } + function parseRightSideOfDot(allowIdentifierNames) { + if (scanner.hasPrecedingLineBreak() && ts.tokenIsIdentifierOrKeyword(token)) { + var matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); + if (matchesPattern) { + return createMissingNode(69, true, ts.Diagnostics.Identifier_expected); + } + } + return allowIdentifierNames ? parseIdentifierName() : parseIdentifier(); + } + function parseTemplateExpression() { + var template = createNode(189); + template.head = parseTemplateLiteralFragment(); + ts.Debug.assert(template.head.kind === 12, "Template head has wrong token kind"); + var templateSpans = []; + templateSpans.pos = getNodePos(); + do { + templateSpans.push(parseTemplateSpan()); + } while (ts.lastOrUndefined(templateSpans).literal.kind === 13); + templateSpans.end = getNodeEnd(); + template.templateSpans = templateSpans; + return finishNode(template); + } + function parseTemplateSpan() { + var span = createNode(197); + span.expression = allowInAnd(parseExpression); + var literal; + if (token === 16) { + reScanTemplateToken(); + literal = parseTemplateLiteralFragment(); + } + else { + literal = parseExpectedToken(14, false, ts.Diagnostics._0_expected, ts.tokenToString(16)); + } + span.literal = literal; + return finishNode(span); + } + function parseStringLiteralTypeNode() { + return parseLiteralLikeNode(166, true); + } + function parseLiteralNode(internName) { + return parseLiteralLikeNode(token, internName); + } + function parseTemplateLiteralFragment() { + return parseLiteralLikeNode(token, false); + } + function parseLiteralLikeNode(kind, internName) { + var node = createNode(kind); + var text = scanner.getTokenValue(); + node.text = internName ? internIdentifier(text) : text; + if (scanner.hasExtendedUnicodeEscape()) { + node.hasExtendedUnicodeEscape = true; + } + if (scanner.isUnterminated()) { + node.isUnterminated = true; + } + var tokenPos = scanner.getTokenPos(); + nextToken(); + finishNode(node); + if (node.kind === 8 + && sourceText.charCodeAt(tokenPos) === 48 + && ts.isOctalDigit(sourceText.charCodeAt(tokenPos + 1))) { + node.isOctalLiteral = true; + } + return node; + } + function parseTypeReference() { + var typeName = parseEntityName(false, ts.Diagnostics.Type_expected); + var node = createNode(155, typeName.pos); + node.typeName = typeName; + if (!scanner.hasPrecedingLineBreak() && token === 25) { + node.typeArguments = parseBracketedList(18, parseType, 25, 27); + } + return finishNode(node); + } + function parseThisTypePredicate(lhs) { + nextToken(); + var node = createNode(154, lhs.pos); + node.parameterName = lhs; + node.type = parseType(); + return finishNode(node); + } + function parseThisTypeNode() { + var node = createNode(165); + nextToken(); + return finishNode(node); + } + function parseTypeQuery() { + var node = createNode(158); + parseExpected(101); + node.exprName = parseEntityName(true); + return finishNode(node); + } + function parseTypeParameter() { + var node = createNode(141); + node.name = parseIdentifier(); + if (parseOptional(83)) { + if (isStartOfType() || !isStartOfExpression()) { + node.constraint = parseType(); + } + else { + node.expression = parseUnaryExpressionOrHigher(); + } + } + return finishNode(node); + } + function parseTypeParameters() { + if (token === 25) { + return parseBracketedList(17, parseTypeParameter, 25, 27); + } + } + function parseParameterType() { + if (parseOptional(54)) { + return parseType(); + } + return undefined; + } + function isStartOfParameter() { + return token === 22 || isIdentifierOrPattern() || ts.isModifierKind(token) || token === 55 || token === 97; + } + function setModifiers(node, modifiers) { + if (modifiers) { + node.flags |= modifiers.flags; + node.modifiers = modifiers; + } + } + function parseParameter() { + var node = createNode(142); + if (token === 97) { + node.name = createIdentifier(true, undefined); + node.type = parseParameterType(); + return finishNode(node); + } + node.decorators = parseDecorators(); + setModifiers(node, parseModifiers()); + node.dotDotDotToken = parseOptionalToken(22); + node.name = parseIdentifierOrPattern(); + if (ts.getFullWidth(node.name) === 0 && node.flags === 0 && ts.isModifierKind(token)) { + nextToken(); + } + node.questionToken = parseOptionalToken(53); + node.type = parseParameterType(); + node.initializer = parseBindingElementInitializer(true); + return addJSDocComment(finishNode(node)); + } + function parseBindingElementInitializer(inParameter) { + return inParameter ? parseParameterInitializer() : parseNonParameterInitializer(); + } + function parseParameterInitializer() { + return parseInitializer(true); + } + function fillSignature(returnToken, yieldContext, awaitContext, requireCompleteParameterList, signature) { + var returnTokenRequired = returnToken === 34; + signature.typeParameters = parseTypeParameters(); + signature.parameters = parseParameterList(yieldContext, awaitContext, requireCompleteParameterList); + if (returnTokenRequired) { + parseExpected(returnToken); + signature.type = parseTypeOrTypePredicate(); + } + else if (parseOptional(returnToken)) { + signature.type = parseTypeOrTypePredicate(); + } + } + function parseParameterList(yieldContext, awaitContext, requireCompleteParameterList) { + if (parseExpected(17)) { + var savedYieldContext = inYieldContext(); + var savedAwaitContext = inAwaitContext(); + setYieldContext(yieldContext); + setAwaitContext(awaitContext); + var result = parseDelimitedList(16, parseParameter); + setYieldContext(savedYieldContext); + setAwaitContext(savedAwaitContext); + if (!parseExpected(18) && requireCompleteParameterList) { + return undefined; + } + return result; + } + return requireCompleteParameterList ? undefined : createMissingList(); + } + function parseTypeMemberSemicolon() { + if (parseOptional(24)) { + return; + } + parseSemicolon(); + } + function parseSignatureMember(kind) { + var node = createNode(kind); + if (kind === 152) { + parseExpected(92); + } + fillSignature(54, false, false, false, node); + parseTypeMemberSemicolon(); + return finishNode(node); + } + function isIndexSignature() { + if (token !== 19) { + return false; + } + return lookAhead(isUnambiguouslyIndexSignature); + } + function isUnambiguouslyIndexSignature() { + nextToken(); + if (token === 22 || token === 20) { + return true; + } + if (ts.isModifierKind(token)) { + nextToken(); + if (isIdentifier()) { + return true; + } + } + else if (!isIdentifier()) { + return false; + } + else { + nextToken(); + } + if (token === 54 || token === 24) { + return true; + } + if (token !== 53) { + return false; + } + nextToken(); + return token === 54 || token === 24 || token === 20; + } + function parseIndexSignatureDeclaration(fullStart, decorators, modifiers) { + var node = createNode(153, fullStart); + node.decorators = decorators; + setModifiers(node, modifiers); + node.parameters = parseBracketedList(16, parseParameter, 19, 20); + node.type = parseTypeAnnotation(); + parseTypeMemberSemicolon(); + return finishNode(node); + } + function parsePropertyOrMethodSignature(fullStart, modifiers) { + var name = parsePropertyName(); + var questionToken = parseOptionalToken(53); + if (token === 17 || token === 25) { + var method = createNode(146, fullStart); + setModifiers(method, modifiers); + method.name = name; + method.questionToken = questionToken; + fillSignature(54, false, false, false, method); + parseTypeMemberSemicolon(); + return finishNode(method); + } + else { + var property = createNode(144, fullStart); + setModifiers(property, modifiers); + property.name = name; + property.questionToken = questionToken; + property.type = parseTypeAnnotation(); + if (token === 56) { + property.initializer = parseNonParameterInitializer(); + } + parseTypeMemberSemicolon(); + return finishNode(property); + } + } + function isTypeMemberStart() { + var idToken; + if (token === 17 || token === 25) { + return true; + } + while (ts.isModifierKind(token)) { + idToken = token; + nextToken(); + } + if (token === 19) { + return true; + } + if (isLiteralPropertyName()) { + idToken = token; + nextToken(); + } + if (idToken) { + return token === 17 || + token === 25 || + token === 53 || + token === 54 || + canParseSemicolon(); + } + return false; + } + function parseTypeMember() { + if (token === 17 || token === 25) { + return parseSignatureMember(151); + } + if (token === 92 && lookAhead(isStartOfConstructSignature)) { + return parseSignatureMember(152); + } + var fullStart = getNodePos(); + var modifiers = parseModifiers(); + if (isIndexSignature()) { + return parseIndexSignatureDeclaration(fullStart, undefined, modifiers); + } + return parsePropertyOrMethodSignature(fullStart, modifiers); + } + function isStartOfConstructSignature() { + nextToken(); + return token === 17 || token === 25; + } + function parseTypeLiteral() { + var node = createNode(159); + node.members = parseObjectTypeMembers(); + return finishNode(node); + } + function parseObjectTypeMembers() { + var members; + if (parseExpected(15)) { + members = parseList(4, parseTypeMember); + parseExpected(16); + } + else { + members = createMissingList(); + } + return members; + } + function parseTupleType() { + var node = createNode(161); + node.elementTypes = parseBracketedList(19, parseType, 19, 20); + return finishNode(node); + } + function parseParenthesizedType() { + var node = createNode(164); + parseExpected(17); + node.type = parseType(); + parseExpected(18); + return finishNode(node); + } + function parseFunctionOrConstructorType(kind) { + var node = createNode(kind); + if (kind === 157) { + parseExpected(92); + } + fillSignature(34, false, false, false, node); + return finishNode(node); + } + function parseKeywordAndNoDot() { + var node = parseTokenNode(); + return token === 21 ? undefined : node; + } + function parseNonArrayType() { + switch (token) { + case 117: + case 132: + case 130: + case 120: + case 133: + case 135: + case 127: + var node = tryParse(parseKeywordAndNoDot); + return node || parseTypeReference(); + case 9: + return parseStringLiteralTypeNode(); + case 103: + case 93: + return parseTokenNode(); + case 97: { + var thisKeyword = parseThisTypeNode(); + if (token === 124 && !scanner.hasPrecedingLineBreak()) { + return parseThisTypePredicate(thisKeyword); + } + else { + return thisKeyword; + } + } + case 101: + return parseTypeQuery(); + case 15: + return parseTypeLiteral(); + case 19: + return parseTupleType(); + case 17: + return parseParenthesizedType(); + default: + return parseTypeReference(); + } + } + function isStartOfType() { + switch (token) { + case 117: + case 132: + case 130: + case 120: + case 133: + case 103: + case 135: + case 93: + case 97: + case 101: + case 127: + case 15: + case 19: + case 25: + case 92: + case 9: + return true; + case 17: + return lookAhead(isStartOfParenthesizedOrFunctionType); + default: + return isIdentifier(); + } + } + function isStartOfParenthesizedOrFunctionType() { + nextToken(); + return token === 18 || isStartOfParameter() || isStartOfType(); + } + function parseArrayTypeOrHigher() { + var type = parseNonArrayType(); + while (!scanner.hasPrecedingLineBreak() && parseOptional(19)) { + parseExpected(20); + var node = createNode(160, type.pos); + node.elementType = type; + type = finishNode(node); + } + return type; + } + function parseUnionOrIntersectionType(kind, parseConstituentType, operator) { + var type = parseConstituentType(); + if (token === operator) { + var types = [type]; + types.pos = type.pos; + while (parseOptional(operator)) { + types.push(parseConstituentType()); + } + types.end = getNodeEnd(); + var node = createNode(kind, type.pos); + node.types = types; + type = finishNode(node); + } + return type; + } + function parseIntersectionTypeOrHigher() { + return parseUnionOrIntersectionType(163, parseArrayTypeOrHigher, 46); + } + function parseUnionTypeOrHigher() { + return parseUnionOrIntersectionType(162, parseIntersectionTypeOrHigher, 47); + } + function isStartOfFunctionType() { + if (token === 25) { + return true; + } + return token === 17 && lookAhead(isUnambiguouslyStartOfFunctionType); + } + function skipParameterStart() { + if (ts.isModifierKind(token)) { + parseModifiers(); + } + if (isIdentifier() || token === 97) { + nextToken(); + return true; + } + if (token === 19 || token === 15) { + var previousErrorCount = parseDiagnostics.length; + parseIdentifierOrPattern(); + return previousErrorCount === parseDiagnostics.length; + } + return false; + } + function isUnambiguouslyStartOfFunctionType() { + nextToken(); + if (token === 18 || token === 22) { + return true; + } + if (skipParameterStart()) { + if (token === 54 || token === 24 || + token === 53 || token === 56) { + return true; + } + if (token === 18) { + nextToken(); + if (token === 34) { + return true; + } + } + } + return false; + } + function parseTypeOrTypePredicate() { + var typePredicateVariable = isIdentifier() && tryParse(parseTypePredicatePrefix); + var type = parseType(); + if (typePredicateVariable) { + var node = createNode(154, typePredicateVariable.pos); + node.parameterName = typePredicateVariable; + node.type = type; + return finishNode(node); + } + else { + return type; + } + } + function parseTypePredicatePrefix() { + var id = parseIdentifier(); + if (token === 124 && !scanner.hasPrecedingLineBreak()) { + nextToken(); + return id; + } + } + function parseType() { + return doOutsideOfContext(41943040, parseTypeWorker); + } + function parseTypeWorker() { + if (isStartOfFunctionType()) { + return parseFunctionOrConstructorType(156); + } + if (token === 92) { + return parseFunctionOrConstructorType(157); + } + return parseUnionTypeOrHigher(); + } + function parseTypeAnnotation() { + return parseOptional(54) ? parseType() : undefined; + } + function isStartOfLeftHandSideExpression() { + switch (token) { + case 97: + case 95: + case 93: + case 99: + case 84: + case 8: + case 9: + case 11: + case 12: + case 17: + case 19: + case 15: + case 87: + case 73: + case 92: + case 39: + case 61: + case 69: + return true; + default: + return isIdentifier(); + } + } + function isStartOfExpression() { + if (isStartOfLeftHandSideExpression()) { + return true; + } + switch (token) { + case 35: + case 36: + case 50: + case 49: + case 78: + case 101: + case 103: + case 41: + case 42: + case 25: + case 119: + case 114: + return true; + default: + if (isBinaryOperator()) { + return true; + } + return isIdentifier(); + } + } + function isStartOfExpressionStatement() { + return token !== 15 && + token !== 87 && + token !== 73 && + token !== 55 && + isStartOfExpression(); + } + function parseExpression() { + var saveDecoratorContext = inDecoratorContext(); + if (saveDecoratorContext) { + setDecoratorContext(false); + } + var expr = parseAssignmentExpressionOrHigher(); + var operatorToken; + while ((operatorToken = parseOptionalToken(24))) { + expr = makeBinaryExpression(expr, operatorToken, parseAssignmentExpressionOrHigher()); + } + if (saveDecoratorContext) { + setDecoratorContext(true); + } + return expr; + } + function parseInitializer(inParameter) { + if (token !== 56) { + if (scanner.hasPrecedingLineBreak() || (inParameter && token === 15) || !isStartOfExpression()) { + return undefined; + } + } + parseExpected(56); + return parseAssignmentExpressionOrHigher(); + } + function parseAssignmentExpressionOrHigher() { + if (isYieldExpression()) { + return parseYieldExpression(); + } + var arrowExpression = tryParseParenthesizedArrowFunctionExpression() || tryParseAsyncSimpleArrowFunctionExpression(); + if (arrowExpression) { + return arrowExpression; + } + var expr = parseBinaryExpressionOrHigher(0); + if (expr.kind === 69 && token === 34) { + return parseSimpleArrowFunctionExpression(expr); + } + if (ts.isLeftHandSideExpression(expr) && ts.isAssignmentOperator(reScanGreaterToken())) { + return makeBinaryExpression(expr, parseTokenNode(), parseAssignmentExpressionOrHigher()); + } + return parseConditionalExpressionRest(expr); + } + function isYieldExpression() { + if (token === 114) { + if (inYieldContext()) { + return true; + } + return lookAhead(nextTokenIsIdentifierOrKeywordOrNumberOnSameLine); + } + return false; + } + function nextTokenIsIdentifierOnSameLine() { + nextToken(); + return !scanner.hasPrecedingLineBreak() && isIdentifier(); + } + function parseYieldExpression() { + var node = createNode(190); + nextToken(); + if (!scanner.hasPrecedingLineBreak() && + (token === 37 || isStartOfExpression())) { + node.asteriskToken = parseOptionalToken(37); + node.expression = parseAssignmentExpressionOrHigher(); + return finishNode(node); + } + else { + return finishNode(node); + } + } + function parseSimpleArrowFunctionExpression(identifier, asyncModifier) { + ts.Debug.assert(token === 34, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); + var node; + if (asyncModifier) { + node = createNode(180, asyncModifier.pos); + setModifiers(node, asyncModifier); + } + else { + node = createNode(180, identifier.pos); + } + var parameter = createNode(142, identifier.pos); + parameter.name = identifier; + finishNode(parameter); + node.parameters = [parameter]; + node.parameters.pos = parameter.pos; + node.parameters.end = parameter.end; + node.equalsGreaterThanToken = parseExpectedToken(34, false, ts.Diagnostics._0_expected, "=>"); + node.body = parseArrowFunctionExpressionBody(!!asyncModifier); + return finishNode(node); + } + function tryParseParenthesizedArrowFunctionExpression() { + var triState = isParenthesizedArrowFunctionExpression(); + if (triState === 0) { + return undefined; + } + var arrowFunction = triState === 1 + ? parseParenthesizedArrowFunctionExpressionHead(true) + : tryParse(parsePossibleParenthesizedArrowFunctionExpressionHead); + if (!arrowFunction) { + return undefined; + } + var isAsync = !!(arrowFunction.flags & 256); + var lastToken = token; + arrowFunction.equalsGreaterThanToken = parseExpectedToken(34, false, ts.Diagnostics._0_expected, "=>"); + arrowFunction.body = (lastToken === 34 || lastToken === 15) + ? parseArrowFunctionExpressionBody(isAsync) + : parseIdentifier(); + return finishNode(arrowFunction); + } + function isParenthesizedArrowFunctionExpression() { + if (token === 17 || token === 25 || token === 118) { + return lookAhead(isParenthesizedArrowFunctionExpressionWorker); + } + if (token === 34) { + return 1; + } + return 0; + } + function isParenthesizedArrowFunctionExpressionWorker() { + if (token === 118) { + nextToken(); + if (scanner.hasPrecedingLineBreak()) { + return 0; + } + if (token !== 17 && token !== 25) { + return 0; + } + } + var first = token; + var second = nextToken(); + if (first === 17) { + if (second === 18) { + var third = nextToken(); + switch (third) { + case 34: + case 54: + case 15: + return 1; + default: + return 0; + } + } + if (second === 19 || second === 15) { + return 2; + } + if (second === 22) { + return 1; + } + if (!isIdentifier()) { + return 0; + } + if (nextToken() === 54) { + return 1; + } + return 2; + } + else { + ts.Debug.assert(first === 25); + if (!isIdentifier()) { + return 0; + } + if (sourceFile.languageVariant === 1) { + var isArrowFunctionInJsx = lookAhead(function () { + var third = nextToken(); + if (third === 83) { + var fourth = nextToken(); + switch (fourth) { + case 56: + case 27: + return false; + default: + return true; + } + } + else if (third === 24) { + return true; + } + return false; + }); + if (isArrowFunctionInJsx) { + return 1; + } + return 0; + } + return 2; + } + } + function parsePossibleParenthesizedArrowFunctionExpressionHead() { + return parseParenthesizedArrowFunctionExpressionHead(false); + } + function tryParseAsyncSimpleArrowFunctionExpression() { + if (token === 118) { + var isUnParenthesizedAsyncArrowFunction = lookAhead(isUnParenthesizedAsyncArrowFunctionWorker); + if (isUnParenthesizedAsyncArrowFunction === 1) { + var asyncModifier = parseModifiersForArrowFunction(); + var expr = parseBinaryExpressionOrHigher(0); + return parseSimpleArrowFunctionExpression(expr, asyncModifier); + } + } + return undefined; + } + function isUnParenthesizedAsyncArrowFunctionWorker() { + if (token === 118) { + nextToken(); + if (scanner.hasPrecedingLineBreak() || token === 34) { + return 0; + } + var expr = parseBinaryExpressionOrHigher(0); + if (!scanner.hasPrecedingLineBreak() && expr.kind === 69 && token === 34) { + return 1; + } + } + return 0; + } + function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) { + var node = createNode(180); + setModifiers(node, parseModifiersForArrowFunction()); + var isAsync = !!(node.flags & 256); + fillSignature(54, false, isAsync, !allowAmbiguity, node); + if (!node.parameters) { + return undefined; + } + if (!allowAmbiguity && token !== 34 && token !== 15) { + return undefined; + } + return node; + } + function parseArrowFunctionExpressionBody(isAsync) { + if (token === 15) { + return parseFunctionBlock(false, isAsync, false); + } + if (token !== 23 && + token !== 87 && + token !== 73 && + isStartOfStatement() && + !isStartOfExpressionStatement()) { + return parseFunctionBlock(false, isAsync, true); + } + return isAsync + ? doInAwaitContext(parseAssignmentExpressionOrHigher) + : doOutsideOfAwaitContext(parseAssignmentExpressionOrHigher); + } + function parseConditionalExpressionRest(leftOperand) { + var questionToken = parseOptionalToken(53); + if (!questionToken) { + return leftOperand; + } + var node = createNode(188, leftOperand.pos); + node.condition = leftOperand; + node.questionToken = questionToken; + node.whenTrue = doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher); + node.colonToken = parseExpectedToken(54, false, ts.Diagnostics._0_expected, ts.tokenToString(54)); + node.whenFalse = parseAssignmentExpressionOrHigher(); + return finishNode(node); + } + function parseBinaryExpressionOrHigher(precedence) { + var leftOperand = parseUnaryExpressionOrHigher(); + return parseBinaryExpressionRest(precedence, leftOperand); + } + function isInOrOfKeyword(t) { + return t === 90 || t === 138; + } + function parseBinaryExpressionRest(precedence, leftOperand) { + while (true) { + reScanGreaterToken(); + var newPrecedence = getBinaryOperatorPrecedence(); + var consumeCurrentOperator = token === 38 ? + newPrecedence >= precedence : + newPrecedence > precedence; + if (!consumeCurrentOperator) { + break; + } + if (token === 90 && inDisallowInContext()) { + break; + } + if (token === 116) { + if (scanner.hasPrecedingLineBreak()) { + break; + } + else { + nextToken(); + leftOperand = makeAsExpression(leftOperand, parseType()); + } + } + else { + leftOperand = makeBinaryExpression(leftOperand, parseTokenNode(), parseBinaryExpressionOrHigher(newPrecedence)); + } + } + return leftOperand; + } + function isBinaryOperator() { + if (inDisallowInContext() && token === 90) { + return false; + } + return getBinaryOperatorPrecedence() > 0; + } + function getBinaryOperatorPrecedence() { + switch (token) { + case 52: + return 1; + case 51: + return 2; + case 47: + return 3; + case 48: + return 4; + case 46: + return 5; + case 30: + case 31: + case 32: + case 33: + return 6; + case 25: + case 27: + case 28: + case 29: + case 91: + case 90: + case 116: + return 7; + case 43: + case 44: + case 45: + return 8; + case 35: + case 36: + return 9; + case 37: + case 39: + case 40: + return 10; + case 38: + return 11; + } + return -1; + } + function makeBinaryExpression(left, operatorToken, right) { + var node = createNode(187, left.pos); + node.left = left; + node.operatorToken = operatorToken; + node.right = right; + return finishNode(node); + } + function makeAsExpression(left, right) { + var node = createNode(195, left.pos); + node.expression = left; + node.type = right; + return finishNode(node); + } + function parsePrefixUnaryExpression() { + var node = createNode(185); + node.operator = token; + nextToken(); + node.operand = parseSimpleUnaryExpression(); + return finishNode(node); + } + function parseDeleteExpression() { + var node = createNode(181); + nextToken(); + node.expression = parseSimpleUnaryExpression(); + return finishNode(node); + } + function parseTypeOfExpression() { + var node = createNode(182); + nextToken(); + node.expression = parseSimpleUnaryExpression(); + return finishNode(node); + } + function parseVoidExpression() { + var node = createNode(183); + nextToken(); + node.expression = parseSimpleUnaryExpression(); + return finishNode(node); + } + function isAwaitExpression() { + if (token === 119) { + if (inAwaitContext()) { + return true; + } + return lookAhead(nextTokenIsIdentifierOnSameLine); + } + return false; + } + function parseAwaitExpression() { + var node = createNode(184); + nextToken(); + node.expression = parseSimpleUnaryExpression(); + return finishNode(node); + } + function parseUnaryExpressionOrHigher() { + if (isAwaitExpression()) { + return parseAwaitExpression(); + } + if (isIncrementExpression()) { + var incrementExpression = parseIncrementExpression(); + return token === 38 ? + parseBinaryExpressionRest(getBinaryOperatorPrecedence(), incrementExpression) : + incrementExpression; + } + var unaryOperator = token; + var simpleUnaryExpression = parseSimpleUnaryExpression(); + if (token === 38) { + var start = ts.skipTrivia(sourceText, simpleUnaryExpression.pos); + if (simpleUnaryExpression.kind === 177) { + parseErrorAtPosition(start, simpleUnaryExpression.end - start, ts.Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses); + } + else { + parseErrorAtPosition(start, simpleUnaryExpression.end - start, ts.Diagnostics.An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses, ts.tokenToString(unaryOperator)); + } + } + return simpleUnaryExpression; + } + function parseSimpleUnaryExpression() { + switch (token) { + case 35: + case 36: + case 50: + case 49: + return parsePrefixUnaryExpression(); + case 78: + return parseDeleteExpression(); + case 101: + return parseTypeOfExpression(); + case 103: + return parseVoidExpression(); + case 25: + return parseTypeAssertion(); + default: + return parseIncrementExpression(); + } + } + function isIncrementExpression() { + switch (token) { + case 35: + case 36: + case 50: + case 49: + case 78: + case 101: + case 103: + return false; + case 25: + if (sourceFile.languageVariant !== 1) { + return false; + } + default: + return true; + } + } + function parseIncrementExpression() { + if (token === 41 || token === 42) { + var node = createNode(185); + node.operator = token; + nextToken(); + node.operand = parseLeftHandSideExpressionOrHigher(); + return finishNode(node); + } + else if (sourceFile.languageVariant === 1 && token === 25 && lookAhead(nextTokenIsIdentifierOrKeyword)) { + return parseJsxElementOrSelfClosingElement(true); + } + var expression = parseLeftHandSideExpressionOrHigher(); + ts.Debug.assert(ts.isLeftHandSideExpression(expression)); + if ((token === 41 || token === 42) && !scanner.hasPrecedingLineBreak()) { + var node = createNode(186, expression.pos); + node.operand = expression; + node.operator = token; + nextToken(); + return finishNode(node); + } + return expression; + } + function parseLeftHandSideExpressionOrHigher() { + var expression = token === 95 + ? parseSuperExpression() + : parseMemberExpressionOrHigher(); + return parseCallExpressionRest(expression); + } + function parseMemberExpressionOrHigher() { + var expression = parsePrimaryExpression(); + return parseMemberExpressionRest(expression); + } + function parseSuperExpression() { + var expression = parseTokenNode(); + if (token === 17 || token === 21 || token === 19) { + return expression; + } + var node = createNode(172, expression.pos); + node.expression = expression; + node.dotToken = parseExpectedToken(21, false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); + node.name = parseRightSideOfDot(true); + return finishNode(node); + } + function tagNamesAreEquivalent(lhs, rhs) { + if (lhs.kind !== rhs.kind) { + return false; + } + if (lhs.kind === 69) { + return lhs.text === rhs.text; + } + return lhs.right.text === rhs.right.text && + tagNamesAreEquivalent(lhs.left, rhs.left); + } + function parseJsxElementOrSelfClosingElement(inExpressionContext) { + var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext); + var result; + if (opening.kind === 243) { + var node = createNode(241, 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 === 242); + result = opening; + } + if (inExpressionContext && token === 25) { + var invalidElement = tryParse(function () { return parseJsxElementOrSelfClosingElement(true); }); + if (invalidElement) { + parseErrorAtCurrentToken(ts.Diagnostics.JSX_expressions_must_have_one_parent_element); + var badNode = createNode(187, result.pos); + badNode.end = invalidElement.end; + badNode.left = result; + badNode.right = invalidElement; + badNode.operatorToken = createMissingNode(24, false, undefined); + badNode.operatorToken.pos = badNode.operatorToken.end = badNode.right.pos; + return badNode; + } + } + return result; + } + function parseJsxText() { + var node = createNode(244, scanner.getStartPos()); + token = scanner.scanJsxToken(); + return finishNode(node); + } + function parseJsxChild() { + switch (token) { + case 244: + return parseJsxText(); + case 15: + return parseJsxExpression(false); + case 25: + return parseJsxElementOrSelfClosingElement(false); + } + ts.Debug.fail("Unknown JSX child kind " + token); + } + function parseJsxChildren(openingTagName) { + var result = []; + result.pos = scanner.getStartPos(); + var saveParsingContext = parsingContext; + parsingContext |= 1 << 14; + while (true) { + token = scanner.reScanJsxToken(); + if (token === 26) { + break; + } + else if (token === 1) { + parseErrorAtPosition(openingTagName.pos, openingTagName.end - openingTagName.pos, ts.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, ts.getTextOfNodeFromSourceText(sourceText, openingTagName)); + break; + } + result.push(parseJsxChild()); + } + result.end = scanner.getTokenPos(); + parsingContext = saveParsingContext; + return result; + } + function parseJsxOpeningOrSelfClosingElement(inExpressionContext) { + var fullStart = scanner.getStartPos(); + parseExpected(25); + var tagName = parseJsxElementName(); + var attributes = parseList(13, parseJsxAttribute); + var node; + if (token === 27) { + node = createNode(243, fullStart); + scanJsxText(); + } + else { + parseExpected(39); + if (inExpressionContext) { + parseExpected(27); + } + else { + parseExpected(27, undefined, false); + scanJsxText(); + } + node = createNode(242, fullStart); + } + node.tagName = tagName; + node.attributes = attributes; + return finishNode(node); + } + function parseJsxElementName() { + scanJsxIdentifier(); + var elementName = parseIdentifierName(); + while (parseOptional(21)) { + scanJsxIdentifier(); + var node = createNode(139, elementName.pos); + node.left = elementName; + node.right = parseIdentifierName(); + elementName = finishNode(node); + } + return elementName; + } + function parseJsxExpression(inExpressionContext) { + var node = createNode(248); + parseExpected(15); + if (token !== 16) { + node.expression = parseAssignmentExpressionOrHigher(); + } + if (inExpressionContext) { + parseExpected(16); + } + else { + parseExpected(16, undefined, false); + scanJsxText(); + } + return finishNode(node); + } + function parseJsxAttribute() { + if (token === 15) { + return parseJsxSpreadAttribute(); + } + scanJsxIdentifier(); + var node = createNode(246); + node.name = parseIdentifierName(); + if (parseOptional(56)) { + switch (token) { + case 9: + node.initializer = parseLiteralNode(); + break; + default: + node.initializer = parseJsxExpression(true); + break; + } + } + return finishNode(node); + } + function parseJsxSpreadAttribute() { + var node = createNode(247); + parseExpected(15); + parseExpected(22); + node.expression = parseExpression(); + parseExpected(16); + return finishNode(node); + } + function parseJsxClosingElement(inExpressionContext) { + var node = createNode(245); + parseExpected(26); + node.tagName = parseJsxElementName(); + if (inExpressionContext) { + parseExpected(27); + } + else { + parseExpected(27, undefined, false); + scanJsxText(); + } + return finishNode(node); + } + function parseTypeAssertion() { + var node = createNode(177); + parseExpected(25); + node.type = parseType(); + parseExpected(27); + node.expression = parseSimpleUnaryExpression(); + return finishNode(node); + } + function parseMemberExpressionRest(expression) { + while (true) { + var dotToken = parseOptionalToken(21); + if (dotToken) { + var propertyAccess = createNode(172, expression.pos); + propertyAccess.expression = expression; + propertyAccess.dotToken = dotToken; + propertyAccess.name = parseRightSideOfDot(true); + expression = finishNode(propertyAccess); + continue; + } + if (token === 49 && !scanner.hasPrecedingLineBreak()) { + nextToken(); + var nonNullExpression = createNode(196, expression.pos); + nonNullExpression.expression = expression; + expression = finishNode(nonNullExpression); + continue; + } + if (!inDecoratorContext() && parseOptional(19)) { + var indexedAccess = createNode(173, expression.pos); + indexedAccess.expression = expression; + if (token !== 20) { + indexedAccess.argumentExpression = allowInAnd(parseExpression); + if (indexedAccess.argumentExpression.kind === 9 || indexedAccess.argumentExpression.kind === 8) { + var literal = indexedAccess.argumentExpression; + literal.text = internIdentifier(literal.text); + } + } + parseExpected(20); + expression = finishNode(indexedAccess); + continue; + } + if (token === 11 || token === 12) { + var tagExpression = createNode(176, expression.pos); + tagExpression.tag = expression; + tagExpression.template = token === 11 + ? parseLiteralNode() + : parseTemplateExpression(); + expression = finishNode(tagExpression); + continue; + } + return expression; + } + } + function parseCallExpressionRest(expression) { + while (true) { + expression = parseMemberExpressionRest(expression); + if (token === 25) { + var typeArguments = tryParse(parseTypeArgumentsInExpression); + if (!typeArguments) { + return expression; + } + var callExpr = createNode(174, expression.pos); + callExpr.expression = expression; + callExpr.typeArguments = typeArguments; + callExpr.arguments = parseArgumentList(); + expression = finishNode(callExpr); + continue; + } + else if (token === 17) { + var callExpr = createNode(174, expression.pos); + callExpr.expression = expression; + callExpr.arguments = parseArgumentList(); + expression = finishNode(callExpr); + continue; + } + return expression; + } + } + function parseArgumentList() { + parseExpected(17); + var result = parseDelimitedList(11, parseArgumentExpression); + parseExpected(18); + return result; + } + function parseTypeArgumentsInExpression() { + if (!parseOptional(25)) { + return undefined; + } + var typeArguments = parseDelimitedList(18, parseType); + if (!parseExpected(27)) { + return undefined; + } + return typeArguments && canFollowTypeArgumentsInExpression() + ? typeArguments + : undefined; + } + function canFollowTypeArgumentsInExpression() { + switch (token) { + case 17: + case 21: + case 18: + case 20: + case 54: + case 23: + case 53: + case 30: + case 32: + case 31: + case 33: + case 51: + case 52: + case 48: + case 46: + case 47: + case 16: + case 1: + return true; + case 24: + case 15: + default: + return false; + } + } + function parsePrimaryExpression() { + switch (token) { + case 8: + case 9: + case 11: + return parseLiteralNode(); + case 97: + case 95: + case 93: + case 99: + case 84: + return parseTokenNode(); + case 17: + return parseParenthesizedExpression(); + case 19: + return parseArrayLiteralExpression(); + case 15: + return parseObjectLiteralExpression(); + case 118: + if (!lookAhead(nextTokenIsFunctionKeywordOnSameLine)) { + break; + } + return parseFunctionExpression(); + case 73: + return parseClassExpression(); + case 87: + return parseFunctionExpression(); + case 92: + return parseNewExpression(); + case 39: + case 61: + if (reScanSlashToken() === 10) { + return parseLiteralNode(); + } + break; + case 12: + return parseTemplateExpression(); + } + return parseIdentifier(ts.Diagnostics.Expression_expected); + } + function parseParenthesizedExpression() { + var node = createNode(178); + parseExpected(17); + node.expression = allowInAnd(parseExpression); + parseExpected(18); + return finishNode(node); + } + function parseSpreadElement() { + var node = createNode(191); + parseExpected(22); + node.expression = parseAssignmentExpressionOrHigher(); + return finishNode(node); + } + function parseArgumentOrArrayLiteralElement() { + return token === 22 ? parseSpreadElement() : + token === 24 ? createNode(193) : + parseAssignmentExpressionOrHigher(); + } + function parseArgumentExpression() { + return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement); + } + function parseArrayLiteralExpression() { + var node = createNode(170); + parseExpected(19); + if (scanner.hasPrecedingLineBreak()) { + node.multiLine = true; + } + node.elements = parseDelimitedList(15, parseArgumentOrArrayLiteralElement); + parseExpected(20); + return finishNode(node); + } + function tryParseAccessorDeclaration(fullStart, decorators, modifiers) { + if (parseContextualModifier(123)) { + return addJSDocComment(parseAccessorDeclaration(149, fullStart, decorators, modifiers)); + } + else if (parseContextualModifier(131)) { + return parseAccessorDeclaration(150, fullStart, decorators, modifiers); + } + return undefined; + } + function parseObjectLiteralElement() { + var fullStart = scanner.getStartPos(); + var decorators = parseDecorators(); + var modifiers = parseModifiers(); + var accessor = tryParseAccessorDeclaration(fullStart, decorators, modifiers); + if (accessor) { + return accessor; + } + var asteriskToken = parseOptionalToken(37); + var tokenIsIdentifier = isIdentifier(); + var propertyName = parsePropertyName(); + var questionToken = parseOptionalToken(53); + if (asteriskToken || token === 17 || token === 25) { + return parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, propertyName, questionToken); + } + var isShorthandPropertyAssignment = tokenIsIdentifier && (token === 24 || token === 16 || token === 56); + if (isShorthandPropertyAssignment) { + var shorthandDeclaration = createNode(254, fullStart); + shorthandDeclaration.name = propertyName; + shorthandDeclaration.questionToken = questionToken; + var equalsToken = parseOptionalToken(56); + if (equalsToken) { + shorthandDeclaration.equalsToken = equalsToken; + shorthandDeclaration.objectAssignmentInitializer = allowInAnd(parseAssignmentExpressionOrHigher); + } + return addJSDocComment(finishNode(shorthandDeclaration)); + } + else { + var propertyAssignment = createNode(253, fullStart); + propertyAssignment.modifiers = modifiers; + propertyAssignment.name = propertyName; + propertyAssignment.questionToken = questionToken; + parseExpected(54); + propertyAssignment.initializer = allowInAnd(parseAssignmentExpressionOrHigher); + return addJSDocComment(finishNode(propertyAssignment)); + } + } + function parseObjectLiteralExpression() { + var node = createNode(171); + parseExpected(15); + if (scanner.hasPrecedingLineBreak()) { + node.multiLine = true; + } + node.properties = parseDelimitedList(12, parseObjectLiteralElement, true); + parseExpected(16); + return finishNode(node); + } + function parseFunctionExpression() { + var saveDecoratorContext = inDecoratorContext(); + if (saveDecoratorContext) { + setDecoratorContext(false); + } + var node = createNode(179); + setModifiers(node, parseModifiers()); + parseExpected(87); + node.asteriskToken = parseOptionalToken(37); + var isGenerator = !!node.asteriskToken; + var isAsync = !!(node.flags & 256); + node.name = + isGenerator && isAsync ? doInYieldAndAwaitContext(parseOptionalIdentifier) : + isGenerator ? doInYieldContext(parseOptionalIdentifier) : + isAsync ? doInAwaitContext(parseOptionalIdentifier) : + parseOptionalIdentifier(); + fillSignature(54, isGenerator, isAsync, false, node); + node.body = parseFunctionBlock(isGenerator, isAsync, false); + if (saveDecoratorContext) { + setDecoratorContext(true); + } + return addJSDocComment(finishNode(node)); + } + function parseOptionalIdentifier() { + return isIdentifier() ? parseIdentifier() : undefined; + } + function parseNewExpression() { + var node = createNode(175); + parseExpected(92); + node.expression = parseMemberExpressionOrHigher(); + node.typeArguments = tryParse(parseTypeArgumentsInExpression); + if (node.typeArguments || token === 17) { + node.arguments = parseArgumentList(); + } + return finishNode(node); + } + function parseBlock(ignoreMissingOpenBrace, diagnosticMessage) { + var node = createNode(199); + if (parseExpected(15, diagnosticMessage) || ignoreMissingOpenBrace) { + node.statements = parseList(1, parseStatement); + parseExpected(16); + } + else { + node.statements = createMissingList(); + } + return finishNode(node); + } + function parseFunctionBlock(allowYield, allowAwait, ignoreMissingOpenBrace, diagnosticMessage) { + var savedYieldContext = inYieldContext(); + setYieldContext(allowYield); + var savedAwaitContext = inAwaitContext(); + setAwaitContext(allowAwait); + var saveDecoratorContext = inDecoratorContext(); + if (saveDecoratorContext) { + setDecoratorContext(false); + } + var block = parseBlock(ignoreMissingOpenBrace, diagnosticMessage); + if (saveDecoratorContext) { + setDecoratorContext(true); + } + setYieldContext(savedYieldContext); + setAwaitContext(savedAwaitContext); + return block; + } + function parseEmptyStatement() { + var node = createNode(201); + parseExpected(23); + return finishNode(node); + } + function parseIfStatement() { + var node = createNode(203); + parseExpected(88); + parseExpected(17); + node.expression = allowInAnd(parseExpression); + parseExpected(18); + node.thenStatement = parseStatement(); + node.elseStatement = parseOptional(80) ? parseStatement() : undefined; + return finishNode(node); + } + function parseDoStatement() { + var node = createNode(204); + parseExpected(79); + node.statement = parseStatement(); + parseExpected(104); + parseExpected(17); + node.expression = allowInAnd(parseExpression); + parseExpected(18); + parseOptional(23); + return finishNode(node); + } + function parseWhileStatement() { + var node = createNode(205); + parseExpected(104); + parseExpected(17); + node.expression = allowInAnd(parseExpression); + parseExpected(18); + node.statement = parseStatement(); + return finishNode(node); + } + function parseForOrForInOrForOfStatement() { + var pos = getNodePos(); + parseExpected(86); + parseExpected(17); + var initializer = undefined; + if (token !== 23) { + if (token === 102 || token === 108 || token === 74) { + initializer = parseVariableDeclarationList(true); + } + else { + initializer = disallowInAnd(parseExpression); + } + } + var forOrForInOrForOfStatement; + if (parseOptional(90)) { + var forInStatement = createNode(207, pos); + forInStatement.initializer = initializer; + forInStatement.expression = allowInAnd(parseExpression); + parseExpected(18); + forOrForInOrForOfStatement = forInStatement; + } + else if (parseOptional(138)) { + var forOfStatement = createNode(208, pos); + forOfStatement.initializer = initializer; + forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher); + parseExpected(18); + forOrForInOrForOfStatement = forOfStatement; + } + else { + var forStatement = createNode(206, pos); + forStatement.initializer = initializer; + parseExpected(23); + if (token !== 23 && token !== 18) { + forStatement.condition = allowInAnd(parseExpression); + } + parseExpected(23); + if (token !== 18) { + forStatement.incrementor = allowInAnd(parseExpression); + } + parseExpected(18); + forOrForInOrForOfStatement = forStatement; + } + forOrForInOrForOfStatement.statement = parseStatement(); + return finishNode(forOrForInOrForOfStatement); + } + function parseBreakOrContinueStatement(kind) { + var node = createNode(kind); + parseExpected(kind === 210 ? 70 : 75); + if (!canParseSemicolon()) { + node.label = parseIdentifier(); + } + parseSemicolon(); + return finishNode(node); + } + function parseReturnStatement() { + var node = createNode(211); + parseExpected(94); + if (!canParseSemicolon()) { + node.expression = allowInAnd(parseExpression); + } + parseSemicolon(); + return finishNode(node); + } + function parseWithStatement() { + var node = createNode(212); + parseExpected(105); + parseExpected(17); + node.expression = allowInAnd(parseExpression); + parseExpected(18); + node.statement = parseStatement(); + return finishNode(node); + } + function parseCaseClause() { + var node = createNode(249); + parseExpected(71); + node.expression = allowInAnd(parseExpression); + parseExpected(54); + node.statements = parseList(3, parseStatement); + return finishNode(node); + } + function parseDefaultClause() { + var node = createNode(250); + parseExpected(77); + parseExpected(54); + node.statements = parseList(3, parseStatement); + return finishNode(node); + } + function parseCaseOrDefaultClause() { + return token === 71 ? parseCaseClause() : parseDefaultClause(); + } + function parseSwitchStatement() { + var node = createNode(213); + parseExpected(96); + parseExpected(17); + node.expression = allowInAnd(parseExpression); + parseExpected(18); + var caseBlock = createNode(227, scanner.getStartPos()); + parseExpected(15); + caseBlock.clauses = parseList(2, parseCaseOrDefaultClause); + parseExpected(16); + node.caseBlock = finishNode(caseBlock); + return finishNode(node); + } + function parseThrowStatement() { + var node = createNode(215); + parseExpected(98); + node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression); + parseSemicolon(); + return finishNode(node); + } + function parseTryStatement() { + var node = createNode(216); + parseExpected(100); + node.tryBlock = parseBlock(false); + node.catchClause = token === 72 ? parseCatchClause() : undefined; + if (!node.catchClause || token === 85) { + parseExpected(85); + node.finallyBlock = parseBlock(false); + } + return finishNode(node); + } + function parseCatchClause() { + var result = createNode(252); + parseExpected(72); + if (parseExpected(17)) { + result.variableDeclaration = parseVariableDeclaration(); + } + parseExpected(18); + result.block = parseBlock(false); + return finishNode(result); + } + function parseDebuggerStatement() { + var node = createNode(217); + parseExpected(76); + parseSemicolon(); + return finishNode(node); + } + function parseExpressionOrLabeledStatement() { + var fullStart = scanner.getStartPos(); + var expression = allowInAnd(parseExpression); + if (expression.kind === 69 && parseOptional(54)) { + var labeledStatement = createNode(214, fullStart); + labeledStatement.label = expression; + labeledStatement.statement = parseStatement(); + return addJSDocComment(finishNode(labeledStatement)); + } + else { + var expressionStatement = createNode(202, fullStart); + expressionStatement.expression = expression; + parseSemicolon(); + return addJSDocComment(finishNode(expressionStatement)); + } + } + function nextTokenIsIdentifierOrKeywordOnSameLine() { + nextToken(); + return ts.tokenIsIdentifierOrKeyword(token) && !scanner.hasPrecedingLineBreak(); + } + function nextTokenIsFunctionKeywordOnSameLine() { + nextToken(); + return token === 87 && !scanner.hasPrecedingLineBreak(); + } + function nextTokenIsIdentifierOrKeywordOrNumberOnSameLine() { + nextToken(); + return (ts.tokenIsIdentifierOrKeyword(token) || token === 8) && !scanner.hasPrecedingLineBreak(); + } + function isDeclaration() { + while (true) { + switch (token) { + case 102: + case 108: + case 74: + case 87: + case 73: + case 81: + return true; + case 107: + case 134: + return nextTokenIsIdentifierOnSameLine(); + case 125: + case 126: + return nextTokenIsIdentifierOrStringLiteralOnSameLine(); + case 115: + case 118: + case 122: + case 110: + case 111: + case 112: + case 128: + nextToken(); + if (scanner.hasPrecedingLineBreak()) { + return false; + } + continue; + case 137: + nextToken(); + return token === 15 || token === 69 || token === 82; + case 89: + nextToken(); + return token === 9 || token === 37 || + token === 15 || ts.tokenIsIdentifierOrKeyword(token); + case 82: + nextToken(); + if (token === 56 || token === 37 || + token === 15 || token === 77 || + token === 116) { + return true; + } + continue; + case 113: + nextToken(); + continue; + default: + return false; + } + } + } + function isStartOfDeclaration() { + return lookAhead(isDeclaration); + } + function isStartOfStatement() { + switch (token) { + case 55: + case 23: + case 15: + case 102: + case 108: + case 87: + case 73: + case 81: + case 88: + case 79: + case 104: + case 86: + case 75: + case 70: + case 94: + case 105: + case 96: + case 98: + case 100: + case 76: + case 72: + case 85: + return true; + case 74: + case 82: + case 89: + return isStartOfDeclaration(); + case 118: + case 122: + case 107: + case 125: + case 126: + case 134: + case 137: + return true; + case 112: + case 110: + case 111: + case 113: + case 128: + return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); + default: + return isStartOfExpression(); + } + } + function nextTokenIsIdentifierOrStartOfDestructuring() { + nextToken(); + return isIdentifier() || token === 15 || token === 19; + } + function isLetDeclaration() { + return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring); + } + function parseStatement() { + switch (token) { + case 23: + return parseEmptyStatement(); + case 15: + return parseBlock(false); + case 102: + return parseVariableStatement(scanner.getStartPos(), undefined, undefined); + case 108: + if (isLetDeclaration()) { + return parseVariableStatement(scanner.getStartPos(), undefined, undefined); + } + break; + case 87: + return parseFunctionDeclaration(scanner.getStartPos(), undefined, undefined); + case 73: + return parseClassDeclaration(scanner.getStartPos(), undefined, undefined); + case 88: + return parseIfStatement(); + case 79: + return parseDoStatement(); + case 104: + return parseWhileStatement(); + case 86: + return parseForOrForInOrForOfStatement(); + case 75: + return parseBreakOrContinueStatement(209); + case 70: + return parseBreakOrContinueStatement(210); + case 94: + return parseReturnStatement(); + case 105: + return parseWithStatement(); + case 96: + return parseSwitchStatement(); + case 98: + return parseThrowStatement(); + case 100: + case 72: + case 85: + return parseTryStatement(); + case 76: + return parseDebuggerStatement(); + case 55: + return parseDeclaration(); + case 118: + case 107: + case 134: + case 125: + case 126: + case 122: + case 74: + case 81: + case 82: + case 89: + case 110: + case 111: + case 112: + case 115: + case 113: + case 128: + case 137: + if (isStartOfDeclaration()) { + return parseDeclaration(); + } + break; + } + return parseExpressionOrLabeledStatement(); + } + function parseDeclaration() { + var fullStart = getNodePos(); + var decorators = parseDecorators(); + var modifiers = parseModifiers(); + switch (token) { + case 102: + case 108: + case 74: + return parseVariableStatement(fullStart, decorators, modifiers); + case 87: + return parseFunctionDeclaration(fullStart, decorators, modifiers); + case 73: + return parseClassDeclaration(fullStart, decorators, modifiers); + case 107: + return parseInterfaceDeclaration(fullStart, decorators, modifiers); + case 134: + return parseTypeAliasDeclaration(fullStart, decorators, modifiers); + case 81: + return parseEnumDeclaration(fullStart, decorators, modifiers); + case 137: + case 125: + case 126: + return parseModuleDeclaration(fullStart, decorators, modifiers); + case 89: + return parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers); + case 82: + nextToken(); + switch (token) { + case 77: + case 56: + return parseExportAssignment(fullStart, decorators, modifiers); + case 116: + return parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers); + default: + return parseExportDeclaration(fullStart, decorators, modifiers); + } + default: + if (decorators || modifiers) { + var node = createMissingNode(239, true, ts.Diagnostics.Declaration_expected); + node.pos = fullStart; + node.decorators = decorators; + setModifiers(node, modifiers); + return finishNode(node); + } + } + } + function nextTokenIsIdentifierOrStringLiteralOnSameLine() { + nextToken(); + return !scanner.hasPrecedingLineBreak() && (isIdentifier() || token === 9); + } + function parseFunctionBlockOrSemicolon(isGenerator, isAsync, diagnosticMessage) { + if (token !== 15 && canParseSemicolon()) { + parseSemicolon(); + return; + } + return parseFunctionBlock(isGenerator, isAsync, false, diagnosticMessage); + } + function parseArrayBindingElement() { + if (token === 24) { + return createNode(193); + } + var node = createNode(169); + node.dotDotDotToken = parseOptionalToken(22); + node.name = parseIdentifierOrPattern(); + node.initializer = parseBindingElementInitializer(false); + return finishNode(node); + } + function parseObjectBindingElement() { + var node = createNode(169); + var tokenIsIdentifier = isIdentifier(); + var propertyName = parsePropertyName(); + if (tokenIsIdentifier && token !== 54) { + node.name = propertyName; + } + else { + parseExpected(54); + node.propertyName = propertyName; + node.name = parseIdentifierOrPattern(); + } + node.initializer = parseBindingElementInitializer(false); + return finishNode(node); + } + function parseObjectBindingPattern() { + var node = createNode(167); + parseExpected(15); + node.elements = parseDelimitedList(9, parseObjectBindingElement); + parseExpected(16); + return finishNode(node); + } + function parseArrayBindingPattern() { + var node = createNode(168); + parseExpected(19); + node.elements = parseDelimitedList(10, parseArrayBindingElement); + parseExpected(20); + return finishNode(node); + } + function isIdentifierOrPattern() { + return token === 15 || token === 19 || isIdentifier(); + } + function parseIdentifierOrPattern() { + if (token === 19) { + return parseArrayBindingPattern(); + } + if (token === 15) { + return parseObjectBindingPattern(); + } + return parseIdentifier(); + } + function parseVariableDeclaration() { + var node = createNode(218); + node.name = parseIdentifierOrPattern(); + node.type = parseTypeAnnotation(); + if (!isInOrOfKeyword(token)) { + node.initializer = parseInitializer(false); + } + return finishNode(node); + } + function parseVariableDeclarationList(inForStatementInitializer) { + var node = createNode(219); + switch (token) { + case 102: + break; + case 108: + node.flags |= 1024; + break; + case 74: + node.flags |= 2048; + break; + default: + ts.Debug.fail(); + } + nextToken(); + if (token === 138 && lookAhead(canFollowContextualOfKeyword)) { + node.declarations = createMissingList(); + } + else { + var savedDisallowIn = inDisallowInContext(); + setDisallowInContext(inForStatementInitializer); + node.declarations = parseDelimitedList(8, parseVariableDeclaration); + setDisallowInContext(savedDisallowIn); + } + return finishNode(node); + } + function canFollowContextualOfKeyword() { + return nextTokenIsIdentifier() && nextToken() === 18; + } + function parseVariableStatement(fullStart, decorators, modifiers) { + var node = createNode(200, fullStart); + node.decorators = decorators; + setModifiers(node, modifiers); + node.declarationList = parseVariableDeclarationList(false); + parseSemicolon(); + return addJSDocComment(finishNode(node)); + } + function parseFunctionDeclaration(fullStart, decorators, modifiers) { + var node = createNode(220, fullStart); + node.decorators = decorators; + setModifiers(node, modifiers); + parseExpected(87); + node.asteriskToken = parseOptionalToken(37); + node.name = node.flags & 512 ? parseOptionalIdentifier() : parseIdentifier(); + var isGenerator = !!node.asteriskToken; + var isAsync = !!(node.flags & 256); + fillSignature(54, isGenerator, isAsync, false, node); + node.body = parseFunctionBlockOrSemicolon(isGenerator, isAsync, ts.Diagnostics.or_expected); + return addJSDocComment(finishNode(node)); + } + function parseConstructorDeclaration(pos, decorators, modifiers) { + var node = createNode(148, pos); + node.decorators = decorators; + setModifiers(node, modifiers); + parseExpected(121); + fillSignature(54, false, false, false, node); + node.body = parseFunctionBlockOrSemicolon(false, false, ts.Diagnostics.or_expected); + return addJSDocComment(finishNode(node)); + } + function parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, diagnosticMessage) { + var method = createNode(147, fullStart); + method.decorators = decorators; + setModifiers(method, modifiers); + method.asteriskToken = asteriskToken; + method.name = name; + method.questionToken = questionToken; + var isGenerator = !!asteriskToken; + var isAsync = !!(method.flags & 256); + fillSignature(54, isGenerator, isAsync, false, method); + method.body = parseFunctionBlockOrSemicolon(isGenerator, isAsync, diagnosticMessage); + return addJSDocComment(finishNode(method)); + } + function parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken) { + var property = createNode(145, fullStart); + property.decorators = decorators; + setModifiers(property, modifiers); + property.name = name; + property.questionToken = questionToken; + property.type = parseTypeAnnotation(); + property.initializer = modifiers && modifiers.flags & 32 + ? allowInAnd(parseNonParameterInitializer) + : doOutsideOfContext(8388608 | 4194304, parseNonParameterInitializer); + parseSemicolon(); + return finishNode(property); + } + function parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers) { + var asteriskToken = parseOptionalToken(37); + var name = parsePropertyName(); + var questionToken = parseOptionalToken(53); + if (asteriskToken || token === 17 || token === 25) { + return parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, ts.Diagnostics.or_expected); + } + else { + return parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken); + } + } + function parseNonParameterInitializer() { + return parseInitializer(false); + } + function parseAccessorDeclaration(kind, fullStart, decorators, modifiers) { + var node = createNode(kind, fullStart); + node.decorators = decorators; + setModifiers(node, modifiers); + node.name = parsePropertyName(); + fillSignature(54, false, false, false, node); + node.body = parseFunctionBlockOrSemicolon(false, false); + return finishNode(node); + } + function isClassMemberModifier(idToken) { + switch (idToken) { + case 112: + case 110: + case 111: + case 113: + case 128: + return true; + default: + return false; + } + } + function isClassMemberStart() { + var idToken; + if (token === 55) { + return true; + } + while (ts.isModifierKind(token)) { + idToken = token; + if (isClassMemberModifier(idToken)) { + return true; + } + nextToken(); + } + if (token === 37) { + return true; + } + if (isLiteralPropertyName()) { + idToken = token; + nextToken(); + } + if (token === 19) { + return true; + } + if (idToken !== undefined) { + if (!ts.isKeyword(idToken) || idToken === 131 || idToken === 123) { + return true; + } + switch (token) { + case 17: + case 25: + case 54: + case 56: + case 53: + return true; + default: + return canParseSemicolon(); + } + } + return false; + } + function parseDecorators() { + var decorators; + while (true) { + var decoratorStart = getNodePos(); + if (!parseOptional(55)) { + break; + } + if (!decorators) { + decorators = []; + decorators.pos = decoratorStart; + } + var decorator = createNode(143, decoratorStart); + decorator.expression = doInDecoratorContext(parseLeftHandSideExpressionOrHigher); + decorators.push(finishNode(decorator)); + } + if (decorators) { + decorators.end = getNodeEnd(); + } + return decorators; + } + function parseModifiers(permitInvalidConstAsModifier) { + var flags = 0; + var modifiers; + while (true) { + var modifierStart = scanner.getStartPos(); + var modifierKind = token; + if (token === 74 && permitInvalidConstAsModifier) { + if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) { + break; + } + } + else { + if (!parseAnyContextualModifier()) { + break; + } + } + if (!modifiers) { + modifiers = []; + modifiers.pos = modifierStart; + } + flags |= ts.modifierToFlag(modifierKind); + modifiers.push(finishNode(createNode(modifierKind, modifierStart))); + } + if (modifiers) { + modifiers.flags = flags; + modifiers.end = scanner.getStartPos(); + } + return modifiers; + } + function parseModifiersForArrowFunction() { + var flags = 0; + var modifiers; + if (token === 118) { + var modifierStart = scanner.getStartPos(); + var modifierKind = token; + nextToken(); + modifiers = []; + modifiers.pos = modifierStart; + flags |= ts.modifierToFlag(modifierKind); + modifiers.push(finishNode(createNode(modifierKind, modifierStart))); + modifiers.flags = flags; + modifiers.end = scanner.getStartPos(); + } + return modifiers; + } + function parseClassElement() { + if (token === 23) { + var result = createNode(198); + nextToken(); + return finishNode(result); + } + var fullStart = getNodePos(); + var decorators = parseDecorators(); + var modifiers = parseModifiers(true); + var accessor = tryParseAccessorDeclaration(fullStart, decorators, modifiers); + if (accessor) { + return accessor; + } + if (token === 121) { + return parseConstructorDeclaration(fullStart, decorators, modifiers); + } + if (isIndexSignature()) { + return parseIndexSignatureDeclaration(fullStart, decorators, modifiers); + } + if (ts.tokenIsIdentifierOrKeyword(token) || + token === 9 || + token === 8 || + token === 37 || + token === 19) { + return parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers); + } + if (decorators || modifiers) { + var name_7 = createMissingNode(69, true, ts.Diagnostics.Declaration_expected); + return parsePropertyDeclaration(fullStart, decorators, modifiers, name_7, undefined); + } + ts.Debug.fail("Should not have attempted to parse class member declaration."); + } + function parseClassExpression() { + return parseClassDeclarationOrExpression(scanner.getStartPos(), undefined, undefined, 192); + } + function parseClassDeclaration(fullStart, decorators, modifiers) { + return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 221); + } + function parseClassDeclarationOrExpression(fullStart, decorators, modifiers, kind) { + var node = createNode(kind, fullStart); + node.decorators = decorators; + setModifiers(node, modifiers); + parseExpected(73); + node.name = parseNameOfClassDeclarationOrExpression(); + node.typeParameters = parseTypeParameters(); + node.heritageClauses = parseHeritageClauses(true); + if (parseExpected(15)) { + node.members = parseClassMembers(); + parseExpected(16); + } + else { + node.members = createMissingList(); + } + return finishNode(node); + } + function parseNameOfClassDeclarationOrExpression() { + return isIdentifier() && !isImplementsClause() + ? parseIdentifier() + : undefined; + } + function isImplementsClause() { + return token === 106 && lookAhead(nextTokenIsIdentifierOrKeyword); + } + function parseHeritageClauses(isClassHeritageClause) { + if (isHeritageClause()) { + return parseList(20, parseHeritageClause); + } + return undefined; + } + function parseHeritageClause() { + if (token === 83 || token === 106) { + var node = createNode(251); + node.token = token; + nextToken(); + node.types = parseDelimitedList(7, parseExpressionWithTypeArguments); + return finishNode(node); + } + return undefined; + } + function parseExpressionWithTypeArguments() { + var node = createNode(194); + node.expression = parseLeftHandSideExpressionOrHigher(); + if (token === 25) { + node.typeArguments = parseBracketedList(18, parseType, 25, 27); + } + return finishNode(node); + } + function isHeritageClause() { + return token === 83 || token === 106; + } + function parseClassMembers() { + return parseList(5, parseClassElement); + } + function parseInterfaceDeclaration(fullStart, decorators, modifiers) { + var node = createNode(222, fullStart); + node.decorators = decorators; + setModifiers(node, modifiers); + parseExpected(107); + node.name = parseIdentifier(); + node.typeParameters = parseTypeParameters(); + node.heritageClauses = parseHeritageClauses(false); + node.members = parseObjectTypeMembers(); + return finishNode(node); + } + function parseTypeAliasDeclaration(fullStart, decorators, modifiers) { + var node = createNode(223, fullStart); + node.decorators = decorators; + setModifiers(node, modifiers); + parseExpected(134); + node.name = parseIdentifier(); + node.typeParameters = parseTypeParameters(); + parseExpected(56); + node.type = parseType(); + parseSemicolon(); + return finishNode(node); + } + function parseEnumMember() { + var node = createNode(255, scanner.getStartPos()); + node.name = parsePropertyName(); + node.initializer = allowInAnd(parseNonParameterInitializer); + return finishNode(node); + } + function parseEnumDeclaration(fullStart, decorators, modifiers) { + var node = createNode(224, fullStart); + node.decorators = decorators; + setModifiers(node, modifiers); + parseExpected(81); + node.name = parseIdentifier(); + if (parseExpected(15)) { + node.members = parseDelimitedList(6, parseEnumMember); + parseExpected(16); + } + else { + node.members = createMissingList(); + } + return finishNode(node); + } + function parseModuleBlock() { + var node = createNode(226, scanner.getStartPos()); + if (parseExpected(15)) { + node.statements = parseList(1, parseStatement); + parseExpected(16); + } + else { + node.statements = createMissingList(); + } + return finishNode(node); + } + function parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags) { + var node = createNode(225, fullStart); + var namespaceFlag = flags & 4096; + node.decorators = decorators; + setModifiers(node, modifiers); + node.flags |= flags; + node.name = parseIdentifier(); + node.body = parseOptional(21) + ? parseModuleOrNamespaceDeclaration(getNodePos(), undefined, undefined, 1 | namespaceFlag) + : parseModuleBlock(); + return finishNode(node); + } + function parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers) { + var node = createNode(225, fullStart); + node.decorators = decorators; + setModifiers(node, modifiers); + if (token === 137) { + node.name = parseIdentifier(); + node.flags |= 131072; + } + else { + node.name = parseLiteralNode(true); + } + node.body = parseModuleBlock(); + return finishNode(node); + } + function parseModuleDeclaration(fullStart, decorators, modifiers) { + var flags = modifiers ? modifiers.flags : 0; + if (token === 137) { + return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers); + } + else if (parseOptional(126)) { + flags |= 4096; + } + else { + parseExpected(125); + if (token === 9) { + return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers); + } + } + return parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags); + } + function isExternalModuleReference() { + return token === 129 && + lookAhead(nextTokenIsOpenParen); + } + function nextTokenIsOpenParen() { + return nextToken() === 17; + } + function nextTokenIsSlash() { + return nextToken() === 39; + } + function parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers) { + var exportDeclaration = createNode(228, fullStart); + exportDeclaration.decorators = decorators; + exportDeclaration.modifiers = modifiers; + parseExpected(116); + parseExpected(126); + exportDeclaration.name = parseIdentifier(); + parseExpected(23); + return finishNode(exportDeclaration); + } + function parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers) { + parseExpected(89); + var afterImportPos = scanner.getStartPos(); + var identifier; + if (isIdentifier()) { + identifier = parseIdentifier(); + if (token !== 24 && token !== 136) { + var importEqualsDeclaration = createNode(229, fullStart); + importEqualsDeclaration.decorators = decorators; + setModifiers(importEqualsDeclaration, modifiers); + importEqualsDeclaration.name = identifier; + parseExpected(56); + importEqualsDeclaration.moduleReference = parseModuleReference(); + parseSemicolon(); + return finishNode(importEqualsDeclaration); + } + } + var importDeclaration = createNode(230, fullStart); + importDeclaration.decorators = decorators; + setModifiers(importDeclaration, modifiers); + if (identifier || + token === 37 || + token === 15) { + importDeclaration.importClause = parseImportClause(identifier, afterImportPos); + parseExpected(136); + } + importDeclaration.moduleSpecifier = parseModuleSpecifier(); + parseSemicolon(); + return finishNode(importDeclaration); + } + function parseImportClause(identifier, fullStart) { + var importClause = createNode(231, fullStart); + if (identifier) { + importClause.name = identifier; + } + if (!importClause.name || + parseOptional(24)) { + importClause.namedBindings = token === 37 ? parseNamespaceImport() : parseNamedImportsOrExports(233); + } + return finishNode(importClause); + } + function parseModuleReference() { + return isExternalModuleReference() + ? parseExternalModuleReference() + : parseEntityName(false); + } + function parseExternalModuleReference() { + var node = createNode(240); + parseExpected(129); + parseExpected(17); + node.expression = parseModuleSpecifier(); + parseExpected(18); + return finishNode(node); + } + function parseModuleSpecifier() { + if (token === 9) { + var result = parseLiteralNode(); + internIdentifier(result.text); + return result; + } + else { + return parseExpression(); + } + } + function parseNamespaceImport() { + var namespaceImport = createNode(232); + parseExpected(37); + parseExpected(116); + namespaceImport.name = parseIdentifier(); + return finishNode(namespaceImport); + } + function parseNamedImportsOrExports(kind) { + var node = createNode(kind); + node.elements = parseBracketedList(21, kind === 233 ? parseImportSpecifier : parseExportSpecifier, 15, 16); + return finishNode(node); + } + function parseExportSpecifier() { + return parseImportOrExportSpecifier(238); + } + function parseImportSpecifier() { + return parseImportOrExportSpecifier(234); + } + function parseImportOrExportSpecifier(kind) { + var node = createNode(kind); + var checkIdentifierIsKeyword = ts.isKeyword(token) && !isIdentifier(); + var checkIdentifierStart = scanner.getTokenPos(); + var checkIdentifierEnd = scanner.getTextPos(); + var identifierName = parseIdentifierName(); + if (token === 116) { + node.propertyName = identifierName; + parseExpected(116); + checkIdentifierIsKeyword = ts.isKeyword(token) && !isIdentifier(); + checkIdentifierStart = scanner.getTokenPos(); + checkIdentifierEnd = scanner.getTextPos(); + node.name = parseIdentifierName(); + } + else { + node.name = identifierName; + } + if (kind === 234 && checkIdentifierIsKeyword) { + parseErrorAtPosition(checkIdentifierStart, checkIdentifierEnd - checkIdentifierStart, ts.Diagnostics.Identifier_expected); + } + return finishNode(node); + } + function parseExportDeclaration(fullStart, decorators, modifiers) { + var node = createNode(236, fullStart); + node.decorators = decorators; + setModifiers(node, modifiers); + if (parseOptional(37)) { + parseExpected(136); + node.moduleSpecifier = parseModuleSpecifier(); + } + else { + node.exportClause = parseNamedImportsOrExports(237); + if (token === 136 || (token === 9 && !scanner.hasPrecedingLineBreak())) { + parseExpected(136); + node.moduleSpecifier = parseModuleSpecifier(); + } + } + parseSemicolon(); + return finishNode(node); + } + function parseExportAssignment(fullStart, decorators, modifiers) { + var node = createNode(235, fullStart); + node.decorators = decorators; + setModifiers(node, modifiers); + if (parseOptional(56)) { + node.isExportEquals = true; + } + else { + parseExpected(77); + } + node.expression = parseAssignmentExpressionOrHigher(); + parseSemicolon(); + return finishNode(node); + } + function processReferenceComments(sourceFile) { + var triviaScanner = ts.createScanner(sourceFile.languageVersion, false, 0, sourceText); + var referencedFiles = []; + var typeReferenceDirectives = []; + var amdDependencies = []; + var amdModuleName; + while (true) { + var kind = triviaScanner.scan(); + if (kind !== 2) { + if (ts.isTrivia(kind)) { + continue; + } + else { + break; + } + } + var range = { pos: triviaScanner.getTokenPos(), end: triviaScanner.getTextPos(), kind: triviaScanner.getToken() }; + var comment = sourceText.substring(range.pos, range.end); + var referencePathMatchResult = ts.getFileReferenceFromReferencePath(comment, range); + if (referencePathMatchResult) { + var fileReference = referencePathMatchResult.fileReference; + sourceFile.hasNoDefaultLib = referencePathMatchResult.isNoDefaultLib; + var diagnosticMessage = referencePathMatchResult.diagnosticMessage; + if (fileReference) { + if (referencePathMatchResult.isTypeReferenceDirective) { + typeReferenceDirectives.push(fileReference); + } + else { + referencedFiles.push(fileReference); + } + } + if (diagnosticMessage) { + parseDiagnostics.push(ts.createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, diagnosticMessage)); + } + } + else { + var amdModuleNameRegEx = /^\/\/\/\s*".length; + return parseErrorAtPosition(start, end - start, ts.Diagnostics.Type_argument_list_cannot_be_empty); + } + } + function parseQualifiedName(left) { + var result = createNode(139, left.pos); + result.left = left; + result.right = parseIdentifierName(); + return finishNode(result); + } + function parseJSDocRecordType() { + var result = createNode(265); + nextToken(); + result.members = parseDelimitedList(24, parseJSDocRecordMember); + checkForTrailingComma(result.members); + parseExpected(16); + return finishNode(result); + } + function parseJSDocRecordMember() { + var result = createNode(266); + result.name = parseSimplePropertyName(); + if (token === 54) { + nextToken(); + result.type = parseJSDocType(); + } + return finishNode(result); + } + function parseJSDocNonNullableType() { + var result = createNode(264); + nextToken(); + result.type = parseJSDocType(); + return finishNode(result); + } + function parseJSDocTupleType() { + var result = createNode(262); + nextToken(); + result.types = parseDelimitedList(25, parseJSDocType); + checkForTrailingComma(result.types); + parseExpected(20); + return finishNode(result); + } + function checkForTrailingComma(list) { + if (parseDiagnostics.length === 0 && list.hasTrailingComma) { + var start = list.end - ",".length; + parseErrorAtPosition(start, ",".length, ts.Diagnostics.Trailing_comma_not_allowed); + } + } + function parseJSDocUnionType() { + var result = createNode(261); + nextToken(); + result.types = parseJSDocTypeList(parseJSDocType()); + parseExpected(18); + return finishNode(result); + } + function parseJSDocTypeList(firstType) { + ts.Debug.assert(!!firstType); + var types = []; + types.pos = firstType.pos; + types.push(firstType); + while (parseOptional(47)) { + types.push(parseJSDocType()); + } + types.end = scanner.getStartPos(); + return types; + } + function parseJSDocAllType() { + var result = createNode(258); + nextToken(); + return finishNode(result); + } + function parseJSDocUnknownOrNullableType() { + var pos = scanner.getStartPos(); + nextToken(); + if (token === 24 || + token === 16 || + token === 18 || + token === 27 || + token === 56 || + token === 47) { + var result = createNode(259, pos); + return finishNode(result); + } + else { + var result = createNode(263, pos); + result.type = parseJSDocType(); + return finishNode(result); + } + } + function parseIsolatedJSDocComment(content, start, length) { + initializeState("file.js", content, 2, undefined, 1); + sourceFile = { languageVariant: 0, text: content }; + var jsDocComment = parseJSDocCommentWorker(start, length); + var diagnostics = parseDiagnostics; + clearState(); + return jsDocComment ? { jsDocComment: jsDocComment, diagnostics: diagnostics } : undefined; + } + JSDocParser.parseIsolatedJSDocComment = parseIsolatedJSDocComment; + function parseJSDocComment(parent, start, length) { + var saveToken = token; + var saveParseDiagnosticsLength = parseDiagnostics.length; + var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode; + var comment = parseJSDocCommentWorker(start, length); + if (comment) { + comment.parent = parent; + } + token = saveToken; + parseDiagnostics.length = saveParseDiagnosticsLength; + parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode; + return comment; + } + JSDocParser.parseJSDocComment = parseJSDocComment; + function parseJSDocCommentWorker(start, length) { + var content = sourceText; + start = start || 0; + var end = length === undefined ? content.length : start + length; + length = end - start; + ts.Debug.assert(start >= 0); + ts.Debug.assert(start <= end); + ts.Debug.assert(end <= content.length); + var tags; + var result; + if (content.charCodeAt(start) === 47 && + content.charCodeAt(start + 1) === 42 && + content.charCodeAt(start + 2) === 42 && + content.charCodeAt(start + 3) !== 42) { + scanner.scanRange(start + 3, length - 5, function () { + var canParseTag = true; + var seenAsterisk = true; + nextJSDocToken(); + while (token !== 1) { + switch (token) { + case 55: + if (canParseTag) { + parseTag(); + } + seenAsterisk = false; + break; + case 4: + canParseTag = true; + seenAsterisk = false; + break; + case 37: + if (seenAsterisk) { + canParseTag = false; + } + seenAsterisk = true; + break; + case 69: + canParseTag = false; + break; + case 1: + break; + } + nextJSDocToken(); + } + result = createJSDocComment(); + }); + } + return result; + function createJSDocComment() { + if (!tags) { + return undefined; + } + var result = createNode(273, start); + result.tags = tags; + return finishNode(result, end); + } + function skipWhitespace() { + while (token === 5 || token === 4) { + nextJSDocToken(); + } + } + function parseTag() { + ts.Debug.assert(token === 55); + var atToken = createNode(55, scanner.getTokenPos()); + atToken.end = scanner.getTextPos(); + nextJSDocToken(); + var tagName = parseJSDocIdentifierName(); + if (!tagName) { + return; + } + var tag = handleTag(atToken, tagName) || handleUnknownTag(atToken, tagName); + addTag(tag); + } + function handleTag(atToken, tagName) { + if (tagName) { + switch (tagName.text) { + case "param": + return handleParamTag(atToken, tagName); + case "return": + case "returns": + return handleReturnTag(atToken, tagName); + case "template": + return handleTemplateTag(atToken, tagName); + case "type": + return handleTypeTag(atToken, tagName); + } + } + return undefined; + } + function handleUnknownTag(atToken, tagName) { + var result = createNode(274, atToken.pos); + result.atToken = atToken; + result.tagName = tagName; + return finishNode(result); + } + function addTag(tag) { + if (tag) { + if (!tags) { + tags = []; + tags.pos = tag.pos; + } + tags.push(tag); + tags.end = tag.end; + } + } + function tryParseTypeExpression() { + if (token !== 15) { + return undefined; + } + var typeExpression = parseJSDocTypeExpression(); + return typeExpression; + } + function handleParamTag(atToken, tagName) { + var typeExpression = tryParseTypeExpression(); + skipWhitespace(); + var name; + var isBracketed; + if (parseOptionalToken(19)) { + name = parseJSDocIdentifierName(); + isBracketed = true; + if (parseOptionalToken(56)) { + parseExpression(); + } + parseExpected(20); + } + else if (ts.tokenIsIdentifierOrKeyword(token)) { + name = parseJSDocIdentifierName(); + } + if (!name) { + parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); + return undefined; + } + var preName, postName; + if (typeExpression) { + postName = name; + } + else { + preName = name; + } + if (!typeExpression) { + typeExpression = tryParseTypeExpression(); + } + var result = createNode(275, atToken.pos); + result.atToken = atToken; + result.tagName = tagName; + result.preParameterName = preName; + result.typeExpression = typeExpression; + result.postParameterName = postName; + result.isBracketed = isBracketed; + return finishNode(result); + } + function handleReturnTag(atToken, tagName) { + if (ts.forEach(tags, function (t) { return t.kind === 276; })) { + parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); + } + var result = createNode(276, atToken.pos); + result.atToken = atToken; + result.tagName = tagName; + result.typeExpression = tryParseTypeExpression(); + return finishNode(result); + } + function handleTypeTag(atToken, tagName) { + if (ts.forEach(tags, function (t) { return t.kind === 277; })) { + parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); + } + var result = createNode(277, atToken.pos); + result.atToken = atToken; + result.tagName = tagName; + result.typeExpression = tryParseTypeExpression(); + return finishNode(result); + } + function handleTemplateTag(atToken, tagName) { + if (ts.forEach(tags, function (t) { return t.kind === 278; })) { + parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); + } + var typeParameters = []; + typeParameters.pos = scanner.getStartPos(); + while (true) { + var name_8 = parseJSDocIdentifierName(); + if (!name_8) { + parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); + return undefined; + } + var typeParameter = createNode(141, name_8.pos); + typeParameter.name = name_8; + finishNode(typeParameter); + typeParameters.push(typeParameter); + if (token === 24) { + nextJSDocToken(); + } + else { + break; + } + } + var result = createNode(278, atToken.pos); + result.atToken = atToken; + result.tagName = tagName; + result.typeParameters = typeParameters; + finishNode(result); + typeParameters.end = result.end; + return result; + } + function nextJSDocToken() { + return token = scanner.scanJSDocToken(); + } + function parseJSDocIdentifierName() { + return createJSDocIdentifier(ts.tokenIsIdentifierOrKeyword(token)); + } + function createJSDocIdentifier(isIdentifier) { + if (!isIdentifier) { + parseErrorAtCurrentToken(ts.Diagnostics.Identifier_expected); + return undefined; + } + var pos = scanner.getTokenPos(); + var end = scanner.getTextPos(); + var result = createNode(69, pos); + result.text = content.substring(pos, end); + finishNode(result, end); + nextJSDocToken(); + return result; + } + } + JSDocParser.parseJSDocCommentWorker = parseJSDocCommentWorker; + })(JSDocParser = Parser.JSDocParser || (Parser.JSDocParser = {})); + })(Parser || (Parser = {})); + var IncrementalParser; + (function (IncrementalParser) { + function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) { + aggressiveChecks = aggressiveChecks || ts.Debug.shouldAssert(2); + checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks); + if (ts.textChangeRangeIsUnchanged(textChangeRange)) { + return sourceFile; + } + if (sourceFile.statements.length === 0) { + return Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, undefined, true, sourceFile.scriptKind); + } + var incrementalSourceFile = sourceFile; + ts.Debug.assert(!incrementalSourceFile.hasBeenIncrementallyParsed); + incrementalSourceFile.hasBeenIncrementallyParsed = true; + var oldText = sourceFile.text; + var syntaxCursor = createSyntaxCursor(sourceFile); + var changeRange = extendToAffectedRange(sourceFile, textChangeRange); + checkChangeRange(sourceFile, newText, changeRange, aggressiveChecks); + ts.Debug.assert(changeRange.span.start <= textChangeRange.span.start); + ts.Debug.assert(ts.textSpanEnd(changeRange.span) === ts.textSpanEnd(textChangeRange.span)); + ts.Debug.assert(ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)) === ts.textSpanEnd(ts.textChangeRangeNewSpan(textChangeRange))); + var delta = ts.textChangeRangeNewSpan(changeRange).length - changeRange.span.length; + updateTokenPositionsAndMarkElements(incrementalSourceFile, changeRange.span.start, ts.textSpanEnd(changeRange.span), ts.textSpanEnd(ts.textChangeRangeNewSpan(changeRange)), delta, oldText, newText, aggressiveChecks); + var result = Parser.parseSourceFile(sourceFile.fileName, newText, sourceFile.languageVersion, syntaxCursor, true, sourceFile.scriptKind); + return result; + } + IncrementalParser.updateSourceFile = updateSourceFile; + function moveElementEntirelyPastChangeRange(element, isArray, delta, oldText, newText, aggressiveChecks) { + if (isArray) { + visitArray(element); + } + else { + visitNode(element); + } + return; + function visitNode(node) { + var text = ""; + if (aggressiveChecks && shouldCheckNode(node)) { + text = oldText.substring(node.pos, node.end); + } + if (node._children) { + node._children = undefined; + } + if (node.jsDocComment) { + node.jsDocComment = undefined; + } + node.pos += delta; + node.end += delta; + if (aggressiveChecks && shouldCheckNode(node)) { + ts.Debug.assert(text === newText.substring(node.pos, node.end)); + } + forEachChild(node, visitNode, visitArray); + checkNodePositions(node, aggressiveChecks); + } + function visitArray(array) { + array._children = undefined; + array.pos += delta; + array.end += delta; + for (var _i = 0, array_7 = array; _i < array_7.length; _i++) { + var node = array_7[_i]; + visitNode(node); + } + } + } + function shouldCheckNode(node) { + switch (node.kind) { + case 9: + case 8: + case 69: + return true; + } + return false; + } + function adjustIntersectingElement(element, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) { + ts.Debug.assert(element.end >= changeStart, "Adjusting an element that was entirely before the change range"); + ts.Debug.assert(element.pos <= changeRangeOldEnd, "Adjusting an element that was entirely after the change range"); + ts.Debug.assert(element.pos <= element.end); + element.pos = Math.min(element.pos, changeRangeNewEnd); + if (element.end >= changeRangeOldEnd) { + element.end += delta; + } + else { + element.end = Math.min(element.end, changeRangeNewEnd); + } + ts.Debug.assert(element.pos <= element.end); + if (element.parent) { + ts.Debug.assert(element.pos >= element.parent.pos); + ts.Debug.assert(element.end <= element.parent.end); + } + } + function checkNodePositions(node, aggressiveChecks) { + if (aggressiveChecks) { + var pos_2 = node.pos; + forEachChild(node, function (child) { + ts.Debug.assert(child.pos >= pos_2); + pos_2 = child.end; + }); + ts.Debug.assert(pos_2 <= node.end); + } + } + function updateTokenPositionsAndMarkElements(sourceFile, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta, oldText, newText, aggressiveChecks) { + visitNode(sourceFile); + return; + function visitNode(child) { + ts.Debug.assert(child.pos <= child.end); + if (child.pos > changeRangeOldEnd) { + moveElementEntirelyPastChangeRange(child, false, delta, oldText, newText, aggressiveChecks); + return; + } + var fullEnd = child.end; + if (fullEnd >= changeStart) { + child.intersectsChange = true; + child._children = undefined; + adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); + forEachChild(child, visitNode, visitArray); + checkNodePositions(child, aggressiveChecks); + return; + } + ts.Debug.assert(fullEnd < changeStart); + } + function visitArray(array) { + ts.Debug.assert(array.pos <= array.end); + if (array.pos > changeRangeOldEnd) { + moveElementEntirelyPastChangeRange(array, true, delta, oldText, newText, aggressiveChecks); + return; + } + var fullEnd = array.end; + if (fullEnd >= changeStart) { + array.intersectsChange = true; + array._children = undefined; + adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); + for (var _i = 0, array_8 = array; _i < array_8.length; _i++) { + var node = array_8[_i]; + visitNode(node); + } + return; + } + ts.Debug.assert(fullEnd < changeStart); + } + } + function extendToAffectedRange(sourceFile, changeRange) { + var maxLookahead = 1; + var start = changeRange.span.start; + for (var i = 0; start > 0 && i <= maxLookahead; i++) { + var nearestNode = findNearestNodeStartingBeforeOrAtPosition(sourceFile, start); + ts.Debug.assert(nearestNode.pos <= start); + var position = nearestNode.pos; + start = Math.max(0, position - 1); + } + var finalSpan = ts.createTextSpanFromBounds(start, ts.textSpanEnd(changeRange.span)); + var finalLength = changeRange.newLength + (changeRange.span.start - start); + return ts.createTextChangeRange(finalSpan, finalLength); + } + function findNearestNodeStartingBeforeOrAtPosition(sourceFile, position) { + var bestResult = sourceFile; + var lastNodeEntirelyBeforePosition; + forEachChild(sourceFile, visit); + if (lastNodeEntirelyBeforePosition) { + var lastChildOfLastEntireNodeBeforePosition = getLastChild(lastNodeEntirelyBeforePosition); + if (lastChildOfLastEntireNodeBeforePosition.pos > bestResult.pos) { + bestResult = lastChildOfLastEntireNodeBeforePosition; + } + } + return bestResult; + function getLastChild(node) { + while (true) { + var lastChild = getLastChildWorker(node); + if (lastChild) { + node = lastChild; + } + else { + return node; + } + } + } + function getLastChildWorker(node) { + var last = undefined; + forEachChild(node, function (child) { + if (ts.nodeIsPresent(child)) { + last = child; + } + }); + return last; + } + function visit(child) { + if (ts.nodeIsMissing(child)) { + return; + } + if (child.pos <= position) { + if (child.pos >= bestResult.pos) { + bestResult = child; + } + if (position < child.end) { + forEachChild(child, visit); + return true; + } + else { + ts.Debug.assert(child.end <= position); + lastNodeEntirelyBeforePosition = child; + } + } + else { + ts.Debug.assert(child.pos > position); + return true; + } + } + } + function checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks) { + var oldText = sourceFile.text; + if (textChangeRange) { + ts.Debug.assert((oldText.length - textChangeRange.span.length + textChangeRange.newLength) === newText.length); + if (aggressiveChecks || ts.Debug.shouldAssert(3)) { + var oldTextPrefix = oldText.substr(0, textChangeRange.span.start); + var newTextPrefix = newText.substr(0, textChangeRange.span.start); + ts.Debug.assert(oldTextPrefix === newTextPrefix); + var oldTextSuffix = oldText.substring(ts.textSpanEnd(textChangeRange.span), oldText.length); + var newTextSuffix = newText.substring(ts.textSpanEnd(ts.textChangeRangeNewSpan(textChangeRange)), newText.length); + ts.Debug.assert(oldTextSuffix === newTextSuffix); + } + } + } + function createSyntaxCursor(sourceFile) { + var currentArray = sourceFile.statements; + var currentArrayIndex = 0; + ts.Debug.assert(currentArrayIndex < currentArray.length); + var current = currentArray[currentArrayIndex]; + var lastQueriedPosition = -1; + return { + currentNode: function (position) { + if (position !== lastQueriedPosition) { + if (current && current.end === position && currentArrayIndex < (currentArray.length - 1)) { + currentArrayIndex++; + current = currentArray[currentArrayIndex]; + } + if (!current || current.pos !== position) { + findHighestListElementThatStartsAtPosition(position); + } + } + lastQueriedPosition = position; + ts.Debug.assert(!current || current.pos === position); + return current; + } + }; + function findHighestListElementThatStartsAtPosition(position) { + currentArray = undefined; + currentArrayIndex = -1; + current = undefined; + forEachChild(sourceFile, visitNode, visitArray); + return; + function visitNode(node) { + if (position >= node.pos && position < node.end) { + forEachChild(node, visitNode, visitArray); + return true; + } + return false; + } + function visitArray(array) { + if (position >= array.pos && position < array.end) { + for (var i = 0, n = array.length; i < n; i++) { + var child = array[i]; + if (child) { + if (child.pos === position) { + currentArray = array; + currentArrayIndex = i; + current = child; + return true; + } + else { + if (child.pos < position && position < child.end) { + forEachChild(child, visitNode, visitArray); + return true; + } + } + } + } + } + return false; + } + } + } + })(IncrementalParser || (IncrementalParser = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + ts.bindTime = 0; + function getModuleInstanceState(node) { + if (node.kind === 222 || node.kind === 223) { + return 0; + } + else if (ts.isConstEnumDeclaration(node)) { + return 2; + } + else if ((node.kind === 230 || node.kind === 229) && !(node.flags & 1)) { + return 0; + } + else if (node.kind === 226) { + 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 === 225) { + return getModuleInstanceState(node.body); + } + else { + return 1; + } + } + ts.getModuleInstanceState = getModuleInstanceState; + var binder = createBinder(); + function bindSourceFile(file, options) { + var start = new Date().getTime(); + binder(file, options); + ts.bindTime += new Date().getTime() - start; + } + ts.bindSourceFile = bindSourceFile; + function createBinder() { + var file; + var options; + var languageVersion; + var parent; + var container; + var blockScopeContainer; + var lastContainer; + var seenThisKeyword; + var hasExplicitReturn; + var currentFlow; + var currentBreakTarget; + var currentContinueTarget; + var currentTrueTarget; + var currentFalseTarget; + var preSwitchCaseFlow; + var activeLabels; + var hasClassExtends; + var hasAsyncFunctions; + var hasDecorators; + var hasParameterDecorators; + var hasJsxSpreadAttribute; + var inStrictMode; + var symbolCount = 0; + var Symbol; + var classifiableNames; + var unreachableFlow = { flags: 1 }; + var reportedUnreachableFlow = { flags: 1 }; + function bindSourceFile(f, opts) { + file = f; + options = opts; + languageVersion = ts.getEmitScriptTarget(options); + inStrictMode = !!file.externalModuleIndicator; + classifiableNames = {}; + symbolCount = 0; + Symbol = ts.objectAllocator.getSymbolConstructor(); + if (!file.locals) { + bind(file); + file.symbolCount = symbolCount; + file.classifiableNames = classifiableNames; + } + file = undefined; + options = undefined; + languageVersion = undefined; + parent = undefined; + container = undefined; + blockScopeContainer = undefined; + lastContainer = undefined; + seenThisKeyword = false; + hasExplicitReturn = false; + currentFlow = undefined; + currentBreakTarget = undefined; + currentContinueTarget = undefined; + currentTrueTarget = undefined; + currentFalseTarget = undefined; + activeLabels = undefined; + hasClassExtends = false; + hasAsyncFunctions = false; + hasDecorators = false; + hasParameterDecorators = false; + hasJsxSpreadAttribute = false; + } + return bindSourceFile; + function createSymbol(flags, name) { + symbolCount++; + return new Symbol(flags, name); + } + function addDeclarationToSymbol(symbol, node, symbolFlags) { + symbol.flags |= symbolFlags; + node.symbol = symbol; + if (!symbol.declarations) { + symbol.declarations = []; + } + symbol.declarations.push(node); + if (symbolFlags & 1952 && !symbol.exports) { + symbol.exports = {}; + } + if (symbolFlags & 6240 && !symbol.members) { + symbol.members = {}; + } + if (symbolFlags & 107455) { + var valueDeclaration = symbol.valueDeclaration; + if (!valueDeclaration || + (valueDeclaration.kind !== node.kind && valueDeclaration.kind === 225)) { + symbol.valueDeclaration = node; + } + } + } + function getDeclarationName(node) { + if (node.name) { + if (ts.isAmbientModule(node)) { + return ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + node.name.text + "\""; + } + if (node.name.kind === 140) { + var nameExpression = node.name.expression; + if (ts.isStringOrNumericLiteral(nameExpression.kind)) { + return nameExpression.text; + } + ts.Debug.assert(ts.isWellKnownSymbolSyntactically(nameExpression)); + return ts.getPropertyNameForKnownSymbolName(nameExpression.name.text); + } + return node.name.text; + } + switch (node.kind) { + case 148: + return "__constructor"; + case 156: + case 151: + return "__call"; + case 157: + case 152: + return "__new"; + case 153: + return "__index"; + case 236: + return "__export"; + case 235: + return node.isExportEquals ? "export=" : "default"; + case 187: + switch (ts.getSpecialPropertyAssignmentKind(node)) { + case 2: + return "export="; + case 1: + case 4: + return node.left.name.text; + case 3: + return node.left.expression.name.text; + } + ts.Debug.fail("Unknown binary declaration kind"); + break; + case 220: + case 221: + return node.flags & 512 ? "default" : undefined; + case 269: + return ts.isJSDocConstructSignature(node) ? "__new" : "__call"; + case 142: + ts.Debug.assert(node.parent.kind === 269); + var functionType = node.parent; + var index = ts.indexOf(functionType.parameters, node); + return "p" + index; + } + } + function getDisplayName(node) { + return node.name ? ts.declarationNameToString(node.name) : getDeclarationName(node); + } + function declareSymbol(symbolTable, parent, node, includes, excludes) { + ts.Debug.assert(!ts.hasDynamicName(node)); + var isDefaultExport = node.flags & 512; + var name = isDefaultExport && parent ? "default" : getDeclarationName(node); + var symbol; + if (name !== undefined) { + symbol = ts.hasProperty(symbolTable, name) + ? symbolTable[name] + : (symbolTable[name] = createSymbol(0, name)); + if (name && (includes & 788448)) { + classifiableNames[name] = name; + } + if (symbol.flags & excludes) { + if (node.name) { + node.name.parent = node; + } + var message_1 = symbol.flags & 2 + ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 + : ts.Diagnostics.Duplicate_identifier_0; + ts.forEach(symbol.declarations, function (declaration) { + if (declaration.flags & 512) { + message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports; + } + }); + ts.forEach(symbol.declarations, function (declaration) { + file.bindDiagnostics.push(ts.createDiagnosticForNode(declaration.name || declaration, message_1, getDisplayName(declaration))); + }); + file.bindDiagnostics.push(ts.createDiagnosticForNode(node.name || node, message_1, getDisplayName(node))); + symbol = createSymbol(0, name); + } + } + else { + symbol = createSymbol(0, "__missing"); + } + addDeclarationToSymbol(symbol, node, includes); + symbol.parent = parent; + return symbol; + } + function declareModuleMember(node, symbolFlags, symbolExcludes) { + var hasExportModifier = ts.getCombinedNodeFlags(node) & 1; + if (symbolFlags & 8388608) { + if (node.kind === 238 || (node.kind === 229 && hasExportModifier)) { + return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); + } + else { + return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes); + } + } + else { + if (!ts.isAmbientModule(node) && (hasExportModifier || container.flags & 8192)) { + var exportKind = (symbolFlags & 107455 ? 1048576 : 0) | + (symbolFlags & 793056 ? 2097152 : 0) | + (symbolFlags & 1536 ? 4194304 : 0); + var local = declareSymbol(container.locals, undefined, node, exportKind, symbolExcludes); + local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); + node.localSymbol = local; + return local; + } + else { + return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes); + } + } + } + function bindChildren(node) { + var saveParent = parent; + var saveContainer = container; + var savedBlockScopeContainer = blockScopeContainer; + parent = node; + var containerFlags = getContainerFlags(node); + if (containerFlags & 1) { + container = blockScopeContainer = node; + if (containerFlags & 4) { + container.locals = {}; + } + addToContainerChain(container); + } + else if (containerFlags & 2) { + blockScopeContainer = node; + blockScopeContainer.locals = undefined; + } + var savedHasExplicitReturn; + var savedCurrentFlow; + var savedBreakTarget; + var savedContinueTarget; + var savedActiveLabels; + var kind = node.kind; + var flags = node.flags; + flags &= ~98304; + flags &= ~3932160; + if (kind === 222) { + seenThisKeyword = false; + } + var saveState = kind === 256 || kind === 226 || ts.isFunctionLikeKind(kind); + if (saveState) { + savedHasExplicitReturn = hasExplicitReturn; + savedCurrentFlow = currentFlow; + savedBreakTarget = currentBreakTarget; + savedContinueTarget = currentContinueTarget; + savedActiveLabels = activeLabels; + hasExplicitReturn = false; + currentFlow = { flags: 2 }; + currentBreakTarget = undefined; + currentContinueTarget = undefined; + activeLabels = undefined; + } + if (ts.isInJavaScriptFile(node) && node.jsDocComment) { + bind(node.jsDocComment); + } + bindReachableStatement(node); + if (!(currentFlow.flags & 1) && ts.isFunctionLikeKind(kind) && ts.nodeIsPresent(node.body)) { + flags |= 32768; + if (hasExplicitReturn) { + flags |= 65536; + } + } + if (kind === 222) { + flags = seenThisKeyword ? flags | 16384 : flags & ~16384; + } + if (kind === 256) { + if (hasClassExtends) { + flags |= 262144; + } + if (hasDecorators) { + flags |= 524288; + } + if (hasParameterDecorators) { + flags |= 1048576; + } + if (hasAsyncFunctions) { + flags |= 2097152; + } + if (hasJsxSpreadAttribute) { + flags |= 1073741824; + } + } + node.flags = flags; + if (saveState) { + hasExplicitReturn = savedHasExplicitReturn; + currentFlow = savedCurrentFlow; + currentBreakTarget = savedBreakTarget; + currentContinueTarget = savedContinueTarget; + activeLabels = savedActiveLabels; + } + container = saveContainer; + parent = saveParent; + blockScopeContainer = savedBlockScopeContainer; + } + function bindReachableStatement(node) { + if (checkUnreachable(node)) { + ts.forEachChild(node, bind); + return; + } + switch (node.kind) { + case 205: + bindWhileStatement(node); + break; + case 204: + bindDoStatement(node); + break; + case 206: + bindForStatement(node); + break; + case 207: + case 208: + bindForInOrForOfStatement(node); + break; + case 203: + bindIfStatement(node); + break; + case 211: + case 215: + bindReturnOrThrow(node); + break; + case 210: + case 209: + bindBreakOrContinueStatement(node); + break; + case 216: + bindTryStatement(node); + break; + case 213: + bindSwitchStatement(node); + break; + case 227: + bindCaseBlock(node); + break; + case 214: + bindLabeledStatement(node); + break; + case 185: + bindPrefixUnaryExpressionFlow(node); + break; + case 187: + bindBinaryExpressionFlow(node); + break; + case 181: + bindDeleteExpressionFlow(node); + break; + case 188: + bindConditionalExpressionFlow(node); + break; + case 218: + bindVariableDeclarationFlow(node); + break; + default: + ts.forEachChild(node, bind); + break; + } + } + function isNarrowableReference(expr) { + return expr.kind === 69 || + expr.kind === 97 || + expr.kind === 172 && isNarrowableReference(expr.expression); + } + function isNarrowingExpression(expr) { + switch (expr.kind) { + case 69: + case 97: + case 172: + return isNarrowableReference(expr); + case 174: + return true; + case 178: + return isNarrowingExpression(expr.expression); + case 187: + return isNarrowingBinaryExpression(expr); + case 185: + return expr.operator === 49 && isNarrowingExpression(expr.operand); + } + return false; + } + function isNarrowingBinaryExpression(expr) { + switch (expr.operatorToken.kind) { + case 56: + return isNarrowableReference(expr.left); + case 30: + case 31: + case 32: + case 33: + if (isNarrowingExpression(expr.left) && (expr.right.kind === 93 || expr.right.kind === 69)) { + return true; + } + if (expr.left.kind === 182 && isNarrowingExpression(expr.left.expression) && expr.right.kind === 9) { + return true; + } + return false; + case 91: + return isNarrowingExpression(expr.left); + case 24: + return isNarrowingExpression(expr.right); + } + return false; + } + function createBranchLabel() { + return { + flags: 4, + antecedents: undefined + }; + } + function createLoopLabel() { + return { + flags: 8, + antecedents: undefined + }; + } + function setFlowNodeReferenced(flow) { + flow.flags |= flow.flags & 128 ? 256 : 128; + } + 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 === 99 && flags & 64 || + expression.kind === 84 && flags & 32) { + return unreachableFlow; + } + if (!isNarrowingExpression(expression)) { + return antecedent; + } + setFlowNodeReferenced(antecedent); + return { + flags: flags, + antecedent: antecedent, + expression: expression + }; + } + function createFlowAssignment(antecedent, node) { + setFlowNodeReferenced(antecedent); + return { + flags: 16, + antecedent: antecedent, + node: node + }; + } + function finishFlowLabel(flow) { + var antecedents = flow.antecedents; + if (!antecedents) { + return unreachableFlow; + } + if (antecedents.length === 1) { + return antecedents[0]; + } + return flow; + } + function isStatementCondition(node) { + var parent = node.parent; + switch (parent.kind) { + case 203: + case 205: + case 204: + return parent.expression === node; + case 206: + case 188: + return parent.condition === node; + } + return false; + } + function isLogicalExpression(node) { + while (true) { + if (node.kind === 178) { + node = node.expression; + } + else if (node.kind === 185 && node.operator === 49) { + node = node.operand; + } + else { + return node.kind === 187 && (node.operatorToken.kind === 51 || + node.operatorToken.kind === 52); + } + } + } + function isTopLevelLogicalExpression(node) { + while (node.parent.kind === 178 || + node.parent.kind === 185 && + node.parent.operator === 49) { + node = node.parent; + } + return !isStatementCondition(node) && !isLogicalExpression(node.parent); + } + function bindCondition(node, trueTarget, falseTarget) { + var saveTrueTarget = currentTrueTarget; + var saveFalseTarget = currentFalseTarget; + currentTrueTarget = trueTarget; + currentFalseTarget = falseTarget; + bind(node); + currentTrueTarget = saveTrueTarget; + currentFalseTarget = saveFalseTarget; + if (!node || !isLogicalExpression(node)) { + addAntecedent(trueTarget, createFlowCondition(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 preConditionLabel = createBranchLabel(); + var postDoLabel = createBranchLabel(); + addAntecedent(preDoLabel, currentFlow); + currentFlow = preDoLabel; + bindIterativeStatement(node.statement, postDoLabel, preConditionLabel); + addAntecedent(preConditionLabel, currentFlow); + currentFlow = finishFlowLabel(preConditionLabel); + bindCondition(node.expression, preDoLabel, postDoLabel); + currentFlow = finishFlowLabel(postDoLabel); + } + function bindForStatement(node) { + var preLoopLabel = 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; + bind(node.expression); + addAntecedent(postLoopLabel, currentFlow); + bind(node.initializer); + if (node.initializer.kind !== 219) { + 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 === 211) { + hasExplicitReturn = true; + } + currentFlow = unreachableFlow; + } + function findActiveLabel(name) { + if (activeLabels) { + for (var _i = 0, activeLabels_1 = activeLabels; _i < activeLabels_1.length; _i++) { + var label = activeLabels_1[_i]; + if (label.name === name) { + return label; + } + } + } + return undefined; + } + function bindbreakOrContinueFlow(node, breakTarget, continueTarget) { + var flowLabel = node.kind === 210 ? breakTarget : continueTarget; + if (flowLabel) { + addAntecedent(flowLabel, currentFlow); + currentFlow = unreachableFlow; + } + } + function bindBreakOrContinueStatement(node) { + bind(node.label); + if (node.label) { + var activeLabel = findActiveLabel(node.label.text); + if (activeLabel) { + activeLabel.referenced = true; + bindbreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget); + } + } + else { + bindbreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget); + } + } + function bindTryStatement(node) { + var postFinallyLabel = createBranchLabel(); + var preTryFlow = currentFlow; + bind(node.tryBlock); + addAntecedent(postFinallyLabel, currentFlow); + if (node.catchClause) { + currentFlow = preTryFlow; + bind(node.catchClause); + addAntecedent(postFinallyLabel, currentFlow); + } + if (node.finallyBlock) { + currentFlow = preTryFlow; + bind(node.finallyBlock); + } + currentFlow = finishFlowLabel(postFinallyLabel); + } + function bindSwitchStatement(node) { + var postSwitchLabel = 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 === 250; }); + if (!hasDefault) { + addAntecedent(postSwitchLabel, preSwitchCaseFlow); + } + currentBreakTarget = saveBreakTarget; + preSwitchCaseFlow = savePreSwitchCaseFlow; + currentFlow = finishFlowLabel(postSwitchLabel); + } + function bindCaseBlock(node) { + var clauses = node.clauses; + for (var i = 0; i < clauses.length; i++) { + var clause = clauses[i]; + if (clause.statements.length) { + if (currentFlow.flags & 1) { + currentFlow = preSwitchCaseFlow; + } + else { + var preCaseLabel = createBranchLabel(); + addAntecedent(preCaseLabel, preSwitchCaseFlow); + addAntecedent(preCaseLabel, currentFlow); + currentFlow = finishFlowLabel(preCaseLabel); + } + bind(clause); + if (!(currentFlow.flags & 1) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); + } + } + else { + bind(clause); + } + } + } + function pushActiveLabel(name, breakTarget, continueTarget) { + var activeLabel = { + name: name, + breakTarget: breakTarget, + continueTarget: continueTarget, + referenced: false + }; + (activeLabels || (activeLabels = [])).push(activeLabel); + return activeLabel; + } + function popActiveLabel() { + activeLabels.pop(); + } + function bindLabeledStatement(node) { + var preStatementLabel = createLoopLabel(); + var postStatementLabel = createBranchLabel(); + bind(node.label); + addAntecedent(preStatementLabel, currentFlow); + var activeLabel = pushActiveLabel(node.label.text, postStatementLabel, preStatementLabel); + bind(node.statement); + popActiveLabel(); + if (!activeLabel.referenced && !options.allowUnusedLabels) { + file.bindDiagnostics.push(ts.createDiagnosticForNode(node.label, ts.Diagnostics.Unused_label)); + } + addAntecedent(postStatementLabel, currentFlow); + currentFlow = finishFlowLabel(postStatementLabel); + } + function bindDestructuringTargetFlow(node) { + if (node.kind === 187 && node.operatorToken.kind === 56) { + bindAssignmentTargetFlow(node.left); + } + else { + bindAssignmentTargetFlow(node); + } + } + function bindAssignmentTargetFlow(node) { + if (isNarrowableReference(node)) { + currentFlow = createFlowAssignment(currentFlow, node); + } + else if (node.kind === 170) { + for (var _i = 0, _a = node.elements; _i < _a.length; _i++) { + var e = _a[_i]; + if (e.kind === 191) { + bindAssignmentTargetFlow(e.expression); + } + else { + bindDestructuringTargetFlow(e); + } + } + } + else if (node.kind === 171) { + for (var _b = 0, _c = node.properties; _b < _c.length; _b++) { + var p = _c[_b]; + if (p.kind === 253) { + bindDestructuringTargetFlow(p.initializer); + } + else if (p.kind === 254) { + bindAssignmentTargetFlow(p.name); + } + } + } + } + function bindLogicalExpression(node, trueTarget, falseTarget) { + var preRightLabel = createBranchLabel(); + if (node.operatorToken.kind === 51) { + bindCondition(node.left, preRightLabel, falseTarget); + } + else { + bindCondition(node.left, trueTarget, preRightLabel); + } + currentFlow = finishFlowLabel(preRightLabel); + bind(node.operatorToken); + bindCondition(node.right, trueTarget, falseTarget); + } + function bindPrefixUnaryExpressionFlow(node) { + if (node.operator === 49) { + var saveTrueTarget = currentTrueTarget; + currentTrueTarget = currentFalseTarget; + currentFalseTarget = saveTrueTarget; + ts.forEachChild(node, bind); + currentFalseTarget = currentTrueTarget; + currentTrueTarget = saveTrueTarget; + } + else { + ts.forEachChild(node, bind); + } + } + function bindBinaryExpressionFlow(node) { + var operator = node.operatorToken.kind; + if (operator === 51 || operator === 52) { + if (isTopLevelLogicalExpression(node)) { + var postExpressionLabel = createBranchLabel(); + bindLogicalExpression(node, postExpressionLabel, postExpressionLabel); + currentFlow = finishFlowLabel(postExpressionLabel); + } + else { + bindLogicalExpression(node, currentTrueTarget, currentFalseTarget); + } + } + else { + ts.forEachChild(node, bind); + if (operator === 56 && !ts.isAssignmentTarget(node)) { + bindAssignmentTargetFlow(node.left); + } + } + } + function bindDeleteExpressionFlow(node) { + ts.forEachChild(node, bind); + if (node.expression.kind === 172) { + 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.whenTrue); + addAntecedent(postExpressionLabel, currentFlow); + currentFlow = finishFlowLabel(falseLabel); + bind(node.whenFalse); + addAntecedent(postExpressionLabel, currentFlow); + currentFlow = finishFlowLabel(postExpressionLabel); + } + function bindInitializedVariableFlow(node) { + var name = node.name; + if (ts.isBindingPattern(name)) { + for (var _i = 0, _a = name.elements; _i < _a.length; _i++) { + var child = _a[_i]; + bindInitializedVariableFlow(child); + } + } + else { + currentFlow = createFlowAssignment(currentFlow, node); + } + } + function bindVariableDeclarationFlow(node) { + ts.forEachChild(node, bind); + if (node.initializer || node.parent.parent.kind === 207 || node.parent.parent.kind === 208) { + bindInitializedVariableFlow(node); + } + } + function getContainerFlags(node) { + switch (node.kind) { + case 192: + case 221: + case 222: + case 224: + case 171: + case 159: + case 265: + return 1; + case 151: + case 152: + case 153: + case 147: + case 146: + case 220: + case 148: + case 149: + case 150: + case 156: + case 269: + case 157: + case 179: + case 180: + case 225: + case 256: + case 223: + return 5; + case 252: + case 206: + case 207: + case 208: + case 227: + return 2; + case 199: + return ts.isFunctionLike(node.parent) ? 0 : 2; + } + return 0; + } + function addToContainerChain(next) { + if (lastContainer) { + lastContainer.nextContainer = next; + } + lastContainer = next; + } + function declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes) { + declareSymbolAndAddToSymbolTableWorker(node, symbolFlags, symbolExcludes); + } + function declareSymbolAndAddToSymbolTableWorker(node, symbolFlags, symbolExcludes) { + switch (container.kind) { + case 225: + return declareModuleMember(node, symbolFlags, symbolExcludes); + case 256: + return declareSourceFileMember(node, symbolFlags, symbolExcludes); + case 192: + case 221: + return declareClassMember(node, symbolFlags, symbolExcludes); + case 224: + return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); + case 159: + case 171: + case 222: + case 265: + return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes); + case 156: + case 157: + case 151: + case 152: + case 153: + case 147: + case 146: + case 148: + case 149: + case 150: + case 220: + case 179: + case 180: + case 269: + case 223: + return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes); + } + } + function declareClassMember(node, symbolFlags, symbolExcludes) { + return node.flags & 32 + ? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes) + : declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes); + } + function declareSourceFileMember(node, symbolFlags, symbolExcludes) { + return ts.isExternalModule(file) + ? declareModuleMember(node, symbolFlags, symbolExcludes) + : declareSymbol(file.locals, undefined, node, symbolFlags, symbolExcludes); + } + function hasExportDeclarations(node) { + var body = node.kind === 256 ? node : node.body; + if (body.kind === 256 || body.kind === 226) { + for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { + var stat = _a[_i]; + if (stat.kind === 236 || stat.kind === 235) { + return true; + } + } + } + return false; + } + function setExportContextFlag(node) { + if (ts.isInAmbientContext(node) && !hasExportDeclarations(node)) { + node.flags |= 8192; + } + else { + node.flags &= ~8192; + } + } + function bindModuleDeclaration(node) { + setExportContextFlag(node); + if (ts.isAmbientModule(node)) { + if (node.flags & 1) { + errorOnFirstToken(node, ts.Diagnostics.export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible); + } + if (ts.isExternalModuleAugmentation(node)) { + declareSymbolAndAddToSymbolTable(node, 1024, 0); + } + else { + declareSymbolAndAddToSymbolTable(node, 512, 106639); + } + } + else { + var state = getModuleInstanceState(node); + if (state === 0) { + declareSymbolAndAddToSymbolTable(node, 1024, 0); + } + else { + declareSymbolAndAddToSymbolTable(node, 512, 106639); + if (node.symbol.flags & (16 | 32 | 256)) { + node.symbol.constEnumOnlyModule = false; + } + else { + var currentModuleIsConstEnumOnly = state === 2; + if (node.symbol.constEnumOnlyModule === undefined) { + node.symbol.constEnumOnlyModule = currentModuleIsConstEnumOnly; + } + else { + node.symbol.constEnumOnlyModule = node.symbol.constEnumOnlyModule && currentModuleIsConstEnumOnly; + } + } + } + } + } + function bindFunctionOrConstructorType(node) { + var symbol = createSymbol(131072, getDeclarationName(node)); + addDeclarationToSymbol(symbol, node, 131072); + var typeLiteralSymbol = createSymbol(2048, "__type"); + addDeclarationToSymbol(typeLiteralSymbol, node, 2048); + typeLiteralSymbol.members = (_a = {}, _a[symbol.name] = symbol, _a); + var _a; + } + function bindObjectLiteralExpression(node) { + if (inStrictMode) { + var seen = {}; + for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { + var prop = _a[_i]; + if (prop.name.kind !== 69) { + continue; + } + var identifier = prop.name; + var currentKind = prop.kind === 253 || prop.kind === 254 || prop.kind === 147 + ? 1 + : 2; + var existingKind = seen[identifier.text]; + if (!existingKind) { + seen[identifier.text] = currentKind; + continue; + } + if (currentKind === 1 && existingKind === 1) { + var span = ts.getErrorSpanForNode(file, identifier); + file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode)); + } + } + } + return bindAnonymousDeclaration(node, 4096, "__object"); + } + function bindAnonymousDeclaration(node, symbolFlags, name) { + var symbol = createSymbol(symbolFlags, name); + addDeclarationToSymbol(symbol, node, symbolFlags); + } + function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) { + switch (blockScopeContainer.kind) { + case 225: + declareModuleMember(node, symbolFlags, symbolExcludes); + break; + case 256: + if (ts.isExternalModule(container)) { + declareModuleMember(node, symbolFlags, symbolExcludes); + break; + } + default: + if (!blockScopeContainer.locals) { + blockScopeContainer.locals = {}; + addToContainerChain(blockScopeContainer); + } + declareSymbol(blockScopeContainer.locals, undefined, node, symbolFlags, symbolExcludes); + } + } + function bindBlockScopedVariableDeclaration(node) { + bindBlockScopedDeclaration(node, 2, 107455); + } + function checkStrictModeIdentifier(node) { + if (inStrictMode && + node.originalKeywordKind >= 106 && + node.originalKeywordKind <= 114 && + !ts.isIdentifierName(node) && + !ts.isInAmbientContext(node)) { + if (!file.parseDiagnostics.length) { + file.bindDiagnostics.push(ts.createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node))); + } + } + } + function getStrictModeIdentifierMessage(node) { + if (ts.getContainingClass(node)) { + return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode; + } + if (file.externalModuleIndicator) { + return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode; + } + return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode; + } + function checkStrictModeBinaryExpression(node) { + if (inStrictMode && ts.isLeftHandSideExpression(node.left) && ts.isAssignmentOperator(node.operatorToken.kind)) { + checkStrictModeEvalOrArguments(node, node.left); + } + } + function checkStrictModeCatchClause(node) { + if (inStrictMode && node.variableDeclaration) { + checkStrictModeEvalOrArguments(node, node.variableDeclaration.name); + } + } + function checkStrictModeDeleteExpression(node) { + if (inStrictMode && node.expression.kind === 69) { + var span = ts.getErrorSpanForNode(file, node.expression); + file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode)); + } + } + function isEvalOrArgumentsIdentifier(node) { + return node.kind === 69 && + (node.text === "eval" || node.text === "arguments"); + } + function checkStrictModeEvalOrArguments(contextNode, name) { + if (name && name.kind === 69) { + var identifier = name; + if (isEvalOrArgumentsIdentifier(identifier)) { + var span = ts.getErrorSpanForNode(file, name); + file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, getStrictModeEvalOrArgumentsMessage(contextNode), identifier.text)); + } + } + } + function getStrictModeEvalOrArgumentsMessage(node) { + if (ts.getContainingClass(node)) { + return ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode; + } + if (file.externalModuleIndicator) { + return ts.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode; + } + return ts.Diagnostics.Invalid_use_of_0_in_strict_mode; + } + function checkStrictModeFunctionName(node) { + if (inStrictMode) { + checkStrictModeEvalOrArguments(node, node.name); + } + } + function getStrictModeBlockScopeFunctionDeclarationMessage(node) { + if (ts.getContainingClass(node)) { + return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode; + } + if (file.externalModuleIndicator) { + return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode; + } + return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5; + } + function checkStrictModeFunctionDeclaration(node) { + if (languageVersion < 2) { + if (blockScopeContainer.kind !== 256 && + blockScopeContainer.kind !== 225 && + !ts.isFunctionLike(blockScopeContainer)) { + var errorSpan = ts.getErrorSpanForNode(file, node); + file.bindDiagnostics.push(ts.createFileDiagnostic(file, errorSpan.start, errorSpan.length, getStrictModeBlockScopeFunctionDeclarationMessage(node))); + } + } + } + function checkStrictModeNumericLiteral(node) { + if (inStrictMode && node.isOctalLiteral) { + file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode)); + } + } + function checkStrictModePostfixUnaryExpression(node) { + if (inStrictMode) { + checkStrictModeEvalOrArguments(node, node.operand); + } + } + function checkStrictModePrefixUnaryExpression(node) { + if (inStrictMode) { + if (node.operator === 41 || node.operator === 42) { + checkStrictModeEvalOrArguments(node, node.operand); + } + } + } + function checkStrictModeWithStatement(node) { + if (inStrictMode) { + errorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode); + } + } + function errorOnFirstToken(node, message, arg0, arg1, arg2) { + var span = ts.getSpanOfTokenAtPosition(file, node.pos); + file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, message, arg0, arg1, arg2)); + } + function getDestructuringParameterName(node) { + return "__" + ts.indexOf(node.parent.parameters, node); + } + function bind(node) { + if (!node) { + return; + } + node.parent = parent; + var savedInStrictMode = inStrictMode; + if (!savedInStrictMode) { + updateStrictMode(node); + } + bindWorker(node); + bindChildren(node); + inStrictMode = savedInStrictMode; + } + function updateStrictMode(node) { + switch (node.kind) { + case 256: + case 226: + updateStrictModeStatementList(node.statements); + return; + case 199: + if (ts.isFunctionLike(node.parent)) { + updateStrictModeStatementList(node.statements); + } + return; + case 221: + case 192: + inStrictMode = true; + return; + } + } + function updateStrictModeStatementList(statements) { + for (var _i = 0, statements_1 = statements; _i < statements_1.length; _i++) { + var statement = statements_1[_i]; + if (!ts.isPrologueDirective(statement)) { + return; + } + if (isUseStrictPrologueDirective(statement)) { + inStrictMode = true; + return; + } + } + } + function isUseStrictPrologueDirective(node) { + var nodeText = ts.getTextOfNodeFromSourceText(file.text, node.expression); + return nodeText === '"use strict"' || nodeText === "'use strict'"; + } + function bindWorker(node) { + switch (node.kind) { + case 69: + case 97: + if (currentFlow && (ts.isExpression(node) || parent.kind === 254)) { + node.flowNode = currentFlow; + } + return checkStrictModeIdentifier(node); + case 172: + if (currentFlow && isNarrowableReference(node)) { + node.flowNode = currentFlow; + } + break; + case 187: + if (ts.isInJavaScriptFile(node)) { + var specialKind = ts.getSpecialPropertyAssignmentKind(node); + switch (specialKind) { + case 1: + bindExportsPropertyAssignment(node); + break; + case 2: + bindModuleExportsAssignment(node); + break; + case 3: + bindPrototypePropertyAssignment(node); + break; + case 4: + bindThisPropertyAssignment(node); + break; + case 0: + break; + default: + ts.Debug.fail("Unknown special property assignment kind"); + } + } + return checkStrictModeBinaryExpression(node); + case 252: + return checkStrictModeCatchClause(node); + case 181: + return checkStrictModeDeleteExpression(node); + case 8: + return checkStrictModeNumericLiteral(node); + case 186: + return checkStrictModePostfixUnaryExpression(node); + case 185: + return checkStrictModePrefixUnaryExpression(node); + case 212: + return checkStrictModeWithStatement(node); + case 165: + seenThisKeyword = true; + return; + case 154: + return checkTypePredicate(node); + case 141: + return declareSymbolAndAddToSymbolTable(node, 262144, 530912); + case 142: + return bindParameter(node); + case 218: + case 169: + return bindVariableDeclarationOrBindingElement(node); + case 145: + case 144: + case 266: + return bindPropertyOrMethodOrAccessor(node, 4 | (node.questionToken ? 536870912 : 0), 107455); + case 253: + case 254: + return bindPropertyOrMethodOrAccessor(node, 4, 107455); + case 255: + return bindPropertyOrMethodOrAccessor(node, 8, 107455); + case 247: + hasJsxSpreadAttribute = true; + return; + case 151: + case 152: + case 153: + return declareSymbolAndAddToSymbolTable(node, 131072, 0); + case 147: + case 146: + return bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 536870912 : 0), ts.isObjectLiteralMethod(node) ? 107455 : 99263); + case 220: + return bindFunctionDeclaration(node); + case 148: + return declareSymbolAndAddToSymbolTable(node, 16384, 0); + case 149: + return bindPropertyOrMethodOrAccessor(node, 32768, 41919); + case 150: + return bindPropertyOrMethodOrAccessor(node, 65536, 74687); + case 156: + case 157: + case 269: + return bindFunctionOrConstructorType(node); + case 159: + case 265: + return bindAnonymousDeclaration(node, 2048, "__type"); + case 171: + return bindObjectLiteralExpression(node); + case 179: + case 180: + return bindFunctionExpression(node); + case 174: + if (ts.isInJavaScriptFile(node)) { + bindCallExpression(node); + } + break; + case 192: + case 221: + return bindClassLikeDeclaration(node); + case 222: + return bindBlockScopedDeclaration(node, 64, 792960); + case 223: + return bindBlockScopedDeclaration(node, 524288, 793056); + case 224: + return bindEnumDeclaration(node); + case 225: + return bindModuleDeclaration(node); + case 229: + case 232: + case 234: + case 238: + return declareSymbolAndAddToSymbolTable(node, 8388608, 8388608); + case 228: + return bindGlobalModuleExportDeclaration(node); + case 231: + return bindImportClause(node); + case 236: + return bindExportDeclaration(node); + case 235: + return bindExportAssignment(node); + case 256: + return bindSourceFileIfExternalModule(); + } + } + function checkTypePredicate(node) { + var parameterName = node.parameterName, type = node.type; + if (parameterName && parameterName.kind === 69) { + checkStrictModeIdentifier(parameterName); + } + if (parameterName && parameterName.kind === 165) { + seenThisKeyword = true; + } + bind(type); + } + function bindSourceFileIfExternalModule() { + setExportContextFlag(file); + if (ts.isExternalModule(file)) { + bindSourceFileAsExternalModule(); + } + } + function bindSourceFileAsExternalModule() { + bindAnonymousDeclaration(file, 512, "\"" + ts.removeFileExtension(file.fileName) + "\""); + } + function bindExportAssignment(node) { + var boundExpression = node.kind === 235 ? node.expression : node.right; + if (!container.symbol || !container.symbol.exports) { + bindAnonymousDeclaration(node, 8388608, getDeclarationName(node)); + } + else if (boundExpression.kind === 69 && node.kind === 235) { + declareSymbol(container.symbol.exports, container.symbol, node, 8388608, 107455 | 8388608); + } + else { + declareSymbol(container.symbol.exports, container.symbol, node, 4, 107455 | 8388608); + } + } + function bindGlobalModuleExportDeclaration(node) { + if (node.modifiers && node.modifiers.length) { + file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Modifiers_cannot_appear_here)); + } + if (node.parent.kind !== 256) { + file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_at_top_level)); + return; + } + else { + var parent_5 = node.parent; + if (!ts.isExternalModule(parent_5)) { + file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_module_files)); + return; + } + if (!parent_5.isDeclarationFile) { + file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_declaration_files)); + return; + } + } + file.symbol.globalExports = file.symbol.globalExports || {}; + declareSymbol(file.symbol.globalExports, file.symbol, node, 8388608, 8388608); + } + function bindExportDeclaration(node) { + if (!container.symbol || !container.symbol.exports) { + bindAnonymousDeclaration(node, 1073741824, getDeclarationName(node)); + } + else if (!node.exportClause) { + declareSymbol(container.symbol.exports, container.symbol, node, 1073741824, 0); + } + } + function bindImportClause(node) { + if (node.name) { + declareSymbolAndAddToSymbolTable(node, 8388608, 8388608); + } + } + function setCommonJsModuleIndicator(node) { + if (!file.commonJsModuleIndicator) { + file.commonJsModuleIndicator = node; + bindSourceFileAsExternalModule(); + } + } + function bindExportsPropertyAssignment(node) { + setCommonJsModuleIndicator(node); + declareSymbol(file.symbol.exports, file.symbol, node.left, 4 | 7340032, 0); + } + function bindModuleExportsAssignment(node) { + setCommonJsModuleIndicator(node); + declareSymbol(file.symbol.exports, file.symbol, node, 4 | 7340032 | 512, 0); + } + function bindThisPropertyAssignment(node) { + if (container.kind === 179 || container.kind === 220) { + container.symbol.members = container.symbol.members || {}; + declareSymbol(container.symbol.members, container.symbol, node, 4, 107455 & ~4); + } + } + function bindPrototypePropertyAssignment(node) { + var leftSideOfAssignment = node.left; + var classPrototype = leftSideOfAssignment.expression; + var constructorFunction = classPrototype.expression; + leftSideOfAssignment.parent = node; + constructorFunction.parent = classPrototype; + classPrototype.parent = leftSideOfAssignment; + var funcSymbol = container.locals[constructorFunction.text]; + if (!funcSymbol || !(funcSymbol.flags & 16)) { + return; + } + if (!funcSymbol.members) { + funcSymbol.members = {}; + } + declareSymbol(funcSymbol.members, funcSymbol, leftSideOfAssignment, 4, 107455); + } + function bindCallExpression(node) { + if (!file.commonJsModuleIndicator && ts.isRequireCall(node, false)) { + setCommonJsModuleIndicator(node); + } + } + function bindClassLikeDeclaration(node) { + if (!ts.isDeclarationFile(file) && !ts.isInAmbientContext(node)) { + if (ts.getClassExtendsHeritageClauseElement(node) !== undefined) { + hasClassExtends = true; + } + if (ts.nodeIsDecorated(node)) { + hasDecorators = true; + } + } + if (node.kind === 221) { + bindBlockScopedDeclaration(node, 32, 899519); + } + else { + var bindingName = node.name ? node.name.text : "__class"; + bindAnonymousDeclaration(node, 32, bindingName); + if (node.name) { + classifiableNames[node.name.text] = node.name.text; + } + } + var symbol = node.symbol; + var prototypeSymbol = createSymbol(4 | 134217728, "prototype"); + if (ts.hasProperty(symbol.exports, prototypeSymbol.name)) { + if (node.name) { + node.name.parent = node; + } + file.bindDiagnostics.push(ts.createDiagnosticForNode(symbol.exports[prototypeSymbol.name].declarations[0], ts.Diagnostics.Duplicate_identifier_0, prototypeSymbol.name)); + } + symbol.exports[prototypeSymbol.name] = prototypeSymbol; + prototypeSymbol.parent = symbol; + } + function bindEnumDeclaration(node) { + return ts.isConst(node) + ? bindBlockScopedDeclaration(node, 128, 899967) + : bindBlockScopedDeclaration(node, 256, 899327); + } + function bindVariableDeclarationOrBindingElement(node) { + if (inStrictMode) { + checkStrictModeEvalOrArguments(node, node.name); + } + if (!ts.isBindingPattern(node.name)) { + if (ts.isBlockOrCatchScoped(node)) { + bindBlockScopedVariableDeclaration(node); + } + else if (ts.isParameterDeclaration(node)) { + declareSymbolAndAddToSymbolTable(node, 1, 107455); + } + else { + declareSymbolAndAddToSymbolTable(node, 1, 107454); + } + } + } + function bindParameter(node) { + if (!ts.isDeclarationFile(file) && + !ts.isInAmbientContext(node) && + ts.nodeIsDecorated(node)) { + hasDecorators = true; + hasParameterDecorators = true; + } + if (inStrictMode) { + checkStrictModeEvalOrArguments(node, node.name); + } + if (ts.isBindingPattern(node.name)) { + bindAnonymousDeclaration(node, 1, getDestructuringParameterName(node)); + } + else { + declareSymbolAndAddToSymbolTable(node, 1, 107455); + } + if (ts.isParameterPropertyDeclaration(node)) { + var classDeclaration = node.parent.parent; + declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4, 107455); + } + } + function bindFunctionDeclaration(node) { + if (!ts.isDeclarationFile(file) && !ts.isInAmbientContext(node)) { + if (ts.isAsyncFunctionLike(node)) { + hasAsyncFunctions = true; + } + } + checkStrictModeFunctionName(node); + if (inStrictMode) { + checkStrictModeFunctionDeclaration(node); + return bindBlockScopedDeclaration(node, 16, 106927); + } + else { + return declareSymbolAndAddToSymbolTable(node, 16, 106927); + } + } + function bindFunctionExpression(node) { + if (!ts.isDeclarationFile(file) && !ts.isInAmbientContext(node)) { + if (ts.isAsyncFunctionLike(node)) { + hasAsyncFunctions = true; + } + } + checkStrictModeFunctionName(node); + var bindingName = node.name ? node.name.text : "__function"; + return bindAnonymousDeclaration(node, 16, bindingName); + } + function bindPropertyOrMethodOrAccessor(node, symbolFlags, symbolExcludes) { + if (!ts.isDeclarationFile(file) && !ts.isInAmbientContext(node)) { + if (ts.isAsyncFunctionLike(node)) { + hasAsyncFunctions = true; + } + if (ts.nodeIsDecorated(node)) { + hasDecorators = true; + } + } + return ts.hasDynamicName(node) + ? bindAnonymousDeclaration(node, symbolFlags, "__computed") + : declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes); + } + function shouldReportErrorOnModuleDeclaration(node) { + var instanceState = getModuleInstanceState(node); + return instanceState === 1 || (instanceState === 2 && options.preserveConstEnums); + } + function checkUnreachable(node) { + if (!(currentFlow.flags & 1)) { + return false; + } + if (currentFlow === unreachableFlow) { + var reportError = (ts.isStatement(node) && node.kind !== 201) || + node.kind === 221 || + (node.kind === 225 && shouldReportErrorOnModuleDeclaration(node)) || + (node.kind === 224 && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums)); + if (reportError) { + currentFlow = reportedUnreachableFlow; + var reportUnreachableCode = !options.allowUnreachableCode && + !ts.isInAmbientContext(node) && + (node.kind !== 200 || + ts.getCombinedNodeFlags(node.declarationList) & 3072 || + ts.forEach(node.declarationList.declarations, function (d) { return d.initializer; })); + if (reportUnreachableCode) { + errorOnFirstToken(node, ts.Diagnostics.Unreachable_code_detected); + } + } + } + return true; + } + } +})(ts || (ts = {})); +var ts; +(function (ts) { + var nextSymbolId = 1; + var nextNodeId = 1; + var nextMergeId = 1; + var nextFlowId = 1; + function getNodeId(node) { + if (!node.id) { + node.id = nextNodeId; + nextNodeId++; + } + return node.id; + } + ts.getNodeId = getNodeId; + ts.checkTime = 0; + function getSymbolId(symbol) { + if (!symbol.id) { + symbol.id = nextSymbolId; + nextSymbolId++; + } + return symbol.id; + } + ts.getSymbolId = getSymbolId; + function createTypeChecker(host, produceDiagnostics) { + var cancellationToken; + var Symbol = ts.objectAllocator.getSymbolConstructor(); + var Type = ts.objectAllocator.getTypeConstructor(); + var Signature = ts.objectAllocator.getSignatureConstructor(); + var typeCount = 0; + var symbolCount = 0; + var emptyArray = []; + var emptySymbols = {}; + var compilerOptions = host.getCompilerOptions(); + var languageVersion = compilerOptions.target || 0; + var modulekind = ts.getEmitModuleKind(compilerOptions); + var allowSyntheticDefaultImports = typeof compilerOptions.allowSyntheticDefaultImports !== "undefined" ? compilerOptions.allowSyntheticDefaultImports : modulekind === ts.ModuleKind.System; + var strictNullChecks = compilerOptions.strictNullChecks; + var emitResolver = createResolver(); + var undefinedSymbol = createSymbol(4 | 67108864, "undefined"); + undefinedSymbol.declarations = []; + var argumentsSymbol = createSymbol(4 | 67108864, "arguments"); + var checker = { + getNodeCount: function () { return ts.sum(host.getSourceFiles(), "nodeCount"); }, + getIdentifierCount: function () { return ts.sum(host.getSourceFiles(), "identifierCount"); }, + getSymbolCount: function () { return ts.sum(host.getSourceFiles(), "symbolCount") + symbolCount; }, + getTypeCount: function () { return typeCount; }, + isUndefinedSymbol: function (symbol) { return symbol === undefinedSymbol; }, + isArgumentsSymbol: function (symbol) { return symbol === argumentsSymbol; }, + isUnknownSymbol: function (symbol) { return symbol === unknownSymbol; }, + getDiagnostics: getDiagnostics, + getGlobalDiagnostics: getGlobalDiagnostics, + getTypeOfSymbolAtLocation: getTypeOfSymbolAtLocation, + getSymbolsOfParameterPropertyDeclaration: getSymbolsOfParameterPropertyDeclaration, + getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol, + getPropertiesOfType: getPropertiesOfType, + getPropertyOfType: getPropertyOfType, + getSignaturesOfType: getSignaturesOfType, + getIndexTypeOfType: getIndexTypeOfType, + getBaseTypes: getBaseTypes, + getReturnTypeOfSignature: getReturnTypeOfSignature, + getNonNullableType: getNonNullableType, + getSymbolsInScope: getSymbolsInScope, + getSymbolAtLocation: getSymbolAtLocation, + getShorthandAssignmentValueSymbol: getShorthandAssignmentValueSymbol, + getExportSpecifierLocalTargetSymbol: getExportSpecifierLocalTargetSymbol, + getTypeAtLocation: getTypeOfNode, + getPropertySymbolOfDestructuringAssignment: getPropertySymbolOfDestructuringAssignment, + typeToString: typeToString, + getSymbolDisplayBuilder: getSymbolDisplayBuilder, + symbolToString: symbolToString, + getAugmentedPropertiesOfType: getAugmentedPropertiesOfType, + getRootSymbols: getRootSymbols, + getContextualType: getContextualType, + getFullyQualifiedName: getFullyQualifiedName, + getResolvedSignature: getResolvedSignature, + getConstantValue: getConstantValue, + isValidPropertyAccess: isValidPropertyAccess, + getSignatureFromDeclaration: getSignatureFromDeclaration, + isImplementationOfOverload: isImplementationOfOverload, + getAliasedSymbol: resolveAlias, + getEmitResolver: getEmitResolver, + getExportsOfModule: getExportsOfModuleAsArray, + getJsxElementAttributesType: getJsxElementAttributesType, + getJsxIntrinsicTagNames: getJsxIntrinsicTagNames, + isOptionalParameter: isOptionalParameter + }; + var unknownSymbol = createSymbol(4 | 67108864, "unknown"); + var resolvingSymbol = createSymbol(67108864, "__resolving__"); + var nullableWideningFlags = strictNullChecks ? 0 : 2097152; + var anyType = createIntrinsicType(1, "any"); + var stringType = createIntrinsicType(2, "string"); + var numberType = createIntrinsicType(4, "number"); + var booleanType = createIntrinsicType(8, "boolean"); + var esSymbolType = createIntrinsicType(16777216, "symbol"); + var voidType = createIntrinsicType(16, "void"); + var undefinedType = createIntrinsicType(32 | nullableWideningFlags, "undefined"); + var nullType = createIntrinsicType(64 | nullableWideningFlags, "null"); + var emptyArrayElementType = createIntrinsicType(32 | 2097152, "undefined"); + var unknownType = createIntrinsicType(1, "unknown"); + var neverType = createIntrinsicType(134217728, "never"); + var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); + var emptyGenericType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); + emptyGenericType.instantiations = {}; + var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); + anyFunctionType.flags |= 8388608; + var noConstraintType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); + var anySignature = createSignature(undefined, undefined, undefined, emptyArray, anyType, undefined, 0, false, false); + var unknownSignature = createSignature(undefined, undefined, undefined, emptyArray, unknownType, undefined, 0, false, false); + var enumNumberIndexInfo = createIndexInfo(stringType, true); + var globals = {}; + var getGlobalESSymbolConstructorSymbol; + var getGlobalPromiseConstructorSymbol; + var globalObjectType; + var globalFunctionType; + var globalArrayType; + var globalReadonlyArrayType; + var globalStringType; + var globalNumberType; + var globalBooleanType; + var globalRegExpType; + var anyArrayType; + var anyReadonlyArrayType; + var getGlobalTemplateStringsArrayType; + var getGlobalESSymbolType; + var getGlobalIterableType; + var getGlobalIteratorType; + var getGlobalIterableIteratorType; + var getGlobalClassDecoratorType; + var getGlobalParameterDecoratorType; + var getGlobalPropertyDecoratorType; + var getGlobalMethodDecoratorType; + var getGlobalTypedPropertyDescriptorType; + var getGlobalPromiseType; + var tryGetGlobalPromiseType; + var getGlobalPromiseLikeType; + var getInstantiatedGlobalPromiseLikeType; + var getGlobalPromiseConstructorLikeType; + var getGlobalThenableType; + var jsxElementClassType; + var deferredNodes; + var flowLoopStart = 0; + var flowLoopCount = 0; + var visitedFlowCount = 0; + var tupleTypes = {}; + var unionTypes = {}; + var intersectionTypes = {}; + var stringLiteralTypes = {}; + var resolutionTargets = []; + var resolutionResults = []; + var resolutionPropertyNames = []; + var mergedSymbols = []; + var symbolLinks = []; + var nodeLinks = []; + var flowLoopCaches = []; + var flowLoopNodes = []; + var flowLoopKeys = []; + var flowLoopTypes = []; + var visitedFlowNodes = []; + var visitedFlowTypes = []; + var potentialThisCollisions = []; + var awaitedTypeStack = []; + var diagnostics = ts.createDiagnosticCollection(); + var typeofEQFacts = { + "string": 1, + "number": 2, + "boolean": 4, + "symbol": 8, + "undefined": 16384, + "object": 16, + "function": 32 + }; + var typeofNEFacts = { + "string": 128, + "number": 256, + "boolean": 512, + "symbol": 1024, + "undefined": 131072, + "object": 2048, + "function": 4096 + }; + var typeofTypesByName = { + "string": stringType, + "number": numberType, + "boolean": booleanType, + "symbol": esSymbolType, + "undefined": undefinedType + }; + var jsxElementType; + var jsxTypes = {}; + var JsxNames = { + JSX: "JSX", + IntrinsicElements: "IntrinsicElements", + ElementClass: "ElementClass", + ElementAttributesPropertyNameContainer: "ElementAttributesProperty", + Element: "Element", + IntrinsicAttributes: "IntrinsicAttributes", + IntrinsicClassAttributes: "IntrinsicClassAttributes" + }; + var subtypeRelation = {}; + var assignableRelation = {}; + var comparableRelation = {}; + var identityRelation = {}; + var _displayBuilder; + var builtinGlobals = (_a = {}, + _a[undefinedSymbol.name] = undefinedSymbol, + _a + ); + initializeTypeChecker(); + return checker; + function getEmitResolver(sourceFile, cancellationToken) { + getDiagnostics(sourceFile, cancellationToken); + return emitResolver; + } + function error(location, message, arg0, arg1, arg2) { + var diagnostic = location + ? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2) + : ts.createCompilerDiagnostic(message, arg0, arg1, arg2); + diagnostics.add(diagnostic); + } + function createSymbol(flags, name) { + symbolCount++; + return new Symbol(flags, name); + } + function getExcludedSymbolFlags(flags) { + var result = 0; + if (flags & 2) + result |= 107455; + if (flags & 1) + result |= 107454; + if (flags & 4) + result |= 107455; + if (flags & 8) + result |= 107455; + if (flags & 16) + result |= 106927; + if (flags & 32) + result |= 899519; + if (flags & 64) + result |= 792960; + if (flags & 256) + result |= 899327; + if (flags & 128) + result |= 899967; + if (flags & 512) + result |= 106639; + if (flags & 8192) + result |= 99263; + if (flags & 32768) + result |= 41919; + if (flags & 65536) + result |= 74687; + if (flags & 262144) + result |= 530912; + if (flags & 524288) + result |= 793056; + if (flags & 8388608) + result |= 8388608; + return result; + } + function recordMergedSymbol(target, source) { + if (!source.mergeId) { + source.mergeId = nextMergeId; + nextMergeId++; + } + mergedSymbols[source.mergeId] = target; + } + function cloneSymbol(symbol) { + var result = createSymbol(symbol.flags | 33554432, symbol.name); + result.declarations = symbol.declarations.slice(0); + result.parent = symbol.parent; + if (symbol.valueDeclaration) + result.valueDeclaration = symbol.valueDeclaration; + if (symbol.constEnumOnlyModule) + result.constEnumOnlyModule = true; + if (symbol.members) + result.members = cloneSymbolTable(symbol.members); + if (symbol.exports) + result.exports = cloneSymbolTable(symbol.exports); + recordMergedSymbol(result, symbol); + return result; + } + function mergeSymbol(target, source) { + if (!(target.flags & getExcludedSymbolFlags(source.flags))) { + if (source.flags & 512 && target.flags & 512 && target.constEnumOnlyModule && !source.constEnumOnlyModule) { + target.constEnumOnlyModule = false; + } + target.flags |= source.flags; + if (source.valueDeclaration && + (!target.valueDeclaration || + (target.valueDeclaration.kind === 225 && source.valueDeclaration.kind !== 225))) { + target.valueDeclaration = source.valueDeclaration; + } + ts.forEach(source.declarations, function (node) { + target.declarations.push(node); + }); + if (source.members) { + if (!target.members) + target.members = {}; + mergeSymbolTable(target.members, source.members); + } + if (source.exports) { + if (!target.exports) + target.exports = {}; + mergeSymbolTable(target.exports, source.exports); + } + recordMergedSymbol(target, source); + } + else { + var message_2 = target.flags & 2 || source.flags & 2 + ? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0; + ts.forEach(source.declarations, function (node) { + error(node.name ? node.name : node, message_2, symbolToString(source)); + }); + ts.forEach(target.declarations, function (node) { + error(node.name ? node.name : node, message_2, symbolToString(source)); + }); + } + } + function cloneSymbolTable(symbolTable) { + var result = {}; + for (var id in symbolTable) { + if (ts.hasProperty(symbolTable, id)) { + result[id] = symbolTable[id]; + } + } + return result; + } + function mergeSymbolTable(target, source) { + for (var id in source) { + if (ts.hasProperty(source, id)) { + if (!ts.hasProperty(target, id)) { + target[id] = source[id]; + } + else { + var symbol = target[id]; + if (!(symbol.flags & 33554432)) { + target[id] = symbol = cloneSymbol(symbol); + } + mergeSymbol(symbol, source[id]); + } + } + } + } + function mergeModuleAugmentation(moduleName) { + var moduleAugmentation = moduleName.parent; + if (moduleAugmentation.symbol.declarations[0] !== moduleAugmentation) { + ts.Debug.assert(moduleAugmentation.symbol.declarations.length > 1); + return; + } + if (ts.isGlobalScopeAugmentation(moduleAugmentation)) { + mergeSymbolTable(globals, moduleAugmentation.symbol.exports); + } + else { + var moduleNotFoundError = !ts.isInAmbientContext(moduleName.parent.parent) + ? ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found + : undefined; + var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, moduleNotFoundError); + if (!mainModule) { + return; + } + mainModule = resolveExternalModuleSymbol(mainModule); + if (mainModule.flags & 1536) { + mainModule = mainModule.flags & 33554432 ? mainModule : cloneSymbol(mainModule); + mergeSymbol(mainModule, moduleAugmentation.symbol); + } + else { + error(moduleName, ts.Diagnostics.Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity, moduleName.text); + } + } + } + function addToSymbolTable(target, source, message) { + for (var id in source) { + if (ts.hasProperty(source, id)) { + if (ts.hasProperty(target, id)) { + ts.forEach(target[id].declarations, addDeclarationDiagnostic(id, message)); + } + else { + target[id] = source[id]; + } + } + } + function addDeclarationDiagnostic(id, message) { + return function (declaration) { return diagnostics.add(ts.createDiagnosticForNode(declaration, message, id)); }; + } + } + function getSymbolLinks(symbol) { + if (symbol.flags & 67108864) + return symbol; + var id = getSymbolId(symbol); + return symbolLinks[id] || (symbolLinks[id] = {}); + } + function getNodeLinks(node) { + var nodeId = getNodeId(node); + return nodeLinks[nodeId] || (nodeLinks[nodeId] = {}); + } + function isGlobalSourceFile(node) { + return node.kind === 256 && !ts.isExternalOrCommonJsModule(node); + } + function getSymbol(symbols, name, meaning) { + if (meaning && ts.hasProperty(symbols, name)) { + var symbol = symbols[name]; + ts.Debug.assert((symbol.flags & 16777216) === 0, "Should never get an instantiated symbol here."); + if (symbol.flags & meaning) { + return symbol; + } + if (symbol.flags & 8388608) { + var target = resolveAlias(symbol); + if (target === unknownSymbol || target.flags & meaning) { + return symbol; + } + } + } + } + function getSymbolsOfParameterPropertyDeclaration(parameter, parameterName) { + var constructorDeclaration = parameter.parent; + var classDeclaration = parameter.parent.parent; + var parameterSymbol = getSymbol(constructorDeclaration.locals, parameterName, 107455); + var propertySymbol = getSymbol(classDeclaration.symbol.members, parameterName, 107455); + if (parameterSymbol && propertySymbol) { + return [parameterSymbol, propertySymbol]; + } + ts.Debug.fail("There should exist two symbols, one as property declaration and one as parameter declaration"); + } + function isBlockScopedNameDeclaredBeforeUse(declaration, usage) { + var declarationFile = ts.getSourceFileOfNode(declaration); + var useFile = ts.getSourceFileOfNode(usage); + if (declarationFile !== useFile) { + if (modulekind || (!compilerOptions.outFile && !compilerOptions.out)) { + return true; + } + var sourceFiles = host.getSourceFiles(); + return ts.indexOf(sourceFiles, declarationFile) <= ts.indexOf(sourceFiles, useFile); + } + if (declaration.pos <= usage.pos) { + return declaration.kind !== 218 || + !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage); + } + return isUsedInFunctionOrNonStaticProperty(declaration, usage); + function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) { + var container = ts.getEnclosingBlockScopeContainer(declaration); + switch (declaration.parent.parent.kind) { + case 200: + case 206: + case 208: + if (isSameScopeDescendentOf(usage, declaration, container)) { + return true; + } + break; + } + switch (declaration.parent.parent.kind) { + case 207: + case 208: + if (isSameScopeDescendentOf(usage, declaration.parent.parent.expression, container)) { + return true; + } + } + return false; + } + function isUsedInFunctionOrNonStaticProperty(declaration, usage) { + var container = ts.getEnclosingBlockScopeContainer(declaration); + var current = usage; + while (current) { + if (current === container) { + return false; + } + if (ts.isFunctionLike(current)) { + return true; + } + var initializerOfNonStaticProperty = current.parent && + current.parent.kind === 145 && + (current.parent.flags & 32) === 0 && + current.parent.initializer === current; + if (initializerOfNonStaticProperty) { + return true; + } + current = current.parent; + } + return false; + } + } + function resolveName(location, name, meaning, nameNotFoundMessage, nameArg) { + var result; + var lastLocation; + var propertyWithInvalidInitializer; + var errorLocation = location; + var grandparent; + loop: while (location) { + if (location.locals && !isGlobalSourceFile(location)) { + if (result = getSymbol(location.locals, name, meaning)) { + var useResult = true; + if (ts.isFunctionLike(location) && lastLocation && lastLocation !== location.body) { + if (meaning & result.flags & 793056 && lastLocation.kind !== 273) { + useResult = result.flags & 262144 + ? lastLocation === location.type || + lastLocation.kind === 142 || + lastLocation.kind === 141 + : false; + } + if (meaning & 107455 && result.flags & 1) { + useResult = + lastLocation.kind === 142 || + (lastLocation === location.type && + result.valueDeclaration.kind === 142); + } + } + if (useResult) { + break loop; + } + else { + result = undefined; + } + } + } + switch (location.kind) { + case 256: + if (!ts.isExternalOrCommonJsModule(location)) + break; + case 225: + var moduleExports = getSymbolOfNode(location).exports; + if (location.kind === 256 || ts.isAmbientModule(location)) { + if (result = moduleExports["default"]) { + var localSymbol = ts.getLocalSymbolForExportDefault(result); + if (localSymbol && (result.flags & meaning) && localSymbol.name === name) { + break loop; + } + result = undefined; + } + if (ts.hasProperty(moduleExports, name) && + moduleExports[name].flags === 8388608 && + ts.getDeclarationOfKind(moduleExports[name], 238)) { + break; + } + } + if (result = getSymbol(moduleExports, name, meaning & 8914931)) { + break loop; + } + break; + case 224: + if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8)) { + break loop; + } + break; + case 145: + case 144: + if (ts.isClassLike(location.parent) && !(location.flags & 32)) { + var ctor = findConstructorDeclaration(location.parent); + if (ctor && ctor.locals) { + if (getSymbol(ctor.locals, name, meaning & 107455)) { + propertyWithInvalidInitializer = location; + } + } + } + break; + case 221: + case 192: + case 222: + if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & 793056)) { + if (lastLocation && lastLocation.flags & 32) { + error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters); + return undefined; + } + break loop; + } + if (location.kind === 192 && meaning & 32) { + var className = location.name; + if (className && name === className.text) { + result = location.symbol; + break loop; + } + } + break; + case 140: + grandparent = location.parent.parent; + if (ts.isClassLike(grandparent) || grandparent.kind === 222) { + if (result = getSymbol(getSymbolOfNode(grandparent).members, name, meaning & 793056)) { + error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type); + return undefined; + } + } + break; + case 147: + case 146: + case 148: + case 149: + case 150: + case 220: + case 180: + if (meaning & 3 && name === "arguments") { + result = argumentsSymbol; + break loop; + } + break; + case 179: + if (meaning & 3 && name === "arguments") { + result = argumentsSymbol; + break loop; + } + if (meaning & 16) { + var functionName = location.name; + if (functionName && name === functionName.text) { + result = location.symbol; + break loop; + } + } + break; + case 143: + if (location.parent && location.parent.kind === 142) { + location = location.parent; + } + if (location.parent && ts.isClassElement(location.parent)) { + location = location.parent; + } + break; + } + lastLocation = location; + location = location.parent; + } + if (!result) { + result = getSymbol(globals, name, meaning); + } + if (!result) { + if (nameNotFoundMessage) { + if (!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg)) { + error(errorLocation, nameNotFoundMessage, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg)); + } + } + return undefined; + } + if (nameNotFoundMessage) { + if (propertyWithInvalidInitializer) { + var propertyName = propertyWithInvalidInitializer.name; + error(errorLocation, ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.declarationNameToString(propertyName), typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg)); + return undefined; + } + if (meaning & 2) { + var exportOrLocalSymbol = getExportSymbolOfValueSymbolIfExported(result); + if (exportOrLocalSymbol.flags & 2) { + checkResolvedBlockScopedVariable(exportOrLocalSymbol, errorLocation); + } + } + } + return result; + } + function checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) { + if (!errorLocation || (errorLocation.kind === 69 && (isTypeReferenceIdentifier(errorLocation)) || isInTypeQuery(errorLocation))) { + return false; + } + var container = ts.getThisContainer(errorLocation, true); + var location = container; + while (location) { + if (ts.isClassLike(location.parent)) { + var classSymbol = getSymbolOfNode(location.parent); + if (!classSymbol) { + break; + } + var constructorType = getTypeOfSymbol(classSymbol); + if (getPropertyOfType(constructorType, name)) { + error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg), symbolToString(classSymbol)); + return true; + } + if (location === container && !(location.flags & 32)) { + var instanceType = getDeclaredTypeOfSymbol(classSymbol).thisType; + if (getPropertyOfType(instanceType, name)) { + error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0, typeof nameArg === "string" ? nameArg : ts.declarationNameToString(nameArg)); + return true; + } + } + } + location = location.parent; + } + return false; + } + function checkResolvedBlockScopedVariable(result, errorLocation) { + ts.Debug.assert((result.flags & 2) !== 0); + var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) ? d : undefined; }); + ts.Debug.assert(declaration !== undefined, "Block-scoped variable declaration is undefined"); + if (!isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 218), errorLocation)) { + error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(declaration.name)); + } + } + function isSameScopeDescendentOf(initial, parent, stopAt) { + if (!parent) { + return false; + } + for (var current = initial; current && current !== stopAt && !ts.isFunctionLike(current); current = current.parent) { + if (current === parent) { + return true; + } + } + return false; + } + function getAnyImportSyntax(node) { + if (ts.isAliasSymbolDeclaration(node)) { + if (node.kind === 229) { + return node; + } + while (node && node.kind !== 230) { + node = node.parent; + } + return node; + } + } + function getDeclarationOfAliasSymbol(symbol) { + return ts.forEach(symbol.declarations, function (d) { return ts.isAliasSymbolDeclaration(d) ? d : undefined; }); + } + function getTargetOfImportEqualsDeclaration(node) { + if (node.moduleReference.kind === 240) { + return resolveExternalModuleSymbol(resolveExternalModuleName(node, ts.getExternalModuleImportEqualsDeclarationExpression(node))); + } + return getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, node); + } + function getTargetOfImportClause(node) { + var moduleSymbol = resolveExternalModuleName(node, node.parent.moduleSpecifier); + if (moduleSymbol) { + var exportDefaultSymbol = moduleSymbol.exports["export="] ? + getPropertyOfType(getTypeOfSymbol(moduleSymbol.exports["export="]), "default") : + resolveSymbol(moduleSymbol.exports["default"]); + if (!exportDefaultSymbol && !allowSyntheticDefaultImports) { + error(node.name, ts.Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol)); + } + else if (!exportDefaultSymbol && allowSyntheticDefaultImports) { + return resolveExternalModuleSymbol(moduleSymbol) || resolveSymbol(moduleSymbol); + } + return exportDefaultSymbol; + } + } + function getTargetOfNamespaceImport(node) { + var moduleSpecifier = node.parent.parent.moduleSpecifier; + return resolveESModuleSymbol(resolveExternalModuleName(node, moduleSpecifier), moduleSpecifier); + } + function combineValueAndTypeSymbols(valueSymbol, typeSymbol) { + if (valueSymbol.flags & (793056 | 1536)) { + return valueSymbol; + } + var result = createSymbol(valueSymbol.flags | typeSymbol.flags, valueSymbol.name); + result.declarations = ts.concatenate(valueSymbol.declarations, typeSymbol.declarations); + result.parent = valueSymbol.parent || typeSymbol.parent; + if (valueSymbol.valueDeclaration) + result.valueDeclaration = valueSymbol.valueDeclaration; + if (typeSymbol.members) + result.members = typeSymbol.members; + if (valueSymbol.exports) + result.exports = valueSymbol.exports; + return result; + } + function getExportOfModule(symbol, name) { + if (symbol.flags & 1536) { + var exports = getExportsOfSymbol(symbol); + if (ts.hasProperty(exports, name)) { + return resolveSymbol(exports[name]); + } + } + } + function getPropertyOfVariable(symbol, name) { + if (symbol.flags & 3) { + var typeAnnotation = symbol.valueDeclaration.type; + if (typeAnnotation) { + return resolveSymbol(getPropertyOfType(getTypeFromTypeNode(typeAnnotation), name)); + } + } + } + function getExternalModuleMember(node, specifier) { + var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier); + var targetSymbol = resolveESModuleSymbol(moduleSymbol, node.moduleSpecifier); + if (targetSymbol) { + var name_9 = specifier.propertyName || specifier.name; + if (name_9.text) { + var symbolFromVariable = void 0; + if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports["export="]) { + symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name_9.text); + } + else { + symbolFromVariable = getPropertyOfVariable(targetSymbol, name_9.text); + } + symbolFromVariable = resolveSymbol(symbolFromVariable); + var symbolFromModule = getExportOfModule(targetSymbol, name_9.text); + var symbol = symbolFromModule && symbolFromVariable ? + combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) : + symbolFromModule || symbolFromVariable; + if (!symbol) { + error(name_9, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(moduleSymbol), ts.declarationNameToString(name_9)); + } + return symbol; + } + } + } + function getTargetOfImportSpecifier(node) { + return getExternalModuleMember(node.parent.parent.parent, node); + } + function getTargetOfGlobalModuleExportDeclaration(node) { + return resolveExternalModuleSymbol(node.parent.symbol); + } + function getTargetOfExportSpecifier(node) { + return node.parent.parent.moduleSpecifier ? + getExternalModuleMember(node.parent.parent, node) : + resolveEntityName(node.propertyName || node.name, 107455 | 793056 | 1536); + } + function getTargetOfExportAssignment(node) { + return resolveEntityName(node.expression, 107455 | 793056 | 1536); + } + function getTargetOfAliasDeclaration(node) { + switch (node.kind) { + case 229: + return getTargetOfImportEqualsDeclaration(node); + case 231: + return getTargetOfImportClause(node); + case 232: + return getTargetOfNamespaceImport(node); + case 234: + return getTargetOfImportSpecifier(node); + case 238: + return getTargetOfExportSpecifier(node); + case 235: + return getTargetOfExportAssignment(node); + case 228: + return getTargetOfGlobalModuleExportDeclaration(node); + } + } + function resolveSymbol(symbol) { + return symbol && symbol.flags & 8388608 && !(symbol.flags & (107455 | 793056 | 1536)) ? resolveAlias(symbol) : symbol; + } + function resolveAlias(symbol) { + ts.Debug.assert((symbol.flags & 8388608) !== 0, "Should only get Alias here."); + var links = getSymbolLinks(symbol); + if (!links.target) { + links.target = resolvingSymbol; + var node = getDeclarationOfAliasSymbol(symbol); + var target = getTargetOfAliasDeclaration(node); + if (links.target === resolvingSymbol) { + links.target = target || unknownSymbol; + } + else { + error(node, ts.Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol)); + } + } + else if (links.target === resolvingSymbol) { + links.target = unknownSymbol; + } + return links.target; + } + function markExportAsReferenced(node) { + var symbol = getSymbolOfNode(node); + var target = resolveAlias(symbol); + if (target) { + var markAlias = target === unknownSymbol || + ((target.flags & 107455) && !isConstEnumOrConstEnumOnlyModule(target)); + if (markAlias) { + markAliasSymbolAsReferenced(symbol); + } + } + } + function markAliasSymbolAsReferenced(symbol) { + var links = getSymbolLinks(symbol); + if (!links.referenced) { + links.referenced = true; + var node = getDeclarationOfAliasSymbol(symbol); + if (node.kind === 235) { + checkExpressionCached(node.expression); + } + else if (node.kind === 238) { + checkExpressionCached(node.propertyName || node.name); + } + else if (ts.isInternalModuleImportEqualsDeclaration(node)) { + checkExpressionCached(node.moduleReference); + } + } + } + function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, importDeclaration) { + if (!importDeclaration) { + importDeclaration = ts.getAncestor(entityName, 229); + ts.Debug.assert(importDeclaration !== undefined); + } + if (entityName.kind === 69 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { + entityName = entityName.parent; + } + if (entityName.kind === 69 || entityName.parent.kind === 139) { + return resolveEntityName(entityName, 1536); + } + else { + ts.Debug.assert(entityName.parent.kind === 229); + return resolveEntityName(entityName, 107455 | 793056 | 1536); + } + } + function getFullyQualifiedName(symbol) { + return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol); + } + function resolveEntityName(name, meaning, ignoreErrors) { + if (ts.nodeIsMissing(name)) { + return undefined; + } + var symbol; + if (name.kind === 69) { + var message = meaning === 1536 ? ts.Diagnostics.Cannot_find_namespace_0 : ts.Diagnostics.Cannot_find_name_0; + symbol = resolveName(name, name.text, meaning, ignoreErrors ? undefined : message, name); + if (!symbol) { + return undefined; + } + } + else if (name.kind === 139 || name.kind === 172) { + var left = name.kind === 139 ? name.left : name.expression; + var right = name.kind === 139 ? name.right : name.name; + var namespace = resolveEntityName(left, 1536, ignoreErrors); + if (!namespace || namespace === unknownSymbol || ts.nodeIsMissing(right)) { + return undefined; + } + symbol = getSymbol(getExportsOfSymbol(namespace), right.text, meaning); + if (!symbol) { + if (!ignoreErrors) { + error(right, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(namespace), ts.declarationNameToString(right)); + } + return undefined; + } + } + else { + ts.Debug.fail("Unknown entity name kind."); + } + ts.Debug.assert((symbol.flags & 16777216) === 0, "Should never get an instantiated symbol here."); + return symbol.flags & meaning ? symbol : resolveAlias(symbol); + } + function resolveExternalModuleName(location, moduleReferenceExpression) { + return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ts.Diagnostics.Cannot_find_module_0); + } + function resolveExternalModuleNameWorker(location, moduleReferenceExpression, moduleNotFoundError) { + if (moduleReferenceExpression.kind !== 9) { + return; + } + var moduleReferenceLiteral = moduleReferenceExpression; + var moduleName = ts.escapeIdentifier(moduleReferenceLiteral.text); + if (moduleName === undefined) { + return; + } + var isRelative = ts.isExternalModuleNameRelative(moduleName); + if (!isRelative) { + var symbol = getSymbol(globals, '"' + moduleName + '"', 512); + if (symbol) { + return getMergedSymbol(symbol); + } + } + var resolvedModule = ts.getResolvedModule(ts.getSourceFileOfNode(location), moduleReferenceLiteral.text); + var sourceFile = resolvedModule && host.getSourceFile(resolvedModule.resolvedFileName); + if (sourceFile) { + if (sourceFile.symbol) { + return getMergedSymbol(sourceFile.symbol); + } + if (moduleNotFoundError) { + error(moduleReferenceLiteral, ts.Diagnostics.File_0_is_not_a_module, sourceFile.fileName); + } + return undefined; + } + if (moduleNotFoundError) { + error(moduleReferenceLiteral, moduleNotFoundError, moduleName); + } + return undefined; + } + function resolveExternalModuleSymbol(moduleSymbol) { + return moduleSymbol && getMergedSymbol(resolveSymbol(moduleSymbol.exports["export="])) || moduleSymbol; + } + function resolveESModuleSymbol(moduleSymbol, moduleReferenceExpression) { + var symbol = resolveExternalModuleSymbol(moduleSymbol); + if (symbol && !(symbol.flags & (1536 | 3))) { + error(moduleReferenceExpression, ts.Diagnostics.Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct, symbolToString(moduleSymbol)); + symbol = undefined; + } + return symbol; + } + function hasExportAssignmentSymbol(moduleSymbol) { + return moduleSymbol.exports["export="] !== undefined; + } + function getExportsOfModuleAsArray(moduleSymbol) { + return symbolsToArray(getExportsOfModule(moduleSymbol)); + } + function getExportsOfSymbol(symbol) { + return symbol.flags & 1536 ? getExportsOfModule(symbol) : symbol.exports || emptySymbols; + } + function getExportsOfModule(moduleSymbol) { + var links = getSymbolLinks(moduleSymbol); + return links.resolvedExports || (links.resolvedExports = getExportsForModule(moduleSymbol)); + } + function extendExportSymbols(target, source, lookupTable, exportNode) { + for (var id in source) { + if (id !== "default" && !ts.hasProperty(target, id)) { + target[id] = source[id]; + if (lookupTable && exportNode) { + lookupTable[id] = { + specifierText: ts.getTextOfNode(exportNode.moduleSpecifier) + }; + } + } + else if (lookupTable && exportNode && id !== "default" && ts.hasProperty(target, id) && resolveSymbol(target[id]) !== resolveSymbol(source[id])) { + if (!lookupTable[id].exportsWithDuplicate) { + lookupTable[id].exportsWithDuplicate = [exportNode]; + } + else { + lookupTable[id].exportsWithDuplicate.push(exportNode); + } + } + } + } + function getExportsForModule(moduleSymbol) { + var visitedSymbols = []; + return visit(moduleSymbol) || moduleSymbol.exports; + function visit(symbol) { + if (!(symbol && symbol.flags & 1952 && !ts.contains(visitedSymbols, symbol))) { + return; + } + visitedSymbols.push(symbol); + var symbols = cloneSymbolTable(symbol.exports); + var exportStars = symbol.exports["__export"]; + if (exportStars) { + var nestedSymbols = {}; + var lookupTable = {}; + for (var _i = 0, _a = exportStars.declarations; _i < _a.length; _i++) { + var node = _a[_i]; + var resolvedModule = resolveExternalModuleName(node, node.moduleSpecifier); + var exportedSymbols = visit(resolvedModule); + extendExportSymbols(nestedSymbols, exportedSymbols, lookupTable, node); + } + for (var id in lookupTable) { + var exportsWithDuplicate = lookupTable[id].exportsWithDuplicate; + if (id === "export=" || !(exportsWithDuplicate && exportsWithDuplicate.length) || ts.hasProperty(symbols, id)) { + continue; + } + for (var _b = 0, exportsWithDuplicate_1 = exportsWithDuplicate; _b < exportsWithDuplicate_1.length; _b++) { + var node = exportsWithDuplicate_1[_b]; + diagnostics.add(ts.createDiagnosticForNode(node, ts.Diagnostics.Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity, lookupTable[id].specifierText, id)); + } + } + extendExportSymbols(symbols, nestedSymbols); + } + return symbols; + } + } + function getMergedSymbol(symbol) { + var merged; + return symbol && symbol.mergeId && (merged = mergedSymbols[symbol.mergeId]) ? merged : symbol; + } + function getSymbolOfNode(node) { + return getMergedSymbol(node.symbol); + } + function getParentOfSymbol(symbol) { + return getMergedSymbol(symbol.parent); + } + function getExportSymbolOfValueSymbolIfExported(symbol) { + return symbol && (symbol.flags & 1048576) !== 0 + ? getMergedSymbol(symbol.exportSymbol) + : symbol; + } + function symbolIsValue(symbol) { + if (symbol.flags & 16777216) { + return symbolIsValue(getSymbolLinks(symbol).target); + } + if (symbol.flags & 107455) { + return true; + } + if (symbol.flags & 8388608) { + return (resolveAlias(symbol).flags & 107455) !== 0; + } + return false; + } + function findConstructorDeclaration(node) { + var members = node.members; + for (var _i = 0, members_1 = members; _i < members_1.length; _i++) { + var member = members_1[_i]; + if (member.kind === 148 && ts.nodeIsPresent(member.body)) { + return member; + } + } + } + function createType(flags) { + var result = new Type(checker, flags); + result.id = typeCount; + typeCount++; + return result; + } + function createIntrinsicType(kind, intrinsicName) { + var type = createType(kind); + type.intrinsicName = intrinsicName; + return type; + } + function createObjectType(kind, symbol) { + var type = createType(kind); + type.symbol = symbol; + return type; + } + function isReservedMemberName(name) { + return name.charCodeAt(0) === 95 && + name.charCodeAt(1) === 95 && + name.charCodeAt(2) !== 95 && + name.charCodeAt(2) !== 64; + } + function getNamedMembers(members) { + var result; + for (var id in members) { + if (ts.hasProperty(members, id)) { + if (!isReservedMemberName(id)) { + if (!result) + result = []; + var symbol = members[id]; + if (symbolIsValue(symbol)) { + result.push(symbol); + } + } + } + } + return result || emptyArray; + } + function setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) { + type.members = members; + type.properties = getNamedMembers(members); + type.callSignatures = callSignatures; + type.constructSignatures = constructSignatures; + if (stringIndexInfo) + type.stringIndexInfo = stringIndexInfo; + if (numberIndexInfo) + type.numberIndexInfo = numberIndexInfo; + return type; + } + function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) { + return setObjectTypeMembers(createObjectType(65536, symbol), members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); + } + function forEachSymbolTableInScope(enclosingDeclaration, callback) { + var result; + for (var location_1 = enclosingDeclaration; location_1; location_1 = location_1.parent) { + if (location_1.locals && !isGlobalSourceFile(location_1)) { + if (result = callback(location_1.locals)) { + return result; + } + } + switch (location_1.kind) { + case 256: + if (!ts.isExternalOrCommonJsModule(location_1)) { + break; + } + case 225: + if (result = callback(getSymbolOfNode(location_1).exports)) { + return result; + } + break; + } + } + return callback(globals); + } + function getQualifiedLeftMeaning(rightMeaning) { + return rightMeaning === 107455 ? 107455 : 1536; + } + function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing) { + function getAccessibleSymbolChainFromSymbolTable(symbols) { + function canQualifySymbol(symbolFromSymbolTable, meaning) { + if (!needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning)) { + return true; + } + var accessibleParent = getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning), useOnlyExternalAliasing); + return !!accessibleParent; + } + function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) { + if (symbol === (resolvedAliasSymbol || symbolFromSymbolTable)) { + return !ts.forEach(symbolFromSymbolTable.declarations, hasExternalModuleSymbol) && + canQualifySymbol(symbolFromSymbolTable, meaning); + } + } + if (isAccessible(ts.lookUp(symbols, symbol.name))) { + return [symbol]; + } + return ts.forEachValue(symbols, function (symbolFromSymbolTable) { + if (symbolFromSymbolTable.flags & 8388608 + && symbolFromSymbolTable.name !== "export=" + && !ts.getDeclarationOfKind(symbolFromSymbolTable, 238)) { + if (!useOnlyExternalAliasing || + ts.forEach(symbolFromSymbolTable.declarations, ts.isExternalModuleImportEqualsDeclaration)) { + var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable); + if (isAccessible(symbolFromSymbolTable, resolveAlias(symbolFromSymbolTable))) { + return [symbolFromSymbolTable]; + } + var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined; + if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) { + return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports); + } + } + } + }); + } + if (symbol) { + if (!(isPropertyOrMethodDeclarationSymbol(symbol))) { + return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable); + } + } + } + function needsQualification(symbol, enclosingDeclaration, meaning) { + var qualify = false; + forEachSymbolTableInScope(enclosingDeclaration, function (symbolTable) { + if (!ts.hasProperty(symbolTable, symbol.name)) { + return false; + } + var symbolFromSymbolTable = symbolTable[symbol.name]; + if (symbolFromSymbolTable === symbol) { + return true; + } + symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608 && !ts.getDeclarationOfKind(symbolFromSymbolTable, 238)) ? 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 145: + case 147: + case 149: + case 150: + continue; + default: + return false; + } + } + return true; + } + return false; + } + function isSymbolAccessible(symbol, enclosingDeclaration, meaning) { + if (symbol && enclosingDeclaration && !(symbol.flags & 262144)) { + var initialSymbol = symbol; + var meaningToLook = meaning; + while (symbol) { + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaningToLook, false); + if (accessibleSymbolChain) { + var hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0]); + if (!hasAccessibleDeclarations) { + return { + accessibility: 1, + errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), + errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, 1536) : undefined + }; + } + return hasAccessibleDeclarations; + } + meaningToLook = getQualifiedLeftMeaning(meaning); + symbol = getParentOfSymbol(symbol); + } + var symbolExternalModule = ts.forEach(initialSymbol.declarations, getExternalModuleContainer); + if (symbolExternalModule) { + var enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration); + if (symbolExternalModule !== enclosingExternalModule) { + return { + accessibility: 2, + errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), + errorModuleName: symbolToString(symbolExternalModule) + }; + } + } + return { + accessibility: 1, + errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning) + }; + } + return { accessibility: 0 }; + function getExternalModuleContainer(declaration) { + for (; declaration; declaration = declaration.parent) { + if (hasExternalModuleSymbol(declaration)) { + return getSymbolOfNode(declaration); + } + } + } + } + function hasExternalModuleSymbol(declaration) { + return ts.isAmbientModule(declaration) || (declaration.kind === 256 && ts.isExternalOrCommonJsModule(declaration)); + } + function hasVisibleDeclarations(symbol) { + var aliasesToMakeVisible; + if (ts.forEach(symbol.declarations, function (declaration) { return !getIsDeclarationVisible(declaration); })) { + return undefined; + } + return { accessibility: 0, aliasesToMakeVisible: aliasesToMakeVisible }; + function getIsDeclarationVisible(declaration) { + if (!isDeclarationVisible(declaration)) { + var anyImportSyntax = getAnyImportSyntax(declaration); + if (anyImportSyntax && + !(anyImportSyntax.flags & 1) && + isDeclarationVisible(anyImportSyntax.parent)) { + getNodeLinks(declaration).isVisible = true; + if (aliasesToMakeVisible) { + if (!ts.contains(aliasesToMakeVisible, anyImportSyntax)) { + aliasesToMakeVisible.push(anyImportSyntax); + } + } + else { + aliasesToMakeVisible = [anyImportSyntax]; + } + return true; + } + return false; + } + return true; + } + } + function isEntityNameVisible(entityName, enclosingDeclaration) { + var meaning; + if (entityName.parent.kind === 158 || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { + meaning = 107455 | 1048576; + } + else if (entityName.kind === 139 || entityName.kind === 172 || + entityName.parent.kind === 229) { + meaning = 1536; + } + else { + meaning = 793056; + } + var firstIdentifier = getFirstIdentifier(entityName); + var symbol = resolveName(enclosingDeclaration, firstIdentifier.text, meaning, undefined, undefined); + return (symbol && hasVisibleDeclarations(symbol)) || { + accessibility: 1, + errorSymbolName: ts.getTextOfNode(firstIdentifier), + errorNode: firstIdentifier + }; + } + function writeKeyword(writer, kind) { + writer.writeKeyword(ts.tokenToString(kind)); + } + function writePunctuation(writer, kind) { + writer.writePunctuation(ts.tokenToString(kind)); + } + function writeSpace(writer) { + writer.writeSpace(" "); + } + function symbolToString(symbol, enclosingDeclaration, meaning) { + var writer = ts.getSingleLineStringWriter(); + getSymbolDisplayBuilder().buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning); + var result = writer.string(); + ts.releaseStringWriter(writer); + return result; + } + function signatureToString(signature, enclosingDeclaration, flags, kind) { + var writer = ts.getSingleLineStringWriter(); + getSymbolDisplayBuilder().buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, kind); + var result = writer.string(); + ts.releaseStringWriter(writer); + return result; + } + function typeToString(type, enclosingDeclaration, flags) { + var writer = ts.getSingleLineStringWriter(); + getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags); + var result = writer.string(); + ts.releaseStringWriter(writer); + var maxLength = compilerOptions.noErrorTruncation || flags & 4 ? undefined : 100; + if (maxLength && result.length >= maxLength) { + result = result.substr(0, maxLength - "...".length) + "..."; + } + return result; + } + function typePredicateToString(typePredicate, enclosingDeclaration, flags) { + var writer = ts.getSingleLineStringWriter(); + getSymbolDisplayBuilder().buildTypePredicateDisplay(typePredicate, writer, enclosingDeclaration, flags); + var result = writer.string(); + ts.releaseStringWriter(writer); + return result; + } + function visibilityToString(flags) { + if (flags === 8) { + return "private"; + } + if (flags === 16) { + return "protected"; + } + return "public"; + } + function getTypeAliasForTypeLiteral(type) { + if (type.symbol && type.symbol.flags & 2048) { + var node = type.symbol.declarations[0].parent; + while (node.kind === 164) { + node = node.parent; + } + if (node.kind === 223) { + return getSymbolOfNode(node); + } + } + return undefined; + } + function isTopLevelInExternalModuleAugmentation(node) { + return node && node.parent && + node.parent.kind === 226 && + ts.isExternalModuleAugmentation(node.parent.parent); + } + function getSymbolDisplayBuilder() { + function getNameOfSymbol(symbol) { + if (symbol.declarations && symbol.declarations.length) { + var declaration = symbol.declarations[0]; + if (declaration.name) { + return ts.declarationNameToString(declaration.name); + } + switch (declaration.kind) { + case 192: + return "(Anonymous class)"; + case 179: + case 180: + return "(Anonymous function)"; + } + } + return symbol.name; + } + function appendSymbolNameOnly(symbol, writer) { + writer.writeSymbol(getNameOfSymbol(symbol), symbol); + } + function appendPropertyOrElementAccessForSymbol(symbol, writer) { + var symbolName = getNameOfSymbol(symbol); + var firstChar = symbolName.charCodeAt(0); + var needsElementAccess = !ts.isIdentifierStart(firstChar, languageVersion); + if (needsElementAccess) { + writePunctuation(writer, 19); + if (ts.isSingleOrDoubleQuote(firstChar)) { + writer.writeStringLiteral(symbolName); + } + else { + writer.writeSymbol(symbolName, symbol); + } + writePunctuation(writer, 20); + } + else { + writePunctuation(writer, 21); + writer.writeSymbol(symbolName, symbol); + } + } + function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags, typeFlags) { + var parentSymbol; + function appendParentTypeArgumentsAndSymbolName(symbol) { + if (parentSymbol) { + if (flags & 1) { + if (symbol.flags & 16777216) { + buildDisplayForTypeArgumentsAndDelimiters(getTypeParametersOfClassOrInterface(parentSymbol), symbol.mapper, writer, enclosingDeclaration); + } + else { + buildTypeParameterDisplayFromSymbol(parentSymbol, writer, enclosingDeclaration); + } + } + appendPropertyOrElementAccessForSymbol(symbol, writer); + } + else { + appendSymbolNameOnly(symbol, writer); + } + parentSymbol = symbol; + } + writer.trackSymbol(symbol, enclosingDeclaration, meaning); + function walkSymbol(symbol, meaning) { + if (symbol) { + var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, !!(flags & 2)); + if (!accessibleSymbolChain || + needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) { + walkSymbol(getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol), getQualifiedLeftMeaning(meaning)); + } + if (accessibleSymbolChain) { + for (var _i = 0, accessibleSymbolChain_1 = accessibleSymbolChain; _i < accessibleSymbolChain_1.length; _i++) { + var accessibleSymbol = accessibleSymbolChain_1[_i]; + appendParentTypeArgumentsAndSymbolName(accessibleSymbol); + } + } + else { + if (!parentSymbol && ts.forEach(symbol.declarations, hasExternalModuleSymbol)) { + return; + } + if (symbol.flags & 2048 || symbol.flags & 4096) { + return; + } + appendParentTypeArgumentsAndSymbolName(symbol); + } + } + } + var isTypeParameter = symbol.flags & 262144; + var typeFormatFlag = 128 & typeFlags; + if (!isTypeParameter && (enclosingDeclaration || typeFormatFlag)) { + walkSymbol(symbol, meaning); + return; + } + return appendParentTypeArgumentsAndSymbolName(symbol); + } + function buildTypeDisplay(type, writer, enclosingDeclaration, globalFlags, symbolStack) { + var globalFlagsToPass = globalFlags & 16; + var inObjectTypeLiteral = false; + return writeType(type, globalFlags); + function writeType(type, flags) { + if (type.flags & 150995071) { + writer.writeKeyword(!(globalFlags & 16) && isTypeAny(type) + ? "any" + : type.intrinsicName); + } + else if (type.flags & 33554432) { + if (inObjectTypeLiteral) { + writer.reportInaccessibleThisError(); + } + writer.writeKeyword("this"); + } + else if (type.flags & 4096) { + writeTypeReference(type, flags); + } + else if (type.flags & (1024 | 2048 | 128 | 512)) { + buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 793056, 0, flags); + } + else if (type.flags & 8192) { + writeTupleType(type); + } + else if (type.flags & 49152) { + writeUnionOrIntersectionType(type, flags); + } + else if (type.flags & 65536) { + writeAnonymousType(type, flags); + } + else if (type.flags & 256) { + writer.writeStringLiteral("\"" + ts.escapeString(type.text) + "\""); + } + else { + writePunctuation(writer, 15); + writeSpace(writer); + writePunctuation(writer, 22); + writeSpace(writer); + writePunctuation(writer, 16); + } + } + function writeTypeList(types, delimiter) { + for (var i = 0; i < types.length; i++) { + if (i > 0) { + if (delimiter !== 24) { + writeSpace(writer); + } + writePunctuation(writer, delimiter); + writeSpace(writer); + } + writeType(types[i], delimiter === 24 ? 0 : 64); + } + } + function writeSymbolTypeReference(symbol, typeArguments, pos, end, flags) { + if (symbol.flags & 32 || !isReservedMemberName(symbol.name)) { + buildSymbolDisplay(symbol, writer, enclosingDeclaration, 793056, 0, flags); + } + if (pos < end) { + writePunctuation(writer, 25); + writeType(typeArguments[pos], 256); + pos++; + while (pos < end) { + writePunctuation(writer, 24); + writeSpace(writer); + writeType(typeArguments[pos], 0); + pos++; + } + writePunctuation(writer, 27); + } + } + function writeTypeReference(type, flags) { + var typeArguments = type.typeArguments || emptyArray; + if (type.target === globalArrayType && !(flags & 1)) { + writeType(typeArguments[0], 64); + writePunctuation(writer, 19); + writePunctuation(writer, 20); + } + else { + var outerTypeParameters = type.target.outerTypeParameters; + var i = 0; + if (outerTypeParameters) { + var length_1 = outerTypeParameters.length; + while (i < length_1) { + var start = i; + var parent_6 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); + do { + i++; + } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_6); + if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) { + writeSymbolTypeReference(parent_6, typeArguments, start, i, flags); + writePunctuation(writer, 21); + } + } + } + var typeParameterCount = (type.target.typeParameters || emptyArray).length; + writeSymbolTypeReference(type.symbol, typeArguments, i, typeParameterCount, flags); + } + } + function writeTupleType(type) { + writePunctuation(writer, 19); + writeTypeList(type.elementTypes, 24); + writePunctuation(writer, 20); + } + function writeUnionOrIntersectionType(type, flags) { + if (flags & 64) { + writePunctuation(writer, 17); + } + writeTypeList(type.types, type.flags & 16384 ? 47 : 46); + if (flags & 64) { + writePunctuation(writer, 18); + } + } + function writeAnonymousType(type, flags) { + var symbol = type.symbol; + if (symbol) { + if (symbol.flags & (32 | 384 | 512)) { + writeTypeOfSymbol(type, flags); + } + else if (shouldWriteTypeOfFunctionSymbol()) { + writeTypeOfSymbol(type, flags); + } + else if (ts.contains(symbolStack, symbol)) { + var typeAlias = getTypeAliasForTypeLiteral(type); + if (typeAlias) { + buildSymbolDisplay(typeAlias, writer, enclosingDeclaration, 793056, 0, flags); + } + else { + writeKeyword(writer, 117); + } + } + else { + if (!symbolStack) { + symbolStack = []; + } + symbolStack.push(symbol); + writeLiteralType(type, flags); + symbolStack.pop(); + } + } + else { + writeLiteralType(type, flags); + } + function shouldWriteTypeOfFunctionSymbol() { + var isStaticMethodSymbol = !!(symbol.flags & 8192 && + ts.forEach(symbol.declarations, function (declaration) { return declaration.flags & 32; })); + var isNonLocalFunctionSymbol = !!(symbol.flags & 16) && + (symbol.parent || + ts.forEach(symbol.declarations, function (declaration) { + return declaration.parent.kind === 256 || declaration.parent.kind === 226; + })); + if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { + return !!(flags & 2) || + (ts.contains(symbolStack, symbol)); + } + } + } + function writeTypeOfSymbol(type, typeFormatFlags) { + writeKeyword(writer, 101); + writeSpace(writer); + buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455, 0, typeFormatFlags); + } + function writeIndexSignature(info, keyword) { + if (info) { + if (info.isReadonly) { + writeKeyword(writer, 128); + writeSpace(writer); + } + writePunctuation(writer, 19); + writer.writeParameter(info.declaration ? ts.declarationNameToString(info.declaration.parameters[0].name) : "x"); + writePunctuation(writer, 54); + writeSpace(writer); + writeKeyword(writer, keyword); + writePunctuation(writer, 20); + writePunctuation(writer, 54); + writeSpace(writer); + writeType(info.type, 0); + writePunctuation(writer, 23); + writer.writeLine(); + } + } + function writePropertyWithModifiers(prop) { + if (isReadonlySymbol(prop)) { + writeKeyword(writer, 128); + writeSpace(writer); + } + buildSymbolDisplay(prop, writer); + if (prop.flags & 536870912) { + writePunctuation(writer, 53); + } + } + function shouldAddParenthesisAroundFunctionType(callSignature, flags) { + if (flags & 64) { + return true; + } + else if (flags & 256) { + var typeParameters = callSignature.target && (flags & 32) ? + callSignature.target.typeParameters : callSignature.typeParameters; + return typeParameters && typeParameters.length !== 0; + } + return false; + } + function writeLiteralType(type, flags) { + var resolved = resolveStructuredTypeMembers(type); + if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) { + if (!resolved.callSignatures.length && !resolved.constructSignatures.length) { + writePunctuation(writer, 15); + writePunctuation(writer, 16); + return; + } + if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { + var parenthesizeSignature = shouldAddParenthesisAroundFunctionType(resolved.callSignatures[0], flags); + if (parenthesizeSignature) { + writePunctuation(writer, 17); + } + buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, undefined, symbolStack); + if (parenthesizeSignature) { + writePunctuation(writer, 18); + } + return; + } + if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) { + if (flags & 64) { + writePunctuation(writer, 17); + } + writeKeyword(writer, 92); + writeSpace(writer); + buildSignatureDisplay(resolved.constructSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8, undefined, symbolStack); + if (flags & 64) { + writePunctuation(writer, 18); + } + return; + } + } + var saveInObjectTypeLiteral = inObjectTypeLiteral; + inObjectTypeLiteral = true; + writePunctuation(writer, 15); + writer.writeLine(); + writer.increaseIndent(); + for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) { + var signature = _a[_i]; + buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, undefined, symbolStack); + writePunctuation(writer, 23); + writer.writeLine(); + } + for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) { + var signature = _c[_b]; + buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, 1, symbolStack); + writePunctuation(writer, 23); + writer.writeLine(); + } + writeIndexSignature(resolved.stringIndexInfo, 132); + writeIndexSignature(resolved.numberIndexInfo, 130); + for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) { + var p = _e[_d]; + var t = getTypeOfSymbol(p); + if (p.flags & (16 | 8192) && !getPropertiesOfObjectType(t).length) { + var signatures = getSignaturesOfType(t, 0); + for (var _f = 0, signatures_1 = signatures; _f < signatures_1.length; _f++) { + var signature = signatures_1[_f]; + writePropertyWithModifiers(p); + buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, undefined, symbolStack); + writePunctuation(writer, 23); + writer.writeLine(); + } + } + else { + writePropertyWithModifiers(p); + writePunctuation(writer, 54); + writeSpace(writer); + writeType(t, 0); + writePunctuation(writer, 23); + writer.writeLine(); + } + } + writer.decreaseIndent(); + writePunctuation(writer, 16); + inObjectTypeLiteral = saveInObjectTypeLiteral; + } + } + function buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaration, flags) { + var targetSymbol = getTargetSymbol(symbol); + if (targetSymbol.flags & 32 || targetSymbol.flags & 64 || targetSymbol.flags & 524288) { + buildDisplayForTypeParametersAndDelimiters(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol), writer, enclosingDeclaration, flags); + } + } + function buildTypeParameterDisplay(tp, writer, enclosingDeclaration, flags, symbolStack) { + appendSymbolNameOnly(tp.symbol, writer); + var constraint = getConstraintOfTypeParameter(tp); + if (constraint) { + writeSpace(writer); + writeKeyword(writer, 83); + writeSpace(writer); + buildTypeDisplay(constraint, writer, enclosingDeclaration, flags, symbolStack); + } + } + function buildParameterDisplay(p, writer, enclosingDeclaration, flags, symbolStack) { + var parameterNode = p.valueDeclaration; + if (ts.isRestParameter(parameterNode)) { + writePunctuation(writer, 22); + } + if (ts.isBindingPattern(parameterNode.name)) { + buildBindingPatternDisplay(parameterNode.name, writer, enclosingDeclaration, flags, symbolStack); + } + else { + appendSymbolNameOnly(p, writer); + } + if (isOptionalParameter(parameterNode)) { + writePunctuation(writer, 53); + } + writePunctuation(writer, 54); + writeSpace(writer); + buildTypeDisplay(getTypeOfSymbol(p), writer, enclosingDeclaration, flags, symbolStack); + } + function buildBindingPatternDisplay(bindingPattern, writer, enclosingDeclaration, flags, symbolStack) { + if (bindingPattern.kind === 167) { + writePunctuation(writer, 15); + buildDisplayForCommaSeparatedList(bindingPattern.elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); }); + writePunctuation(writer, 16); + } + else if (bindingPattern.kind === 168) { + writePunctuation(writer, 19); + var elements = bindingPattern.elements; + buildDisplayForCommaSeparatedList(elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); }); + if (elements && elements.hasTrailingComma) { + writePunctuation(writer, 24); + } + writePunctuation(writer, 20); + } + } + function buildBindingElementDisplay(bindingElement, writer, enclosingDeclaration, flags, symbolStack) { + if (bindingElement.kind === 193) { + return; + } + ts.Debug.assert(bindingElement.kind === 169); + if (bindingElement.propertyName) { + writer.writeSymbol(ts.getTextOfNode(bindingElement.propertyName), bindingElement.symbol); + writePunctuation(writer, 54); + writeSpace(writer); + } + if (ts.isBindingPattern(bindingElement.name)) { + buildBindingPatternDisplay(bindingElement.name, writer, enclosingDeclaration, flags, symbolStack); + } + else { + if (bindingElement.dotDotDotToken) { + writePunctuation(writer, 22); + } + appendSymbolNameOnly(bindingElement.symbol, writer); + } + } + function buildDisplayForTypeParametersAndDelimiters(typeParameters, writer, enclosingDeclaration, flags, symbolStack) { + if (typeParameters && typeParameters.length) { + writePunctuation(writer, 25); + buildDisplayForCommaSeparatedList(typeParameters, writer, function (p) { return buildTypeParameterDisplay(p, writer, enclosingDeclaration, flags, symbolStack); }); + writePunctuation(writer, 27); + } + } + function buildDisplayForCommaSeparatedList(list, writer, action) { + for (var i = 0; i < list.length; i++) { + if (i > 0) { + writePunctuation(writer, 24); + writeSpace(writer); + } + action(list[i]); + } + } + function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration, flags, symbolStack) { + if (typeParameters && typeParameters.length) { + writePunctuation(writer, 25); + var flags_1 = 256; + for (var i = 0; i < typeParameters.length; i++) { + if (i > 0) { + writePunctuation(writer, 24); + writeSpace(writer); + flags_1 = 0; + } + buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, flags_1); + } + writePunctuation(writer, 27); + } + } + function buildDisplayForParametersAndDelimiters(thisType, parameters, writer, enclosingDeclaration, flags, symbolStack) { + writePunctuation(writer, 17); + if (thisType) { + writeKeyword(writer, 97); + writePunctuation(writer, 54); + writeSpace(writer); + buildTypeDisplay(thisType, writer, enclosingDeclaration, flags, symbolStack); + } + for (var i = 0; i < parameters.length; i++) { + if (i > 0 || thisType) { + writePunctuation(writer, 24); + writeSpace(writer); + } + buildParameterDisplay(parameters[i], writer, enclosingDeclaration, flags, symbolStack); + } + writePunctuation(writer, 18); + } + function buildTypePredicateDisplay(predicate, writer, enclosingDeclaration, flags, symbolStack) { + if (ts.isIdentifierTypePredicate(predicate)) { + writer.writeParameter(predicate.parameterName); + } + else { + writeKeyword(writer, 97); + } + writeSpace(writer); + writeKeyword(writer, 124); + writeSpace(writer); + buildTypeDisplay(predicate.type, writer, enclosingDeclaration, flags, symbolStack); + } + function buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack) { + if (flags & 8) { + writeSpace(writer); + writePunctuation(writer, 34); + } + else { + writePunctuation(writer, 54); + } + writeSpace(writer); + if (signature.typePredicate) { + buildTypePredicateDisplay(signature.typePredicate, writer, enclosingDeclaration, flags, symbolStack); + } + else { + var returnType = getReturnTypeOfSignature(signature); + buildTypeDisplay(returnType, writer, enclosingDeclaration, flags, symbolStack); + } + } + function buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, kind, symbolStack) { + if (kind === 1) { + writeKeyword(writer, 92); + writeSpace(writer); + } + if (signature.target && (flags & 32)) { + buildDisplayForTypeArgumentsAndDelimiters(signature.target.typeParameters, signature.mapper, writer, enclosingDeclaration); + } + else { + buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, symbolStack); + } + buildDisplayForParametersAndDelimiters(signature.thisType, signature.parameters, writer, enclosingDeclaration, flags, symbolStack); + buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack); + } + return _displayBuilder || (_displayBuilder = { + buildSymbolDisplay: buildSymbolDisplay, + buildTypeDisplay: buildTypeDisplay, + buildTypeParameterDisplay: buildTypeParameterDisplay, + buildTypePredicateDisplay: buildTypePredicateDisplay, + buildParameterDisplay: buildParameterDisplay, + buildDisplayForParametersAndDelimiters: buildDisplayForParametersAndDelimiters, + buildDisplayForTypeParametersAndDelimiters: buildDisplayForTypeParametersAndDelimiters, + buildTypeParameterDisplayFromSymbol: buildTypeParameterDisplayFromSymbol, + buildSignatureDisplay: buildSignatureDisplay, + buildReturnTypeDisplay: buildReturnTypeDisplay + }); + } + function isDeclarationVisible(node) { + if (node) { + var links = getNodeLinks(node); + if (links.isVisible === undefined) { + links.isVisible = !!determineIfDeclarationIsVisible(); + } + return links.isVisible; + } + return false; + function determineIfDeclarationIsVisible() { + switch (node.kind) { + case 169: + return isDeclarationVisible(node.parent.parent); + case 218: + if (ts.isBindingPattern(node.name) && + !node.name.elements.length) { + return false; + } + case 225: + case 221: + case 222: + case 223: + case 220: + case 224: + case 229: + if (ts.isExternalModuleAugmentation(node)) { + return true; + } + var parent_7 = getDeclarationContainer(node); + if (!(ts.getCombinedNodeFlags(node) & 1) && + !(node.kind !== 229 && parent_7.kind !== 256 && ts.isInAmbientContext(parent_7))) { + return isGlobalSourceFile(parent_7); + } + return isDeclarationVisible(parent_7); + case 145: + case 144: + case 149: + case 150: + case 147: + case 146: + if (node.flags & (8 | 16)) { + return false; + } + case 148: + case 152: + case 151: + case 153: + case 142: + case 226: + case 156: + case 157: + case 159: + case 155: + case 160: + case 161: + case 162: + case 163: + case 164: + return isDeclarationVisible(node.parent); + case 231: + case 232: + case 234: + return false; + case 141: + case 256: + return true; + case 235: + return false; + default: + return false; + } + } + } + function collectLinkedAliases(node) { + var exportSymbol; + if (node.parent && node.parent.kind === 235) { + exportSymbol = resolveName(node.parent, node.text, 107455 | 793056 | 1536 | 8388608, ts.Diagnostics.Cannot_find_name_0, node); + } + else if (node.parent.kind === 238) { + var exportSpecifier = node.parent; + exportSymbol = exportSpecifier.parent.parent.moduleSpecifier ? + getExternalModuleMember(exportSpecifier.parent.parent, exportSpecifier) : + resolveEntityName(exportSpecifier.propertyName || exportSpecifier.name, 107455 | 793056 | 1536 | 8388608); + } + var result = []; + if (exportSymbol) { + buildVisibleNodeList(exportSymbol.declarations); + } + return result; + function buildVisibleNodeList(declarations) { + ts.forEach(declarations, function (declaration) { + getNodeLinks(declaration).isVisible = true; + var resultNode = getAnyImportSyntax(declaration) || declaration; + if (!ts.contains(result, resultNode)) { + result.push(resultNode); + } + if (ts.isInternalModuleImportEqualsDeclaration(declaration)) { + var internalModuleReference = declaration.moduleReference; + var firstIdentifier = getFirstIdentifier(internalModuleReference); + var importSymbol = resolveName(declaration, firstIdentifier.text, 107455 | 793056 | 1536, undefined, undefined); + if (importSymbol) { + buildVisibleNodeList(importSymbol.declarations); + } + } + }); + } + } + function pushTypeResolution(target, propertyName) { + var resolutionCycleStartIndex = findResolutionCycleStartIndex(target, propertyName); + if (resolutionCycleStartIndex >= 0) { + var length_2 = resolutionTargets.length; + for (var i = resolutionCycleStartIndex; i < length_2; i++) { + resolutionResults[i] = false; + } + return false; + } + resolutionTargets.push(target); + resolutionResults.push(true); + resolutionPropertyNames.push(propertyName); + return true; + } + function findResolutionCycleStartIndex(target, propertyName) { + for (var i = resolutionTargets.length - 1; i >= 0; i--) { + if (hasType(resolutionTargets[i], resolutionPropertyNames[i])) { + return -1; + } + if (resolutionTargets[i] === target && resolutionPropertyNames[i] === propertyName) { + return i; + } + } + return -1; + } + function hasType(target, propertyName) { + if (propertyName === 0) { + return getSymbolLinks(target).type; + } + if (propertyName === 2) { + return getSymbolLinks(target).declaredType; + } + if (propertyName === 1) { + ts.Debug.assert(!!(target.flags & 1024)); + return target.resolvedBaseConstructorType; + } + if (propertyName === 3) { + return target.resolvedReturnType; + } + ts.Debug.fail("Unhandled TypeSystemPropertyName " + propertyName); + } + function popTypeResolution() { + resolutionTargets.pop(); + resolutionPropertyNames.pop(); + return resolutionResults.pop(); + } + function getDeclarationContainer(node) { + node = ts.getRootDeclaration(node); + while (node) { + switch (node.kind) { + case 218: + case 219: + case 234: + case 233: + case 232: + case 231: + node = node.parent; + break; + default: + return node.parent; + } + } + } + function getTypeOfPrototypeProperty(prototype) { + var classType = getDeclaredTypeOfSymbol(getParentOfSymbol(prototype)); + return classType.typeParameters ? createTypeReference(classType, ts.map(classType.typeParameters, function (_) { return anyType; })) : classType; + } + function getTypeOfPropertyOfType(type, name) { + var prop = getPropertyOfType(type, name); + return prop ? getTypeOfSymbol(prop) : undefined; + } + function isTypeAny(type) { + return type && (type.flags & 1) !== 0; + } + function getTypeForBindingElementParent(node) { + var symbol = getSymbolOfNode(node); + return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node); + } + function getTextOfPropertyName(name) { + switch (name.kind) { + case 69: + return name.text; + case 9: + case 8: + return name.text; + case 140: + if (ts.isStringOrNumericLiteral(name.expression.kind)) { + return name.expression.text; + } + } + return undefined; + } + function isComputedNonLiteralName(name) { + return name.kind === 140 && !ts.isStringOrNumericLiteral(name.expression.kind); + } + function getTypeForBindingElement(declaration) { + var pattern = declaration.parent; + var parentType = getTypeForBindingElementParent(pattern.parent); + if (parentType === unknownType) { + return unknownType; + } + if (!parentType || isTypeAny(parentType)) { + if (declaration.initializer) { + return checkExpressionCached(declaration.initializer); + } + return parentType; + } + var type; + if (pattern.kind === 167) { + var name_10 = declaration.propertyName || declaration.name; + if (isComputedNonLiteralName(name_10)) { + return anyType; + } + if (declaration.initializer) { + getContextualType(declaration.initializer); + } + var text = getTextOfPropertyName(name_10); + type = getTypeOfPropertyOfType(parentType, text) || + isNumericLiteralName(text) && getIndexTypeOfType(parentType, 1) || + getIndexTypeOfType(parentType, 0); + if (!type) { + error(name_10, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name_10)); + return unknownType; + } + } + else { + var elementType = checkIteratedTypeOrElementType(parentType, pattern, false); + if (!declaration.dotDotDotToken) { + var propName = "" + ts.indexOf(pattern.elements, declaration); + type = isTupleLikeType(parentType) + ? getTypeOfPropertyOfType(parentType, propName) + : elementType; + if (!type) { + if (isTupleType(parentType)) { + error(declaration, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(parentType), parentType.elementTypes.length, pattern.elements.length); + } + else { + error(declaration, ts.Diagnostics.Type_0_has_no_property_1, typeToString(parentType), propName); + } + return unknownType; + } + } + else { + type = createArrayType(elementType); + } + } + if (strictNullChecks && declaration.initializer && !(getNullableKind(checkExpressionCached(declaration.initializer)) & 32)) { + type = getTypeWithFacts(type, 131072); + } + return type; + } + function getTypeForVariableLikeDeclarationFromJSDocComment(declaration) { + var jsDocType = getJSDocTypeForVariableLikeDeclarationFromJSDocComment(declaration); + if (jsDocType) { + return getTypeFromTypeNode(jsDocType); + } + } + function getJSDocTypeForVariableLikeDeclarationFromJSDocComment(declaration) { + var typeTag = ts.getJSDocTypeTag(declaration); + if (typeTag && typeTag.typeExpression) { + return typeTag.typeExpression.type; + } + if (declaration.kind === 218 && + declaration.parent.kind === 219 && + declaration.parent.parent.kind === 200) { + var annotation = ts.getJSDocTypeTag(declaration.parent.parent); + if (annotation && annotation.typeExpression) { + return annotation.typeExpression.type; + } + } + else if (declaration.kind === 142) { + var paramTag = ts.getCorrespondingJSDocParameterTag(declaration); + if (paramTag && paramTag.typeExpression) { + return paramTag.typeExpression.type; + } + } + return undefined; + } + function addOptionality(type, optional) { + return strictNullChecks && optional ? addNullableKind(type, 32) : type; + } + function getTypeForVariableLikeDeclaration(declaration) { + if (declaration.flags & 134217728) { + var type = getTypeForVariableLikeDeclarationFromJSDocComment(declaration); + if (type && type !== unknownType) { + return type; + } + } + if (declaration.parent.parent.kind === 207) { + return stringType; + } + if (declaration.parent.parent.kind === 208) { + return checkRightHandSideOfForOf(declaration.parent.parent.expression) || anyType; + } + if (ts.isBindingPattern(declaration.parent)) { + return getTypeForBindingElement(declaration); + } + if (declaration.type) { + return addOptionality(getTypeFromTypeNode(declaration.type), !!declaration.questionToken); + } + if (declaration.kind === 142) { + var func = declaration.parent; + if (func.kind === 150 && !ts.hasDynamicName(func)) { + var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 149); + if (getter) { + var signature = getSignatureFromDeclaration(getter); + var thisParameter = getAccessorThisParameter(func); + if (thisParameter && declaration === thisParameter) { + return signature.thisType; + } + return getReturnTypeOfSignature(signature); + } + } + var type = declaration.symbol.name === "this" + ? getContextuallyTypedThisType(func) + : getContextuallyTypedParameterType(declaration); + if (type) { + return addOptionality(type, !!declaration.questionToken); + } + } + if (declaration.initializer) { + return addOptionality(checkExpressionCached(declaration.initializer), !!declaration.questionToken); + } + if (declaration.kind === 254) { + return checkIdentifier(declaration.name); + } + if (ts.isBindingPattern(declaration.name)) { + return getTypeFromBindingPattern(declaration.name, false); + } + return undefined; + } + function getTypeFromBindingElement(element, includePatternInType) { + if (element.initializer) { + var type = checkExpressionCached(element.initializer); + reportErrorsFromWidening(element, type); + return getWidenedType(type); + } + if (ts.isBindingPattern(element.name)) { + return getTypeFromBindingPattern(element.name, includePatternInType); + } + if (compilerOptions.noImplicitAny && !declarationBelongsToPrivateAmbientMember(element)) { + reportImplicitAnyError(element, anyType); + } + return anyType; + } + function getTypeFromObjectBindingPattern(pattern, includePatternInType) { + var members = {}; + var hasComputedProperties = false; + ts.forEach(pattern.elements, function (e) { + var name = e.propertyName || e.name; + if (isComputedNonLiteralName(name)) { + hasComputedProperties = true; + return; + } + var text = getTextOfPropertyName(name); + var flags = 4 | 67108864 | (e.initializer ? 536870912 : 0); + var symbol = createSymbol(flags, text); + symbol.type = getTypeFromBindingElement(e, includePatternInType); + symbol.bindingElement = e; + members[symbol.name] = symbol; + }); + var result = createAnonymousType(undefined, members, emptyArray, emptyArray, undefined, undefined); + if (includePatternInType) { + result.pattern = pattern; + } + if (hasComputedProperties) { + result.flags |= 67108864; + } + return result; + } + function getTypeFromArrayBindingPattern(pattern, includePatternInType) { + var elements = pattern.elements; + if (elements.length === 0 || elements[elements.length - 1].dotDotDotToken) { + return languageVersion >= 2 ? createIterableType(anyType) : anyArrayType; + } + var elementTypes = ts.map(elements, function (e) { return e.kind === 193 ? anyType : getTypeFromBindingElement(e, includePatternInType); }); + if (includePatternInType) { + var result = createNewTupleType(elementTypes); + result.pattern = pattern; + return result; + } + return createTupleType(elementTypes); + } + function getTypeFromBindingPattern(pattern, includePatternInType) { + return pattern.kind === 167 + ? getTypeFromObjectBindingPattern(pattern, includePatternInType) + : getTypeFromArrayBindingPattern(pattern, includePatternInType); + } + function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors) { + var type = getTypeForVariableLikeDeclaration(declaration); + if (type) { + if (reportErrors) { + reportErrorsFromWidening(declaration, type); + } + if (declaration.kind === 253) { + return type; + } + return getWidenedType(type); + } + type = declaration.dotDotDotToken ? anyArrayType : anyType; + if (reportErrors && compilerOptions.noImplicitAny) { + if (!declarationBelongsToPrivateAmbientMember(declaration)) { + reportImplicitAnyError(declaration, type); + } + } + return type; + } + function declarationBelongsToPrivateAmbientMember(declaration) { + var root = ts.getRootDeclaration(declaration); + var memberDeclaration = root.kind === 142 ? root.parent : root; + return isPrivateWithinAmbient(memberDeclaration); + } + function getTypeOfVariableOrParameterOrProperty(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + if (symbol.flags & 134217728) { + return links.type = getTypeOfPrototypeProperty(symbol); + } + var declaration = symbol.valueDeclaration; + if (declaration.parent.kind === 252) { + return links.type = anyType; + } + if (declaration.kind === 235) { + return links.type = checkExpression(declaration.expression); + } + if (declaration.kind === 187) { + return links.type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); + } + if (declaration.kind === 172) { + if (declaration.parent.kind === 187) { + return links.type = checkExpressionCached(declaration.parent.right); + } + } + if (!pushTypeResolution(symbol, 0)) { + return unknownType; + } + var type = getWidenedTypeForVariableLikeDeclaration(declaration, true); + if (!popTypeResolution()) { + if (symbol.valueDeclaration.type) { + type = unknownType; + error(symbol.valueDeclaration, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol)); + } + else { + type = anyType; + if (compilerOptions.noImplicitAny) { + error(symbol.valueDeclaration, ts.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol)); + } + } + } + links.type = type; + } + return links.type; + } + function getAnnotatedAccessorType(accessor) { + if (accessor) { + if (accessor.kind === 149) { + return accessor.type && getTypeFromTypeNode(accessor.type); + } + else { + var setterTypeAnnotation = ts.getSetAccessorTypeAnnotationNode(accessor); + return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation); + } + } + return undefined; + } + function getAnnotatedAccessorThisType(accessor) { + if (accessor) { + var parameter = getAccessorThisParameter(accessor); + if (parameter && parameter.type) { + return getTypeFromTypeNode(accessor.parameters[0].type); + } + } + return undefined; + } + function getTypeOfAccessors(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + var getter = ts.getDeclarationOfKind(symbol, 149); + var setter = ts.getDeclarationOfKind(symbol, 150); + if (getter && getter.flags & 134217728) { + var jsDocType = getTypeForVariableLikeDeclarationFromJSDocComment(getter); + if (jsDocType) { + return links.type = jsDocType; + } + } + if (!pushTypeResolution(symbol, 0)) { + return unknownType; + } + var type = void 0; + var getterReturnType = getAnnotatedAccessorType(getter); + if (getterReturnType) { + type = getterReturnType; + } + else { + var setterParameterType = getAnnotatedAccessorType(setter); + if (setterParameterType) { + type = setterParameterType; + } + else { + if (getter && getter.body) { + type = getReturnTypeFromBody(getter); + } + else { + if (compilerOptions.noImplicitAny) { + error(setter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_type_annotation, symbolToString(symbol)); + } + type = anyType; + } + } + } + if (!popTypeResolution()) { + type = anyType; + if (compilerOptions.noImplicitAny) { + var getter_1 = ts.getDeclarationOfKind(symbol, 149); + error(getter_1, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol)); + } + } + links.type = type; + } + return links.type; + } + function getTypeOfFuncClassEnumModule(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + var type = createObjectType(65536, symbol); + links.type = strictNullChecks && symbol.flags & 536870912 ? + addNullableKind(type, 32) : type; + } + return links.type; + } + function getTypeOfEnumMember(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + links.type = getDeclaredTypeOfEnum(getParentOfSymbol(symbol)); + } + return links.type; + } + function getTypeOfAlias(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + var targetSymbol = resolveAlias(symbol); + links.type = targetSymbol.flags & 107455 + ? getTypeOfSymbol(targetSymbol) + : unknownType; + } + return links.type; + } + function getTypeOfInstantiatedSymbol(symbol) { + var links = getSymbolLinks(symbol); + if (!links.type) { + links.type = instantiateType(getTypeOfSymbol(links.target), links.mapper); + } + return links.type; + } + function getTypeOfSymbol(symbol) { + if (symbol.flags & 16777216) { + return getTypeOfInstantiatedSymbol(symbol); + } + if (symbol.flags & (3 | 4)) { + return getTypeOfVariableOrParameterOrProperty(symbol); + } + if (symbol.flags & (16 | 8192 | 32 | 384 | 512)) { + return getTypeOfFuncClassEnumModule(symbol); + } + if (symbol.flags & 8) { + return getTypeOfEnumMember(symbol); + } + if (symbol.flags & 98304) { + return getTypeOfAccessors(symbol); + } + if (symbol.flags & 8388608) { + return getTypeOfAlias(symbol); + } + return unknownType; + } + function getTargetType(type) { + return type.flags & 4096 ? type.target : type; + } + function hasBaseType(type, checkBase) { + return check(type); + function check(type) { + var target = getTargetType(type); + return target === checkBase || ts.forEach(getBaseTypes(target), check); + } + } + function appendTypeParameters(typeParameters, declarations) { + for (var _i = 0, declarations_2 = declarations; _i < declarations_2.length; _i++) { + var declaration = declarations_2[_i]; + var tp = getDeclaredTypeOfTypeParameter(getSymbolOfNode(declaration)); + if (!typeParameters) { + typeParameters = [tp]; + } + else if (!ts.contains(typeParameters, tp)) { + typeParameters.push(tp); + } + } + return typeParameters; + } + function appendOuterTypeParameters(typeParameters, node) { + while (true) { + node = node.parent; + if (!node) { + return typeParameters; + } + if (node.kind === 221 || node.kind === 192 || + node.kind === 220 || node.kind === 179 || + node.kind === 147 || node.kind === 180) { + var declarations = node.typeParameters; + if (declarations) { + return appendTypeParameters(appendOuterTypeParameters(typeParameters, node), declarations); + } + } + } + } + function getOuterTypeParametersOfClassOrInterface(symbol) { + var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 222); + return appendOuterTypeParameters(undefined, declaration); + } + function getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) { + var result; + for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { + var node = _a[_i]; + if (node.kind === 222 || node.kind === 221 || + node.kind === 192 || node.kind === 223) { + var declaration = node; + if (declaration.typeParameters) { + result = appendTypeParameters(result, declaration.typeParameters); + } + } + } + return result; + } + function getTypeParametersOfClassOrInterface(symbol) { + return ts.concatenate(getOuterTypeParametersOfClassOrInterface(symbol), getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol)); + } + function isConstructorType(type) { + return type.flags & 80896 && getSignaturesOfType(type, 1).length > 0; + } + function getBaseTypeNodeOfClass(type) { + return ts.getClassExtendsHeritageClauseElement(type.symbol.valueDeclaration); + } + function getConstructorsForTypeArguments(type, typeArgumentNodes) { + var typeArgCount = typeArgumentNodes ? typeArgumentNodes.length : 0; + return ts.filter(getSignaturesOfType(type, 1), function (sig) { return (sig.typeParameters ? sig.typeParameters.length : 0) === typeArgCount; }); + } + function getInstantiatedConstructorsForTypeArguments(type, typeArgumentNodes) { + var signatures = getConstructorsForTypeArguments(type, typeArgumentNodes); + if (typeArgumentNodes) { + var typeArguments_1 = ts.map(typeArgumentNodes, getTypeFromTypeNode); + signatures = ts.map(signatures, function (sig) { return getSignatureInstantiation(sig, typeArguments_1); }); + } + return signatures; + } + function getBaseConstructorTypeOfClass(type) { + if (!type.resolvedBaseConstructorType) { + var baseTypeNode = getBaseTypeNodeOfClass(type); + if (!baseTypeNode) { + return type.resolvedBaseConstructorType = undefinedType; + } + if (!pushTypeResolution(type, 1)) { + return unknownType; + } + var baseConstructorType = checkExpression(baseTypeNode.expression); + if (baseConstructorType.flags & 80896) { + resolveStructuredTypeMembers(baseConstructorType); + } + if (!popTypeResolution()) { + error(type.symbol.valueDeclaration, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_base_expression, symbolToString(type.symbol)); + return type.resolvedBaseConstructorType = unknownType; + } + if (baseConstructorType !== unknownType && baseConstructorType !== nullType && !isConstructorType(baseConstructorType)) { + error(baseTypeNode.expression, ts.Diagnostics.Type_0_is_not_a_constructor_function_type, typeToString(baseConstructorType)); + return type.resolvedBaseConstructorType = unknownType; + } + type.resolvedBaseConstructorType = baseConstructorType; + } + return type.resolvedBaseConstructorType; + } + function getBaseTypes(type) { + var isClass = type.symbol.flags & 32; + var isInterface = type.symbol.flags & 64; + if (!type.resolvedBaseTypes) { + if (!isClass && !isInterface) { + ts.Debug.fail("type must be class or interface"); + } + if (isClass) { + resolveBaseTypesOfClass(type); + } + if (isInterface) { + resolveBaseTypesOfInterface(type); + } + } + return type.resolvedBaseTypes; + } + function resolveBaseTypesOfClass(type) { + type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray; + var baseConstructorType = getBaseConstructorTypeOfClass(type); + if (!(baseConstructorType.flags & 80896)) { + return; + } + var baseTypeNode = getBaseTypeNodeOfClass(type); + var baseType; + var originalBaseType = baseConstructorType && baseConstructorType.symbol ? getDeclaredTypeOfSymbol(baseConstructorType.symbol) : undefined; + if (baseConstructorType.symbol && baseConstructorType.symbol.flags & 32 && + areAllOuterTypeParametersApplied(originalBaseType)) { + baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseConstructorType.symbol); + } + else { + var constructors = getInstantiatedConstructorsForTypeArguments(baseConstructorType, baseTypeNode.typeArguments); + if (!constructors.length) { + error(baseTypeNode.expression, ts.Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments); + return; + } + baseType = getReturnTypeOfSignature(constructors[0]); + } + if (baseType === unknownType) { + return; + } + if (!(getTargetType(baseType).flags & (1024 | 2048))) { + error(baseTypeNode.expression, ts.Diagnostics.Base_constructor_return_type_0_is_not_a_class_or_interface_type, typeToString(baseType)); + return; + } + if (type === baseType || hasBaseType(baseType, type)) { + error(type.symbol.valueDeclaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1)); + return; + } + if (type.resolvedBaseTypes === emptyArray) { + type.resolvedBaseTypes = [baseType]; + } + else { + type.resolvedBaseTypes.push(baseType); + } + } + function areAllOuterTypeParametersApplied(type) { + var outerTypeParameters = type.outerTypeParameters; + if (outerTypeParameters) { + var last = outerTypeParameters.length - 1; + var typeArguments = type.typeArguments; + return outerTypeParameters[last].symbol !== typeArguments[last].symbol; + } + return true; + } + function resolveBaseTypesOfInterface(type) { + type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray; + for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) { + var declaration = _a[_i]; + if (declaration.kind === 222 && ts.getInterfaceBaseTypeNodes(declaration)) { + for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) { + var node = _c[_b]; + var baseType = getTypeFromTypeNode(node); + if (baseType !== unknownType) { + if (getTargetType(baseType).flags & (1024 | 2048)) { + if (type !== baseType && !hasBaseType(baseType, type)) { + if (type.resolvedBaseTypes === emptyArray) { + type.resolvedBaseTypes = [baseType]; + } + else { + type.resolvedBaseTypes.push(baseType); + } + } + else { + error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 1)); + } + } + else { + error(node, ts.Diagnostics.An_interface_may_only_extend_a_class_or_another_interface); + } + } + } + } + } + } + function isIndependentInterface(symbol) { + for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { + var declaration = _a[_i]; + if (declaration.kind === 222) { + if (declaration.flags & 16384) { + return false; + } + var baseTypeNodes = ts.getInterfaceBaseTypeNodes(declaration); + if (baseTypeNodes) { + for (var _b = 0, baseTypeNodes_1 = baseTypeNodes; _b < baseTypeNodes_1.length; _b++) { + var node = baseTypeNodes_1[_b]; + if (ts.isSupportedExpressionWithTypeArguments(node)) { + var baseSymbol = resolveEntityName(node.expression, 793056, true); + if (!baseSymbol || !(baseSymbol.flags & 64) || getDeclaredTypeOfClassOrInterface(baseSymbol).thisType) { + return false; + } + } + } + } + } + } + return true; + } + function getDeclaredTypeOfClassOrInterface(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + var kind = symbol.flags & 32 ? 1024 : 2048; + var type = links.declaredType = createObjectType(kind, symbol); + var outerTypeParameters = getOuterTypeParametersOfClassOrInterface(symbol); + var localTypeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); + if (outerTypeParameters || localTypeParameters || kind === 1024 || !isIndependentInterface(symbol)) { + type.flags |= 4096; + type.typeParameters = ts.concatenate(outerTypeParameters, localTypeParameters); + type.outerTypeParameters = outerTypeParameters; + type.localTypeParameters = localTypeParameters; + type.instantiations = {}; + type.instantiations[getTypeListId(type.typeParameters)] = type; + type.target = type; + type.typeArguments = type.typeParameters; + type.thisType = createType(512 | 33554432); + type.thisType.symbol = symbol; + type.thisType.constraint = type; + } + } + return links.declaredType; + } + function getDeclaredTypeOfTypeAlias(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + if (!pushTypeResolution(symbol, 2)) { + return unknownType; + } + var declaration = ts.getDeclarationOfKind(symbol, 223); + var type = getTypeFromTypeNode(declaration.type); + if (popTypeResolution()) { + links.typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); + if (links.typeParameters) { + links.instantiations = {}; + links.instantiations[getTypeListId(links.typeParameters)] = type; + } + } + else { + type = unknownType; + error(declaration.name, ts.Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol)); + } + links.declaredType = type; + } + return links.declaredType; + } + function getDeclaredTypeOfEnum(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + var type = createType(128); + type.symbol = symbol; + links.declaredType = type; + } + return links.declaredType; + } + function getDeclaredTypeOfTypeParameter(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + var type = createType(512); + type.symbol = symbol; + if (!ts.getDeclarationOfKind(symbol, 141).constraint) { + type.constraint = noConstraintType; + } + links.declaredType = type; + } + return links.declaredType; + } + function getDeclaredTypeOfAlias(symbol) { + var links = getSymbolLinks(symbol); + if (!links.declaredType) { + links.declaredType = getDeclaredTypeOfSymbol(resolveAlias(symbol)); + } + return links.declaredType; + } + function getDeclaredTypeOfSymbol(symbol) { + ts.Debug.assert((symbol.flags & 16777216) === 0); + if (symbol.flags & (32 | 64)) { + return getDeclaredTypeOfClassOrInterface(symbol); + } + if (symbol.flags & 524288) { + return getDeclaredTypeOfTypeAlias(symbol); + } + if (symbol.flags & 384) { + return getDeclaredTypeOfEnum(symbol); + } + if (symbol.flags & 262144) { + return getDeclaredTypeOfTypeParameter(symbol); + } + if (symbol.flags & 8388608) { + return getDeclaredTypeOfAlias(symbol); + } + return unknownType; + } + function isIndependentTypeReference(node) { + if (node.typeArguments) { + for (var _i = 0, _a = node.typeArguments; _i < _a.length; _i++) { + var typeNode = _a[_i]; + if (!isIndependentType(typeNode)) { + return false; + } + } + } + return true; + } + function isIndependentType(node) { + switch (node.kind) { + case 117: + case 132: + case 130: + case 120: + case 133: + case 103: + case 135: + case 93: + case 127: + case 166: + return true; + case 160: + return isIndependentType(node.elementType); + case 155: + return isIndependentTypeReference(node); + } + return false; + } + function isIndependentVariableLikeDeclaration(node) { + return node.type && isIndependentType(node.type) || !node.type && !node.initializer; + } + function isIndependentFunctionLikeDeclaration(node) { + if (node.kind !== 148 && (!node.type || !isIndependentType(node.type))) { + return false; + } + for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) { + var parameter = _a[_i]; + if (!isIndependentVariableLikeDeclaration(parameter)) { + return false; + } + } + return true; + } + function isIndependentMember(symbol) { + if (symbol.declarations && symbol.declarations.length === 1) { + var declaration = symbol.declarations[0]; + if (declaration) { + switch (declaration.kind) { + case 145: + case 144: + return isIndependentVariableLikeDeclaration(declaration); + case 147: + case 146: + case 148: + return isIndependentFunctionLikeDeclaration(declaration); + } + } + } + return false; + } + function createSymbolTable(symbols) { + var result = {}; + for (var _i = 0, symbols_1 = symbols; _i < symbols_1.length; _i++) { + var symbol = symbols_1[_i]; + result[symbol.name] = symbol; + } + return result; + } + function createInstantiatedSymbolTable(symbols, mapper, mappingThisOnly) { + var result = {}; + for (var _i = 0, symbols_2 = symbols; _i < symbols_2.length; _i++) { + var symbol = symbols_2[_i]; + result[symbol.name] = mappingThisOnly && isIndependentMember(symbol) ? symbol : instantiateSymbol(symbol, mapper); + } + return result; + } + function addInheritedMembers(symbols, baseSymbols) { + for (var _i = 0, baseSymbols_1 = baseSymbols; _i < baseSymbols_1.length; _i++) { + var s = baseSymbols_1[_i]; + if (!ts.hasProperty(symbols, s.name)) { + symbols[s.name] = s; + } + } + } + function resolveDeclaredMembers(type) { + if (!type.declaredProperties) { + var symbol = type.symbol; + type.declaredProperties = getNamedMembers(symbol.members); + type.declaredCallSignatures = getSignaturesOfSymbol(symbol.members["__call"]); + type.declaredConstructSignatures = getSignaturesOfSymbol(symbol.members["__new"]); + type.declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, 0); + type.declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, 1); + } + return type; + } + function getTypeWithThisArgument(type, thisArgument) { + if (type.flags & 4096) { + return createTypeReference(type.target, ts.concatenate(type.typeArguments, [thisArgument || type.target.thisType])); + } + return type; + } + function resolveObjectTypeMembers(type, source, typeParameters, typeArguments) { + var mapper = identityMapper; + var members = source.symbol.members; + var callSignatures = source.declaredCallSignatures; + var constructSignatures = source.declaredConstructSignatures; + var stringIndexInfo = source.declaredStringIndexInfo; + var numberIndexInfo = source.declaredNumberIndexInfo; + if (!ts.rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) { + mapper = createTypeMapper(typeParameters, typeArguments); + members = createInstantiatedSymbolTable(source.declaredProperties, mapper, typeParameters.length === 1); + callSignatures = instantiateList(source.declaredCallSignatures, mapper, instantiateSignature); + constructSignatures = instantiateList(source.declaredConstructSignatures, mapper, instantiateSignature); + stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper); + numberIndexInfo = instantiateIndexInfo(source.declaredNumberIndexInfo, mapper); + } + var baseTypes = getBaseTypes(source); + if (baseTypes.length) { + if (members === source.symbol.members) { + members = createSymbolTable(source.declaredProperties); + } + var thisArgument = ts.lastOrUndefined(typeArguments); + for (var _i = 0, baseTypes_1 = baseTypes; _i < baseTypes_1.length; _i++) { + var baseType = baseTypes_1[_i]; + var instantiatedBaseType = thisArgument ? getTypeWithThisArgument(instantiateType(baseType, mapper), thisArgument) : baseType; + addInheritedMembers(members, getPropertiesOfObjectType(instantiatedBaseType)); + callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0)); + constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1)); + stringIndexInfo = stringIndexInfo || getIndexInfoOfType(instantiatedBaseType, 0); + numberIndexInfo = numberIndexInfo || getIndexInfoOfType(instantiatedBaseType, 1); + } + } + setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); + } + function resolveClassOrInterfaceMembers(type) { + resolveObjectTypeMembers(type, resolveDeclaredMembers(type), emptyArray, emptyArray); + } + function resolveTypeReferenceMembers(type) { + var source = resolveDeclaredMembers(type.target); + var typeParameters = ts.concatenate(source.typeParameters, [source.thisType]); + var typeArguments = type.typeArguments && type.typeArguments.length === typeParameters.length ? + type.typeArguments : ts.concatenate(type.typeArguments, [type]); + resolveObjectTypeMembers(type, source, typeParameters, typeArguments); + } + function createSignature(declaration, typeParameters, thisType, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasStringLiterals) { + var sig = new Signature(checker); + sig.declaration = declaration; + sig.typeParameters = typeParameters; + sig.parameters = parameters; + sig.thisType = thisType; + sig.resolvedReturnType = resolvedReturnType; + sig.typePredicate = typePredicate; + sig.minArgumentCount = minArgumentCount; + sig.hasRestParameter = hasRestParameter; + sig.hasStringLiterals = hasStringLiterals; + return sig; + } + function cloneSignature(sig) { + return createSignature(sig.declaration, sig.typeParameters, sig.thisType, sig.parameters, sig.resolvedReturnType, sig.typePredicate, sig.minArgumentCount, sig.hasRestParameter, sig.hasStringLiterals); + } + function getDefaultConstructSignatures(classType) { + var baseConstructorType = getBaseConstructorTypeOfClass(classType); + var baseSignatures = getSignaturesOfType(baseConstructorType, 1); + if (baseSignatures.length === 0) { + return [createSignature(undefined, classType.localTypeParameters, undefined, emptyArray, classType, undefined, 0, false, false)]; + } + var baseTypeNode = getBaseTypeNodeOfClass(classType); + var typeArguments = ts.map(baseTypeNode.typeArguments, getTypeFromTypeNode); + var typeArgCount = typeArguments ? typeArguments.length : 0; + var result = []; + for (var _i = 0, baseSignatures_1 = baseSignatures; _i < baseSignatures_1.length; _i++) { + var baseSig = baseSignatures_1[_i]; + var typeParamCount = baseSig.typeParameters ? baseSig.typeParameters.length : 0; + if (typeParamCount === typeArgCount) { + var sig = typeParamCount ? getSignatureInstantiation(baseSig, typeArguments) : cloneSignature(baseSig); + sig.typeParameters = classType.localTypeParameters; + sig.resolvedReturnType = classType; + result.push(sig); + } + } + return result; + } + function createTupleTypeMemberSymbols(memberTypes) { + var members = {}; + for (var i = 0; i < memberTypes.length; i++) { + var symbol = createSymbol(4 | 67108864, "" + i); + symbol.type = memberTypes[i]; + members[i] = symbol; + } + return members; + } + function resolveTupleTypeMembers(type) { + var arrayElementType = getUnionType(type.elementTypes, true); + var arrayType = resolveStructuredTypeMembers(createTypeFromGenericGlobalType(globalArrayType, [arrayElementType, type])); + var members = createTupleTypeMemberSymbols(type.elementTypes); + addInheritedMembers(members, arrayType.properties); + setObjectTypeMembers(type, members, arrayType.callSignatures, arrayType.constructSignatures, arrayType.stringIndexInfo, arrayType.numberIndexInfo); + } + function findMatchingSignature(signatureList, signature, partialMatch, ignoreThisTypes, ignoreReturnTypes) { + for (var _i = 0, signatureList_1 = signatureList; _i < signatureList_1.length; _i++) { + var s = signatureList_1[_i]; + if (compareSignaturesIdentical(s, signature, partialMatch, ignoreThisTypes, ignoreReturnTypes, compareTypesIdentical)) { + return s; + } + } + } + function findMatchingSignatures(signatureLists, signature, listIndex) { + if (signature.typeParameters) { + if (listIndex > 0) { + return undefined; + } + for (var i = 1; i < signatureLists.length; i++) { + if (!findMatchingSignature(signatureLists[i], signature, false, false, false)) { + return undefined; + } + } + return [signature]; + } + var result = undefined; + for (var i = 0; i < signatureLists.length; i++) { + var match = i === listIndex ? signature : findMatchingSignature(signatureLists[i], signature, true, true, true); + if (!match) { + return undefined; + } + if (!ts.contains(result, match)) { + (result || (result = [])).push(match); + } + } + return result; + } + function getUnionSignatures(types, kind) { + var signatureLists = ts.map(types, function (t) { return getSignaturesOfType(t, kind); }); + var result = undefined; + for (var i = 0; i < signatureLists.length; i++) { + for (var _i = 0, _a = signatureLists[i]; _i < _a.length; _i++) { + var signature = _a[_i]; + if (!result || !findMatchingSignature(result, signature, false, true, true)) { + var unionSignatures = findMatchingSignatures(signatureLists, signature, i); + if (unionSignatures) { + var s = signature; + if (unionSignatures.length > 1) { + s = cloneSignature(signature); + if (ts.forEach(unionSignatures, function (sig) { return sig.thisType; })) { + s.thisType = getUnionType(ts.map(unionSignatures, function (sig) { return sig.thisType || anyType; })); + } + s.resolvedReturnType = undefined; + s.unionSignatures = unionSignatures; + } + (result || (result = [])).push(s); + } + } + } + } + return result || emptyArray; + } + function getUnionIndexInfo(types, kind) { + var indexTypes = []; + var isAnyReadonly = false; + for (var _i = 0, types_1 = types; _i < types_1.length; _i++) { + var type = types_1[_i]; + var indexInfo = getIndexInfoOfType(type, kind); + if (!indexInfo) { + return undefined; + } + indexTypes.push(indexInfo.type); + isAnyReadonly = isAnyReadonly || indexInfo.isReadonly; + } + return createIndexInfo(getUnionType(indexTypes), isAnyReadonly); + } + function resolveUnionTypeMembers(type) { + var callSignatures = getUnionSignatures(type.types, 0); + var constructSignatures = getUnionSignatures(type.types, 1); + var stringIndexInfo = getUnionIndexInfo(type.types, 0); + var numberIndexInfo = getUnionIndexInfo(type.types, 1); + setObjectTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); + } + function intersectTypes(type1, type2) { + return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]); + } + function intersectIndexInfos(info1, info2) { + return !info1 ? info2 : !info2 ? info1 : createIndexInfo(getIntersectionType([info1.type, info2.type]), info1.isReadonly && info2.isReadonly); + } + function resolveIntersectionTypeMembers(type) { + var callSignatures = emptyArray; + var constructSignatures = emptyArray; + var stringIndexInfo = undefined; + var numberIndexInfo = undefined; + for (var _i = 0, _a = type.types; _i < _a.length; _i++) { + var t = _a[_i]; + callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(t, 0)); + constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(t, 1)); + stringIndexInfo = intersectIndexInfos(stringIndexInfo, getIndexInfoOfType(t, 0)); + numberIndexInfo = intersectIndexInfos(numberIndexInfo, getIndexInfoOfType(t, 1)); + } + setObjectTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); + } + function resolveAnonymousTypeMembers(type) { + var symbol = type.symbol; + if (type.target) { + var members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, false); + var callSignatures = instantiateList(getSignaturesOfType(type.target, 0), type.mapper, instantiateSignature); + var constructSignatures = instantiateList(getSignaturesOfType(type.target, 1), type.mapper, instantiateSignature); + var stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 0), type.mapper); + var numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 1), type.mapper); + setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); + } + else if (symbol.flags & 2048) { + var members = symbol.members; + var callSignatures = getSignaturesOfSymbol(members["__call"]); + var constructSignatures = getSignaturesOfSymbol(members["__new"]); + var stringIndexInfo = getIndexInfoOfSymbol(symbol, 0); + var numberIndexInfo = getIndexInfoOfSymbol(symbol, 1); + setObjectTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo); + } + else { + var members = emptySymbols; + var constructSignatures = emptyArray; + if (symbol.flags & 1952) { + members = getExportsOfSymbol(symbol); + } + if (symbol.flags & 32) { + var classType = getDeclaredTypeOfClassOrInterface(symbol); + constructSignatures = getSignaturesOfSymbol(symbol.members["__constructor"]); + if (!constructSignatures.length) { + constructSignatures = getDefaultConstructSignatures(classType); + } + var baseConstructorType = getBaseConstructorTypeOfClass(classType); + if (baseConstructorType.flags & 80896) { + members = createSymbolTable(getNamedMembers(members)); + addInheritedMembers(members, getPropertiesOfObjectType(baseConstructorType)); + } + } + var numberIndexInfo = symbol.flags & 384 ? enumNumberIndexInfo : undefined; + setObjectTypeMembers(type, members, emptyArray, constructSignatures, undefined, numberIndexInfo); + if (symbol.flags & (16 | 8192)) { + type.callSignatures = getSignaturesOfSymbol(symbol); + } + } + } + function resolveStructuredTypeMembers(type) { + if (!type.members) { + if (type.flags & 4096) { + resolveTypeReferenceMembers(type); + } + else if (type.flags & (1024 | 2048)) { + resolveClassOrInterfaceMembers(type); + } + else if (type.flags & 65536) { + resolveAnonymousTypeMembers(type); + } + else if (type.flags & 8192) { + resolveTupleTypeMembers(type); + } + else if (type.flags & 16384) { + resolveUnionTypeMembers(type); + } + else if (type.flags & 32768) { + resolveIntersectionTypeMembers(type); + } + } + return type; + } + function getPropertiesOfObjectType(type) { + if (type.flags & 80896) { + return resolveStructuredTypeMembers(type).properties; + } + return emptyArray; + } + function getPropertyOfObjectType(type, name) { + if (type.flags & 80896) { + var resolved = resolveStructuredTypeMembers(type); + if (ts.hasProperty(resolved.members, name)) { + var symbol = resolved.members[name]; + if (symbolIsValue(symbol)) { + return symbol; + } + } + } + } + function getPropertiesOfUnionOrIntersectionType(type) { + for (var _i = 0, _a = type.types; _i < _a.length; _i++) { + var current = _a[_i]; + for (var _b = 0, _c = getPropertiesOfType(current); _b < _c.length; _b++) { + var prop = _c[_b]; + getPropertyOfUnionOrIntersectionType(type, prop.name); + } + if (type.flags & 16384) { + break; + } + } + return type.resolvedProperties ? symbolsToArray(type.resolvedProperties) : emptyArray; + } + function getPropertiesOfType(type) { + type = getApparentType(type); + return type.flags & 49152 ? getPropertiesOfUnionOrIntersectionType(type) : getPropertiesOfObjectType(type); + } + function getApparentTypeOfTypeParameter(type) { + if (!type.resolvedApparentType) { + var constraintType = getConstraintOfTypeParameter(type); + while (constraintType && constraintType.flags & 512) { + constraintType = getConstraintOfTypeParameter(constraintType); + } + type.resolvedApparentType = getTypeWithThisArgument(constraintType || emptyObjectType, type); + } + return type.resolvedApparentType; + } + function getApparentType(type) { + if (type.flags & 512) { + type = getApparentTypeOfTypeParameter(type); + } + if (type.flags & 258) { + type = globalStringType; + } + else if (type.flags & 132) { + type = globalNumberType; + } + else if (type.flags & 8) { + type = globalBooleanType; + } + else if (type.flags & 16777216) { + type = getGlobalESSymbolType(); + } + return type; + } + function createUnionOrIntersectionProperty(containingType, name) { + var types = containingType.types; + var props; + var commonFlags = (containingType.flags & 32768) ? 536870912 : 0; + for (var _i = 0, types_2 = types; _i < types_2.length; _i++) { + var current = types_2[_i]; + var type = getApparentType(current); + if (type !== unknownType) { + var prop = getPropertyOfType(type, name); + if (prop && !(getDeclarationFlagsFromSymbol(prop) & (8 | 16))) { + commonFlags &= prop.flags; + if (!props) { + props = [prop]; + } + else if (!ts.contains(props, prop)) { + props.push(prop); + } + } + else if (containingType.flags & 16384) { + return undefined; + } + } + } + if (!props) { + return undefined; + } + if (props.length === 1) { + return props[0]; + } + var propTypes = []; + var declarations = []; + for (var _a = 0, props_1 = props; _a < props_1.length; _a++) { + var prop = props_1[_a]; + if (prop.declarations) { + ts.addRange(declarations, prop.declarations); + } + propTypes.push(getTypeOfSymbol(prop)); + } + var result = createSymbol(4 | + 67108864 | + 268435456 | + commonFlags, name); + result.containingType = containingType; + result.declarations = declarations; + result.type = containingType.flags & 16384 ? getUnionType(propTypes) : getIntersectionType(propTypes); + return result; + } + function getPropertyOfUnionOrIntersectionType(type, name) { + var properties = type.resolvedProperties || (type.resolvedProperties = {}); + if (ts.hasProperty(properties, name)) { + return properties[name]; + } + var property = createUnionOrIntersectionProperty(type, name); + if (property) { + properties[name] = property; + } + return property; + } + function getPropertyOfType(type, name) { + type = getApparentType(type); + if (type.flags & 80896) { + var resolved = resolveStructuredTypeMembers(type); + if (ts.hasProperty(resolved.members, name)) { + var symbol = resolved.members[name]; + if (symbolIsValue(symbol)) { + return symbol; + } + } + if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) { + var symbol = getPropertyOfObjectType(globalFunctionType, name); + if (symbol) { + return symbol; + } + } + return getPropertyOfObjectType(globalObjectType, name); + } + if (type.flags & 49152) { + return getPropertyOfUnionOrIntersectionType(type, name); + } + return undefined; + } + function getSignaturesOfStructuredType(type, kind) { + if (type.flags & 130048) { + var resolved = resolveStructuredTypeMembers(type); + return kind === 0 ? resolved.callSignatures : resolved.constructSignatures; + } + return emptyArray; + } + function getSignaturesOfType(type, kind) { + return getSignaturesOfStructuredType(getApparentType(type), kind); + } + function getIndexInfoOfStructuredType(type, kind) { + if (type.flags & 130048) { + var resolved = resolveStructuredTypeMembers(type); + return kind === 0 ? resolved.stringIndexInfo : resolved.numberIndexInfo; + } + } + function getIndexTypeOfStructuredType(type, kind) { + var info = getIndexInfoOfStructuredType(type, kind); + return info && info.type; + } + function getIndexInfoOfType(type, kind) { + return getIndexInfoOfStructuredType(getApparentType(type), kind); + } + function getIndexTypeOfType(type, kind) { + return getIndexTypeOfStructuredType(getApparentType(type), kind); + } + function getImplicitIndexTypeOfType(type, kind) { + if (isObjectLiteralType(type)) { + var propTypes = []; + for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) { + var prop = _a[_i]; + if (kind === 0 || isNumericLiteralName(prop.name)) { + propTypes.push(getTypeOfSymbol(prop)); + } + } + if (propTypes.length) { + return getUnionType(propTypes); + } + } + return undefined; + } + function getTypeParametersFromJSDocTemplate(declaration) { + if (declaration.flags & 134217728) { + var templateTag = ts.getJSDocTemplateTag(declaration); + if (templateTag) { + return getTypeParametersFromDeclaration(templateTag.typeParameters); + } + } + return undefined; + } + function getTypeParametersFromDeclaration(typeParameterDeclarations) { + var result = []; + ts.forEach(typeParameterDeclarations, function (node) { + var tp = getDeclaredTypeOfTypeParameter(node.symbol); + if (!ts.contains(result, tp)) { + result.push(tp); + } + }); + return result; + } + function symbolsToArray(symbols) { + var result = []; + for (var id in symbols) { + if (!isReservedMemberName(id)) { + result.push(symbols[id]); + } + } + return result; + } + function isOptionalParameter(node) { + if (node.flags & 134217728) { + if (node.type && node.type.kind === 268) { + return true; + } + var paramTag = ts.getCorrespondingJSDocParameterTag(node); + if (paramTag) { + if (paramTag.isBracketed) { + return true; + } + if (paramTag.typeExpression) { + return paramTag.typeExpression.type.kind === 268; + } + } + } + if (ts.hasQuestionToken(node)) { + return true; + } + if (node.initializer) { + var signatureDeclaration = node.parent; + var signature = getSignatureFromDeclaration(signatureDeclaration); + var parameterIndex = ts.indexOf(signatureDeclaration.parameters, node); + ts.Debug.assert(parameterIndex >= 0); + return parameterIndex >= signature.minArgumentCount; + } + return false; + } + function createTypePredicateFromTypePredicateNode(node) { + if (node.parameterName.kind === 69) { + var parameterName = node.parameterName; + return { + kind: 1, + parameterName: parameterName ? parameterName.text : undefined, + parameterIndex: parameterName ? getTypePredicateParameterIndex(node.parent.parameters, parameterName) : undefined, + type: getTypeFromTypeNode(node.type) + }; + } + else { + return { + kind: 0, + type: getTypeFromTypeNode(node.type) + }; + } + } + function getSignatureFromDeclaration(declaration) { + var links = getNodeLinks(declaration); + if (!links.resolvedSignature) { + var parameters = []; + var hasStringLiterals = false; + var minArgumentCount = -1; + var thisType = undefined; + var hasThisParameter = void 0; + var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); + for (var i = isJSConstructSignature ? 1 : 0, n = declaration.parameters.length; i < n; i++) { + var param = declaration.parameters[i]; + var paramSymbol = param.symbol; + if (paramSymbol && !!(paramSymbol.flags & 4) && !ts.isBindingPattern(param.name)) { + var resolvedSymbol = resolveName(param, paramSymbol.name, 107455, undefined, undefined); + paramSymbol = resolvedSymbol; + } + if (i === 0 && paramSymbol.name === "this") { + hasThisParameter = true; + thisType = param.type ? getTypeFromTypeNode(param.type) : unknownType; + } + else { + parameters.push(paramSymbol); + } + if (param.type && param.type.kind === 166) { + hasStringLiterals = true; + } + if (param.initializer || param.questionToken || param.dotDotDotToken) { + if (minArgumentCount < 0) { + minArgumentCount = i - (hasThisParameter ? 1 : 0); + } + } + else { + minArgumentCount = -1; + } + } + if ((declaration.kind === 149 || declaration.kind === 150) && + !ts.hasDynamicName(declaration) && + (!hasThisParameter || thisType === unknownType)) { + var otherKind = declaration.kind === 149 ? 150 : 149; + var setter = ts.getDeclarationOfKind(declaration.symbol, otherKind); + thisType = getAnnotatedAccessorThisType(setter); + } + if (minArgumentCount < 0) { + minArgumentCount = declaration.parameters.length - (hasThisParameter ? 1 : 0); + } + if (isJSConstructSignature) { + minArgumentCount--; + } + var classType = declaration.kind === 148 ? + getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol)) + : undefined; + var typeParameters = classType ? classType.localTypeParameters : + declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : + getTypeParametersFromJSDocTemplate(declaration); + var returnType = getSignatureReturnTypeFromDeclaration(declaration, minArgumentCount, isJSConstructSignature, classType); + var typePredicate = declaration.type && declaration.type.kind === 154 ? + createTypePredicateFromTypePredicateNode(declaration.type) : + undefined; + links.resolvedSignature = createSignature(declaration, typeParameters, thisType, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); + } + return links.resolvedSignature; + } + function getSignatureReturnTypeFromDeclaration(declaration, minArgumentCount, isJSConstructSignature, classType) { + if (isJSConstructSignature) { + return getTypeFromTypeNode(declaration.parameters[0].type); + } + else if (classType) { + return classType; + } + else if (declaration.type) { + return getTypeFromTypeNode(declaration.type); + } + if (declaration.flags & 134217728) { + var type = getReturnTypeFromJSDocComment(declaration); + if (type && type !== unknownType) { + return type; + } + } + if (declaration.kind === 149 && !ts.hasDynamicName(declaration)) { + var setter = ts.getDeclarationOfKind(declaration.symbol, 150); + return getAnnotatedAccessorType(setter); + } + if (ts.nodeIsMissing(declaration.body)) { + return anyType; + } + } + function getSignaturesOfSymbol(symbol) { + if (!symbol) + return emptyArray; + var result = []; + for (var i = 0, len = symbol.declarations.length; i < len; i++) { + var node = symbol.declarations[i]; + switch (node.kind) { + case 156: + case 157: + case 220: + case 147: + case 146: + case 148: + case 151: + case 152: + case 153: + case 149: + case 150: + case 179: + case 180: + case 269: + if (i > 0 && node.body) { + var previous = symbol.declarations[i - 1]; + if (node.parent === previous.parent && node.kind === previous.kind && node.pos === previous.end) { + break; + } + } + result.push(getSignatureFromDeclaration(node)); + } + } + return result; + } + function resolveExternalModuleTypeByLiteral(name) { + var moduleSym = resolveExternalModuleName(name, name); + if (moduleSym) { + var resolvedModuleSymbol = resolveExternalModuleSymbol(moduleSym); + if (resolvedModuleSymbol) { + return getTypeOfSymbol(resolvedModuleSymbol); + } + } + return anyType; + } + function getReturnTypeOfSignature(signature) { + if (!signature.resolvedReturnType) { + if (!pushTypeResolution(signature, 3)) { + return unknownType; + } + var type = void 0; + if (signature.target) { + type = instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper); + } + else if (signature.unionSignatures) { + type = getUnionType(ts.map(signature.unionSignatures, getReturnTypeOfSignature)); + } + else { + type = getReturnTypeFromBody(signature.declaration); + } + if (!popTypeResolution()) { + type = anyType; + if (compilerOptions.noImplicitAny) { + var declaration = signature.declaration; + if (declaration.name) { + error(declaration.name, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, ts.declarationNameToString(declaration.name)); + } + else { + error(declaration, ts.Diagnostics.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions); + } + } + } + signature.resolvedReturnType = type; + } + return signature.resolvedReturnType; + } + function getRestTypeOfSignature(signature) { + if (signature.hasRestParameter) { + var type = getTypeOfSymbol(ts.lastOrUndefined(signature.parameters)); + if (type.flags & 4096 && type.target === globalArrayType) { + return type.typeArguments[0]; + } + } + return anyType; + } + function getSignatureInstantiation(signature, typeArguments) { + return instantiateSignature(signature, createTypeMapper(signature.typeParameters, typeArguments), true); + } + function getErasedSignature(signature) { + if (!signature.typeParameters) + return signature; + if (!signature.erasedSignatureCache) { + signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), true); + } + return signature.erasedSignatureCache; + } + function getOrCreateTypeFromSignature(signature) { + if (!signature.isolatedSignatureType) { + var isConstructor = signature.declaration.kind === 148 || signature.declaration.kind === 152; + var type = createObjectType(65536 | 262144); + type.members = emptySymbols; + type.properties = emptyArray; + type.callSignatures = !isConstructor ? [signature] : emptyArray; + type.constructSignatures = isConstructor ? [signature] : emptyArray; + signature.isolatedSignatureType = type; + } + return signature.isolatedSignatureType; + } + function getIndexSymbol(symbol) { + return symbol.members["__index"]; + } + function getIndexDeclarationOfSymbol(symbol, kind) { + var syntaxKind = kind === 1 ? 130 : 132; + var indexSymbol = getIndexSymbol(symbol); + if (indexSymbol) { + for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) { + var decl = _a[_i]; + var node = decl; + if (node.parameters.length === 1) { + var parameter = node.parameters[0]; + if (parameter && parameter.type && parameter.type.kind === syntaxKind) { + return node; + } + } + } + } + return undefined; + } + function createIndexInfo(type, isReadonly, declaration) { + return { type: type, isReadonly: isReadonly, declaration: declaration }; + } + function getIndexInfoOfSymbol(symbol, kind) { + var declaration = getIndexDeclarationOfSymbol(symbol, kind); + if (declaration) { + return createIndexInfo(declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, (declaration.flags & 64) !== 0, declaration); + } + return undefined; + } + function getConstraintDeclaration(type) { + return ts.getDeclarationOfKind(type.symbol, 141).constraint; + } + function hasConstraintReferenceTo(type, target) { + var checked; + while (type && !(type.flags & 33554432) && type.flags & 512 && !ts.contains(checked, type)) { + if (type === target) { + return true; + } + (checked || (checked = [])).push(type); + var constraintDeclaration = getConstraintDeclaration(type); + type = constraintDeclaration && getTypeFromTypeNode(constraintDeclaration); + } + return false; + } + function getConstraintOfTypeParameter(typeParameter) { + if (!typeParameter.constraint) { + if (typeParameter.target) { + var targetConstraint = getConstraintOfTypeParameter(typeParameter.target); + typeParameter.constraint = targetConstraint ? instantiateType(targetConstraint, typeParameter.mapper) : noConstraintType; + } + else { + var constraintDeclaration = getConstraintDeclaration(typeParameter); + var constraint = getTypeFromTypeNode(constraintDeclaration); + if (hasConstraintReferenceTo(constraint, typeParameter)) { + error(constraintDeclaration, ts.Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(typeParameter)); + constraint = unknownType; + } + typeParameter.constraint = constraint; + } + } + return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint; + } + function getParentSymbolOfTypeParameter(typeParameter) { + return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 141).parent); + } + function getTypeListId(types) { + if (types) { + switch (types.length) { + case 1: + return "" + types[0].id; + case 2: + return types[0].id + "," + types[1].id; + default: + var result = ""; + for (var i = 0; i < types.length; i++) { + if (i > 0) { + result += ","; + } + result += types[i].id; + } + return result; + } + } + return ""; + } + function getPropagatingFlagsOfTypes(types, excludeKinds) { + var result = 0; + for (var _i = 0, types_3 = types; _i < types_3.length; _i++) { + var type = types_3[_i]; + if (!(type.flags & excludeKinds)) { + result |= type.flags; + } + } + return result & 14680064; + } + function createTypeReference(target, typeArguments) { + var id = getTypeListId(typeArguments); + var type = target.instantiations[id]; + if (!type) { + var propagatedFlags = typeArguments ? getPropagatingFlagsOfTypes(typeArguments, 0) : 0; + var flags = 4096 | propagatedFlags; + type = target.instantiations[id] = createObjectType(flags, target.symbol); + type.target = target; + type.typeArguments = typeArguments; + } + return type; + } + function getTypeFromClassOrInterfaceReference(node, symbol) { + var type = getDeclaredTypeOfSymbol(getMergedSymbol(symbol)); + var typeParameters = type.localTypeParameters; + if (typeParameters) { + if (!node.typeArguments || node.typeArguments.length !== typeParameters.length) { + error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, undefined, 1), typeParameters.length); + return unknownType; + } + return createTypeReference(type, ts.concatenate(type.outerTypeParameters, ts.map(node.typeArguments, getTypeFromTypeNode))); + } + if (node.typeArguments) { + error(node, ts.Diagnostics.Type_0_is_not_generic, typeToString(type)); + return unknownType; + } + return type; + } + function getTypeFromTypeAliasReference(node, symbol) { + var type = getDeclaredTypeOfSymbol(symbol); + var links = getSymbolLinks(symbol); + var typeParameters = links.typeParameters; + if (typeParameters) { + if (!node.typeArguments || node.typeArguments.length !== typeParameters.length) { + error(node, ts.Diagnostics.Generic_type_0_requires_1_type_argument_s, symbolToString(symbol), typeParameters.length); + return unknownType; + } + var typeArguments = ts.map(node.typeArguments, getTypeFromTypeNode); + var id = getTypeListId(typeArguments); + return links.instantiations[id] || (links.instantiations[id] = instantiateType(type, createTypeMapper(typeParameters, typeArguments))); + } + if (node.typeArguments) { + error(node, ts.Diagnostics.Type_0_is_not_generic, symbolToString(symbol)); + return unknownType; + } + return type; + } + function getTypeFromNonGenericTypeReference(node, symbol) { + if (node.typeArguments) { + error(node, ts.Diagnostics.Type_0_is_not_generic, symbolToString(symbol)); + return unknownType; + } + return getDeclaredTypeOfSymbol(symbol); + } + function getTypeReferenceName(node) { + switch (node.kind) { + case 155: + return node.typeName; + case 267: + return node.name; + case 194: + if (ts.isSupportedExpressionWithTypeArguments(node)) { + return node.expression; + } + } + return undefined; + } + function resolveTypeReferenceName(node, typeReferenceName) { + if (!typeReferenceName) { + return unknownSymbol; + } + return resolveEntityName(typeReferenceName, 793056) || unknownSymbol; + } + function getTypeReferenceType(node, symbol) { + if (symbol === unknownSymbol) { + return unknownType; + } + if (symbol.flags & (32 | 64)) { + return getTypeFromClassOrInterfaceReference(node, symbol); + } + if (symbol.flags & 524288) { + return getTypeFromTypeAliasReference(node, symbol); + } + if (symbol.flags & 107455 && node.kind === 267) { + return getTypeOfSymbol(symbol); + } + return getTypeFromNonGenericTypeReference(node, symbol); + } + function getTypeFromTypeReference(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + var symbol = void 0; + var type = void 0; + if (node.kind === 267) { + var typeReferenceName = getTypeReferenceName(node); + symbol = resolveTypeReferenceName(node, typeReferenceName); + type = getTypeReferenceType(node, symbol); + links.resolvedSymbol = symbol; + links.resolvedType = type; + } + else { + var typeNameOrExpression = node.kind === 155 ? node.typeName : + ts.isSupportedExpressionWithTypeArguments(node) ? node.expression : + undefined; + symbol = typeNameOrExpression && resolveEntityName(typeNameOrExpression, 793056) || unknownSymbol; + type = symbol === unknownSymbol ? unknownType : + symbol.flags & (32 | 64) ? getTypeFromClassOrInterfaceReference(node, symbol) : + symbol.flags & 524288 ? getTypeFromTypeAliasReference(node, symbol) : + getTypeFromNonGenericTypeReference(node, symbol); + } + links.resolvedSymbol = symbol; + links.resolvedType = type; + } + return links.resolvedType; + } + function getTypeFromTypeQueryNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getWidenedType(checkExpression(node.exprName)); + } + return links.resolvedType; + } + function getTypeOfGlobalSymbol(symbol, arity) { + function getTypeDeclaration(symbol) { + var declarations = symbol.declarations; + for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) { + var declaration = declarations_3[_i]; + switch (declaration.kind) { + case 221: + case 222: + case 224: + return declaration; + } + } + } + if (!symbol) { + return arity ? emptyGenericType : emptyObjectType; + } + var type = getDeclaredTypeOfSymbol(symbol); + if (!(type.flags & 80896)) { + error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbol.name); + return arity ? emptyGenericType : emptyObjectType; + } + if ((type.typeParameters ? type.typeParameters.length : 0) !== arity) { + error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, symbol.name, arity); + return arity ? emptyGenericType : emptyObjectType; + } + return type; + } + function getGlobalValueSymbol(name) { + return getGlobalSymbol(name, 107455, ts.Diagnostics.Cannot_find_global_value_0); + } + function getGlobalTypeSymbol(name) { + return getGlobalSymbol(name, 793056, ts.Diagnostics.Cannot_find_global_type_0); + } + function getGlobalSymbol(name, meaning, diagnostic) { + return resolveName(undefined, name, meaning, diagnostic, name); + } + function getGlobalType(name, arity) { + if (arity === void 0) { arity = 0; } + return getTypeOfGlobalSymbol(getGlobalTypeSymbol(name), arity); + } + function getExportedTypeFromNamespace(namespace, name) { + var namespaceSymbol = getGlobalSymbol(namespace, 1536, undefined); + var typeSymbol = namespaceSymbol && getSymbol(namespaceSymbol.exports, name, 793056); + return typeSymbol && getDeclaredTypeOfSymbol(typeSymbol); + } + function createTypedPropertyDescriptorType(propertyType) { + var globalTypedPropertyDescriptorType = getGlobalTypedPropertyDescriptorType(); + return globalTypedPropertyDescriptorType !== emptyGenericType + ? createTypeReference(globalTypedPropertyDescriptorType, [propertyType]) + : emptyObjectType; + } + function createTypeFromGenericGlobalType(genericGlobalType, typeArguments) { + return genericGlobalType !== emptyGenericType ? createTypeReference(genericGlobalType, typeArguments) : emptyObjectType; + } + function createIterableType(elementType) { + return createTypeFromGenericGlobalType(getGlobalIterableType(), [elementType]); + } + function createIterableIteratorType(elementType) { + return createTypeFromGenericGlobalType(getGlobalIterableIteratorType(), [elementType]); + } + function createArrayType(elementType) { + return createTypeFromGenericGlobalType(globalArrayType, [elementType]); + } + function getTypeFromArrayTypeNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = createArrayType(getTypeFromTypeNode(node.elementType)); + } + return links.resolvedType; + } + function createTupleType(elementTypes) { + var id = getTypeListId(elementTypes); + return tupleTypes[id] || (tupleTypes[id] = createNewTupleType(elementTypes)); + } + function createNewTupleType(elementTypes) { + var propagatedFlags = getPropagatingFlagsOfTypes(elementTypes, 0); + var type = createObjectType(8192 | propagatedFlags); + type.elementTypes = elementTypes; + return type; + } + function getTypeFromTupleTypeNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = createTupleType(ts.map(node.elementTypes, getTypeFromTypeNode)); + } + return links.resolvedType; + } + function addTypeToSet(typeSet, type, typeSetKind) { + if (type.flags & typeSetKind) { + addTypesToSet(typeSet, type.types, typeSetKind); + } + else if (type.flags & (1 | 32 | 64)) { + if (type.flags & 1) + typeSet.containsAny = true; + if (type.flags & 32) + typeSet.containsUndefined = true; + if (type.flags & 64) + typeSet.containsNull = true; + } + else if (type !== neverType && !ts.contains(typeSet, type)) { + typeSet.push(type); + } + } + function addTypesToSet(typeSet, types, typeSetKind) { + for (var _i = 0, types_4 = types; _i < types_4.length; _i++) { + var type = types_4[_i]; + addTypeToSet(typeSet, type, typeSetKind); + } + } + function isSubtypeOfAny(candidate, types) { + for (var i = 0, len = types.length; i < len; i++) { + if (candidate !== types[i] && isTypeSubtypeOf(candidate, types[i])) { + return true; + } + } + return false; + } + function removeSubtypes(types) { + var i = types.length; + while (i > 0) { + i--; + if (isSubtypeOfAny(types[i], types)) { + types.splice(i, 1); + } + } + } + function getUnionType(types, noSubtypeReduction) { + if (types.length === 0) { + return neverType; + } + if (types.length === 1) { + return types[0]; + } + var typeSet = []; + addTypesToSet(typeSet, types, 16384); + if (typeSet.containsAny) { + return anyType; + } + if (strictNullChecks) { + if (typeSet.containsNull) + typeSet.push(nullType); + if (typeSet.containsUndefined) + typeSet.push(undefinedType); + } + if (!noSubtypeReduction) { + removeSubtypes(typeSet); + } + if (typeSet.length === 0) { + return typeSet.containsNull ? nullType : + typeSet.containsUndefined ? undefinedType : + neverType; + } + else if (typeSet.length === 1) { + return typeSet[0]; + } + var id = getTypeListId(typeSet); + var type = unionTypes[id]; + if (!type) { + var propagatedFlags = getPropagatingFlagsOfTypes(typeSet, 96); + type = unionTypes[id] = createObjectType(16384 | propagatedFlags); + type.types = typeSet; + } + return type; + } + function getTypeFromUnionTypeNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getUnionType(ts.map(node.types, getTypeFromTypeNode), true); + } + return links.resolvedType; + } + function getIntersectionType(types) { + if (types.length === 0) { + return emptyObjectType; + } + var typeSet = []; + addTypesToSet(typeSet, types, 32768); + if (typeSet.containsAny) { + return anyType; + } + if (strictNullChecks) { + if (typeSet.containsNull) + typeSet.push(nullType); + if (typeSet.containsUndefined) + typeSet.push(undefinedType); + } + if (typeSet.length === 1) { + return typeSet[0]; + } + var id = getTypeListId(typeSet); + var type = intersectionTypes[id]; + if (!type) { + var propagatedFlags = getPropagatingFlagsOfTypes(typeSet, 96); + type = intersectionTypes[id] = createObjectType(32768 | propagatedFlags); + type.types = typeSet; + } + return type; + } + function getTypeFromIntersectionTypeNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getIntersectionType(ts.map(node.types, getTypeFromTypeNode)); + } + return links.resolvedType; + } + function getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = createObjectType(65536, node.symbol); + } + return links.resolvedType; + } + function getStringLiteralTypeForText(text) { + if (ts.hasProperty(stringLiteralTypes, text)) { + return stringLiteralTypes[text]; + } + var type = stringLiteralTypes[text] = createType(256); + type.text = text; + return type; + } + function getTypeFromStringLiteralTypeNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getStringLiteralTypeForText(ts.unescapeIdentifier(node.text)); + } + return links.resolvedType; + } + function getTypeFromJSDocVariadicType(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + var type = getTypeFromTypeNode(node.type); + links.resolvedType = type ? createArrayType(type) : unknownType; + } + return links.resolvedType; + } + function getTypeFromJSDocTupleType(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + var types = ts.map(node.types, getTypeFromTypeNode); + links.resolvedType = createTupleType(types); + } + return links.resolvedType; + } + function getThisType(node) { + var container = ts.getThisContainer(node, false); + var parent = container && container.parent; + if (parent && (ts.isClassLike(parent) || parent.kind === 222)) { + if (!(container.flags & 32) && + (container.kind !== 148 || ts.isNodeDescendentOf(node, container.body))) { + return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType; + } + } + error(node, ts.Diagnostics.A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface); + return unknownType; + } + function getTypeFromThisTypeNode(node) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getThisType(node); + } + return links.resolvedType; + } + function getTypeFromTypeNode(node) { + switch (node.kind) { + case 117: + case 258: + case 259: + return anyType; + case 132: + return stringType; + case 130: + return numberType; + case 120: + return booleanType; + case 133: + return esSymbolType; + case 103: + return voidType; + case 135: + return undefinedType; + case 93: + return nullType; + case 127: + return neverType; + case 165: + case 97: + return getTypeFromThisTypeNode(node); + case 166: + return getTypeFromStringLiteralTypeNode(node); + case 155: + case 267: + return getTypeFromTypeReference(node); + case 154: + return booleanType; + case 194: + return getTypeFromTypeReference(node); + case 158: + return getTypeFromTypeQueryNode(node); + case 160: + case 260: + return getTypeFromArrayTypeNode(node); + case 161: + return getTypeFromTupleTypeNode(node); + case 162: + case 261: + return getTypeFromUnionTypeNode(node); + case 163: + return getTypeFromIntersectionTypeNode(node); + case 164: + case 263: + case 264: + case 271: + case 272: + case 268: + return getTypeFromTypeNode(node.type); + case 156: + case 157: + case 159: + case 269: + case 265: + return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); + case 69: + case 139: + var symbol = getSymbolAtLocation(node); + return symbol && getDeclaredTypeOfSymbol(symbol); + case 262: + return getTypeFromJSDocTupleType(node); + case 270: + return getTypeFromJSDocVariadicType(node); + default: + return unknownType; + } + } + function instantiateList(items, mapper, instantiator) { + if (items && items.length) { + var result = []; + for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { + var v = items_1[_i]; + result.push(instantiator(v, mapper)); + } + return result; + } + return items; + } + function createUnaryTypeMapper(source, target) { + return function (t) { return t === source ? target : t; }; + } + function createBinaryTypeMapper(source1, target1, source2, target2) { + return function (t) { return t === source1 ? target1 : t === source2 ? target2 : t; }; + } + function createArrayTypeMapper(sources, targets) { + return function (t) { + for (var i = 0; i < sources.length; i++) { + if (t === sources[i]) { + return targets ? targets[i] : anyType; + } + } + return t; + }; + } + function createTypeMapper(sources, targets) { + var count = sources.length; + var mapper = count == 1 ? createUnaryTypeMapper(sources[0], targets ? targets[0] : anyType) : + count == 2 ? createBinaryTypeMapper(sources[0], targets ? targets[0] : anyType, sources[1], targets ? targets[1] : anyType) : + createArrayTypeMapper(sources, targets); + mapper.mappedTypes = sources; + return mapper; + } + function createTypeEraser(sources) { + return createTypeMapper(sources, undefined); + } + function getInferenceMapper(context) { + if (!context.mapper) { + var mapper = function (t) { + var typeParameters = context.typeParameters; + for (var i = 0; i < typeParameters.length; i++) { + if (t === typeParameters[i]) { + context.inferences[i].isFixed = true; + return getInferredType(context, i); + } + } + return t; + }; + mapper.mappedTypes = context.typeParameters; + mapper.context = context; + context.mapper = mapper; + } + return context.mapper; + } + function identityMapper(type) { + return type; + } + function combineTypeMappers(mapper1, mapper2) { + var mapper = function (t) { return instantiateType(mapper1(t), mapper2); }; + mapper.mappedTypes = mapper1.mappedTypes; + return mapper; + } + function cloneTypeParameter(typeParameter) { + var result = createType(512); + result.symbol = typeParameter.symbol; + result.target = typeParameter; + return result; + } + function cloneTypePredicate(predicate, mapper) { + if (ts.isIdentifierTypePredicate(predicate)) { + return { + kind: 1, + parameterName: predicate.parameterName, + parameterIndex: predicate.parameterIndex, + type: instantiateType(predicate.type, mapper) + }; + } + else { + return { + kind: 0, + type: instantiateType(predicate.type, mapper) + }; + } + } + function instantiateSignature(signature, mapper, eraseTypeParameters) { + var freshTypeParameters; + var freshTypePredicate; + if (signature.typeParameters && !eraseTypeParameters) { + freshTypeParameters = ts.map(signature.typeParameters, cloneTypeParameter); + mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper); + for (var _i = 0, freshTypeParameters_1 = freshTypeParameters; _i < freshTypeParameters_1.length; _i++) { + var tp = freshTypeParameters_1[_i]; + tp.mapper = mapper; + } + } + if (signature.typePredicate) { + freshTypePredicate = cloneTypePredicate(signature.typePredicate, mapper); + } + var result = createSignature(signature.declaration, freshTypeParameters, signature.thisType && instantiateType(signature.thisType, mapper), instantiateList(signature.parameters, mapper, instantiateSymbol), instantiateType(signature.resolvedReturnType, mapper), freshTypePredicate, signature.minArgumentCount, signature.hasRestParameter, signature.hasStringLiterals); + result.target = signature; + result.mapper = mapper; + return result; + } + function instantiateSymbol(symbol, mapper) { + if (symbol.flags & 16777216) { + var links = getSymbolLinks(symbol); + symbol = links.target; + mapper = combineTypeMappers(links.mapper, mapper); + } + var result = createSymbol(16777216 | 67108864 | symbol.flags, symbol.name); + result.declarations = symbol.declarations; + result.parent = symbol.parent; + result.target = symbol; + result.mapper = mapper; + if (symbol.valueDeclaration) { + result.valueDeclaration = symbol.valueDeclaration; + } + return result; + } + function instantiateAnonymousType(type, mapper) { + if (mapper.instantiations) { + var cachedType = mapper.instantiations[type.id]; + if (cachedType) { + return cachedType; + } + } + else { + mapper.instantiations = []; + } + var result = createObjectType(65536 | 131072, type.symbol); + result.target = type; + result.mapper = mapper; + mapper.instantiations[type.id] = result; + return result; + } + function isSymbolInScopeOfMappedTypeParameter(symbol, mapper) { + var mappedTypes = mapper.mappedTypes; + var node = symbol.declarations[0].parent; + while (node) { + switch (node.kind) { + case 156: + case 157: + case 220: + case 147: + case 146: + case 148: + case 151: + case 152: + case 153: + case 149: + case 150: + case 179: + case 180: + case 221: + case 192: + case 222: + case 223: + var declaration = node; + if (declaration.typeParameters) { + for (var _i = 0, _a = declaration.typeParameters; _i < _a.length; _i++) { + var d = _a[_i]; + if (ts.contains(mappedTypes, getDeclaredTypeOfTypeParameter(getSymbolOfNode(d)))) { + return true; + } + } + } + if (ts.isClassLike(node) || node.kind === 222) { + var thisType = getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType; + if (thisType && ts.contains(mappedTypes, thisType)) { + return true; + } + } + break; + case 225: + case 256: + return false; + } + node = node.parent; + } + return false; + } + function instantiateType(type, mapper) { + if (type && mapper !== identityMapper) { + if (type.flags & 512) { + return mapper(type); + } + if (type.flags & 65536) { + return type.symbol && + type.symbol.flags & (16 | 8192 | 32 | 2048 | 4096) && + (type.flags & 131072 || isSymbolInScopeOfMappedTypeParameter(type.symbol, mapper)) ? + instantiateAnonymousType(type, mapper) : type; + } + if (type.flags & 4096) { + return createTypeReference(type.target, instantiateList(type.typeArguments, mapper, instantiateType)); + } + if (type.flags & 8192) { + return createTupleType(instantiateList(type.elementTypes, mapper, instantiateType)); + } + if (type.flags & 16384) { + return getUnionType(instantiateList(type.types, mapper, instantiateType), true); + } + if (type.flags & 32768) { + return getIntersectionType(instantiateList(type.types, mapper, instantiateType)); + } + } + return type; + } + function instantiateIndexInfo(info, mapper) { + return info && createIndexInfo(instantiateType(info.type, mapper), info.isReadonly, info.declaration); + } + function isContextSensitive(node) { + ts.Debug.assert(node.kind !== 147 || ts.isObjectLiteralMethod(node)); + switch (node.kind) { + case 179: + case 180: + return isContextSensitiveFunctionLikeDeclaration(node); + case 171: + return ts.forEach(node.properties, isContextSensitive); + case 170: + return ts.forEach(node.elements, isContextSensitive); + case 188: + return isContextSensitive(node.whenTrue) || + isContextSensitive(node.whenFalse); + case 187: + return node.operatorToken.kind === 52 && + (isContextSensitive(node.left) || isContextSensitive(node.right)); + case 253: + return isContextSensitive(node.initializer); + case 147: + case 146: + return isContextSensitiveFunctionLikeDeclaration(node); + case 178: + return isContextSensitive(node.expression); + } + return false; + } + function isContextSensitiveFunctionLikeDeclaration(node) { + var areAllParametersUntyped = !ts.forEach(node.parameters, function (p) { return p.type; }); + var isNullaryArrow = node.kind === 180 && !node.parameters.length; + return !node.typeParameters && areAllParametersUntyped && !isNullaryArrow; + } + function isContextSensitiveFunctionOrObjectLiteralMethod(func) { + return (isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) && isContextSensitiveFunctionLikeDeclaration(func); + } + function getTypeWithoutSignatures(type) { + if (type.flags & 80896) { + var resolved = resolveStructuredTypeMembers(type); + if (resolved.constructSignatures.length) { + var result = createObjectType(65536, type.symbol); + result.members = resolved.members; + result.properties = resolved.properties; + result.callSignatures = emptyArray; + result.constructSignatures = emptyArray; + type = result; + } + } + return type; + } + function isTypeIdenticalTo(source, target) { + return checkTypeRelatedTo(source, target, identityRelation, undefined); + } + function compareTypesIdentical(source, target) { + return checkTypeRelatedTo(source, target, identityRelation, undefined) ? -1 : 0; + } + function compareTypesAssignable(source, target) { + return checkTypeRelatedTo(source, target, assignableRelation, undefined) ? -1 : 0; + } + function isTypeSubtypeOf(source, target) { + return checkTypeSubtypeOf(source, target, undefined); + } + function isTypeAssignableTo(source, target) { + return checkTypeAssignableTo(source, target, undefined); + } + function isTypeComparableTo(source, target) { + return checkTypeComparableTo(source, target, undefined); + } + function checkTypeSubtypeOf(source, target, errorNode, headMessage, containingMessageChain) { + return checkTypeRelatedTo(source, target, subtypeRelation, errorNode, headMessage, containingMessageChain); + } + function checkTypeAssignableTo(source, target, errorNode, headMessage, containingMessageChain) { + return checkTypeRelatedTo(source, target, assignableRelation, errorNode, headMessage, containingMessageChain); + } + function checkTypeComparableTo(source, target, errorNode, headMessage, containingMessageChain) { + return checkTypeRelatedTo(source, target, comparableRelation, errorNode, headMessage, containingMessageChain); + } + function isSignatureAssignableTo(source, target, ignoreReturnTypes) { + return compareSignaturesRelated(source, target, ignoreReturnTypes, false, undefined, compareTypesAssignable) !== 0; + } + function compareSignaturesRelated(source, target, ignoreReturnTypes, reportErrors, errorReporter, compareTypes) { + if (source === target) { + return -1; + } + if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) { + return 0; + } + source = getErasedSignature(source); + target = getErasedSignature(target); + var result = -1; + if (source.thisType && target.thisType && source.thisType !== voidType) { + var related = compareTypes(source.thisType, target.thisType, false) + || compareTypes(target.thisType, source.thisType, reportErrors); + if (!related) { + if (reportErrors) { + errorReporter(ts.Diagnostics.The_this_types_of_each_signature_are_incompatible); + } + return 0; + } + result &= related; + } + var sourceMax = getNumNonRestParameters(source); + var targetMax = getNumNonRestParameters(target); + var checkCount = getNumParametersToCheckForSignatureRelatability(source, sourceMax, target, targetMax); + var sourceParams = source.parameters; + var targetParams = target.parameters; + for (var i = 0; i < checkCount; i++) { + var s = i < sourceMax ? getTypeOfParameter(sourceParams[i]) : getRestTypeOfSignature(source); + var t = i < targetMax ? getTypeOfParameter(targetParams[i]) : getRestTypeOfSignature(target); + var related = compareTypes(s, t, false) || compareTypes(t, s, reportErrors); + if (!related) { + if (reportErrors) { + errorReporter(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible, sourceParams[i < sourceMax ? i : sourceMax].name, targetParams[i < targetMax ? i : targetMax].name); + } + return 0; + } + result &= related; + } + if (!ignoreReturnTypes) { + var targetReturnType = getReturnTypeOfSignature(target); + if (targetReturnType === voidType) { + return result; + } + var sourceReturnType = getReturnTypeOfSignature(source); + if (target.typePredicate) { + if (source.typePredicate) { + result &= compareTypePredicateRelatedTo(source.typePredicate, target.typePredicate, reportErrors, errorReporter, compareTypes); + } + else if (ts.isIdentifierTypePredicate(target.typePredicate)) { + if (reportErrors) { + errorReporter(ts.Diagnostics.Signature_0_must_have_a_type_predicate, signatureToString(source)); + } + return 0; + } + } + else { + result &= compareTypes(sourceReturnType, targetReturnType, reportErrors); + } + } + return result; + } + function compareTypePredicateRelatedTo(source, target, reportErrors, errorReporter, compareTypes) { + if (source.kind !== target.kind) { + if (reportErrors) { + errorReporter(ts.Diagnostics.A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard); + errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); + } + return 0; + } + if (source.kind === 1) { + var sourceIdentifierPredicate = source; + var targetIdentifierPredicate = target; + if (sourceIdentifierPredicate.parameterIndex !== targetIdentifierPredicate.parameterIndex) { + if (reportErrors) { + errorReporter(ts.Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1, sourceIdentifierPredicate.parameterName, targetIdentifierPredicate.parameterName); + errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); + } + return 0; + } + } + var related = compareTypes(source.type, target.type, reportErrors); + if (related === 0 && reportErrors) { + errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); + } + return related; + } + function isImplementationCompatibleWithOverload(implementation, overload) { + var erasedSource = getErasedSignature(implementation); + var erasedTarget = getErasedSignature(overload); + var sourceReturnType = getReturnTypeOfSignature(erasedSource); + var targetReturnType = getReturnTypeOfSignature(erasedTarget); + if (targetReturnType === voidType + || checkTypeRelatedTo(targetReturnType, sourceReturnType, assignableRelation, undefined) + || checkTypeRelatedTo(sourceReturnType, targetReturnType, assignableRelation, undefined)) { + return isSignatureAssignableTo(erasedSource, erasedTarget, true); + } + return false; + } + function getNumNonRestParameters(signature) { + var numParams = signature.parameters.length; + return signature.hasRestParameter ? + numParams - 1 : + numParams; + } + function getNumParametersToCheckForSignatureRelatability(source, sourceNonRestParamCount, target, targetNonRestParamCount) { + if (source.hasRestParameter === target.hasRestParameter) { + if (source.hasRestParameter) { + return Math.max(sourceNonRestParamCount, targetNonRestParamCount) + 1; + } + else { + return Math.min(sourceNonRestParamCount, targetNonRestParamCount); + } + } + else { + return source.hasRestParameter ? + targetNonRestParamCount : + sourceNonRestParamCount; + } + } + function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain) { + var errorInfo; + var sourceStack; + var targetStack; + var maybeStack; + var expandingFlags; + var depth = 0; + var overflow = false; + ts.Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking"); + var result = isRelatedTo(source, target, !!errorNode, headMessage); + if (overflow) { + error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target)); + } + else if (errorInfo) { + if (containingMessageChain) { + errorInfo = ts.concatenateDiagnosticMessageChains(containingMessageChain, errorInfo); + } + diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo)); + } + return result !== 0; + function reportError(message, arg0, arg1, arg2) { + ts.Debug.assert(!!errorNode); + errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1, arg2); + } + function reportRelationError(message, source, target) { + var sourceType = typeToString(source); + var targetType = typeToString(target); + if (sourceType === targetType) { + sourceType = typeToString(source, undefined, 128); + targetType = typeToString(target, undefined, 128); + } + if (!message) { + message = relation === comparableRelation ? + ts.Diagnostics.Type_0_is_not_comparable_to_type_1 : + ts.Diagnostics.Type_0_is_not_assignable_to_type_1; + } + reportError(message, sourceType, targetType); + } + function isRelatedTo(source, target, reportErrors, headMessage) { + var result; + if (source === target) + return -1; + if (relation === identityRelation) { + return isIdenticalTo(source, target); + } + if (!(target.flags & 134217728)) { + if (target.flags & 1) + return -1; + if (source.flags & 32) { + if (!strictNullChecks || target.flags & (32 | 16) || source === emptyArrayElementType) + return -1; + } + if (source.flags & 64) { + if (!strictNullChecks || target.flags & 64) + return -1; + } + if (source.flags & 128 && target === numberType) + return -1; + if (source.flags & 128 && target.flags & 128) { + if (result = enumRelatedTo(source, target, reportErrors)) { + return result; + } + } + if (source.flags & 256 && target === stringType) + return -1; + if (relation === assignableRelation || relation === comparableRelation) { + if (source.flags & (1 | 134217728)) + return -1; + if (source === numberType && target.flags & 128) + return -1; + } + if (source.flags & 8 && target.flags & 8) { + return -1; + } + } + if (source.flags & 1048576) { + if (hasExcessProperties(source, target, reportErrors)) { + if (reportErrors) { + reportRelationError(headMessage, source, target); + } + return 0; + } + if (target.flags & 49152) { + source = getRegularTypeOfObjectLiteral(source); + } + } + var saveErrorInfo = errorInfo; + if (source.flags & 16384) { + if (relation === comparableRelation) { + result = someTypeRelatedToType(source, target, reportErrors); + } + else { + result = eachTypeRelatedToType(source, target, reportErrors); + } + if (result) { + return result; + } + } + else if (target.flags & 32768) { + result = typeRelatedToEachType(source, target, reportErrors); + if (result) { + return result; + } + } + else { + if (source.flags & 32768) { + if (result = someTypeRelatedToType(source, target, false)) { + return result; + } + } + if (target.flags & 16384) { + if (result = typeRelatedToSomeType(source, target, reportErrors && !(source.flags & 16777726))) { + return result; + } + } + } + if (source.flags & 512) { + var constraint = getConstraintOfTypeParameter(source); + if (!constraint || constraint.flags & 1) { + constraint = emptyObjectType; + } + constraint = getTypeWithThisArgument(constraint, source); + var reportConstraintErrors = reportErrors && constraint !== emptyObjectType; + if (result = isRelatedTo(constraint, target, reportConstraintErrors)) { + errorInfo = saveErrorInfo; + return result; + } + } + else { + if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) { + if (result = typeArgumentsRelatedTo(source, target, reportErrors)) { + return result; + } + } + var apparentSource = getApparentType(source); + if (apparentSource.flags & (80896 | 32768) && target.flags & 80896) { + var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo && !(source.flags & 16777726); + if (result = objectTypeRelatedTo(apparentSource, source, target, reportStructuralErrors)) { + errorInfo = saveErrorInfo; + return result; + } + } + } + if (reportErrors) { + reportRelationError(headMessage, source, target); + } + return 0; + } + function isIdenticalTo(source, target) { + var result; + if (source.flags & 80896 && target.flags & 80896) { + if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) { + if (result = typeArgumentsRelatedTo(source, target, false)) { + return result; + } + } + return objectTypeRelatedTo(source, source, target, false); + } + if (source.flags & 16384 && target.flags & 16384 || + source.flags & 32768 && target.flags & 32768) { + if (result = eachTypeRelatedToSomeType(source, target, false)) { + if (result &= eachTypeRelatedToSomeType(target, source, false)) { + return result; + } + } + } + return 0; + } + function isKnownProperty(type, name) { + if (type.flags & 80896) { + var resolved = resolveStructuredTypeMembers(type); + if ((relation === assignableRelation || relation === comparableRelation) && + (type === globalObjectType || isEmptyObjectType(resolved)) || + resolved.stringIndexInfo || resolved.numberIndexInfo || getPropertyOfType(type, name)) { + return true; + } + } + else if (type.flags & 49152) { + for (var _i = 0, _a = type.types; _i < _a.length; _i++) { + var t = _a[_i]; + if (isKnownProperty(t, name)) { + return true; + } + } + } + return false; + } + function isEmptyObjectType(t) { + return t.properties.length === 0 && + t.callSignatures.length === 0 && + t.constructSignatures.length === 0 && + !t.stringIndexInfo && + !t.numberIndexInfo; + } + function hasExcessProperties(source, target, reportErrors) { + if (!(target.flags & 67108864) && maybeTypeOfKind(target, 80896)) { + for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) { + var prop = _a[_i]; + if (!isKnownProperty(target, prop.name)) { + if (reportErrors) { + ts.Debug.assert(!!errorNode); + errorNode = prop.valueDeclaration; + reportError(ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(prop), typeToString(target)); + } + return true; + } + } + } + return false; + } + function eachTypeRelatedToSomeType(source, target, reportErrors) { + var result = -1; + var sourceTypes = source.types; + for (var _i = 0, sourceTypes_1 = sourceTypes; _i < sourceTypes_1.length; _i++) { + var sourceType = sourceTypes_1[_i]; + var related = typeRelatedToSomeType(sourceType, target, false); + if (!related) { + return 0; + } + result &= related; + } + return result; + } + function typeRelatedToSomeType(source, target, reportErrors) { + var targetTypes = target.types; + var len = targetTypes.length; + while (len >= 2 && targetTypes[len - 1].flags & 96) { + var related = isRelatedTo(source, targetTypes[len - 1], false); + if (related) { + return related; + } + len--; + } + for (var i = 0; i < len; i++) { + var related = isRelatedTo(source, targetTypes[i], reportErrors && i === len - 1); + if (related) { + return related; + } + } + return 0; + } + function typeRelatedToEachType(source, target, reportErrors) { + var result = -1; + var targetTypes = target.types; + for (var _i = 0, targetTypes_1 = targetTypes; _i < targetTypes_1.length; _i++) { + var targetType = targetTypes_1[_i]; + var related = isRelatedTo(source, targetType, reportErrors); + if (!related) { + return 0; + } + result &= related; + } + return result; + } + function someTypeRelatedToType(source, target, reportErrors) { + var sourceTypes = source.types; + var len = sourceTypes.length; + while (len >= 2 && sourceTypes[len - 1].flags & 96) { + var related = isRelatedTo(sourceTypes[len - 1], target, false); + if (related) { + return related; + } + len--; + } + for (var i = 0; i < len; i++) { + var related = isRelatedTo(sourceTypes[i], target, reportErrors && i === len - 1); + if (related) { + return related; + } + } + return 0; + } + function eachTypeRelatedToType(source, target, reportErrors) { + var result = -1; + var sourceTypes = source.types; + for (var _i = 0, sourceTypes_2 = sourceTypes; _i < sourceTypes_2.length; _i++) { + var sourceType = sourceTypes_2[_i]; + var related = isRelatedTo(sourceType, target, reportErrors); + if (!related) { + return 0; + } + result &= related; + } + return result; + } + function typeArgumentsRelatedTo(source, target, reportErrors) { + var sources = source.typeArguments || emptyArray; + var targets = target.typeArguments || emptyArray; + if (sources.length !== targets.length && relation === identityRelation) { + return 0; + } + var length = sources.length <= targets.length ? sources.length : targets.length; + var result = -1; + for (var i = 0; i < length; i++) { + var related = isRelatedTo(sources[i], targets[i], reportErrors); + if (!related) { + return 0; + } + result &= related; + } + return result; + } + function objectTypeRelatedTo(source, originalSource, target, reportErrors) { + if (overflow) { + return 0; + } + var id = relation !== identityRelation || source.id < target.id ? source.id + "," + target.id : target.id + "," + source.id; + var related = relation[id]; + if (related !== undefined) { + if (reportErrors && related === 2) { + relation[id] = 3; + } + else { + return related === 1 ? -1 : 0; + } + } + if (depth > 0) { + for (var i = 0; i < depth; i++) { + if (maybeStack[i][id]) { + return 1; + } + } + if (depth === 100) { + overflow = true; + return 0; + } + } + else { + sourceStack = []; + targetStack = []; + maybeStack = []; + expandingFlags = 0; + } + sourceStack[depth] = source; + targetStack[depth] = target; + maybeStack[depth] = {}; + maybeStack[depth][id] = 1; + depth++; + var saveExpandingFlags = expandingFlags; + if (!(expandingFlags & 1) && isDeeplyNestedGeneric(source, sourceStack, depth)) + expandingFlags |= 1; + if (!(expandingFlags & 2) && isDeeplyNestedGeneric(target, targetStack, depth)) + expandingFlags |= 2; + var result; + if (expandingFlags === 3) { + result = 1; + } + else { + result = propertiesRelatedTo(source, target, reportErrors); + if (result) { + result &= signaturesRelatedTo(source, target, 0, reportErrors); + if (result) { + result &= signaturesRelatedTo(source, target, 1, reportErrors); + if (result) { + result &= indexTypesRelatedTo(source, originalSource, target, 0, reportErrors); + if (result) { + result &= indexTypesRelatedTo(source, originalSource, target, 1, reportErrors); + } + } + } + } + } + expandingFlags = saveExpandingFlags; + depth--; + if (result) { + var maybeCache = maybeStack[depth]; + var destinationCache = (result === -1 || depth === 0) ? relation : maybeStack[depth - 1]; + ts.copyMap(maybeCache, destinationCache); + } + else { + relation[id] = reportErrors ? 3 : 2; + } + return result; + } + function propertiesRelatedTo(source, target, reportErrors) { + if (relation === identityRelation) { + return propertiesIdenticalTo(source, target); + } + var result = -1; + var properties = getPropertiesOfObjectType(target); + var requireOptionalProperties = relation === subtypeRelation && !(source.flags & 524288); + for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) { + var targetProp = properties_1[_i]; + var sourceProp = getPropertyOfType(source, targetProp.name); + if (sourceProp !== targetProp) { + if (!sourceProp) { + if (!(targetProp.flags & 536870912) || requireOptionalProperties) { + if (reportErrors) { + reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(targetProp), typeToString(source)); + } + return 0; + } + } + else if (!(targetProp.flags & 134217728)) { + var sourcePropFlags = getDeclarationFlagsFromSymbol(sourceProp); + var targetPropFlags = getDeclarationFlagsFromSymbol(targetProp); + if (sourcePropFlags & 8 || targetPropFlags & 8) { + if (sourceProp.valueDeclaration !== targetProp.valueDeclaration) { + if (reportErrors) { + if (sourcePropFlags & 8 && targetPropFlags & 8) { + reportError(ts.Diagnostics.Types_have_separate_declarations_of_a_private_property_0, symbolToString(targetProp)); + } + else { + reportError(ts.Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2, symbolToString(targetProp), typeToString(sourcePropFlags & 8 ? source : target), typeToString(sourcePropFlags & 8 ? target : source)); + } + } + return 0; + } + } + else if (targetPropFlags & 16) { + var sourceDeclaredInClass = sourceProp.parent && sourceProp.parent.flags & 32; + var sourceClass = sourceDeclaredInClass ? getDeclaredTypeOfSymbol(getParentOfSymbol(sourceProp)) : undefined; + var targetClass = getDeclaredTypeOfSymbol(getParentOfSymbol(targetProp)); + if (!sourceClass || !hasBaseType(sourceClass, targetClass)) { + if (reportErrors) { + reportError(ts.Diagnostics.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2, symbolToString(targetProp), typeToString(sourceClass || source), typeToString(targetClass)); + } + 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 (sourceProp.flags & 536870912 && !(targetProp.flags & 536870912)) { + 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 propertiesIdenticalTo(source, target) { + if (!(source.flags & 80896 && target.flags & 80896)) { + 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.name); + 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; + 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, 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, reportErrors) { + return compareSignaturesRelated(source, target, 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, len = sourceSignatures.length; i < len; 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.name)) { + 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, originalSource, target, kind, reportErrors) { + if (relation === identityRelation) { + return indexTypesIdenticalTo(source, target, kind); + } + var targetInfo = getIndexInfoOfType(target, kind); + if (!targetInfo || ((targetInfo.type.flags & 1) && !(originalSource.flags & 16777726))) { + return -1; + } + var sourceInfo = getIndexInfoOfType(source, kind) || + kind === 1 && getIndexInfoOfType(source, 0); + if (sourceInfo) { + return indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors); + } + if (isObjectLiteralType(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 enumRelatedTo(source, target, reportErrors) { + if (source.symbol.name !== target.symbol.name || + source.symbol.flags & 128 || + target.symbol.flags & 128) { + return 0; + } + var targetEnumType = getTypeOfSymbol(target.symbol); + for (var _i = 0, _a = getPropertiesOfType(getTypeOfSymbol(source.symbol)); _i < _a.length; _i++) { + var property = _a[_i]; + if (property.flags & 8) { + var targetProperty = getPropertyOfType(targetEnumType, property.name); + if (!targetProperty || !(targetProperty.flags & 8)) { + if (reportErrors) { + reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, property.name, typeToString(target, undefined, 128)); + } + return 0; + } + } + } + return -1; + } + function constructorVisibilitiesAreCompatible(sourceSignature, targetSignature, reportErrors) { + if (!sourceSignature.declaration || !targetSignature.declaration) { + return true; + } + var sourceAccessibility = sourceSignature.declaration.flags & (8 | 16); + var targetAccessibility = targetSignature.declaration.flags & (8 | 16); + 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 isAbstractConstructorType(type) { + if (type.flags & 65536) { + var symbol = type.symbol; + if (symbol && symbol.flags & 32) { + var declaration = getClassLikeDeclarationOfSymbol(symbol); + if (declaration && declaration.flags & 128) { + return true; + } + } + } + return false; + } + function isDeeplyNestedGeneric(type, stack, depth) { + if (type.flags & (4096 | 131072) && depth >= 5) { + var symbol = type.symbol; + var count = 0; + for (var i = 0; i < depth; i++) { + var t = stack[i]; + if (t.flags & (4096 | 131072) && t.symbol === symbol) { + count++; + if (count >= 5) + return true; + } + } + } + return false; + } + function isPropertyIdenticalTo(sourceProp, targetProp) { + return compareProperties(sourceProp, targetProp, compareTypesIdentical) !== 0; + } + function compareProperties(sourceProp, targetProp, compareTypes) { + if (sourceProp === targetProp) { + return -1; + } + var sourcePropAccessibility = getDeclarationFlagsFromSymbol(sourceProp) & (8 | 16); + var targetPropAccessibility = getDeclarationFlagsFromSymbol(targetProp) & (8 | 16); + if (sourcePropAccessibility !== targetPropAccessibility) { + return 0; + } + if (sourcePropAccessibility) { + if (getTargetSymbol(sourceProp) !== getTargetSymbol(targetProp)) { + return 0; + } + } + else { + if ((sourceProp.flags & 536870912) !== (targetProp.flags & 536870912)) { + 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; + } + if (partialMatch && source.minArgumentCount <= target.minArgumentCount && (source.hasRestParameter && !target.hasRestParameter || + source.hasRestParameter === target.hasRestParameter && 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 ((source.typeParameters ? source.typeParameters.length : 0) !== (target.typeParameters ? target.typeParameters.length : 0)) { + return 0; + } + source = getErasedSignature(source); + target = getErasedSignature(target); + var result = -1; + if (!ignoreThisTypes && source.thisType && target.thisType) { + var related = compareTypes(source.thisType, target.thisType); + 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 isSupertypeOfEach(candidate, types) { + for (var _i = 0, types_5 = types; _i < types_5.length; _i++) { + var t = types_5[_i]; + if (candidate !== t && !isTypeSubtypeOf(t, candidate)) + return false; + } + return true; + } + function getCombinedFlagsOfTypes(types) { + var flags = 0; + for (var _i = 0, types_6 = types; _i < types_6.length; _i++) { + var t = types_6[_i]; + flags |= t.flags; + } + return flags; + } + function getCommonSupertype(types) { + if (!strictNullChecks) { + return ts.forEach(types, function (t) { return isSupertypeOfEach(t, types) ? t : undefined; }); + } + var primaryTypes = ts.filter(types, function (t) { return !(t.flags & 96); }); + if (!primaryTypes.length) { + return getUnionType(types); + } + var supertype = ts.forEach(primaryTypes, function (t) { return isSupertypeOfEach(t, primaryTypes) ? t : undefined; }); + return supertype && addNullableKind(supertype, getCombinedFlagsOfTypes(types) & 96); + } + function reportNoCommonSupertypeError(types, errorLocation, errorMessageChainHead) { + var bestSupertype; + var bestSupertypeDownfallType; + var bestSupertypeScore = 0; + for (var i = 0; i < types.length; i++) { + var score = 0; + var downfallType = undefined; + for (var j = 0; j < types.length; j++) { + if (isTypeSubtypeOf(types[j], types[i])) { + score++; + } + else if (!downfallType) { + downfallType = types[j]; + } + } + ts.Debug.assert(!!downfallType, "If there is no common supertype, each type should have a downfallType"); + if (score > bestSupertypeScore) { + bestSupertype = types[i]; + bestSupertypeDownfallType = downfallType; + bestSupertypeScore = score; + } + if (bestSupertypeScore === types.length - 1) { + break; + } + } + checkTypeSubtypeOf(bestSupertypeDownfallType, bestSupertype, errorLocation, ts.Diagnostics.Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0, errorMessageChainHead); + } + function isArrayType(type) { + return type.flags & 4096 && type.target === globalArrayType; + } + function isArrayLikeType(type) { + return type.flags & 4096 && (type.target === globalArrayType || type.target === globalReadonlyArrayType) || + !(type.flags & 96) && isTypeAssignableTo(type, anyReadonlyArrayType); + } + function isTupleLikeType(type) { + return !!getPropertyOfType(type, "0"); + } + function isStringLiteralType(type) { + return type.flags & 256; + } + function isTupleType(type) { + return !!(type.flags & 8192); + } + function getNullableKind(type) { + var flags = type.flags; + if (flags & 16384) { + for (var _i = 0, _a = type.types; _i < _a.length; _i++) { + var t = _a[_i]; + flags |= t.flags; + } + } + return flags & 96; + } + function addNullableKind(type, kind) { + if ((getNullableKind(type) & kind) !== kind) { + var types = [type]; + if (kind & 32) { + types.push(undefinedType); + } + if (kind & 64) { + types.push(nullType); + } + type = getUnionType(types); + } + return type; + } + function getNonNullableType(type) { + return strictNullChecks ? getTypeWithFacts(type, 524288) : type; + } + function isObjectLiteralType(type) { + return type.symbol && (type.symbol.flags & (4096 | 2048)) !== 0 && + getSignaturesOfType(type, 0).length === 0 && + getSignaturesOfType(type, 1).length === 0; + } + function getRegularTypeOfObjectLiteral(type) { + if (type.flags & 1048576) { + var regularType = type.regularType; + if (!regularType) { + regularType = createType(type.flags & ~1048576); + regularType.symbol = type.symbol; + regularType.members = type.members; + regularType.properties = type.properties; + regularType.callSignatures = type.callSignatures; + regularType.constructSignatures = type.constructSignatures; + regularType.stringIndexInfo = type.stringIndexInfo; + regularType.numberIndexInfo = type.numberIndexInfo; + type.regularType = regularType; + } + return regularType; + } + return type; + } + function getWidenedTypeOfObjectLiteral(type) { + var properties = getPropertiesOfObjectType(type); + var members = {}; + ts.forEach(properties, function (p) { + var propType = getTypeOfSymbol(p); + var widenedType = getWidenedType(propType); + if (propType !== widenedType) { + var symbol = createSymbol(p.flags | 67108864, p.name); + symbol.declarations = p.declarations; + symbol.parent = p.parent; + symbol.type = widenedType; + symbol.target = p; + if (p.valueDeclaration) + symbol.valueDeclaration = p.valueDeclaration; + p = symbol; + } + members[p.name] = p; + }); + var stringIndexInfo = getIndexInfoOfType(type, 0); + var numberIndexInfo = getIndexInfoOfType(type, 1); + return createAnonymousType(type.symbol, members, emptyArray, emptyArray, stringIndexInfo && createIndexInfo(getWidenedType(stringIndexInfo.type), stringIndexInfo.isReadonly), numberIndexInfo && createIndexInfo(getWidenedType(numberIndexInfo.type), numberIndexInfo.isReadonly)); + } + function getWidenedConstituentType(type) { + return type.flags & 96 ? type : getWidenedType(type); + } + function getWidenedType(type) { + if (type.flags & 6291456) { + if (type.flags & 96) { + return anyType; + } + if (type.flags & 524288) { + return getWidenedTypeOfObjectLiteral(type); + } + if (type.flags & 16384) { + return getUnionType(ts.map(type.types, getWidenedConstituentType), true); + } + if (isArrayType(type)) { + return createArrayType(getWidenedType(type.typeArguments[0])); + } + if (isTupleType(type)) { + return createTupleType(ts.map(type.elementTypes, getWidenedType)); + } + } + return type; + } + function reportWideningErrorsInType(type) { + var errorReported = false; + if (type.flags & 16384) { + for (var _i = 0, _a = type.types; _i < _a.length; _i++) { + var t = _a[_i]; + if (reportWideningErrorsInType(t)) { + errorReported = true; + } + } + } + if (isArrayType(type)) { + return reportWideningErrorsInType(type.typeArguments[0]); + } + if (isTupleType(type)) { + for (var _b = 0, _c = type.elementTypes; _b < _c.length; _b++) { + var t = _c[_b]; + if (reportWideningErrorsInType(t)) { + errorReported = true; + } + } + } + if (type.flags & 524288) { + 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, p.name, typeToString(getWidenedType(t))); + } + errorReported = true; + } + } + } + return errorReported; + } + function reportImplicitAnyError(declaration, type) { + var typeAsString = typeToString(getWidenedType(type)); + var diagnostic; + switch (declaration.kind) { + case 145: + case 144: + diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type; + break; + case 142: + diagnostic = declaration.dotDotDotToken ? + ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : + ts.Diagnostics.Parameter_0_implicitly_has_an_1_type; + break; + case 169: + diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type; + break; + case 220: + case 147: + case 146: + case 149: + case 150: + case 179: + case 180: + 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(declaration.name), typeAsString); + } + function reportErrorsFromWidening(declaration, type) { + if (produceDiagnostics && compilerOptions.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(typeParameters, inferUnionTypes) { + var inferences = ts.map(typeParameters, createTypeInferencesObject); + return { + typeParameters: typeParameters, + inferUnionTypes: inferUnionTypes, + inferences: inferences, + inferredTypes: new Array(typeParameters.length) + }; + } + function createTypeInferencesObject() { + return { + primary: undefined, + secondary: undefined, + isFixed: false + }; + } + function inferTypes(context, source, target) { + var sourceStack; + var targetStack; + var depth = 0; + var inferiority = 0; + var visited = {}; + inferFromTypes(source, target); + function isInProcess(source, target) { + for (var i = 0; i < depth; i++) { + if (source === sourceStack[i] && target === targetStack[i]) { + return true; + } + } + return false; + } + function inferFromTypes(source, target) { + if (source.flags & 16384 && target.flags & 16384 || + source.flags & 32768 && target.flags & 32768) { + var matchingTypes = void 0; + for (var _i = 0, _a = target.types; _i < _a.length; _i++) { + var t = _a[_i]; + if (typeIdenticalToSomeType(t, source.types)) { + (matchingTypes || (matchingTypes = [])).push(t); + inferFromTypes(t, t); + } + } + if (matchingTypes) { + source = removeTypesFromUnionOrIntersection(source, matchingTypes); + target = removeTypesFromUnionOrIntersection(target, matchingTypes); + } + } + if (target.flags & 512) { + if (source.flags & 8388608) { + return; + } + var typeParameters = context.typeParameters; + for (var i = 0; i < typeParameters.length; i++) { + if (target === typeParameters[i]) { + var inferences = context.inferences[i]; + if (!inferences.isFixed) { + var candidates = inferiority ? + inferences.secondary || (inferences.secondary = []) : + inferences.primary || (inferences.primary = []); + if (!ts.contains(candidates, source)) { + candidates.push(source); + } + } + return; + } + } + } + else if (source.flags & 4096 && target.flags & 4096 && source.target === target.target) { + var sourceTypes = source.typeArguments || emptyArray; + var targetTypes = target.typeArguments || emptyArray; + var count = sourceTypes.length < targetTypes.length ? sourceTypes.length : targetTypes.length; + for (var i = 0; i < count; i++) { + inferFromTypes(sourceTypes[i], targetTypes[i]); + } + } + else if (source.flags & 8192 && target.flags & 8192 && source.elementTypes.length === target.elementTypes.length) { + var sourceTypes = source.elementTypes; + var targetTypes = target.elementTypes; + for (var i = 0; i < sourceTypes.length; i++) { + inferFromTypes(sourceTypes[i], targetTypes[i]); + } + } + else if (target.flags & 49152) { + var targetTypes = target.types; + var typeParameterCount = 0; + var typeParameter = void 0; + for (var _b = 0, targetTypes_2 = targetTypes; _b < targetTypes_2.length; _b++) { + var t = targetTypes_2[_b]; + if (t.flags & 512 && ts.contains(context.typeParameters, t)) { + typeParameter = t; + typeParameterCount++; + } + else { + inferFromTypes(source, t); + } + } + if (target.flags & 16384 && typeParameterCount === 1) { + inferiority++; + inferFromTypes(source, typeParameter); + inferiority--; + } + } + else if (source.flags & 49152) { + var sourceTypes = source.types; + for (var _c = 0, sourceTypes_3 = sourceTypes; _c < sourceTypes_3.length; _c++) { + var sourceType = sourceTypes_3[_c]; + inferFromTypes(sourceType, target); + } + } + else { + source = getApparentType(source); + if (source.flags & 80896 && (target.flags & 4096 && target.typeArguments || + target.flags & 8192 || + target.flags & 65536 && target.symbol && target.symbol.flags & (8192 | 2048 | 32))) { + if (isInProcess(source, target)) { + return; + } + if (isDeeplyNestedGeneric(source, sourceStack, depth) && isDeeplyNestedGeneric(target, targetStack, depth)) { + return; + } + var key = source.id + "," + target.id; + if (ts.hasProperty(visited, key)) { + return; + } + visited[key] = true; + if (depth === 0) { + sourceStack = []; + targetStack = []; + } + sourceStack[depth] = source; + targetStack[depth] = target; + depth++; + inferFromProperties(source, target); + inferFromSignatures(source, target, 0); + inferFromSignatures(source, target, 1); + inferFromIndexTypes(source, target); + depth--; + } + } + } + function inferFromProperties(source, target) { + var properties = getPropertiesOfObjectType(target); + for (var _i = 0, properties_2 = properties; _i < properties_2.length; _i++) { + var targetProp = properties_2[_i]; + var sourceProp = getPropertyOfObjectType(source, targetProp.name); + 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, inferFromTypes); + 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_7 = types; _i < types_7.length; _i++) { + var t = types_7[_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 & 16384 ? getUnionType(reducedTypes, true) : getIntersectionType(reducedTypes); + } + function getInferenceCandidates(context, index) { + var inferences = context.inferences[index]; + return inferences.primary || inferences.secondary || emptyArray; + } + function getInferredType(context, index) { + var inferredType = context.inferredTypes[index]; + var inferenceSucceeded; + if (!inferredType) { + var inferences = getInferenceCandidates(context, index); + if (inferences.length) { + var unionOrSuperType = context.inferUnionTypes ? getUnionType(inferences) : getCommonSupertype(inferences); + inferredType = unionOrSuperType ? getWidenedType(unionOrSuperType) : unknownType; + inferenceSucceeded = !!unionOrSuperType; + } + else { + inferredType = emptyObjectType; + inferenceSucceeded = true; + } + context.inferredTypes[index] = inferredType; + if (inferenceSucceeded) { + var constraint = getConstraintOfTypeParameter(context.typeParameters[index]); + if (constraint) { + var instantiatedConstraint = instantiateType(constraint, getInferenceMapper(context)); + if (!isTypeAssignableTo(inferredType, getTypeWithThisArgument(instantiatedConstraint, inferredType))) { + context.inferredTypes[index] = inferredType = instantiatedConstraint; + } + } + } + else if (context.failedTypeParameterIndex === undefined || context.failedTypeParameterIndex > index) { + context.failedTypeParameterIndex = index; + } + } + return inferredType; + } + function getInferredTypes(context) { + for (var i = 0; i < context.inferredTypes.length; i++) { + getInferredType(context, i); + } + return context.inferredTypes; + } + function getResolvedSymbol(node) { + var links = getNodeLinks(node); + if (!links.resolvedSymbol) { + links.resolvedSymbol = !ts.nodeIsMissing(node) && resolveName(node, node.text, 107455 | 1048576, ts.Diagnostics.Cannot_find_name_0, node) || unknownSymbol; + } + return links.resolvedSymbol; + } + function isInTypeQuery(node) { + while (node) { + switch (node.kind) { + case 158: + return true; + case 69: + case 139: + node = node.parent; + continue; + default: + return false; + } + } + ts.Debug.fail("should not get here"); + } + function getFlowCacheKey(node) { + if (node.kind === 69) { + var symbol = getResolvedSymbol(node); + return symbol !== unknownSymbol ? "" + getSymbolId(symbol) : undefined; + } + if (node.kind === 97) { + return "0"; + } + if (node.kind === 172) { + var key = getFlowCacheKey(node.expression); + return key && key + "." + node.name.text; + } + return undefined; + } + function isNullOrUndefinedLiteral(node) { + return node.kind === 93 || + node.kind === 69 && getResolvedSymbol(node) === undefinedSymbol; + } + function getLeftmostIdentifierOrThis(node) { + switch (node.kind) { + case 69: + case 97: + return node; + case 172: + return getLeftmostIdentifierOrThis(node.expression); + } + return undefined; + } + function isMatchingReference(source, target) { + if (source.kind === target.kind) { + switch (source.kind) { + case 69: + return getResolvedSymbol(source) === getResolvedSymbol(target); + case 97: + return true; + case 172: + return source.name.text === target.name.text && + isMatchingReference(source.expression, target.expression); + } + } + return false; + } + function containsMatchingReference(source, target) { + while (source.kind === 172) { + source = source.expression; + if (isMatchingReference(source, target)) { + return true; + } + } + return false; + } + 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 === 172 && + 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 & 16384)) { + 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 && declaredType.flags & 16384) { + var reducedTypes = ts.filter(declaredType.types, function (t) { return typeMaybeAssignableTo(assignedType, t); }); + if (reducedTypes.length) { + return reducedTypes.length === 1 ? reducedTypes[0] : getUnionType(reducedTypes); + } + } + return declaredType; + } + function getTypeFacts(type) { + var flags = type.flags; + if (flags & 258) { + return strictNullChecks ? 4079361 : 4194049; + } + if (flags & 132) { + return strictNullChecks ? 4079234 : 4193922; + } + if (flags & 8) { + return strictNullChecks ? 4078980 : 4193668; + } + if (flags & 80896) { + var resolved = resolveStructuredTypeMembers(type); + return resolved.callSignatures.length || resolved.constructSignatures.length || isTypeSubtypeOf(type, globalFunctionType) ? + strictNullChecks ? 1970144 : 4181984 : + strictNullChecks ? 1972176 : 4184016; + } + if (flags & (16 | 32)) { + return 2457472; + } + if (flags & 64) { + return 2340752; + } + if (flags & 16777216) { + return strictNullChecks ? 1981320 : 4193160; + } + if (flags & 512) { + var constraint = getConstraintOfTypeParameter(type); + return constraint ? getTypeFacts(constraint) : 4194303; + } + if (flags & 32768) { + return ts.reduceLeft(type.types, function (flags, type) { return flags |= getTypeFacts(type); }, 0); + } + return 4194303; + } + function getTypeWithFacts(type, include) { + if (!(type.flags & 16384)) { + return getTypeFacts(type) & include ? type : neverType; + } + var firstType; + var types; + for (var _i = 0, _a = type.types; _i < _a.length; _i++) { + var t = _a[_i]; + if (getTypeFacts(t) & include) { + if (!firstType) { + firstType = t; + } + else { + if (!types) { + types = [firstType]; + } + types.push(t); + } + } + } + return firstType ? types ? getUnionType(types, true) : firstType : neverType; + } + function getTypeWithDefault(type, defaultExpression) { + if (defaultExpression) { + var defaultType = checkExpression(defaultExpression); + return getUnionType([getTypeWithFacts(type, 131072), defaultType]); + } + return type; + } + function getTypeOfDestructuredProperty(type, name) { + var text = 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) || + unknownType; + } + function getTypeOfDestructuredSpreadElement(type) { + return createArrayType(checkIteratedTypeOrElementType(type, undefined, false) || unknownType); + } + function getAssignedTypeOfBinaryExpression(node) { + return node.parent.kind === 170 || node.parent.kind === 253 ? + getTypeWithDefault(getAssignedType(node), node.right) : + checkExpression(node.right); + } + function getAssignedTypeOfArrayLiteralElement(node, element) { + return getTypeOfDestructuredArrayElement(getAssignedType(node), ts.indexOf(node.elements, element)); + } + function getAssignedTypeOfSpreadElement(node) { + return getTypeOfDestructuredSpreadElement(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 207: + return stringType; + case 208: + return checkRightHandSideOfForOf(parent.expression) || unknownType; + case 187: + return getAssignedTypeOfBinaryExpression(parent); + case 181: + return undefinedType; + case 170: + return getAssignedTypeOfArrayLiteralElement(parent, node); + case 191: + return getAssignedTypeOfSpreadElement(parent); + case 253: + return getAssignedTypeOfPropertyAssignment(parent); + case 254: + return getAssignedTypeOfShorthandPropertyAssignment(parent); + } + return unknownType; + } + function getInitialTypeOfBindingElement(node) { + var pattern = node.parent; + var parentType = getInitialType(pattern.parent); + var type = pattern.kind === 167 ? + getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) : + !node.dotDotDotToken ? + getTypeOfDestructuredArrayElement(parentType, ts.indexOf(pattern.elements, node)) : + getTypeOfDestructuredSpreadElement(parentType); + return getTypeWithDefault(type, node.initializer); + } + function getTypeOfInitializer(node) { + var links = getNodeLinks(node); + return links.resolvedType || checkExpression(node); + } + function getInitialTypeOfVariableDeclaration(node) { + if (node.initializer) { + return getTypeOfInitializer(node.initializer); + } + if (node.parent.parent.kind === 207) { + return stringType; + } + if (node.parent.parent.kind === 208) { + return checkRightHandSideOfForOf(node.parent.parent.expression) || unknownType; + } + return unknownType; + } + function getInitialType(node) { + return node.kind === 218 ? + getInitialTypeOfVariableDeclaration(node) : + getInitialTypeOfBindingElement(node); + } + function getFlowTypeOfReference(reference, declaredType, assumeInitialized) { + var key; + if (!reference.flowNode || assumeInitialized && !(declaredType.flags & 97793)) { + return declaredType; + } + var initialType = assumeInitialized ? declaredType : addNullableKind(declaredType, 32); + var visitedFlowStart = visitedFlowCount; + var result = getTypeAtFlowNode(reference.flowNode); + visitedFlowCount = visitedFlowStart; + if (reference.parent.kind === 196 && getTypeWithFacts(result, 524288) === neverType) { + return declaredType; + } + return result; + function getTypeAtFlowNode(flow) { + while (true) { + if (flow.flags & 256) { + for (var i = visitedFlowStart; i < visitedFlowCount; i++) { + if (visitedFlowNodes[i] === flow) { + return visitedFlowTypes[i]; + } + } + } + var type = void 0; + if (flow.flags & 16) { + type = getTypeAtFlowAssignment(flow); + if (!type) { + flow = flow.antecedent; + continue; + } + } + else if (flow.flags & 96) { + type = getTypeAtFlowCondition(flow); + } + else if (flow.flags & 12) { + if (flow.antecedents.length === 1) { + flow = flow.antecedents[0]; + continue; + } + type = flow.flags & 4 ? + getTypeAtFlowBranchLabel(flow) : + getTypeAtFlowLoopLabel(flow); + } + else if (flow.flags & 1) { + type = declaredType; + } + else { + type = initialType; + } + if (flow.flags & 256) { + visitedFlowNodes[visitedFlowCount] = flow; + visitedFlowTypes[visitedFlowCount] = type; + visitedFlowCount++; + } + return type; + } + } + function getTypeAtFlowAssignment(flow) { + var node = flow.node; + if ((node.kind === 218 || node.kind === 169) && + reference.kind === 69 && + getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(reference)) === getSymbolOfNode(node)) { + return declaredType.flags & 16384 ? + getAssignmentReducedType(declaredType, getInitialType(node)) : + declaredType; + } + if (isMatchingReference(reference, node)) { + return declaredType.flags & 16384 ? + getAssignmentReducedType(declaredType, getAssignedType(node)) : + declaredType; + } + if (containsMatchingReference(reference, node)) { + return declaredType; + } + return undefined; + } + function getTypeAtFlowCondition(flow) { + var type = getTypeAtFlowNode(flow.antecedent); + if (type !== neverType) { + var assumeTrue = (flow.flags & 32) !== 0; + type = narrowType(type, flow.expression, assumeTrue); + if (type === neverType) { + type = narrowType(declaredType, flow.expression, assumeTrue); + } + } + return type; + } + function getTypeAtFlowBranchLabel(flow) { + var antecedentTypes = []; + for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { + var antecedent = _a[_i]; + var type = getTypeAtFlowNode(antecedent); + if (type === declaredType && declaredType === initialType) { + return type; + } + if (!ts.contains(antecedentTypes, type)) { + antecedentTypes.push(type); + } + } + return getUnionType(antecedentTypes); + } + function getTypeAtFlowLoopLabel(flow) { + var id = getFlowNodeId(flow); + var cache = flowLoopCaches[id] || (flowLoopCaches[id] = {}); + if (!key) { + key = getFlowCacheKey(reference); + } + if (cache[key]) { + return cache[key]; + } + for (var i = flowLoopStart; i < flowLoopCount; i++) { + if (flowLoopNodes[i] === flow && flowLoopKeys[i] === key) { + return getUnionType(flowLoopTypes[i]); + } + } + var antecedentTypes = []; + 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 type = getTypeAtFlowNode(antecedent); + flowLoopCount--; + if (cache[key]) { + return cache[key]; + } + if (!ts.contains(antecedentTypes, type)) { + antecedentTypes.push(type); + } + if (type === declaredType) { + break; + } + } + return cache[key] = getUnionType(antecedentTypes); + } + function narrowTypeByTruthiness(type, expr, assumeTrue) { + return isMatchingReference(reference, expr) ? getTypeWithFacts(type, assumeTrue ? 1048576 : 2097152) : type; + } + function narrowTypeByBinaryExpression(type, expr, assumeTrue) { + switch (expr.operatorToken.kind) { + case 56: + return narrowTypeByTruthiness(type, expr.left, assumeTrue); + case 30: + case 31: + case 32: + case 33: + if (isNullOrUndefinedLiteral(expr.right)) { + return narrowTypeByNullCheck(type, expr, assumeTrue); + } + if (expr.left.kind === 182 && expr.right.kind === 9) { + return narrowTypeByTypeof(type, expr, assumeTrue); + } + break; + case 91: + return narrowTypeByInstanceof(type, expr, assumeTrue); + case 24: + return narrowType(type, expr.right, assumeTrue); + } + return type; + } + function narrowTypeByNullCheck(type, expr, assumeTrue) { + var operator = expr.operatorToken.kind; + if (operator === 31 || operator === 33) { + assumeTrue = !assumeTrue; + } + if (!strictNullChecks || !isMatchingReference(reference, expr.left)) { + return type; + } + var doubleEquals = operator === 30 || operator === 31; + var facts = doubleEquals ? + assumeTrue ? 65536 : 524288 : + expr.right.kind === 93 ? + assumeTrue ? 32768 : 262144 : + assumeTrue ? 16384 : 131072; + return getTypeWithFacts(type, facts); + } + function narrowTypeByTypeof(type, expr, assumeTrue) { + var left = expr.left; + var right = expr.right; + if (!isMatchingReference(reference, left.expression)) { + if (containsMatchingReference(reference, left.expression)) { + return declaredType; + } + return type; + } + if (expr.operatorToken.kind === 31 || + expr.operatorToken.kind === 33) { + assumeTrue = !assumeTrue; + } + if (assumeTrue && !(type.flags & 16384)) { + var targetType = ts.getProperty(typeofTypesByName, right.text); + if (targetType && isTypeSubtypeOf(targetType, type)) { + return targetType; + } + } + var facts = assumeTrue ? + ts.getProperty(typeofEQFacts, right.text) || 64 : + ts.getProperty(typeofNEFacts, right.text) || 8192; + return getTypeWithFacts(type, facts); + } + function narrowTypeByInstanceof(type, expr, assumeTrue) { + if (!isMatchingReference(reference, expr.left)) { + if (containsMatchingReference(reference, expr.left)) { + return declaredType; + } + return type; + } + if (isTypeAny(type)) { + return type; + } + var rightType = checkExpression(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 (!targetType) { + var constructSignatures = void 0; + if (rightType.flags & 2048) { + constructSignatures = resolveDeclaredMembers(rightType).declaredConstructSignatures; + } + else if (rightType.flags & 65536) { + 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); + } + return type; + } + function getNarrowedType(type, candidate, assumeTrue) { + if (!assumeTrue) { + return type.flags & 16384 ? + getUnionType(ts.filter(type.types, function (t) { return !isTypeSubtypeOf(t, candidate); })) : + type; + } + if (type.flags & 16384) { + var assignableConstituents = ts.filter(type.types, function (t) { return isTypeAssignableTo(t, candidate); }); + if (assignableConstituents.length) { + return getUnionType(assignableConstituents); + } + } + var targetType = type.flags & 512 ? getApparentType(type) : type; + return isTypeAssignableTo(candidate, targetType) ? candidate : + isTypeAssignableTo(type, candidate) ? type : + neverType; + } + function narrowTypeByTypePredicate(type, callExpression, assumeTrue) { + if (type.flags & 1 || !hasMatchingArgument(callExpression, reference)) { + return type; + } + var signature = getResolvedSignature(callExpression); + var predicate = signature.typePredicate; + if (!predicate) { + return type; + } + if (ts.isIdentifierTypePredicate(predicate)) { + var predicateArgument = callExpression.arguments[predicate.parameterIndex]; + if (predicateArgument) { + if (isMatchingReference(reference, predicateArgument)) { + return getNarrowedType(type, predicate.type, assumeTrue); + } + if (containsMatchingReference(reference, predicateArgument)) { + return declaredType; + } + } + } + else { + var invokedExpression = skipParenthesizedNodes(callExpression.expression); + if (invokedExpression.kind === 173 || invokedExpression.kind === 172) { + var accessExpression = invokedExpression; + var possibleReference = skipParenthesizedNodes(accessExpression.expression); + if (isMatchingReference(reference, possibleReference)) { + return getNarrowedType(type, predicate.type, assumeTrue); + } + if (containsMatchingReference(reference, possibleReference)) { + return declaredType; + } + } + } + return type; + } + function narrowType(type, expr, assumeTrue) { + switch (expr.kind) { + case 69: + case 97: + case 172: + return narrowTypeByTruthiness(type, expr, assumeTrue); + case 174: + return narrowTypeByTypePredicate(type, expr, assumeTrue); + case 178: + return narrowType(type, expr.expression, assumeTrue); + case 187: + return narrowTypeByBinaryExpression(type, expr, assumeTrue); + case 185: + if (expr.operator === 49) { + return narrowType(type, expr.operand, !assumeTrue); + } + break; + } + return type; + } + } + function getTypeOfSymbolAtLocation(symbol, location) { + if (location.kind === 69) { + if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) { + location = location.parent; + } + if (ts.isExpression(location) && !ts.isAssignmentTarget(location)) { + var type = checkExpression(location); + if (getExportSymbolOfValueSymbolIfExported(getNodeLinks(location).resolvedSymbol) === symbol) { + return type; + } + } + } + return getTypeOfSymbol(symbol); + } + function skipParenthesizedNodes(expression) { + while (expression.kind === 178) { + expression = expression.expression; + } + return expression; + } + function checkIdentifier(node) { + var symbol = getResolvedSymbol(node); + if (symbol === argumentsSymbol) { + var container = ts.getContainingFunction(node); + if (container.kind === 180) { + if (languageVersion < 2) { + error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression); + } + } + if (node.flags & 33554432) { + getNodeLinks(container).flags |= 8192; + } + } + if (symbol.flags & 8388608 && !isInTypeQuery(node) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol))) { + markAliasSymbolAsReferenced(symbol); + } + var localOrExportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); + if (languageVersion === 2 + && localOrExportSymbol.flags & 32 + && localOrExportSymbol.valueDeclaration.kind === 221 + && ts.nodeIsDecorated(localOrExportSymbol.valueDeclaration)) { + var container = ts.getContainingClass(node); + while (container !== undefined) { + if (container === localOrExportSymbol.valueDeclaration && container.name !== node) { + getNodeLinks(container).flags |= 524288; + getNodeLinks(node).flags |= 1048576; + break; + } + container = ts.getContainingClass(container); + } + } + checkCollisionWithCapturedSuperVariable(node, node); + checkCollisionWithCapturedThisVariable(node, node); + checkNestedBlockScopedBinding(node, symbol); + var type = getTypeOfSymbol(localOrExportSymbol); + if (!(localOrExportSymbol.flags & 3) || ts.isAssignmentTarget(node)) { + return type; + } + var declaration = localOrExportSymbol.valueDeclaration; + var assumeInitialized = !strictNullChecks || (type.flags & 1) !== 0 || !declaration || + ts.getRootDeclaration(declaration).kind === 142 || ts.isInAmbientContext(declaration) || + ts.getContainingFunctionOrModule(declaration) !== ts.getContainingFunctionOrModule(node); + var flowType = getFlowTypeOfReference(node, type, assumeInitialized); + if (!assumeInitialized && !(getNullableKind(type) & 32) && getNullableKind(flowType) & 32) { + error(node, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); + return type; + } + return flowType; + } + function isInsideFunction(node, threshold) { + var current = node; + while (current && current !== threshold) { + if (ts.isFunctionLike(current)) { + return true; + } + current = current.parent; + } + return false; + } + function checkNestedBlockScopedBinding(node, symbol) { + if (languageVersion >= 2 || + (symbol.flags & (2 | 32)) === 0 || + symbol.valueDeclaration.parent.kind === 252) { + 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 === 206 && + ts.getAncestor(symbol.valueDeclaration, 219).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 === 178) { + current = current.parent; + } + var isAssigned = false; + if (ts.isAssignmentTarget(current)) { + isAssigned = true; + } + else if ((current.parent.kind === 185 || current.parent.kind === 186)) { + var expr = current.parent; + isAssigned = expr.operator === 41 || expr.operator === 42; + } + if (!isAssigned) { + return false; + } + while (current !== container) { + if (current === container.statement) { + return true; + } + else { + current = current.parent; + } + } + return false; + } + function captureLexicalThis(node, container) { + getNodeLinks(node).flags |= 2; + if (container.kind === 145 || container.kind === 148) { + var classNode = container.parent; + getNodeLinks(classNode).flags |= 4; + } + else { + getNodeLinks(container).flags |= 4; + } + } + function findFirstSuperCall(n) { + if (ts.isSuperCallExpression(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 === nullType; + } + function checkThisExpression(node) { + var container = ts.getThisContainer(node, true); + var needToCaptureLexicalThis = false; + if (container.kind === 148) { + 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, ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class); + } + } + } + if (container.kind === 180) { + container = ts.getThisContainer(container, false); + needToCaptureLexicalThis = (languageVersion < 2); + } + switch (container.kind) { + case 225: + error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body); + break; + case 224: + error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location); + break; + case 148: + if (isInConstructorArgumentInitializer(node, container)) { + error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments); + } + break; + case 145: + case 144: + if (container.flags & 32) { + error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); + } + break; + case 140: + error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name); + break; + } + if (needToCaptureLexicalThis) { + captureLexicalThis(node, container); + } + if (ts.isFunctionLike(container)) { + if (container.kind === 179 && + ts.isInJavaScriptFile(container.parent) && + 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 type = getContextuallyTypedThisType(container); + if (type) { + return type; + } + var signature = getSignatureFromDeclaration(container); + if (signature.thisType) { + return signature.thisType; + } + } + if (ts.isClassLike(container.parent)) { + var symbol = getSymbolOfNode(container.parent); + var type = container.flags & 32 ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType; + return getFlowTypeOfReference(node, type, true); + } + if (ts.isInJavaScriptFile(node)) { + var type = getTypeForThisExpressionFromJSDoc(container); + if (type && type !== unknownType) { + return type; + } + } + if (compilerOptions.noImplicitThis) { + error(node, ts.Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation); + } + return anyType; + } + function getTypeForThisExpressionFromJSDoc(node) { + var typeTag = ts.getJSDocTypeTag(node); + if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === 269) { + var jsDocFunctionType = typeTag.typeExpression.type; + if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === 272) { + return getTypeFromTypeNode(jsDocFunctionType.parameters[0].type); + } + } + } + function isInConstructorArgumentInitializer(node, constructorDecl) { + for (var n = node; n && n !== constructorDecl; n = n.parent) { + if (n.kind === 142) { + return true; + } + } + return false; + } + function checkSuperExpression(node) { + var isCallExpression = node.parent.kind === 174 && node.parent.expression === node; + var container = ts.getSuperContainer(node, true); + var needToCaptureLexicalThis = false; + if (!isCallExpression) { + while (container && container.kind === 180) { + container = ts.getSuperContainer(container, true); + needToCaptureLexicalThis = languageVersion < 2; + } + } + var canUseSuperExpression = isLegalUsageOfSuperExpression(container); + var nodeCheckFlag = 0; + if (!canUseSuperExpression) { + var current = node; + while (current && current !== container && current.kind !== 140) { + current = current.parent; + } + if (current && current.kind === 140) { + 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 === 171)) { + 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 ((container.flags & 32) || isCallExpression) { + nodeCheckFlag = 512; + } + else { + nodeCheckFlag = 256; + } + getNodeLinks(node).flags |= nodeCheckFlag; + if (container.kind === 147 && container.flags & 256) { + if (ts.isSuperPropertyOrElementAccess(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 === 171) { + 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 === 148 && isInConstructorArgumentInitializer(node, container)) { + error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments); + return unknownType; + } + return nodeCheckFlag === 512 + ? getBaseConstructorTypeOfClass(classType) + : baseClassType; + function isLegalUsageOfSuperExpression(container) { + if (!container) { + return false; + } + if (isCallExpression) { + return container.kind === 148; + } + else { + if (ts.isClassLike(container.parent) || container.parent.kind === 171) { + if (container.flags & 32) { + return container.kind === 147 || + container.kind === 146 || + container.kind === 149 || + container.kind === 150; + } + else { + return container.kind === 147 || + container.kind === 146 || + container.kind === 149 || + container.kind === 150 || + container.kind === 145 || + container.kind === 144 || + container.kind === 148; + } + } + } + return false; + } + } + function getContextuallyTypedThisType(func) { + if (isContextSensitiveFunctionOrObjectLiteralMethod(func) && func.kind !== 180) { + var contextualSignature = getContextualSignature(func); + if (contextualSignature) { + return contextualSignature.thisType; + } + } + return undefined; + } + function getContextuallyTypedParameterType(parameter) { + var func = parameter.parent; + if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) { + var iife = getImmediatelyInvokedFunctionExpression(func); + if (iife) { + var indexOfParameter = ts.indexOf(func.parameters, parameter); + if (iife.arguments && indexOfParameter < iife.arguments.length) { + if (parameter.dotDotDotToken) { + var restTypes = []; + for (var i = indexOfParameter; i < iife.arguments.length; i++) { + restTypes.push(getTypeOfExpression(iife.arguments[i])); + } + return createArrayType(getUnionType(restTypes)); + } + var links = getNodeLinks(iife); + var cached = links.resolvedSignature; + links.resolvedSignature = anySignature; + var type = checkExpression(iife.arguments[indexOfParameter]); + 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 (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 getImmediatelyInvokedFunctionExpression(func) { + if (isFunctionExpressionOrArrowFunction(func)) { + var prev = func; + var parent_8 = func.parent; + while (parent_8.kind === 178) { + prev = parent_8; + parent_8 = parent_8.parent; + } + if (parent_8.kind === 174 && parent_8.expression === prev) { + return parent_8; + } + } + } + function getContextualTypeForInitializerExpression(node) { + var declaration = node.parent; + if (node === declaration.initializer) { + if (declaration.type) { + return getTypeFromTypeNode(declaration.type); + } + if (declaration.kind === 142) { + var type = getContextuallyTypedParameterType(declaration); + if (type) { + return type; + } + } + if (ts.isBindingPattern(declaration.name)) { + return getTypeFromBindingPattern(declaration.name, true); + } + if (ts.isBindingPattern(declaration.parent)) { + var parentDeclaration = declaration.parent.parent; + var name_11 = declaration.propertyName || declaration.name; + if (ts.isVariableLike(parentDeclaration) && + parentDeclaration.type && + !ts.isBindingPattern(name_11)) { + var text = getTextOfPropertyName(name_11); + if (text) { + return getTypeOfPropertyOfType(getTypeFromTypeNode(parentDeclaration.type), text); + } + } + } + } + return undefined; + } + function getContextualTypeForReturnExpression(node) { + var func = ts.getContainingFunction(node); + if (func && !func.asteriskToken) { + return getContextualReturnType(func); + } + return undefined; + } + function getContextualTypeForYieldOperand(node) { + var func = ts.getContainingFunction(node); + if (func) { + var contextualReturnType = getContextualReturnType(func); + if (contextualReturnType) { + return node.asteriskToken + ? contextualReturnType + : getElementTypeOfIterableIterator(contextualReturnType); + } + } + return undefined; + } + function isInParameterInitializerBeforeContainingFunction(node) { + while (node.parent && !ts.isFunctionLike(node.parent)) { + if (node.parent.kind === 142 && node.parent.initializer === node) { + return true; + } + node = node.parent; + } + return false; + } + function getContextualReturnType(functionDecl) { + if (functionDecl.type || + functionDecl.kind === 148 || + functionDecl.kind === 149 && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(functionDecl.symbol, 150))) { + return getReturnTypeOfSignature(getSignatureFromDeclaration(functionDecl)); + } + var signature = getContextualSignatureForFunctionLikeDeclaration(functionDecl); + if (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 = getResolvedOrAnySignature(callTarget); + return getTypeAtPosition(signature, argIndex); + } + return undefined; + } + function getContextualTypeForSubstitutionExpression(template, substitutionExpression) { + if (template.parent.kind === 176) { + return getContextualTypeForArgument(template.parent, substitutionExpression); + } + return undefined; + } + function getContextualTypeForBinaryOperand(node) { + var binaryExpression = node.parent; + var operator = binaryExpression.operatorToken.kind; + if (operator >= 56 && operator <= 68) { + if (node === binaryExpression.right) { + return checkExpression(binaryExpression.left); + } + } + else if (operator === 52) { + var type = getContextualType(binaryExpression); + if (!type && node === binaryExpression.right) { + type = checkExpression(binaryExpression.left); + } + return type; + } + else if (operator === 51 || operator === 24) { + if (node === binaryExpression.right) { + return getContextualType(binaryExpression); + } + } + return undefined; + } + function applyToContextualType(type, mapper) { + if (!(type.flags & 16384)) { + return mapper(type); + } + var types = type.types; + var mappedType; + var mappedTypes; + for (var _i = 0, types_8 = types; _i < types_8.length; _i++) { + var current = types_8[_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 getTypeOfPropertyOfContextualType(type, name) { + return applyToContextualType(type, function (t) { + var prop = t.flags & 130048 ? getPropertyOfType(t, name) : undefined; + return prop ? getTypeOfSymbol(prop) : undefined; + }); + } + function getIndexTypeOfContextualType(type, kind) { + return applyToContextualType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); }); + } + function contextualTypeIsStringLiteralType(type) { + return !!(type.flags & 16384 ? ts.forEach(type.types, isStringLiteralType) : isStringLiteralType(type)); + } + function contextualTypeIsTupleLikeType(type) { + return !!(type.flags & 16384 ? 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 = getSymbolOfNode(element).name; + var propertyType = getTypeOfPropertyOfContextualType(type, symbolName); + if (propertyType) { + return propertyType; + } + } + return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1) || + getIndexTypeOfContextualType(type, 0); + } + return undefined; + } + function getContextualTypeForElementExpression(node) { + var arrayLiteral = node.parent; + var type = getApparentTypeOfContextualType(arrayLiteral); + if (type) { + var index = ts.indexOf(arrayLiteral.elements, node); + return getTypeOfPropertyOfContextualType(type, "" + index) + || getIndexTypeOfContextualType(type, 1) + || (languageVersion >= 2 ? getElementTypeOfIterable(type, undefined) : undefined); + } + return undefined; + } + function getContextualTypeForConditionalOperand(node) { + var conditional = node.parent; + return node === conditional.whenTrue || node === conditional.whenFalse ? getContextualType(conditional) : undefined; + } + function getContextualTypeForJsxAttribute(attribute) { + var kind = attribute.kind; + var jsxElement = attribute.parent; + var attrsType = getJsxElementAttributesType(jsxElement); + if (attribute.kind === 246) { + if (!attrsType || isTypeAny(attrsType)) { + return undefined; + } + return getTypeOfPropertyOfType(attrsType, attribute.name.text); + } + else if (attribute.kind === 247) { + return attrsType; + } + ts.Debug.fail("Expected JsxAttribute or JsxSpreadAttribute, got ts.SyntaxKind[" + kind + "]"); + } + 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 218: + case 142: + case 145: + case 144: + case 169: + return getContextualTypeForInitializerExpression(node); + case 180: + case 211: + return getContextualTypeForReturnExpression(node); + case 190: + return getContextualTypeForYieldOperand(parent); + case 174: + case 175: + return getContextualTypeForArgument(parent, node); + case 177: + case 195: + return getTypeFromTypeNode(parent.type); + case 187: + return getContextualTypeForBinaryOperand(node); + case 253: + return getContextualTypeForObjectLiteralElement(parent); + case 170: + return getContextualTypeForElementExpression(node); + case 188: + return getContextualTypeForConditionalOperand(node); + case 197: + ts.Debug.assert(parent.parent.kind === 189); + return getContextualTypeForSubstitutionExpression(parent.parent, node); + case 178: + return getContextualType(parent); + case 248: + return getContextualType(parent); + case 246: + case 247: + return getContextualTypeForJsxAttribute(parent); + } + return undefined; + } + function getNonGenericSignature(type) { + var signatures = getSignaturesOfStructuredType(type, 0); + if (signatures.length === 1) { + var signature = signatures[0]; + if (!signature.typeParameters) { + return signature; + } + } + } + function isFunctionExpressionOrArrowFunction(node) { + return node.kind === 179 || node.kind === 180; + } + 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 !== 147 || ts.isObjectLiteralMethod(node)); + var type = getContextualTypeForFunctionLikeDeclaration(node); + if (!type) { + return undefined; + } + if (!(type.flags & 16384)) { + return getNonGenericSignature(type); + } + var signatureList; + var types = type.types; + for (var _i = 0, types_9 = types; _i < types_9.length; _i++) { + var current = types_9[_i]; + var signature = getNonGenericSignature(current); + 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 isInferentialContext(mapper) { + return mapper && mapper.context; + } + function checkSpreadElementExpression(node, contextualMapper) { + var arrayOrIterableType = checkExpressionCached(node.expression, contextualMapper); + return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, false); + } + function hasDefaultValue(node) { + return (node.kind === 169 && !!node.initializer) || + (node.kind === 187 && node.operatorToken.kind === 56); + } + function checkArrayLiteral(node, contextualMapper) { + var elements = node.elements; + var hasSpreadElement = false; + var elementTypes = []; + var inDestructuringPattern = ts.isAssignmentTarget(node); + for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) { + var e = elements_1[_i]; + if (inDestructuringPattern && e.kind === 191) { + var restArrayType = checkExpression(e.expression, contextualMapper); + var restElementType = getIndexTypeOfType(restArrayType, 1) || + (languageVersion >= 2 ? getElementTypeOfIterable(restArrayType, undefined) : undefined); + if (restElementType) { + elementTypes.push(restElementType); + } + } + else { + var type = checkExpression(e, contextualMapper); + elementTypes.push(type); + } + hasSpreadElement = hasSpreadElement || e.kind === 191; + } + if (!hasSpreadElement) { + if (inDestructuringPattern && elementTypes.length) { + var type = createNewTupleType(elementTypes); + type.pattern = node; + return type; + } + var contextualType = getApparentTypeOfContextualType(node); + if (contextualType && contextualTypeIsTupleLikeType(contextualType)) { + var pattern = contextualType.pattern; + if (pattern && (pattern.kind === 168 || pattern.kind === 170)) { + var patternElements = pattern.elements; + for (var i = elementTypes.length; i < patternElements.length; i++) { + var patternElement = patternElements[i]; + if (hasDefaultValue(patternElement)) { + elementTypes.push(contextualType.elementTypes[i]); + } + else { + if (patternElement.kind !== 193) { + 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) : emptyArrayElementType); + } + function isNumericName(name) { + return name.kind === 140 ? isNumericComputedName(name) : isNumericLiteralName(name.text); + } + function isNumericComputedName(name) { + return isTypeAnyOrAllConstituentTypesHaveKind(checkComputedPropertyName(name), 132); + } + function isTypeAnyOrAllConstituentTypesHaveKind(type, kind) { + return isTypeAny(type) || isTypeOfKind(type, kind); + } + function isNumericLiteralName(name) { + return (+name).toString() === name; + } + function checkComputedPropertyName(node) { + var links = getNodeLinks(node.expression); + if (!links.resolvedType) { + links.resolvedType = checkExpression(node.expression); + if (!isTypeAnyOrAllConstituentTypesHaveKind(links.resolvedType, 132 | 258 | 16777216)) { + 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(node, properties, kind) { + var propTypes = []; + for (var i = 0; i < properties.length; i++) { + if (kind === 0 || isNumericName(node.properties[i].name)) { + propTypes.push(getTypeOfSymbol(properties[i])); + } + } + var unionType = propTypes.length ? getUnionType(propTypes) : undefinedType; + return createIndexInfo(unionType, false); + } + function checkObjectLiteral(node, contextualMapper) { + var inDestructuringPattern = ts.isAssignmentTarget(node); + checkGrammarObjectLiteralExpression(node, inDestructuringPattern); + var propertiesTable = {}; + var propertiesArray = []; + var contextualType = getApparentTypeOfContextualType(node); + var contextualTypeHasPattern = contextualType && contextualType.pattern && + (contextualType.pattern.kind === 167 || contextualType.pattern.kind === 171); + var typeFlags = 0; + var patternWithComputedProperties = false; + var hasComputedStringProperty = false; + var hasComputedNumberProperty = false; + for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { + var memberDecl = _a[_i]; + var member = memberDecl.symbol; + if (memberDecl.kind === 253 || + memberDecl.kind === 254 || + ts.isObjectLiteralMethod(memberDecl)) { + var type = void 0; + if (memberDecl.kind === 253) { + type = checkPropertyAssignment(memberDecl, contextualMapper); + } + else if (memberDecl.kind === 147) { + type = checkObjectLiteralMethod(memberDecl, contextualMapper); + } + else { + ts.Debug.assert(memberDecl.kind === 254); + type = checkExpression(memberDecl.name, contextualMapper); + } + typeFlags |= type.flags; + var prop = createSymbol(4 | 67108864 | member.flags, member.name); + if (inDestructuringPattern) { + var isOptional = (memberDecl.kind === 253 && hasDefaultValue(memberDecl.initializer)) || + (memberDecl.kind === 254 && memberDecl.objectAssignmentInitializer); + if (isOptional) { + prop.flags |= 536870912; + } + if (ts.hasDynamicName(memberDecl)) { + patternWithComputedProperties = true; + } + } + else if (contextualTypeHasPattern && !(contextualType.flags & 67108864)) { + var impliedProp = getPropertyOfType(contextualType, member.name); + if (impliedProp) { + prop.flags |= impliedProp.flags & 536870912; + } + else if (!compilerOptions.suppressExcessPropertyErrors) { + 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 { + ts.Debug.assert(memberDecl.kind === 149 || memberDecl.kind === 150); + checkAccessorDeclaration(memberDecl); + } + if (ts.hasDynamicName(memberDecl)) { + if (isNumericName(memberDecl.name)) { + hasComputedNumberProperty = true; + } + else { + hasComputedStringProperty = true; + } + } + else { + propertiesTable[member.name] = member; + } + propertiesArray.push(member); + } + if (contextualTypeHasPattern) { + for (var _b = 0, _c = getPropertiesOfType(contextualType); _b < _c.length; _b++) { + var prop = _c[_b]; + if (!ts.hasProperty(propertiesTable, prop.name)) { + if (!(prop.flags & 536870912)) { + error(prop.valueDeclaration || prop.bindingElement, ts.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value); + } + propertiesTable[prop.name] = prop; + propertiesArray.push(prop); + } + } + } + var stringIndexInfo = hasComputedStringProperty ? getObjectLiteralIndexInfo(node, propertiesArray, 0) : undefined; + var numberIndexInfo = hasComputedNumberProperty ? getObjectLiteralIndexInfo(node, propertiesArray, 1) : undefined; + var result = createAnonymousType(node.symbol, propertiesTable, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo); + var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 1048576; + result.flags |= 524288 | 4194304 | freshObjectLiteralFlag | (typeFlags & 14680064) | (patternWithComputedProperties ? 67108864 : 0); + if (inDestructuringPattern) { + result.pattern = node; + } + return result; + } + function checkJsxSelfClosingElement(node) { + checkJsxOpeningLikeElement(node); + return jsxElementType || anyType; + } + function checkJsxElement(node) { + checkJsxOpeningLikeElement(node.openingElement); + if (isJsxIntrinsicIdentifier(node.closingElement.tagName)) { + getIntrinsicTagSymbol(node.closingElement); + } + else { + checkExpression(node.closingElement.tagName); + } + for (var _i = 0, _a = node.children; _i < _a.length; _i++) { + var child = _a[_i]; + switch (child.kind) { + case 248: + checkJsxExpression(child); + break; + case 241: + checkJsxElement(child); + break; + case 242: + checkJsxSelfClosingElement(child); + break; + } + } + return jsxElementType || anyType; + } + function isUnhyphenatedJsxName(name) { + return name.indexOf("-") < 0; + } + function isJsxIntrinsicIdentifier(tagName) { + if (tagName.kind === 139) { + return false; + } + else { + return ts.isIntrinsicJsxName(tagName.text); + } + } + function checkJsxAttribute(node, elementAttributesType, nameTable) { + var correspondingPropType = undefined; + if (elementAttributesType === emptyObjectType && isUnhyphenatedJsxName(node.name.text)) { + error(node.parent, ts.Diagnostics.JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property, getJsxElementPropertiesName()); + } + else if (elementAttributesType && !isTypeAny(elementAttributesType)) { + var correspondingPropSymbol = getPropertyOfType(elementAttributesType, node.name.text); + correspondingPropType = correspondingPropSymbol && getTypeOfSymbol(correspondingPropSymbol); + if (isUnhyphenatedJsxName(node.name.text)) { + var indexerType = getIndexTypeOfType(elementAttributesType, 0); + if (indexerType) { + correspondingPropType = indexerType; + } + else { + if (!correspondingPropType) { + error(node.name, ts.Diagnostics.Property_0_does_not_exist_on_type_1, node.name.text, typeToString(elementAttributesType)); + return unknownType; + } + } + } + } + var exprType; + if (node.initializer) { + exprType = checkExpression(node.initializer); + } + else { + exprType = booleanType; + } + if (correspondingPropType) { + checkTypeAssignableTo(exprType, correspondingPropType, node); + } + nameTable[node.name.text] = true; + return exprType; + } + function checkJsxSpreadAttribute(node, elementAttributesType, nameTable) { + var type = checkExpression(node.expression); + var props = getPropertiesOfType(type); + for (var _i = 0, props_2 = props; _i < props_2.length; _i++) { + var prop = props_2[_i]; + if (!nameTable[prop.name]) { + var targetPropSym = getPropertyOfType(elementAttributesType, prop.name); + if (targetPropSym) { + var msg = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property, prop.name); + checkTypeAssignableTo(getTypeOfSymbol(prop), getTypeOfSymbol(targetPropSym), node, undefined, msg); + } + nameTable[prop.name] = true; + } + } + return type; + } + function getJsxType(name) { + if (jsxTypes[name] === undefined) { + return jsxTypes[name] = getExportedTypeFromNamespace(JsxNames.JSX, name) || unknownType; + } + return jsxTypes[name]; + } + function getIntrinsicTagSymbol(node) { + var links = getNodeLinks(node); + if (!links.resolvedSymbol) { + var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements); + if (intrinsicElementsType !== unknownType) { + var intrinsicProp = getPropertyOfType(intrinsicElementsType, node.tagName.text); + 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, node.tagName.text, "JSX." + JsxNames.IntrinsicElements); + return links.resolvedSymbol = unknownSymbol; + } + else { + if (compilerOptions.noImplicitAny) { + error(node, ts.Diagnostics.JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists, JsxNames.IntrinsicElements); + } + return links.resolvedSymbol = unknownSymbol; + } + } + return links.resolvedSymbol; + } + function getJsxElementInstanceType(node, valueType) { + ts.Debug.assert(!(valueType.flags & 16384)); + 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; + } + } + return getUnionType(signatures.map(getReturnTypeOfSignature)); + } + function getJsxElementPropertiesName() { + var jsxNamespace = getGlobalSymbol(JsxNames.JSX, 1536, undefined); + var attribsPropTypeSym = jsxNamespace && getSymbol(jsxNamespace.exports, JsxNames.ElementAttributesPropertyNameContainer, 793056); + var attribPropType = attribsPropTypeSym && getDeclaredTypeOfSymbol(attribsPropTypeSym); + var attribProperties = attribPropType && getPropertiesOfType(attribPropType); + if (attribProperties) { + if (attribProperties.length === 0) { + return ""; + } + else if (attribProperties.length === 1) { + return attribProperties[0].name; + } + else { + error(attribsPropTypeSym.declarations[0], ts.Diagnostics.The_global_type_JSX_0_may_not_have_more_than_one_property, JsxNames.ElementAttributesPropertyNameContainer); + return undefined; + } + } + else { + return undefined; + } + } + function getResolvedJsxType(node, elemType, elemClassType) { + if (!elemType) { + elemType = checkExpression(node.tagName); + } + if (elemType.flags & 16384) { + var types = elemType.types; + return getUnionType(types.map(function (type) { + return getResolvedJsxType(node, type, elemClassType); + })); + } + var elemInstanceType = getJsxElementInstanceType(node, elemType); + if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { + if (jsxElementType) { + var callSignatures = elemType && getSignaturesOfType(elemType, 0); + var callSignature = callSignatures && callSignatures.length > 0 && callSignatures[0]; + var callReturnType = callSignature && getReturnTypeOfSignature(callSignature); + var paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0])); + if (callReturnType && isTypeAssignableTo(callReturnType, jsxElementType)) { + var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes); + if (intrinsicAttributes !== unknownType) { + paramType = intersectTypes(intrinsicAttributes, paramType); + } + return paramType; + } + } + } + if (elemClassType) { + checkTypeRelatedTo(elemInstanceType, elemClassType, assignableRelation, node, 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 if (attributesType.flags & 16384) { + error(node.tagName, ts.Diagnostics.JSX_element_attributes_type_0_may_not_be_a_union_type, typeToString(attributesType)); + return anyType; + } + 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 getJsxElementAttributesType(node) { + var links = getNodeLinks(node); + if (!links.resolvedJsxType) { + if (isJsxIntrinsicIdentifier(node.tagName)) { + var symbol = getIntrinsicTagSymbol(node); + if (links.jsxFlags & 1) { + return links.resolvedJsxType = getTypeOfSymbol(symbol); + } + else if (links.jsxFlags & 2) { + return links.resolvedJsxType = getIndexInfoOfSymbol(symbol, 0).type; + } + else { + return links.resolvedJsxType = unknownType; + } + } + else { + var elemClassType = getJsxGlobalElementClassType(); + return links.resolvedJsxType = getResolvedJsxType(node, undefined, elemClassType); + } + } + return links.resolvedJsxType; + } + function getJsxAttributePropertySymbol(attrib) { + var attributesType = getJsxElementAttributesType(attrib.parent); + var prop = getPropertyOfType(attributesType, attrib.name.text); + return prop || unknownSymbol; + } + function getJsxGlobalElementClassType() { + if (!jsxElementClassType) { + jsxElementClassType = getExportedTypeFromNamespace(JsxNames.JSX, JsxNames.ElementClass); + } + return jsxElementClassType; + } + function getJsxIntrinsicTagNames() { + var intrinsics = getJsxType(JsxNames.IntrinsicElements); + return intrinsics ? getPropertiesOfType(intrinsics) : emptyArray; + } + function checkJsxPreconditions(errorNode) { + if ((compilerOptions.jsx || 0) === 0) { + error(errorNode, ts.Diagnostics.Cannot_use_JSX_unless_the_jsx_flag_is_provided); + } + if (jsxElementType === undefined) { + if (compilerOptions.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 = compilerOptions.jsx === 2 ? ts.Diagnostics.Cannot_find_name_0 : undefined; + var reactNamespace = compilerOptions.reactNamespace ? compilerOptions.reactNamespace : "React"; + var reactSym = resolveName(node.tagName, reactNamespace, 107455, reactRefErr, reactNamespace); + if (reactSym) { + getSymbolLinks(reactSym).referenced = true; + } + var targetAttributesType = getJsxElementAttributesType(node); + var nameTable = {}; + var sawSpreadedAny = false; + for (var i = node.attributes.length - 1; i >= 0; i--) { + if (node.attributes[i].kind === 246) { + checkJsxAttribute((node.attributes[i]), targetAttributesType, nameTable); + } + else { + ts.Debug.assert(node.attributes[i].kind === 247); + var spreadType = checkJsxSpreadAttribute((node.attributes[i]), targetAttributesType, nameTable); + if (isTypeAny(spreadType)) { + sawSpreadedAny = true; + } + } + } + if (targetAttributesType && !sawSpreadedAny) { + var targetProperties = getPropertiesOfType(targetAttributesType); + for (var i = 0; i < targetProperties.length; i++) { + if (!(targetProperties[i].flags & 536870912) && + nameTable[targetProperties[i].name] === undefined) { + error(node, ts.Diagnostics.Property_0_is_missing_in_type_1, targetProperties[i].name, typeToString(targetAttributesType)); + } + } + } + } + function checkJsxExpression(node) { + if (node.expression) { + return checkExpression(node.expression); + } + else { + return unknownType; + } + } + function getDeclarationKindFromSymbol(s) { + return s.valueDeclaration ? s.valueDeclaration.kind : 145; + } + function getDeclarationFlagsFromSymbol(s) { + return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : s.flags & 134217728 ? 4 | 32 : 0; + } + function checkClassPropertyAccess(node, left, type, prop) { + var flags = getDeclarationFlagsFromSymbol(prop); + var declaringClass = getDeclaredTypeOfSymbol(getParentOfSymbol(prop)); + var errorNode = node.kind === 172 || node.kind === 218 ? + node.name : + node.right; + if (left.kind === 95) { + if (languageVersion < 2 && getDeclarationKindFromSymbol(prop) !== 147) { + 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(declaringClass)); + return false; + } + } + if (!(flags & (8 | 16))) { + 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(declaringClass)); + return false; + } + return true; + } + if (left.kind === 95) { + return true; + } + var enclosingClass = forEachEnclosingClass(node, function (enclosingDeclaration) { + var enclosingClass = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingDeclaration)); + return hasBaseType(enclosingClass, declaringClass) ? enclosingClass : undefined; + }); + if (!enclosingClass) { + error(errorNode, ts.Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(declaringClass)); + return false; + } + if (flags & 32) { + return true; + } + if (type.flags & 33554432) { + type = getConstraintOfTypeParameter(type); + } + if (!(getTargetType(type).flags & (1024 | 2048) && 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) { + var type = checkExpression(node); + if (strictNullChecks) { + var kind = getNullableKind(type); + if (kind) { + error(node, kind & 32 ? kind & 64 ? + ts.Diagnostics.Object_is_possibly_null_or_undefined : + ts.Diagnostics.Object_is_possibly_undefined : + ts.Diagnostics.Object_is_possibly_null); + } + return getNonNullableType(type); + } + 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)) { + return type; + } + var apparentType = getApparentType(getWidenedType(type)); + if (apparentType === unknownType) { + return unknownType; + } + var prop = getPropertyOfType(apparentType, right.text); + if (!prop) { + if (right.text) { + error(right, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(right), typeToString(type.flags & 33554432 ? apparentType : type)); + } + return unknownType; + } + getNodeLinks(node).resolvedSymbol = prop; + if (prop.parent && prop.parent.flags & 32) { + checkClassPropertyAccess(node, left, apparentType, prop); + } + var propType = getTypeOfSymbol(prop); + if (node.kind !== 172 || ts.isAssignmentTarget(node) || + !(propType.flags & 16384) && !(prop.flags & (3 | 4 | 98304))) { + return propType; + } + var leftmostNode = getLeftmostIdentifierOrThis(node); + if (!leftmostNode) { + return propType; + } + if (leftmostNode.kind === 69) { + var leftmostSymbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(leftmostNode)); + if (!leftmostSymbol) { + return propType; + } + var declaration = leftmostSymbol.valueDeclaration; + if (!declaration || declaration.kind !== 218 && declaration.kind !== 142 && declaration.kind !== 169) { + return propType; + } + } + return getFlowTypeOfReference(node, propType, true); + } + function isValidPropertyAccess(node, propertyName) { + var left = node.kind === 172 + ? node.expression + : node.left; + var type = checkExpression(left); + if (type !== unknownType && !isTypeAny(type)) { + var prop = getPropertyOfType(getWidenedType(type), propertyName); + if (prop && prop.parent && prop.parent.flags & 32) { + return checkClassPropertyAccess(node, left, type, prop); + } + } + return true; + } + function getForInVariableSymbol(node) { + var initializer = node.initializer; + if (initializer.kind === 219) { + var variable = initializer.declarations[0]; + if (variable && !ts.isBindingPattern(variable.name)) { + return getSymbolOfNode(variable); + } + } + else if (initializer.kind === 69) { + return getResolvedSymbol(initializer); + } + return undefined; + } + function hasNumericPropertyNames(type) { + return getIndexTypeOfType(type, 1) && !getIndexTypeOfType(type, 0); + } + function isForInVariableForNumericPropertyNames(expr) { + var e = skipParenthesizedNodes(expr); + if (e.kind === 69) { + var symbol = getResolvedSymbol(e); + if (symbol.flags & 3) { + var child = expr; + var node = expr.parent; + while (node) { + if (node.kind === 207 && + child === node.statement && + getForInVariableSymbol(node) === symbol && + hasNumericPropertyNames(checkExpression(node.expression))) { + return true; + } + child = node; + node = node.parent; + } + } + } + return false; + } + function checkIndexedAccess(node) { + if (!node.argumentExpression) { + var sourceFile = ts.getSourceFileOfNode(node); + if (node.parent.kind === 175 && 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); + } + } + var objectType = getApparentType(checkNonNullExpression(node.expression)); + var indexType = node.argumentExpression ? checkExpression(node.argumentExpression) : unknownType; + if (objectType === unknownType) { + return unknownType; + } + var isConstEnum = isConstEnumObjectType(objectType); + if (isConstEnum && + (!node.argumentExpression || node.argumentExpression.kind !== 9)) { + error(node.argumentExpression, ts.Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal); + return unknownType; + } + if (node.argumentExpression) { + var name_12 = getPropertyNameForIndexedAccess(node.argumentExpression, indexType); + if (name_12 !== undefined) { + var prop = getPropertyOfType(objectType, name_12); + if (prop) { + getNodeLinks(node).resolvedSymbol = prop; + return getTypeOfSymbol(prop); + } + else if (isConstEnum) { + error(node.argumentExpression, ts.Diagnostics.Property_0_does_not_exist_on_const_enum_1, name_12, symbolToString(objectType.symbol)); + return unknownType; + } + } + } + if (isTypeAnyOrAllConstituentTypesHaveKind(indexType, 258 | 132 | 16777216)) { + if (isTypeAnyOrAllConstituentTypesHaveKind(indexType, 132) || isForInVariableForNumericPropertyNames(node.argumentExpression)) { + var numberIndexInfo = getIndexInfoOfType(objectType, 1); + if (numberIndexInfo) { + getNodeLinks(node).resolvedIndexInfo = numberIndexInfo; + return numberIndexInfo.type; + } + } + var stringIndexInfo = getIndexInfoOfType(objectType, 0); + if (stringIndexInfo) { + getNodeLinks(node).resolvedIndexInfo = stringIndexInfo; + return stringIndexInfo.type; + } + if (compilerOptions.noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors && !isTypeAny(objectType)) { + error(node, getIndexTypeOfType(objectType, 1) ? + ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number : + ts.Diagnostics.Index_signature_of_object_type_implicitly_has_an_any_type); + } + return anyType; + } + error(node, ts.Diagnostics.An_index_expression_argument_must_be_of_type_string_number_symbol_or_any); + return unknownType; + } + function getPropertyNameForIndexedAccess(indexArgumentExpression, indexArgumentType) { + if (indexArgumentExpression.kind === 9 || indexArgumentExpression.kind === 8) { + return indexArgumentExpression.text; + } + if (indexArgumentExpression.kind === 173 || indexArgumentExpression.kind === 172) { + var value = getConstantValue(indexArgumentExpression); + if (value !== undefined) { + return value.toString(); + } + } + if (checkThatExpressionIsProperSymbolReference(indexArgumentExpression, indexArgumentType, false)) { + var rightHandSideName = indexArgumentExpression.name.text; + return ts.getPropertyNameForKnownSymbolName(rightHandSideName); + } + return undefined; + } + function checkThatExpressionIsProperSymbolReference(expression, expressionType, reportError) { + if (expressionType === unknownType) { + return false; + } + if (!ts.isWellKnownSymbolSyntactically(expression)) { + return false; + } + if ((expressionType.flags & 16777216) === 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(); + 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 resolveUntypedCall(node) { + if (node.kind === 176) { + checkExpression(node.template); + } + else if (node.kind !== 143) { + 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_2 = signatures; _i < signatures_2.length; _i++) { + var signature = signatures_2[_i]; + var symbol = signature.declaration && getSymbolOfNode(signature.declaration); + var parent_9 = signature.declaration && signature.declaration.parent; + if (!lastSymbol || symbol === lastSymbol) { + if (lastParent && parent_9 === lastParent) { + index++; + } + else { + lastParent = parent_9; + index = cutoffIndex; + } + } + else { + index = cutoffIndex = result.length; + lastParent = parent_9; + } + lastSymbol = symbol; + if (signature.hasStringLiterals) { + 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 === 191) { + return i; + } + } + return -1; + } + function hasCorrectArity(node, args, signature) { + var adjustedArgCount; + var typeArguments; + var callIsIncomplete; + var isDecorator; + var spreadArgIndex = -1; + if (node.kind === 176) { + var tagExpression = node; + adjustedArgCount = args.length; + typeArguments = undefined; + if (tagExpression.template.kind === 189) { + 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 === 11); + callIsIncomplete = !!templateLiteral.isUnterminated; + } + } + else if (node.kind === 143) { + isDecorator = true; + typeArguments = undefined; + adjustedArgCount = getEffectiveArgumentCount(node, undefined, signature); + } + else { + var callExpression = node; + if (!callExpression.arguments) { + ts.Debug.assert(callExpression.kind === 175); + return signature.minArgumentCount === 0; + } + adjustedArgCount = callExpression.arguments.hasTrailingComma ? args.length + 1 : args.length; + callIsIncomplete = callExpression.arguments.end === callExpression.end; + typeArguments = callExpression.typeArguments; + spreadArgIndex = getSpreadArgumentIndex(args); + } + var hasRightNumberOfTypeArgs = !typeArguments || + (signature.typeParameters && typeArguments.length === signature.typeParameters.length); + if (!hasRightNumberOfTypeArgs) { + return false; + } + if (spreadArgIndex >= 0) { + return isRestParameterIndex(signature, spreadArgIndex); + } + if (!signature.hasRestParameter && adjustedArgCount > signature.parameters.length) { + return false; + } + var hasEnoughArguments = adjustedArgCount >= signature.minArgumentCount; + return callIsIncomplete || hasEnoughArguments; + } + function getSingleCallSignature(type) { + if (type.flags & 80896) { + 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) { + var context = createInferenceContext(signature.typeParameters, true); + forEachMatchingParameterType(contextualSignature, signature, function (source, target) { + inferTypes(context, instantiateType(source, contextualMapper), target); + }); + return getSignatureInstantiation(signature, getInferredTypes(context)); + } + function inferTypeArguments(node, signature, args, excludeArgument, context) { + var typeParameters = signature.typeParameters; + var inferenceMapper = getInferenceMapper(context); + for (var i = 0; i < typeParameters.length; i++) { + if (!context.inferences[i].isFixed) { + context.inferredTypes[i] = undefined; + } + } + if (context.failedTypeParameterIndex !== undefined && !context.inferences[context.failedTypeParameterIndex].isFixed) { + context.failedTypeParameterIndex = undefined; + } + if (signature.thisType) { + var thisArgumentNode = getThisArgumentOfCall(node); + var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType; + inferTypes(context, thisArgumentType, signature.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 !== 193) { + var paramType = getTypeAtPosition(signature, i); + var argType = getEffectiveArgumentType(node, i, arg); + if (argType === undefined) { + var mapper = excludeArgument && excludeArgument[i] !== undefined ? identityMapper : inferenceMapper; + argType = checkExpressionWithContextualType(arg, paramType, mapper); + } + inferTypes(context, 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, checkExpressionWithContextualType(arg, paramType, inferenceMapper), paramType); + } + } + } + getInferredTypes(context); + } + function checkTypeArguments(signature, typeArgumentNodes, typeArgumentTypes, reportErrors, headMessage) { + var typeParameters = signature.typeParameters; + var typeArgumentsAreAssignable = true; + var mapper; + for (var i = 0; i < typeParameters.length; i++) { + if (typeArgumentsAreAssignable) { + var constraint = getConstraintOfTypeParameter(typeParameters[i]); + if (constraint) { + var errorInfo = void 0; + var typeArgumentHeadMessage = ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1; + if (reportErrors && headMessage) { + errorInfo = ts.chainDiagnosticMessages(errorInfo, typeArgumentHeadMessage); + typeArgumentHeadMessage = headMessage; + } + if (!mapper) { + mapper = createTypeMapper(typeParameters, typeArgumentTypes); + } + var typeArgument = typeArgumentTypes[i]; + typeArgumentsAreAssignable = checkTypeAssignableTo(typeArgument, getTypeWithThisArgument(instantiateType(constraint, mapper), typeArgument), reportErrors ? typeArgumentNodes[i] : undefined, typeArgumentHeadMessage, errorInfo); + } + } + } + return typeArgumentsAreAssignable; + } + function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) { + if (signature.thisType && signature.thisType !== voidType && node.kind !== 175) { + 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, signature.thisType, relation, errorNode, headMessage_1)) { + return false; + } + } + var headMessage = ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1; + var argCount = getEffectiveArgumentCount(node, args, signature); + for (var i = 0; i < argCount; i++) { + var arg = getEffectiveArgument(node, args, i); + if (arg === undefined || arg.kind !== 193) { + var paramType = getTypeAtPosition(signature, i); + var argType = getEffectiveArgumentType(node, i, arg); + if (argType === undefined) { + argType = arg.kind === 9 && !reportErrors + ? getStringLiteralTypeForText(arg.text) + : checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined); + } + var errorNode = reportErrors ? getEffectiveArgumentErrorNode(node, i, arg) : undefined; + if (!checkTypeRelatedTo(argType, paramType, relation, errorNode, headMessage)) { + return false; + } + } + } + return true; + } + function getThisArgumentOfCall(node) { + if (node.kind === 174) { + var callee = node.expression; + if (callee.kind === 172) { + return callee.expression; + } + else if (callee.kind === 173) { + return callee.expression; + } + } + } + function getEffectiveCallArguments(node) { + var args; + if (node.kind === 176) { + var template = node.template; + args = [undefined]; + if (template.kind === 189) { + ts.forEach(template.templateSpans, function (span) { + args.push(span.expression); + }); + } + } + else if (node.kind === 143) { + return undefined; + } + else { + args = node.arguments || emptyArray; + } + return args; + } + function getEffectiveArgumentCount(node, args, signature) { + if (node.kind === 143) { + switch (node.parent.kind) { + case 221: + case 192: + return 1; + case 145: + return 2; + case 147: + case 149: + case 150: + if (languageVersion === 0) { + return 2; + } + return signature.parameters.length >= 3 ? 3 : 2; + case 142: + return 3; + } + } + else { + return args.length; + } + } + function getEffectiveDecoratorFirstArgumentType(node) { + if (node.kind === 221) { + var classSymbol = getSymbolOfNode(node); + return getTypeOfSymbol(classSymbol); + } + if (node.kind === 142) { + node = node.parent; + if (node.kind === 148) { + var classSymbol = getSymbolOfNode(node); + return getTypeOfSymbol(classSymbol); + } + } + if (node.kind === 145 || + node.kind === 147 || + node.kind === 149 || + node.kind === 150) { + return getParentTypeOfClassElement(node); + } + ts.Debug.fail("Unsupported decorator target."); + return unknownType; + } + function getEffectiveDecoratorSecondArgumentType(node) { + if (node.kind === 221) { + ts.Debug.fail("Class decorators should not have a second synthetic argument."); + return unknownType; + } + if (node.kind === 142) { + node = node.parent; + if (node.kind === 148) { + return anyType; + } + } + if (node.kind === 145 || + node.kind === 147 || + node.kind === 149 || + node.kind === 150) { + var element = node; + switch (element.name.kind) { + case 69: + case 8: + case 9: + return getStringLiteralTypeForText(element.name.text); + case 140: + var nameType = checkComputedPropertyName(element.name); + if (isTypeOfKind(nameType, 16777216)) { + 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 === 221) { + ts.Debug.fail("Class decorators should not have a third synthetic argument."); + return unknownType; + } + if (node.kind === 142) { + return numberType; + } + if (node.kind === 145) { + ts.Debug.fail("Property decorators should not have a third synthetic argument."); + return unknownType; + } + if (node.kind === 147 || + node.kind === 149 || + node.kind === 150) { + 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, arg) { + if (node.kind === 143) { + return getEffectiveDecoratorArgumentType(node, argIndex); + } + else if (argIndex === 0 && node.kind === 176) { + return getGlobalTemplateStringsArrayType(); + } + return undefined; + } + function getEffectiveArgument(node, args, argIndex) { + if (node.kind === 143 || + (argIndex === 0 && node.kind === 176)) { + return undefined; + } + return args[argIndex]; + } + function getEffectiveArgumentErrorNode(node, argIndex, arg) { + if (node.kind === 143) { + return node.expression; + } + else if (argIndex === 0 && node.kind === 176) { + return node.template; + } + else { + return arg; + } + } + function resolveCall(node, signatures, candidatesOutArray, headMessage) { + var isTaggedTemplate = node.kind === 176; + var isDecorator = node.kind === 143; + var typeArguments; + if (!isTaggedTemplate && !isDecorator) { + typeArguments = node.typeArguments; + if (node.expression.kind !== 95) { + ts.forEach(typeArguments, checkSourceElement); + } + } + var candidates = candidatesOutArray || []; + reorderCandidates(signatures, candidates); + if (!candidates.length) { + reportError(ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target); + return resolveErrorCall(node); + } + var args = getEffectiveCallArguments(node); + var excludeArgument; + if (!isDecorator) { + for (var i = isTaggedTemplate ? 1 : 0; i < args.length; i++) { + if (isContextSensitive(args[i])) { + if (!excludeArgument) { + excludeArgument = new Array(args.length); + } + excludeArgument[i] = true; + } + } + } + var candidateForArgumentError; + var candidateForTypeArgumentError; + var resultOfFailedInference; + var result; + if (candidates.length > 1) { + result = chooseOverload(candidates, subtypeRelation); + } + if (!result) { + candidateForArgumentError = undefined; + candidateForTypeArgumentError = undefined; + resultOfFailedInference = undefined; + result = chooseOverload(candidates, assignableRelation); + } + if (result) { + return result; + } + if (candidateForArgumentError) { + checkApplicableSignature(node, args, candidateForArgumentError, assignableRelation, undefined, true); + } + else if (candidateForTypeArgumentError) { + if (!isTaggedTemplate && !isDecorator && typeArguments) { + var typeArguments_2 = node.typeArguments; + checkTypeArguments(candidateForTypeArgumentError, typeArguments_2, ts.map(typeArguments_2, getTypeFromTypeNode), true, headMessage); + } + else { + ts.Debug.assert(resultOfFailedInference.failedTypeParameterIndex >= 0); + var failedTypeParameter = candidateForTypeArgumentError.typeParameters[resultOfFailedInference.failedTypeParameterIndex]; + var inferenceCandidates = getInferenceCandidates(resultOfFailedInference, resultOfFailedInference.failedTypeParameterIndex); + var diagnosticChainHead = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly, typeToString(failedTypeParameter)); + if (headMessage) { + diagnosticChainHead = ts.chainDiagnosticMessages(diagnosticChainHead, headMessage); + } + reportNoCommonSupertypeError(inferenceCandidates, node.expression || node.tag, diagnosticChainHead); + } + } + else { + reportError(ts.Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target); + } + if (!produceDiagnostics) { + for (var _i = 0, candidates_1 = candidates; _i < candidates_1.length; _i++) { + var candidate = candidates_1[_i]; + if (hasCorrectArity(node, args, candidate)) { + if (candidate.typeParameters && typeArguments) { + candidate = getSignatureInstantiation(candidate, ts.map(typeArguments, getTypeFromTypeNode)); + } + return candidate; + } + } + } + return resolveErrorCall(node); + function reportError(message, arg0, arg1, arg2) { + var errorInfo; + errorInfo = ts.chainDiagnosticMessages(errorInfo, message, arg0, arg1, arg2); + if (headMessage) { + errorInfo = ts.chainDiagnosticMessages(errorInfo, headMessage); + } + diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(node, errorInfo)); + } + function chooseOverload(candidates, relation) { + for (var _i = 0, candidates_2 = candidates; _i < candidates_2.length; _i++) { + var originalCandidate = candidates_2[_i]; + if (!hasCorrectArity(node, args, originalCandidate)) { + continue; + } + var candidate = void 0; + var typeArgumentsAreValid = void 0; + var inferenceContext = originalCandidate.typeParameters + ? createInferenceContext(originalCandidate.typeParameters, false) + : undefined; + while (true) { + candidate = originalCandidate; + if (candidate.typeParameters) { + var typeArgumentTypes = void 0; + if (typeArguments) { + typeArgumentTypes = ts.map(typeArguments, getTypeFromTypeNode); + typeArgumentsAreValid = checkTypeArguments(candidate, typeArguments, typeArgumentTypes, false); + } + else { + inferTypeArguments(node, candidate, args, excludeArgument, inferenceContext); + typeArgumentsAreValid = inferenceContext.failedTypeParameterIndex === undefined; + typeArgumentTypes = inferenceContext.inferredTypes; + } + if (!typeArgumentsAreValid) { + break; + } + candidate = getSignatureInstantiation(candidate, typeArgumentTypes); + } + if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, false)) { + break; + } + var index = excludeArgument ? ts.indexOf(excludeArgument, true) : -1; + if (index < 0) { + return candidate; + } + excludeArgument[index] = false; + } + if (originalCandidate.typeParameters) { + var instantiatedCandidate = candidate; + if (typeArgumentsAreValid) { + candidateForArgumentError = instantiatedCandidate; + } + else { + candidateForTypeArgumentError = originalCandidate; + if (!typeArguments) { + resultOfFailedInference = inferenceContext; + } + } + } + else { + ts.Debug.assert(originalCandidate === candidate); + candidateForArgumentError = originalCandidate; + } + } + return undefined; + } + } + function resolveCallExpression(node, candidatesOutArray) { + if (node.expression.kind === 95) { + var superType = checkSuperExpression(node.expression); + if (superType !== unknownType) { + var baseTypeNode = ts.getClassExtendsHeritageClauseElement(ts.getContainingClass(node)); + if (baseTypeNode) { + var baseConstructors = getInstantiatedConstructorsForTypeArguments(superType, baseTypeNode.typeArguments); + return resolveCall(node, baseConstructors, candidatesOutArray); + } + } + return resolveUntypedCall(node); + } + var funcType = checkNonNullExpression(node.expression); + var apparentType = getApparentType(funcType); + if (apparentType === unknownType) { + return resolveErrorCall(node); + } + var callSignatures = getSignaturesOfType(apparentType, 0); + var constructSignatures = getSignaturesOfType(apparentType, 1); + if (isTypeAny(funcType) || (!callSignatures.length && !constructSignatures.length && !(funcType.flags & 16384) && isTypeAssignableTo(funcType, globalFunctionType))) { + 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); + } + return resolveErrorCall(node); + } + return resolveCall(node, callSignatures, candidatesOutArray); + } + 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); + expressionType = getApparentType(expressionType); + if (expressionType === unknownType) { + return resolveErrorCall(node); + } + var valueDecl = expressionType.symbol && getClassLikeDeclarationOfSymbol(expressionType.symbol); + if (valueDecl && valueDecl.flags & 128) { + error(node, ts.Diagnostics.Cannot_create_an_instance_of_the_abstract_class_0, ts.declarationNameToString(valueDecl.name)); + 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); + } + return resolveCall(node, constructSignatures, candidatesOutArray); + } + var callSignatures = getSignaturesOfType(expressionType, 0); + if (callSignatures.length) { + var signature = resolveCall(node, callSignatures, candidatesOutArray); + if (getReturnTypeOfSignature(signature) !== voidType) { + error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); + } + if (signature.thisType === 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 flags = declaration.flags; + if (!(flags & (8 | 16))) { + return true; + } + var declaringClassDeclaration = getClassLikeDeclarationOfSymbol(declaration.parent.symbol); + var declaringClass = getDeclaredTypeOfSymbol(declaration.parent.symbol); + if (!isNodeWithinClass(node, declaringClassDeclaration)) { + if (flags & 8) { + error(node, ts.Diagnostics.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration, typeToString(declaringClass)); + } + if (flags & 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); + if (isTypeAny(tagType) || (!callSignatures.length && !(tagType.flags & 16384) && isTypeAssignableTo(tagType, globalFunctionType))) { + return resolveUntypedCall(node); + } + if (!callSignatures.length) { + error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature); + return resolveErrorCall(node); + } + return resolveCall(node, callSignatures, candidatesOutArray); + } + function getDiagnosticHeadMessageForDecoratorResolution(node) { + switch (node.parent.kind) { + case 221: + case 192: + return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression; + case 142: + return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression; + case 145: + return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression; + case 147: + case 149: + case 150: + 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); + if (funcType === anyType || (!callSignatures.length && !(funcType.flags & 16384) && isTypeAssignableTo(funcType, globalFunctionType))) { + return resolveUntypedCall(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); + errorInfo = ts.chainDiagnosticMessages(errorInfo, headMessage); + diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(node, errorInfo)); + return resolveErrorCall(node); + } + return resolveCall(node, callSignatures, candidatesOutArray, headMessage); + } + function resolveSignature(node, candidatesOutArray) { + switch (node.kind) { + case 174: + return resolveCallExpression(node, candidatesOutArray); + case 175: + return resolveNewExpression(node, candidatesOutArray); + case 176: + return resolveTaggedTemplateExpression(node, candidatesOutArray); + case 143: + return resolveDecorator(node, candidatesOutArray); + } + ts.Debug.fail("Branch in 'resolveSignature' should be unreachable."); + } + function getResolvedSignature(node, candidatesOutArray) { + var links = getNodeLinks(node); + var cached = links.resolvedSignature; + if (cached && cached !== anySignature && !candidatesOutArray) { + return cached; + } + links.resolvedSignature = anySignature; + var result = resolveSignature(node, candidatesOutArray); + links.resolvedSignature = flowLoopStart === flowLoopCount ? result : cached; + return result; + } + function getResolvedOrAnySignature(node) { + return getNodeLinks(node).resolvedSignature === anySignature ? anySignature : getResolvedSignature(node); + } + function getInferredClassType(symbol) { + var links = getSymbolLinks(symbol); + if (!links.inferredClassType) { + links.inferredClassType = createAnonymousType(undefined, symbol.members, emptyArray, emptyArray, undefined, undefined); + } + return links.inferredClassType; + } + function checkCallExpression(node) { + checkGrammarTypeArguments(node, node.typeArguments) || checkGrammarArguments(node, node.arguments); + var signature = getResolvedSignature(node); + if (node.expression.kind === 95) { + return voidType; + } + if (node.kind === 175) { + var declaration = signature.declaration; + if (declaration && + declaration.kind !== 148 && + declaration.kind !== 152 && + declaration.kind !== 157 && + !ts.isJSDocConstructSignature(declaration)) { + var funcSymbol = checkExpression(node.expression).symbol; + if (funcSymbol && funcSymbol.members && (funcSymbol.flags & 16)) { + return getInferredClassType(funcSymbol); + } + else if (compilerOptions.noImplicitAny) { + error(node, ts.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type); + } + return anyType; + } + } + if (ts.isInJavaScriptFile(node) && ts.isRequireCall(node, true)) { + return resolveExternalModuleTypeByLiteral(node.arguments[0]); + } + return getReturnTypeOfSignature(signature); + } + function checkTaggedTemplateExpression(node) { + return getReturnTypeOfSignature(getResolvedSignature(node)); + } + function checkAssertion(node) { + var exprType = getRegularTypeOfObjectLiteral(checkExpression(node.expression)); + var targetType = getTypeFromTypeNode(node.type); + if (produceDiagnostics && targetType !== unknownType) { + var widenedType = getWidenedType(exprType); + if (!isTypeComparableTo(targetType, widenedType)) { + checkTypeComparableTo(exprType, targetType, node, ts.Diagnostics.Type_0_cannot_be_converted_to_type_1); + } + } + return targetType; + } + function checkNonNullAssertion(node) { + return getNonNullableType(checkExpression(node.expression)); + } + function getTypeOfParameter(symbol) { + var type = getTypeOfSymbol(symbol); + if (strictNullChecks) { + var declaration = symbol.valueDeclaration; + if (declaration && declaration.initializer) { + return addNullableKind(type, 32); + } + } + 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 assignContextualParameterTypes(signature, context, mapper) { + var len = signature.parameters.length - (signature.hasRestParameter ? 1 : 0); + for (var i = 0; i < len; i++) { + var parameter = signature.parameters[i]; + var contextualParameterType = getTypeAtPosition(context, i); + assignTypeToParameterAndFixTypeParameters(parameter, contextualParameterType, mapper); + } + if (signature.hasRestParameter && isRestParameterIndex(context, signature.parameters.length - 1)) { + var parameter = ts.lastOrUndefined(signature.parameters); + var contextualParameterType = getTypeOfSymbol(ts.lastOrUndefined(context.parameters)); + assignTypeToParameterAndFixTypeParameters(parameter, contextualParameterType, mapper); + } + } + function assignBindingElementTypes(node) { + if (ts.isBindingPattern(node.name)) { + for (var _i = 0, _a = node.name.elements; _i < _a.length; _i++) { + var element = _a[_i]; + if (element.kind !== 193) { + if (element.name.kind === 69) { + getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element); + } + assignBindingElementTypes(element); + } + } + } + } + function assignTypeToParameterAndFixTypeParameters(parameter, contextualType, mapper) { + var links = getSymbolLinks(parameter); + if (!links.type) { + links.type = instantiateType(contextualType, mapper); + if (links.type === emptyObjectType && + (parameter.valueDeclaration.name.kind === 167 || + parameter.valueDeclaration.name.kind === 168)) { + links.type = getTypeFromBindingPattern(parameter.valueDeclaration.name); + } + assignBindingElementTypes(parameter.valueDeclaration); + } + else if (isInferentialContext(mapper)) { + inferTypes(mapper.context, links.type, instantiateType(contextualType, mapper)); + } + } + function getReturnTypeFromJSDocComment(func) { + var returnTag = ts.getJSDocReturnTag(func); + if (returnTag && returnTag.typeExpression) { + return getTypeFromTypeNode(returnTag.typeExpression.type); + } + return undefined; + } + function createPromiseType(promisedType) { + var globalPromiseType = getGlobalPromiseType(); + if (globalPromiseType !== emptyGenericType) { + promisedType = getAwaitedType(promisedType); + return createTypeReference(globalPromiseType, [promisedType]); + } + return emptyObjectType; + } + function getReturnTypeFromBody(func, contextualMapper) { + var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); + if (!func.body) { + return unknownType; + } + var isAsync = ts.isAsyncFunctionLike(func); + var type; + if (func.body.kind !== 199) { + type = checkExpressionCached(func.body, contextualMapper); + if (isAsync) { + type = checkAwaitedType(type, func, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member); + } + } + else { + var types = void 0; + var funcIsGenerator = !!func.asteriskToken; + if (funcIsGenerator) { + types = checkAndAggregateYieldOperandTypes(func.body, contextualMapper); + if (types.length === 0) { + var iterableIteratorAny = createIterableIteratorType(anyType); + if (compilerOptions.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 { + var hasImplicitReturn = !!(func.flags & 32768); + types = checkAndAggregateReturnExpressionTypes(func.body, contextualMapper, isAsync, hasImplicitReturn); + if (!types) { + return neverType; + } + if (types.length === 0) { + if (isAsync) { + var promiseType = createPromiseType(voidType); + if (promiseType === emptyObjectType) { + error(func, ts.Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); + return unknownType; + } + return promiseType; + } + return voidType; + } + } + type = contextualSignature ? getUnionType(types) : getCommonSupertype(types); + if (!type) { + if (funcIsGenerator) { + error(func, ts.Diagnostics.No_best_common_type_exists_among_yield_expressions); + return createIterableIteratorType(unknownType); + } + else { + error(func, ts.Diagnostics.No_best_common_type_exists_among_return_expressions); + return getUnionType(types); + } + } + if (funcIsGenerator) { + type = createIterableIteratorType(type); + } + } + if (!contextualSignature) { + reportErrorsFromWidening(func, type); + } + var widenedType = getWidenedType(type); + if (isAsync) { + var promiseType = createPromiseType(widenedType); + if (promiseType === emptyObjectType) { + error(func, ts.Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); + return unknownType; + } + return promiseType; + } + else { + return widenedType; + } + } + function checkAndAggregateYieldOperandTypes(body, contextualMapper) { + var aggregatedTypes = []; + ts.forEachYieldExpression(body, function (yieldExpression) { + var expr = yieldExpression.expression; + if (expr) { + var type = checkExpressionCached(expr, contextualMapper); + if (yieldExpression.asteriskToken) { + type = checkElementTypeOfIterable(type, yieldExpression.expression); + } + if (!ts.contains(aggregatedTypes, type)) { + aggregatedTypes.push(type); + } + } + }); + return aggregatedTypes; + } + function checkAndAggregateReturnExpressionTypes(body, contextualMapper, isAsync, hasImplicitReturn) { + var aggregatedTypes = []; + var hasOmittedExpressions = false; + ts.forEachReturnStatement(body, function (returnStatement) { + var expr = returnStatement.expression; + if (expr) { + var type = checkExpressionCached(expr, contextualMapper); + if (isAsync) { + type = checkAwaitedType(type, body.parent, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member); + } + if (type !== neverType && !ts.contains(aggregatedTypes, type)) { + aggregatedTypes.push(type); + } + } + else { + hasOmittedExpressions = true; + } + }); + if (aggregatedTypes.length === 0 && !hasOmittedExpressions && !hasImplicitReturn) { + return undefined; + } + if (strictNullChecks && aggregatedTypes.length && (hasOmittedExpressions || hasImplicitReturn)) { + if (!ts.contains(aggregatedTypes, undefinedType)) { + aggregatedTypes.push(undefinedType); + } + } + return aggregatedTypes; + } + function checkAllCodePathsInNonVoidFunctionReturnOrThrow(func, returnType) { + if (!produceDiagnostics) { + return; + } + if (returnType && maybeTypeOfKind(returnType, 1 | 16)) { + return; + } + if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 || !(func.flags & 32768)) { + return; + } + var hasExplicitReturn = func.flags & 65536; + if (returnType === neverType) { + error(func.type, ts.Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point); + } + else if (returnType && !hasExplicitReturn) { + error(func.type, ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value); + } + else if (returnType && strictNullChecks && !isTypeAssignableTo(undefinedType, returnType)) { + error(func.type, 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(func.type || func, ts.Diagnostics.Not_all_code_paths_return_a_value); + } + } + function checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper) { + ts.Debug.assert(node.kind !== 147 || ts.isObjectLiteralMethod(node)); + var hasGrammarError = checkGrammarFunctionLikeDeclaration(node); + if (!hasGrammarError && node.kind === 179) { + checkGrammarForGenerator(node); + } + if (contextualMapper === identityMapper && isContextSensitive(node)) { + checkNodeDeferred(node); + return anyFunctionType; + } + var links = getNodeLinks(node); + var type = getTypeOfSymbol(node.symbol); + var contextSensitive = isContextSensitive(node); + var mightFixTypeParameters = contextSensitive && isInferentialContext(contextualMapper); + if (mightFixTypeParameters || !(links.flags & 1024)) { + var contextualSignature = getContextualSignature(node); + var contextChecked = !!(links.flags & 1024); + if (mightFixTypeParameters || !contextChecked) { + links.flags |= 1024; + if (contextualSignature) { + var signature = getSignaturesOfType(type, 0)[0]; + if (contextSensitive) { + assignContextualParameterTypes(signature, contextualSignature, contextualMapper || identityMapper); + } + if (mightFixTypeParameters || !node.type && !signature.resolvedReturnType) { + var returnType = getReturnTypeFromBody(node, contextualMapper); + if (!signature.resolvedReturnType) { + signature.resolvedReturnType = returnType; + } + } + } + if (!contextChecked) { + checkSignatureDeclaration(node); + checkNodeDeferred(node); + } + } + } + if (produceDiagnostics && node.kind !== 147 && node.kind !== 146) { + checkCollisionWithCapturedSuperVariable(node, node.name); + checkCollisionWithCapturedThisVariable(node, node.name); + } + return type; + } + function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) { + ts.Debug.assert(node.kind !== 147 || ts.isObjectLiteralMethod(node)); + var isAsync = ts.isAsyncFunctionLike(node); + var returnOrPromisedType = node.type && (isAsync ? checkAsyncFunctionReturnType(node) : getTypeFromTypeNode(node.type)); + if (!node.asteriskToken) { + checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnOrPromisedType); + } + if (node.body) { + if (!node.type) { + getReturnTypeOfSignature(getSignatureFromDeclaration(node)); + } + if (node.body.kind === 199) { + checkSourceElement(node.body); + } + else { + var exprType = checkExpression(node.body); + if (returnOrPromisedType) { + if (isAsync) { + var awaitedType = checkAwaitedType(exprType, node.body, ts.Diagnostics.Expression_body_for_async_arrow_function_does_not_have_a_valid_callable_then_member); + checkTypeAssignableTo(awaitedType, returnOrPromisedType, node.body); + } + else { + checkTypeAssignableTo(exprType, returnOrPromisedType, node.body); + } + } + } + } + } + function checkArithmeticOperandType(operand, type, diagnostic) { + if (!isTypeAnyOrAllConstituentTypesHaveKind(type, 132)) { + error(operand, diagnostic); + return false; + } + return true; + } + function isReadonlySymbol(symbol) { + return symbol.flags & 4 && (getDeclarationFlagsFromSymbol(symbol) & 64) !== 0 || + symbol.flags & 3 && (getDeclarationFlagsFromSymbol(symbol) & 2048) !== 0 || + symbol.flags & 98304 && !(symbol.flags & 65536) || + (symbol.flags & 8) !== 0; + } + function isReferenceToReadonlyEntity(expr, symbol) { + if (isReadonlySymbol(symbol)) { + if (symbol.flags & 4 && + (expr.kind === 172 || expr.kind === 173) && + expr.expression.kind === 97) { + var func = ts.getContainingFunction(expr); + return !(func && func.kind === 148 && func.parent === symbol.valueDeclaration.parent); + } + return true; + } + return false; + } + function isReferenceThroughNamespaceImport(expr) { + if (expr.kind === 172 || expr.kind === 173) { + var node = skipParenthesizedNodes(expr.expression); + if (node.kind === 69) { + var symbol = getNodeLinks(node).resolvedSymbol; + if (symbol.flags & 8388608) { + var declaration = getDeclarationOfAliasSymbol(symbol); + return declaration && declaration.kind === 232; + } + } + } + return false; + } + function checkReferenceExpression(expr, invalidReferenceMessage, constantVariableMessage) { + var node = skipParenthesizedNodes(expr); + if (node.kind !== 69 && node.kind !== 172 && node.kind !== 173) { + error(expr, invalidReferenceMessage); + return false; + } + var links = getNodeLinks(node); + var symbol = getExportSymbolOfValueSymbolIfExported(links.resolvedSymbol); + if (symbol) { + if (symbol !== unknownSymbol && symbol !== argumentsSymbol) { + if (node.kind === 69 && !(symbol.flags & 3)) { + error(expr, invalidReferenceMessage); + return false; + } + if (isReferenceToReadonlyEntity(node, symbol) || isReferenceThroughNamespaceImport(node)) { + error(expr, constantVariableMessage); + return false; + } + } + } + else if (node.kind === 173) { + if (links.resolvedIndexInfo && links.resolvedIndexInfo.isReadonly) { + error(expr, constantVariableMessage); + return false; + } + } + return true; + } + function checkDeleteExpression(node) { + checkExpression(node.expression); + return booleanType; + } + function checkTypeOfExpression(node) { + checkExpression(node.expression); + return stringType; + } + function checkVoidExpression(node) { + checkExpression(node.expression); + return undefinedType; + } + function checkAwaitExpression(node) { + if (produceDiagnostics) { + if (!(node.flags & 33554432)) { + 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); + } + function checkPrefixUnaryExpression(node) { + var operandType = checkExpression(node.operand); + switch (node.operator) { + case 35: + case 36: + case 50: + if (maybeTypeOfKind(operandType, 16777216)) { + error(node.operand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(node.operator)); + } + return numberType; + case 49: + return booleanType; + case 41: + case 42: + var ok = checkArithmeticOperandType(node.operand, getNonNullableType(operandType), 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_property_or_indexer, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant_or_a_read_only_property); + } + return numberType; + } + return unknownType; + } + function checkPostfixUnaryExpression(node) { + var operandType = checkExpression(node.operand); + var ok = checkArithmeticOperandType(node.operand, getNonNullableType(operandType), 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_property_or_indexer, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_cannot_be_a_constant_or_a_read_only_property); + } + return numberType; + } + function maybeTypeOfKind(type, kind) { + if (type.flags & kind) { + return true; + } + if (type.flags & 49152) { + var types = type.types; + for (var _i = 0, types_10 = types; _i < types_10.length; _i++) { + var t = types_10[_i]; + if (maybeTypeOfKind(t, kind)) { + return true; + } + } + } + return false; + } + function isTypeOfKind(type, kind) { + if (type.flags & kind) { + return true; + } + if (type.flags & 16384) { + var types = type.types; + for (var _i = 0, types_11 = types; _i < types_11.length; _i++) { + var t = types_11[_i]; + if (!isTypeOfKind(t, kind)) { + return false; + } + } + return true; + } + if (type.flags & 32768) { + var types = type.types; + for (var _a = 0, types_12 = types; _a < types_12.length; _a++) { + var t = types_12[_a]; + if (isTypeOfKind(t, kind)) { + return true; + } + } + } + return false; + } + function isConstEnumObjectType(type) { + return type.flags & (80896 | 65536) && type.symbol && isConstEnumSymbol(type.symbol); + } + function isConstEnumSymbol(symbol) { + return (symbol.flags & 128) !== 0; + } + function checkInstanceOfExpression(left, right, leftType, rightType) { + if (isTypeOfKind(leftType, 16777726)) { + 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) || 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 (!isTypeAnyOrAllConstituentTypesHaveKind(leftType, 258 | 132 | 16777216)) { + error(left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol); + } + if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, 80896 | 512)) { + 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, contextualMapper) { + var properties = node.properties; + for (var _i = 0, properties_3 = properties; _i < properties_3.length; _i++) { + var p = properties_3[_i]; + checkObjectLiteralDestructuringPropertyAssignment(sourceType, p, contextualMapper); + } + return sourceType; + } + function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType, property, contextualMapper) { + if (property.kind === 253 || property.kind === 254) { + var name_13 = property.name; + if (name_13.kind === 140) { + checkComputedPropertyName(name_13); + } + if (isComputedNonLiteralName(name_13)) { + return undefined; + } + var text = getTextOfPropertyName(name_13); + var type = isTypeAny(objectLiteralType) + ? objectLiteralType + : getTypeOfPropertyOfType(objectLiteralType, text) || + isNumericLiteralName(text) && getIndexTypeOfType(objectLiteralType, 1) || + getIndexTypeOfType(objectLiteralType, 0); + if (type) { + if (property.kind === 254) { + return checkDestructuringAssignment(property, type); + } + else { + return checkDestructuringAssignment(property.initializer, type); + } + } + else { + error(name_13, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name_13)); + } + } + else { + error(property, ts.Diagnostics.Property_assignment_expected); + } + } + function checkArrayLiteralAssignment(node, sourceType, contextualMapper) { + var elementType = checkIteratedTypeOrElementType(sourceType, node, false) || unknownType; + var elements = node.elements; + for (var i = 0; i < elements.length; i++) { + checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, elementType, contextualMapper); + } + return sourceType; + } + function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, contextualMapper) { + var elements = node.elements; + var element = elements[elementIndex]; + if (element.kind !== 193) { + if (element.kind !== 191) { + var propName = "" + elementIndex; + var type = isTypeAny(sourceType) + ? sourceType + : isTupleLikeType(sourceType) + ? getTypeOfPropertyOfType(sourceType, propName) + : elementType; + if (type) { + return checkDestructuringAssignment(element, type, contextualMapper); + } + else { + if (isTupleType(sourceType)) { + error(element, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), sourceType.elementTypes.length, 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_an_array_destructuring_pattern); + } + else { + var restExpression = element.expression; + if (restExpression.kind === 187 && restExpression.operatorToken.kind === 56) { + error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); + } + else { + return checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper); + } + } + } + } + return undefined; + } + function checkDestructuringAssignment(exprOrAssignment, sourceType, contextualMapper) { + var target; + if (exprOrAssignment.kind === 254) { + var prop = exprOrAssignment; + if (prop.objectAssignmentInitializer) { + checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, contextualMapper); + } + target = exprOrAssignment.name; + } + else { + target = exprOrAssignment; + } + if (target.kind === 187 && target.operatorToken.kind === 56) { + checkBinaryExpression(target, contextualMapper); + target = target.left; + } + if (target.kind === 171) { + return checkObjectLiteralAssignment(target, sourceType, contextualMapper); + } + if (target.kind === 170) { + return checkArrayLiteralAssignment(target, sourceType, contextualMapper); + } + return checkReferenceAssignment(target, sourceType, contextualMapper); + } + function checkReferenceAssignment(target, sourceType, contextualMapper) { + var targetType = checkExpression(target, contextualMapper); + if (checkReferenceExpression(target, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression, ts.Diagnostics.Left_hand_side_of_assignment_expression_cannot_be_a_constant_or_a_read_only_property)) { + checkTypeAssignableTo(sourceType, targetType, target, undefined); + } + return sourceType; + } + function isTypeEqualityComparableTo(source, target) { + return (target.flags & 96) !== 0 || isTypeComparableTo(source, target); + } + function checkBinaryExpression(node, contextualMapper) { + return checkBinaryLikeExpression(node.left, node.operatorToken, node.right, contextualMapper, node); + } + function checkBinaryLikeExpression(left, operatorToken, right, contextualMapper, errorNode) { + var operator = operatorToken.kind; + if (operator === 56 && (left.kind === 171 || left.kind === 170)) { + return checkDestructuringAssignment(left, checkExpression(right, contextualMapper), contextualMapper); + } + var leftType = checkExpression(left, contextualMapper); + var rightType = checkExpression(right, contextualMapper); + switch (operator) { + case 37: + case 38: + case 59: + case 60: + case 39: + case 61: + case 40: + case 62: + case 36: + case 58: + case 43: + case 63: + case 44: + case 64: + case 45: + case 65: + case 47: + case 67: + case 48: + case 68: + case 46: + case 66: + if (leftType.flags & 96) + leftType = rightType; + if (rightType.flags & 96) + rightType = leftType; + leftType = getNonNullableType(leftType); + rightType = getNonNullableType(rightType); + var suggestedOperator = void 0; + if ((leftType.flags & 8) && + (rightType.flags & 8) && + (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 35: + case 57: + if (leftType.flags & 96) + leftType = rightType; + if (rightType.flags & 96) + rightType = leftType; + leftType = getNonNullableType(leftType); + rightType = getNonNullableType(rightType); + var resultType = void 0; + if (isTypeOfKind(leftType, 132) && isTypeOfKind(rightType, 132)) { + resultType = numberType; + } + else { + if (isTypeOfKind(leftType, 258) || isTypeOfKind(rightType, 258)) { + 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 === 57) { + checkAssignmentOperator(resultType); + } + return resultType; + case 25: + case 27: + case 28: + case 29: + if (checkForDisallowedESSymbolOperand(operator)) { + if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) { + reportOperatorError(); + } + } + return booleanType; + case 30: + case 31: + case 32: + case 33: + if (!isTypeEqualityComparableTo(leftType, rightType) && !isTypeEqualityComparableTo(rightType, leftType)) { + reportOperatorError(); + } + return booleanType; + case 91: + return checkInstanceOfExpression(left, right, leftType, rightType); + case 90: + return checkInExpression(left, right, leftType, rightType); + case 51: + return addNullableKind(rightType, getNullableKind(leftType)); + case 52: + return getUnionType([getNonNullableType(leftType), rightType]); + case 56: + checkAssignmentOperator(rightType); + return getRegularTypeOfObjectLiteral(rightType); + case 24: + return rightType; + } + function checkForDisallowedESSymbolOperand(operator) { + var offendingSymbolOperand = maybeTypeOfKind(leftType, 16777216) ? left : + maybeTypeOfKind(rightType, 16777216) ? 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 47: + case 67: + return 52; + case 48: + case 68: + return 33; + case 46: + case 66: + return 51; + default: + return undefined; + } + } + function checkAssignmentOperator(valueType) { + if (produceDiagnostics && operator >= 56 && operator <= 68) { + var ok = checkReferenceExpression(left, ts.Diagnostics.Invalid_left_hand_side_of_assignment_expression, ts.Diagnostics.Left_hand_side_of_assignment_expression_cannot_be_a_constant_or_a_read_only_property); + if (ok) { + 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 & 8388608) || 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); + if (func && func.asteriskToken) { + var expressionType = checkExpressionCached(node.expression, undefined); + var expressionElementType = void 0; + var nodeIsYieldStar = !!node.asteriskToken; + if (nodeIsYieldStar) { + expressionElementType = checkElementTypeOfIterable(expressionType, node.expression); + } + if (func.type) { + var signatureElementType = getElementTypeOfIterableIterator(getTypeFromTypeNode(func.type)) || anyType; + if (nodeIsYieldStar) { + checkTypeAssignableTo(expressionElementType, signatureElementType, node.expression, undefined); + } + else { + checkTypeAssignableTo(expressionType, signatureElementType, node.expression, undefined); + } + } + } + } + return anyType; + } + function checkConditionalExpression(node, contextualMapper) { + checkExpression(node.condition); + var type1 = checkExpression(node.whenTrue, contextualMapper); + var type2 = checkExpression(node.whenFalse, contextualMapper); + return getUnionType([type1, type2]); + } + function checkStringLiteralExpression(node) { + var contextualType = getContextualType(node); + if (contextualType && contextualTypeIsStringLiteralType(contextualType)) { + return getStringLiteralTypeForText(node.text); + } + return stringType; + } + function checkTemplateExpression(node) { + ts.forEach(node.templateSpans, function (templateSpan) { + checkExpression(templateSpan.expression); + }); + return stringType; + } + function checkExpressionWithContextualType(node, contextualType, contextualMapper) { + var saveContextualType = node.contextualType; + node.contextualType = contextualType; + var result = checkExpression(node, contextualMapper); + node.contextualType = saveContextualType; + return result; + } + function checkExpressionCached(node, contextualMapper) { + var links = getNodeLinks(node); + if (!links.resolvedType) { + var saveFlowLoopStart = flowLoopStart; + flowLoopStart = flowLoopCount; + links.resolvedType = checkExpression(node, contextualMapper); + flowLoopStart = saveFlowLoopStart; + } + return links.resolvedType; + } + function checkPropertyAssignment(node, contextualMapper) { + if (node.name.kind === 140) { + checkComputedPropertyName(node.name); + } + return checkExpression(node.initializer, contextualMapper); + } + function checkObjectLiteralMethod(node, contextualMapper) { + checkGrammarMethod(node); + if (node.name.kind === 140) { + checkComputedPropertyName(node.name); + } + var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); + return instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper); + } + function instantiateTypeWithSingleGenericCallSignature(node, type, contextualMapper) { + if (isInferentialContext(contextualMapper)) { + var signature = getSingleCallSignature(type); + if (signature && signature.typeParameters) { + var contextualType = getApparentTypeOfContextualType(node); + if (contextualType) { + var contextualSignature = getSingleCallSignature(contextualType); + if (contextualSignature && !contextualSignature.typeParameters) { + return getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper)); + } + } + } + } + return type; + } + function checkExpression(node, contextualMapper) { + var type; + if (node.kind === 139) { + type = checkQualifiedName(node); + } + else { + var uninstantiatedType = checkExpressionWorker(node, contextualMapper); + type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper); + } + if (isConstEnumObjectType(type)) { + var ok = (node.parent.kind === 172 && node.parent.expression === node) || + (node.parent.kind === 173 && node.parent.expression === node) || + ((node.kind === 69 || node.kind === 139) && 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 checkNumericLiteral(node) { + checkGrammarNumericLiteral(node); + return numberType; + } + function checkExpressionWorker(node, contextualMapper) { + switch (node.kind) { + case 69: + return checkIdentifier(node); + case 97: + return checkThisExpression(node); + case 95: + return checkSuperExpression(node); + case 93: + return nullType; + case 99: + case 84: + return booleanType; + case 8: + return checkNumericLiteral(node); + case 189: + return checkTemplateExpression(node); + case 9: + return checkStringLiteralExpression(node); + case 11: + return stringType; + case 10: + return globalRegExpType; + case 170: + return checkArrayLiteral(node, contextualMapper); + case 171: + return checkObjectLiteral(node, contextualMapper); + case 172: + return checkPropertyAccessExpression(node); + case 173: + return checkIndexedAccess(node); + case 174: + case 175: + return checkCallExpression(node); + case 176: + return checkTaggedTemplateExpression(node); + case 178: + return checkExpression(node.expression, contextualMapper); + case 192: + return checkClassExpression(node); + case 179: + case 180: + return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); + case 182: + return checkTypeOfExpression(node); + case 177: + case 195: + return checkAssertion(node); + case 196: + return checkNonNullAssertion(node); + case 181: + return checkDeleteExpression(node); + case 183: + return checkVoidExpression(node); + case 184: + return checkAwaitExpression(node); + case 185: + return checkPrefixUnaryExpression(node); + case 186: + return checkPostfixUnaryExpression(node); + case 187: + return checkBinaryExpression(node, contextualMapper); + case 188: + return checkConditionalExpression(node, contextualMapper); + case 191: + return checkSpreadElementExpression(node, contextualMapper); + case 193: + return undefinedType; + case 190: + return checkYieldExpression(node); + case 248: + return checkJsxExpression(node); + case 241: + return checkJsxElement(node); + case 242: + return checkJsxSelfClosingElement(node); + case 243: + 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); + getConstraintOfTypeParameter(getDeclaredTypeOfTypeParameter(getSymbolOfNode(node))); + 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 (node.flags & 92) { + func = ts.getContainingFunction(node); + if (!(func.kind === 148 && 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.text === "this") { + if (ts.indexOf(func.parameters, node) !== 0) { + error(node, ts.Diagnostics.A_this_parameter_must_be_the_first_parameter); + } + if (func.kind === 148 || func.kind === 152 || func.kind === 157) { + 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 isSyntacticallyValidGenerator(node) { + if (!node.asteriskToken || !node.body) { + return false; + } + return node.kind === 147 || + node.kind === 220 || + node.kind === 179; + } + function getTypePredicateParameterIndex(parameterList, parameter) { + if (parameterList) { + for (var i = 0; i < parameterList.length; i++) { + var param = parameterList[i]; + if (param.name.kind === 69 && + param.name.text === parameter.text) { + 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; + } + 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_14 = _a[_i].name; + if (ts.isBindingPattern(name_14) && + checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_14, 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 180: + case 151: + case 220: + case 179: + case 156: + case 147: + case 146: + var parent_10 = node.parent; + if (node === parent_10.type) { + return parent_10; + } + } + } + function checkIfTypePredicateVariableIsDeclaredInBindingPattern(pattern, predicateVariableNode, predicateVariableName) { + for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) { + var name_15 = _a[_i].name; + if (name_15.kind === 69 && + name_15.text === predicateVariableName) { + error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName); + return true; + } + else if (name_15.kind === 168 || + name_15.kind === 167) { + if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_15, predicateVariableNode, predicateVariableName)) { + return true; + } + } + } + } + function checkSignatureDeclaration(node) { + if (node.kind === 153) { + checkGrammarIndexSignature(node); + } + else if (node.kind === 156 || node.kind === 220 || node.kind === 157 || + node.kind === 151 || node.kind === 148 || + node.kind === 152) { + checkGrammarFunctionLikeDeclaration(node); + } + checkTypeParameters(node.typeParameters); + ts.forEach(node.parameters, checkParameter); + if (node.type) { + checkSourceElement(node.type); + } + if (produceDiagnostics) { + checkCollisionWithArgumentsInGeneratedCode(node); + if (compilerOptions.noImplicitAny && !node.type) { + switch (node.kind) { + case 152: + error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); + break; + case 151: + error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); + break; + } + } + if (node.type) { + if (languageVersion >= 2 && isSyntacticallyValidGenerator(node)) { + var returnType = getTypeFromTypeNode(node.type); + if (returnType === voidType) { + error(node.type, ts.Diagnostics.A_generator_cannot_have_a_void_type_annotation); + } + else { + var generatorElementType = getElementTypeOfIterableIterator(returnType) || anyType; + var iterableIteratorInstantiation = createIterableIteratorType(generatorElementType); + checkTypeAssignableTo(iterableIteratorInstantiation, returnType, node.type); + } + } + else if (ts.isAsyncFunctionLike(node)) { + checkAsyncFunctionReturnType(node); + } + } + } + } + function checkTypeForDuplicateIndexSignatures(node) { + if (node.kind === 222) { + 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 132: + if (!seenStringIndexer) { + seenStringIndexer = true; + } + else { + error(declaration, ts.Diagnostics.Duplicate_string_index_signature); + } + break; + case 130: + 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 (node.flags & 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); + 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) { + return n.name && containsSuperCall(n.name); + } + function containsSuperCall(n) { + if (ts.isSuperCallExpression(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 markThisReferencesAsErrors(n) { + if (n.kind === 97) { + error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location); + } + else if (n.kind !== 179 && n.kind !== 220) { + ts.forEachChild(n, markThisReferencesAsErrors); + } + } + function isInstancePropertyWithInitializer(n) { + return n.kind === 145 && + !(n.flags & 32) && + !!n.initializer; + } + var containingClassDecl = node.parent; + if (ts.getClassExtendsHeritageClauseElement(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.forEach(node.parent.members, isInstancePropertyWithInitializer) || + ts.forEach(node.parameters, function (p) { return p.flags & 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 === 202 && ts.isSuperCallExpression(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 === 149) { + if (!ts.isInAmbientContext(node) && ts.nodeIsPresent(node.body) && (node.flags & 32768)) { + if (node.flags & 65536) { + if (compilerOptions.noImplicitReturns) { + error(node.name, ts.Diagnostics.Not_all_code_paths_return_a_value); + } + } + else { + error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value); + } + } + } + if (node.name.kind === 140) { + checkComputedPropertyName(node.name); + } + if (!ts.hasDynamicName(node)) { + var otherKind = node.kind === 149 ? 150 : 149; + var otherAccessor = ts.getDeclarationOfKind(node.symbol, otherKind); + if (otherAccessor) { + if (((node.flags & 28) !== (otherAccessor.flags & 28))) { + error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility); + } + if (((node.flags & 128) !== (otherAccessor.flags & 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, getAnnotatedAccessorThisType, ts.Diagnostics.get_and_set_accessor_must_have_the_same_this_type); + } + } + getTypeOfAccessors(getSymbolOfNode(node)); + } + if (node.parent.kind !== 171) { + checkSourceElement(node.body); + } + else { + checkNodeDeferred(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 checkAccessorDeferred(node) { + checkSourceElement(node.body); + } + function checkMissingDeclaration(node) { + checkDecorators(node); + } + function checkTypeArgumentConstraints(typeParameters, typeArgumentNodes) { + 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 = ts.map(typeArgumentNodes, getTypeFromTypeNode); + mapper = createTypeMapper(typeParameters, typeArguments); + } + var typeArgument = typeArguments[i]; + result = result && checkTypeAssignableTo(typeArgument, getTypeWithThisArgument(instantiateType(constraint, mapper), typeArgument), typeArgumentNodes[i], ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1); + } + } + return result; + } + function checkTypeReferenceNode(node) { + checkGrammarTypeArguments(node, node.typeArguments); + var type = getTypeFromTypeReference(node); + if (type !== unknownType && node.typeArguments) { + ts.forEach(node.typeArguments, checkSourceElement); + if (produceDiagnostics) { + var symbol = getNodeLinks(node).resolvedSymbol; + var typeParameters = symbol.flags & 524288 ? getSymbolLinks(symbol).typeParameters : type.target.localTypeParameters; + checkTypeArgumentConstraints(typeParameters, node.typeArguments); + } + } + } + function checkTypeQuery(node) { + getTypeFromTypeQueryNode(node); + } + function checkTypeLiteral(node) { + ts.forEach(node.members, checkSourceElement); + if (produceDiagnostics) { + var type = getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); + checkIndexConstraints(type); + checkTypeForDuplicateIndexSignatures(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 isPrivateWithinAmbient(node) { + return (node.flags & 8) && ts.isInAmbientContext(node); + } + function getEffectiveDeclarationFlags(n, flagsToCheck) { + var flags = ts.getCombinedNodeFlags(n); + if (n.parent.kind !== 222 && + n.parent.kind !== 221 && + n.parent.kind !== 192 && + 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(o.name, ts.Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported); + } + else if (deviation & 2) { + error(o.name, ts.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); + } + else if (deviation & (8 | 16)) { + error(o.name || o, ts.Diagnostics.Overload_signatures_must_all_be_public_private_or_protected); + } + else if (deviation & 128) { + error(o.name, 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(o.name, 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; + if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) { + var reportError = (node.kind === 147 || node.kind === 146) && + (node.flags & 32) !== (subsequentNode.flags & 32); + if (reportError) { + var diagnostic = node.flags & 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 (node.flags & 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 isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & 1536; + 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 === 222 || node.parent.kind === 159 || inAmbientContext; + if (inAmbientContextOrInterface) { + previousDeclaration = undefined; + } + if (node.kind === 220 || node.kind === 147 || node.kind === 146 || node.kind === 148) { + 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 (!isExportSymbolInsideModule && 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(declaration.name, ts.Diagnostics.Duplicate_function_implementation); + }); + } + if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && + !(lastSeenNonAmbientDeclaration.flags & 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_3 = signatures; _a < signatures_3.length; _a++) { + var signature = signatures_3[_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.flags & 7340032)) { + 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); + if (declarationSpaces & commonDeclarationSpacesForDefaultAndNonDefault) { + error(d.name, ts.Diagnostics.Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead, ts.declarationNameToString(d.name)); + } + else if (declarationSpaces & commonDeclarationSpacesForExportsAndLocals) { + error(d.name, ts.Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local, ts.declarationNameToString(d.name)); + } + } + } + function getDeclarationSpaces(d) { + switch (d.kind) { + case 222: + return 2097152; + case 225: + return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0 + ? 4194304 | 1048576 + : 4194304; + case 221: + case 224: + return 2097152 | 1048576; + case 229: + var result_1 = 0; + var target = resolveAlias(getSymbolOfNode(d)); + ts.forEach(target.declarations, function (d) { result_1 |= getDeclarationSpaces(d); }); + return result_1; + default: + return 1048576; + } + } + } + function checkNonThenableType(type, location, message) { + type = getWidenedType(type); + if (!isTypeAny(type) && isTypeAssignableTo(type, getGlobalThenableType())) { + if (location) { + if (!message) { + message = ts.Diagnostics.Operand_for_await_does_not_have_a_valid_callable_then_member; + } + error(location, message); + } + return unknownType; + } + return type; + } + function getPromisedType(promise) { + if (promise.flags & 1) { + return undefined; + } + if ((promise.flags & 4096) && promise.target === tryGetGlobalPromiseType()) { + return promise.typeArguments[0]; + } + var globalPromiseLikeType = getInstantiatedGlobalPromiseLikeType(); + if (globalPromiseLikeType === emptyObjectType || !isTypeAssignableTo(promise, globalPromiseLikeType)) { + return undefined; + } + var thenFunction = getTypeOfPropertyOfType(promise, "then"); + if (thenFunction && (thenFunction.flags & 1)) { + return undefined; + } + var thenSignatures = thenFunction ? getSignaturesOfType(thenFunction, 0) : emptyArray; + if (thenSignatures.length === 0) { + return undefined; + } + var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 131072); + if (onfulfilledParameterType.flags & 1) { + return undefined; + } + var onfulfilledParameterSignatures = getSignaturesOfType(onfulfilledParameterType, 0); + if (onfulfilledParameterSignatures.length === 0) { + return undefined; + } + var valueParameterType = getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature)); + return valueParameterType; + } + function getTypeOfFirstParameterOfSignature(signature) { + return getTypeAtPosition(signature, 0); + } + function getAwaitedType(type) { + return checkAwaitedType(type, undefined, undefined); + } + function checkAwaitedType(type, location, message) { + return checkAwaitedTypeWorker(type); + function checkAwaitedTypeWorker(type) { + if (type.flags & 16384) { + var types = []; + for (var _i = 0, _a = type.types; _i < _a.length; _i++) { + var constituentType = _a[_i]; + types.push(checkAwaitedTypeWorker(constituentType)); + } + return getUnionType(types); + } + else { + var promisedType = getPromisedType(type); + if (promisedType === undefined) { + return checkNonThenableType(type, location, message); + } + else { + if (type.id === promisedType.id || ts.indexOf(awaitedTypeStack, promisedType.id) >= 0) { + if (location) { + error(location, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method, symbolToString(type.symbol)); + } + return unknownType; + } + awaitedTypeStack.push(type.id); + var awaitedType = checkAwaitedTypeWorker(promisedType); + awaitedTypeStack.pop(); + return awaitedType; + } + } + } + } + function checkCorrectPromiseType(returnType, location) { + if (returnType === unknownType) { + return unknownType; + } + var globalPromiseType = getGlobalPromiseType(); + if (globalPromiseType === emptyGenericType + || globalPromiseType === getTargetType(returnType)) { + return checkAwaitedType(returnType, location, ts.Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); + } + error(location, ts.Diagnostics.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type); + return unknownType; + } + function checkAsyncFunctionReturnType(node) { + if (languageVersion >= 2) { + var returnType = getTypeFromTypeNode(node.type); + return checkCorrectPromiseType(returnType, node.type); + } + var globalPromiseConstructorLikeType = getGlobalPromiseConstructorLikeType(); + if (globalPromiseConstructorLikeType === emptyObjectType) { + return unknownType; + } + var promiseType = getTypeFromTypeNode(node.type); + if (promiseType === unknownType && compilerOptions.isolatedModules) { + return unknownType; + } + var promiseConstructor = getNodeLinks(node.type).resolvedSymbol; + if (!promiseConstructor || !symbolIsValue(promiseConstructor)) { + var typeName = promiseConstructor + ? symbolToString(promiseConstructor) + : typeToString(promiseType); + error(node, ts.Diagnostics.Type_0_is_not_a_valid_async_function_return_type, typeName); + return unknownType; + } + checkReturnTypeAnnotationAsExpression(node); + var promiseConstructorType = getTypeOfSymbol(promiseConstructor); + if (!checkTypeAssignableTo(promiseConstructorType, globalPromiseConstructorLikeType, node, ts.Diagnostics.Type_0_is_not_a_valid_async_function_return_type)) { + return unknownType; + } + var promiseName = ts.getEntityNameFromTypeNode(node.type); + var promiseNameOrNamespaceRoot = getFirstIdentifier(promiseName); + var rootSymbol = getSymbol(node.locals, promiseNameOrNamespaceRoot.text, 107455); + if (rootSymbol) { + error(rootSymbol.valueDeclaration, ts.Diagnostics.Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions, promiseNameOrNamespaceRoot.text, getFullyQualifiedName(promiseConstructor)); + return unknownType; + } + return checkAwaitedType(promiseType, node, ts.Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); + } + 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 221: + var classSymbol = getSymbolOfNode(node.parent); + var classConstructorType = getTypeOfSymbol(classSymbol); + expectedReturnType = getUnionType([classConstructorType, voidType]); + break; + case 142: + expectedReturnType = voidType; + errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any); + break; + case 145: + expectedReturnType = voidType; + errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any); + break; + case 147: + case 149: + case 150: + var methodType = getTypeOfNode(node.parent); + var descriptorType = createTypedPropertyDescriptorType(methodType); + expectedReturnType = getUnionType([descriptorType, voidType]); + break; + } + checkTypeAssignableTo(returnType, expectedReturnType, node, headMessage, errorInfo); + } + function checkTypeNodeAsExpression(node) { + if (node && node.kind === 155) { + var root = getFirstIdentifier(node.typeName); + var meaning = root.parent.kind === 155 ? 793056 : 1536; + var rootSymbol = resolveName(root, root.text, meaning | 8388608, undefined, undefined); + if (rootSymbol && rootSymbol.flags & 8388608) { + var aliasTarget = resolveAlias(rootSymbol); + if (aliasTarget.flags & 107455 && !isConstEnumOrConstEnumOnlyModule(resolveAlias(rootSymbol))) { + markAliasSymbolAsReferenced(rootSymbol); + } + } + } + } + function checkTypeAnnotationAsExpression(node) { + checkTypeNodeAsExpression(node.type); + } + function checkReturnTypeAnnotationAsExpression(node) { + checkTypeNodeAsExpression(node.type); + } + function checkParameterTypeAnnotationsAsExpressions(node) { + for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) { + var parameter = _a[_i]; + checkTypeAnnotationAsExpression(parameter); + } + } + 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); + } + if (compilerOptions.emitDecoratorMetadata) { + switch (node.kind) { + case 221: + var constructor = ts.getFirstConstructorWithBody(node); + if (constructor) { + checkParameterTypeAnnotationsAsExpressions(constructor); + } + break; + case 147: + case 149: + case 150: + checkParameterTypeAnnotationsAsExpressions(node); + checkReturnTypeAnnotationAsExpression(node); + break; + case 145: + case 142: + checkTypeAnnotationAsExpression(node); + break; + } + } + ts.forEach(node.decorators, checkDecorator); + } + function checkFunctionDeclaration(node) { + if (produceDiagnostics) { + checkFunctionOrMethodDeclaration(node) || checkGrammarForGenerator(node); + checkCollisionWithCapturedSuperVariable(node, node.name); + checkCollisionWithCapturedThisVariable(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); + } + } + function checkFunctionOrMethodDeclaration(node) { + checkDecorators(node); + checkSignatureDeclaration(node); + var isAsync = ts.isAsyncFunctionLike(node); + if (node.name && node.name.kind === 140) { + checkComputedPropertyName(node.name); + } + if (!ts.hasDynamicName(node)) { + var symbol = getSymbolOfNode(node); + var localSymbol = node.localSymbol || symbol; + var firstDeclaration = ts.forEach(localSymbol.declarations, function (declaration) { return declaration.kind === node.kind && !ts.isSourceFileJavaScript(ts.getSourceFileOfNode(declaration)) ? + declaration : undefined; }); + if (node === firstDeclaration) { + checkFunctionOrConstructorSymbol(localSymbol); + } + if (symbol.parent) { + if (ts.getDeclarationOfKind(symbol, node.kind) === node) { + checkFunctionOrConstructorSymbol(symbol); + } + } + } + checkSourceElement(node.body); + if (!node.asteriskToken) { + var returnOrPromisedType = node.type && (isAsync ? checkAsyncFunctionReturnType(node) : getTypeFromTypeNode(node.type)); + checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnOrPromisedType); + } + if (produceDiagnostics && !node.type) { + if (compilerOptions.noImplicitAny && ts.nodeIsMissing(node.body) && !isPrivateWithinAmbient(node)) { + reportImplicitAnyError(node, anyType); + } + if (node.asteriskToken && ts.nodeIsPresent(node.body)) { + getReturnTypeOfSignature(getSignatureFromDeclaration(node)); + } + } + } + function checkBlock(node) { + if (node.kind === 199) { + checkGrammarStatementInAmbientContext(node); + } + ts.forEach(node.statements, checkSourceElement); + } + function checkCollisionWithArgumentsInGeneratedCode(node) { + if (!ts.hasDeclaredRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) { + return; + } + ts.forEach(node.parameters, function (p) { + if (p.name && !ts.isBindingPattern(p.name) && p.name.text === argumentsSymbol.name) { + error(p, ts.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters); + } + }); + } + function needCollisionCheckForIdentifier(node, identifier, name) { + if (!(identifier && identifier.text === name)) { + return false; + } + if (node.kind === 145 || + node.kind === 144 || + node.kind === 147 || + node.kind === 146 || + node.kind === 149 || + node.kind === 150) { + return false; + } + if (ts.isInAmbientContext(node)) { + return false; + } + var root = ts.getRootDeclaration(node); + if (root.kind === 142 && ts.nodeIsMissing(root.parent.body)) { + return false; + } + return true; + } + function checkCollisionWithCapturedThisVariable(node, name) { + if (needCollisionCheckForIdentifier(node, name, "_this")) { + potentialThisCollisions.push(node); + } + } + function checkIfThisIsCapturedInEnclosingScope(node) { + var current = node; + while (current) { + if (getNodeCheckFlags(current) & 4) { + var isDeclaration_1 = node.kind !== 69; + if (isDeclaration_1) { + error(node.name, 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; + } + current = current.parent; + } + } + 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_2 = node.kind !== 69; + if (isDeclaration_2) { + 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 (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { + return; + } + if (node.kind === 225 && ts.getModuleInstanceState(node) !== 1) { + return; + } + var parent = getDeclarationContainer(node); + if (parent.kind === 256 && 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 (!needCollisionCheckForIdentifier(node, name, "Promise")) { + return; + } + if (node.kind === 225 && ts.getModuleInstanceState(node) !== 1) { + return; + } + var parent = getDeclarationContainer(node); + if (parent.kind === 256 && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2097152) { + 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) & 3072) !== 0 || ts.isParameterDeclaration(node)) { + return; + } + if (node.kind === 218 && !node.initializer) { + return; + } + var symbol = getSymbolOfNode(node); + if (symbol.flags & 1) { + var localDeclarationSymbol = resolveName(node, node.name.text, 3, undefined, undefined); + if (localDeclarationSymbol && + localDeclarationSymbol !== symbol && + localDeclarationSymbol.flags & 2) { + if (getDeclarationFlagsFromSymbol(localDeclarationSymbol) & 3072) { + var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 219); + var container = varDeclList.parent.kind === 200 && varDeclList.parent.parent + ? varDeclList.parent.parent + : undefined; + var namesShareScope = container && + (container.kind === 199 && ts.isFunctionLike(container.parent) || + container.kind === 226 || + container.kind === 225 || + container.kind === 256); + if (!namesShareScope) { + var name_16 = symbolToString(localDeclarationSymbol); + error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name_16, name_16); + } + } + } + } + } + function checkParameterInitializer(node) { + if (ts.getRootDeclaration(node).kind !== 142) { + return; + } + var func = ts.getContainingFunction(node); + visit(node.initializer); + function visit(n) { + if (ts.isTypeNode(n) || ts.isDeclarationName(n)) { + return; + } + if (n.kind === 172) { + return visit(n.expression); + } + else if (n.kind === 69) { + var symbol = resolveName(n, n.text, 107455 | 8388608, undefined, undefined); + 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 === 142) { + if (symbol.valueDeclaration.pos < node.pos) { + return; + } + var current = n; + while (current !== node.initializer) { + if (ts.isFunctionLike(current.parent)) { + return; + } + if (current.parent.kind === 145 && + !(current.parent.flags & 32) && + ts.isClassLike(current.parent.parent)) { + return; + } + current = current.parent; + } + } + 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 checkVariableLikeDeclaration(node) { + checkDecorators(node); + checkSourceElement(node.type); + if (node.name.kind === 140) { + checkComputedPropertyName(node.name); + if (node.initializer) { + checkExpressionCached(node.initializer); + } + } + if (node.kind === 169) { + if (node.propertyName && node.propertyName.kind === 140) { + checkComputedPropertyName(node.propertyName); + } + var parent_11 = node.parent.parent; + var parentType = getTypeForBindingElementParent(parent_11); + var name_17 = node.propertyName || node.name; + var property = getPropertyOfType(parentType, getTextOfPropertyName(name_17)); + if (parent_11.initializer && property && getParentOfSymbol(property)) { + checkClassPropertyAccess(parent_11, parent_11.initializer, parentType, property); + } + } + if (ts.isBindingPattern(node.name)) { + ts.forEach(node.name.elements, checkSourceElement); + } + if (node.initializer && ts.getRootDeclaration(node).kind === 142 && 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 !== 207) { + checkTypeAssignableTo(checkExpressionCached(node.initializer), getWidenedTypeForVariableLikeDeclaration(node), node, undefined); + checkParameterInitializer(node); + } + return; + } + var symbol = getSymbolOfNode(node); + var type = getTypeOfVariableOrParameterOrProperty(symbol); + if (node === symbol.valueDeclaration) { + if (node.initializer && node.parent.parent.kind !== 207) { + checkTypeAssignableTo(checkExpressionCached(node.initializer), type, node, undefined); + checkParameterInitializer(node); + } + } + else { + var declarationType = 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 (node.kind !== 145 && node.kind !== 144) { + checkExportsOnMergedDeclarations(node); + if (node.kind === 218 || node.kind === 169) { + checkVarDeclaredNamesNotShadowed(node); + } + checkCollisionWithCapturedSuperVariable(node, node.name); + checkCollisionWithCapturedThisVariable(node, node.name); + checkCollisionWithRequireExportsInGeneratedCode(node, node.name); + checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); + } + } + 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 === 171) { + if (ts.isAsyncFunctionLike(node)) { + 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 === 201) { + 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 === 219) { + checkGrammarVariableDeclarationList(node.initializer); + } + } + if (node.initializer) { + if (node.initializer.kind === 219) { + 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); + } + function checkForOfStatement(node) { + checkGrammarForInOrForOfStatement(node); + if (node.initializer.kind === 219) { + checkForInOrForOfVariableDeclaration(node); + } + else { + var varExpr = node.initializer; + var iteratedType = checkRightHandSideOfForOf(node.expression); + if (varExpr.kind === 170 || varExpr.kind === 171) { + checkDestructuringAssignment(varExpr, iteratedType || unknownType); + } + else { + var leftType = checkExpression(varExpr); + checkReferenceExpression(varExpr, ts.Diagnostics.Invalid_left_hand_side_in_for_of_statement, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_be_a_constant_or_a_read_only_property); + if (iteratedType) { + checkTypeAssignableTo(iteratedType, leftType, varExpr, undefined); + } + } + } + checkSourceElement(node.statement); + } + function checkForInStatement(node) { + checkGrammarForInOrForOfStatement(node); + if (node.initializer.kind === 219) { + 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 === 170 || varExpr.kind === 171) { + error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern); + } + else if (!isTypeAnyOrAllConstituentTypesHaveKind(leftType, 258)) { + 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.Invalid_left_hand_side_in_for_in_statement, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_constant_or_a_read_only_property); + } + } + var rightType = checkNonNullExpression(node.expression); + if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, 80896 | 512)) { + 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); + } + function checkForInOrForOfVariableDeclaration(iterationStatement) { + var variableDeclarationList = iterationStatement.initializer; + if (variableDeclarationList.declarations.length >= 1) { + var decl = variableDeclarationList.declarations[0]; + checkVariableDeclaration(decl); + } + } + function checkRightHandSideOfForOf(rhsExpression) { + var expressionType = checkNonNullExpression(rhsExpression); + return checkIteratedTypeOrElementType(expressionType, rhsExpression, true); + } + function checkIteratedTypeOrElementType(inputType, errorNode, allowStringInput) { + if (isTypeAny(inputType)) { + return inputType; + } + if (languageVersion >= 2) { + return checkElementTypeOfIterable(inputType, errorNode); + } + if (allowStringInput) { + return checkElementTypeOfArrayOrString(inputType, errorNode); + } + if (isArrayLikeType(inputType)) { + var indexType = getIndexTypeOfType(inputType, 1); + if (indexType) { + return indexType; + } + } + if (errorNode) { + error(errorNode, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(inputType)); + } + return unknownType; + } + function checkElementTypeOfIterable(iterable, errorNode) { + var elementType = getElementTypeOfIterable(iterable, errorNode); + if (errorNode && elementType) { + checkTypeAssignableTo(iterable, createIterableType(elementType), errorNode); + } + return elementType || anyType; + } + function getElementTypeOfIterable(type, errorNode) { + if (isTypeAny(type)) { + return undefined; + } + var typeAsIterable = type; + if (!typeAsIterable.iterableElementType) { + if ((type.flags & 4096) && type.target === getGlobalIterableType()) { + typeAsIterable.iterableElementType = type.typeArguments[0]; + } + else { + var iteratorFunction = getTypeOfPropertyOfType(type, ts.getPropertyNameForKnownSymbolName("iterator")); + if (isTypeAny(iteratorFunction)) { + return undefined; + } + var iteratorFunctionSignatures = iteratorFunction ? getSignaturesOfType(iteratorFunction, 0) : emptyArray; + if (iteratorFunctionSignatures.length === 0) { + if (errorNode) { + error(errorNode, ts.Diagnostics.Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator); + } + return undefined; + } + typeAsIterable.iterableElementType = getElementTypeOfIterator(getUnionType(ts.map(iteratorFunctionSignatures, getReturnTypeOfSignature)), errorNode); + } + } + return typeAsIterable.iterableElementType; + } + function getElementTypeOfIterator(type, errorNode) { + if (isTypeAny(type)) { + return undefined; + } + var typeAsIterator = type; + if (!typeAsIterator.iteratorElementType) { + if ((type.flags & 4096) && type.target === getGlobalIteratorType()) { + typeAsIterator.iteratorElementType = type.typeArguments[0]; + } + else { + var iteratorNextFunction = getTypeOfPropertyOfType(type, "next"); + if (isTypeAny(iteratorNextFunction)) { + return undefined; + } + var iteratorNextFunctionSignatures = iteratorNextFunction ? getSignaturesOfType(iteratorNextFunction, 0) : emptyArray; + if (iteratorNextFunctionSignatures.length === 0) { + if (errorNode) { + error(errorNode, ts.Diagnostics.An_iterator_must_have_a_next_method); + } + return undefined; + } + var iteratorNextResult = getUnionType(ts.map(iteratorNextFunctionSignatures, getReturnTypeOfSignature)); + if (isTypeAny(iteratorNextResult)) { + return undefined; + } + var iteratorNextValue = getTypeOfPropertyOfType(iteratorNextResult, "value"); + if (!iteratorNextValue) { + if (errorNode) { + error(errorNode, ts.Diagnostics.The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property); + } + return undefined; + } + typeAsIterator.iteratorElementType = iteratorNextValue; + } + } + return typeAsIterator.iteratorElementType; + } + function getElementTypeOfIterableIterator(type) { + if (isTypeAny(type)) { + return undefined; + } + if ((type.flags & 4096) && type.target === getGlobalIterableIteratorType()) { + return type.typeArguments[0]; + } + return getElementTypeOfIterable(type, undefined) || + getElementTypeOfIterator(type, undefined); + } + function checkElementTypeOfArrayOrString(arrayOrStringType, errorNode) { + ts.Debug.assert(languageVersion < 2); + var arrayType = arrayOrStringType; + if (arrayOrStringType.flags & 16384) { + arrayType = getUnionType(ts.filter(arrayOrStringType.types, function (t) { return !(t.flags & 258); })); + } + else if (arrayOrStringType.flags & 258) { + arrayType = neverType; + } + var hasStringConstituent = arrayOrStringType !== arrayType; + var reportedError = false; + if (hasStringConstituent) { + if (languageVersion < 1) { + error(errorNode, ts.Diagnostics.Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher); + reportedError = true; + } + if (arrayType === neverType) { + return stringType; + } + } + if (!isArrayLikeType(arrayType)) { + if (!reportedError) { + var diagnostic = hasStringConstituent + ? ts.Diagnostics.Type_0_is_not_an_array_type + : ts.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type; + error(errorNode, diagnostic, typeToString(arrayType)); + } + return hasStringConstituent ? stringType : unknownType; + } + var arrayElementType = getIndexTypeOfType(arrayType, 1) || unknownType; + if (hasStringConstituent) { + if (arrayElementType.flags & 258) { + return stringType; + } + return getUnionType([arrayElementType, stringType]); + } + return arrayElementType; + } + function checkBreakOrContinueStatement(node) { + checkGrammarStatementInAmbientContext(node) || checkGrammarBreakOrContinueStatement(node); + } + function isGetAccessorWithAnnotatedSetAccessor(node) { + return !!(node.kind === 149 && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 150))); + } + function isUnwrappedReturnTypeVoidOrAny(func, returnType) { + var unwrappedReturnType = ts.isAsyncFunctionLike(func) ? getPromisedType(returnType) : returnType; + return maybeTypeOfKind(unwrappedReturnType, 16 | 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 === neverType) { + var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType; + if (func.asteriskToken) { + return; + } + if (func.kind === 150) { + if (node.expression) { + error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value); + } + } + else if (func.kind === 148) { + if (node.expression && !checkTypeAssignableTo(exprType, returnType, node.expression)) { + error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); + } + } + else if (func.type || isGetAccessorWithAnnotatedSetAccessor(func)) { + if (ts.isAsyncFunctionLike(func)) { + var promisedType = getPromisedType(returnType); + var awaitedType = checkAwaitedType(exprType, node.expression || node, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member); + if (promisedType) { + checkTypeAssignableTo(awaitedType, promisedType, node.expression || node); + } + } + else { + checkTypeAssignableTo(exprType, returnType, node.expression || node); + } + } + } + else if (func.kind !== 148 && 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 & 33554432) { + grammarErrorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_an_async_function_block); + } + } + checkExpression(node.expression); + error(node.expression, ts.Diagnostics.All_symbols_within_a_with_block_will_be_resolved_to_any); + } + function checkSwitchStatement(node) { + checkGrammarStatementInAmbientContext(node); + var firstDefaultClause; + var hasDuplicateDefaultClause = false; + var expressionType = checkExpression(node.expression); + ts.forEach(node.caseBlock.clauses, function (clause) { + if (clause.kind === 250 && !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 === 249) { + var caseClause = clause; + var caseType = checkExpression(caseClause.expression); + if (!isTypeComparableTo(expressionType, caseType)) { + checkTypeComparableTo(caseType, expressionType, caseClause.expression, undefined); + } + } + ts.forEach(clause.statements, checkSourceElement); + }); + } + function checkLabeledStatement(node) { + if (!checkGrammarStatementInAmbientContext(node)) { + var current = node.parent; + while (current) { + if (ts.isFunctionLike(current)) { + break; + } + if (current.kind === 214 && current.label.text === node.label.text) { + var sourceFile = ts.getSourceFileOfNode(node); + grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNodeFromSourceText(sourceFile.text, node.label)); + break; + } + current = current.parent; + } + } + 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.name.kind !== 69) { + grammarErrorOnFirstToken(catchClause.variableDeclaration.name, ts.Diagnostics.Catch_clause_variable_name_must_be_an_identifier); + } + else 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 identifierName = catchClause.variableDeclaration.name.text; + var locals = catchClause.block.locals; + if (locals && ts.hasProperty(locals, identifierName)) { + var localSymbol = locals[identifierName]; + if (localSymbol && (localSymbol.flags & 2) !== 0) { + grammarErrorOnNode(localSymbol.valueDeclaration, ts.Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause, identifierName); + } + } + } + } + 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 (type.flags & 1024 && 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 (!(member.flags & 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 && (type.flags & 2048)) { + 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; + } + if (indexKind === 1 && !isNumericName(prop.valueDeclaration.name)) { + return; + } + var errorNode; + if (prop.valueDeclaration.name.kind === 140 || prop.parent === containingType.symbol) { + errorNode = prop.valueDeclaration; + } + else if (indexDeclaration) { + errorNode = indexDeclaration; + } + else if (containingType.flags & 2048) { + var someBaseClassHasBothPropertyAndIndexer = ts.forEach(getBaseTypes(containingType), function (base) { return getPropertyOfObjectType(base, prop.name) && 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.text) { + case "any": + case "number": + case "boolean": + case "string": + case "symbol": + case "void": + error(name, message, name.text); + } + } + function checkTypeParameters(typeParameterDeclarations) { + if (typeParameterDeclarations) { + for (var i = 0, n = typeParameterDeclarations.length; i < n; i++) { + var node = typeParameterDeclarations[i]; + checkTypeParameter(node); + if (produceDiagnostics) { + 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(node, symbol) { + if (symbol.declarations.length === 1) { + return; + } + var firstDecl; + for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { + var declaration = _a[_i]; + if (declaration.kind === 221 || declaration.kind === 222) { + if (!firstDecl) { + firstDecl = declaration; + } + else if (!areTypeParametersIdentical(firstDecl.typeParameters, node.typeParameters)) { + error(node.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_type_parameters, node.name.text); + } + } + } + } + function checkClassExpression(node) { + checkClassLikeDeclaration(node); + checkNodeDeferred(node); + return getTypeOfSymbol(getSymbolOfNode(node)); + } + function checkClassExpressionDeferred(node) { + ts.forEach(node.members, checkSourceElement); + } + function checkClassDeclaration(node) { + if (!node.name && !(node.flags & 512)) { + grammarErrorOnFirstToken(node, ts.Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name); + } + checkClassLikeDeclaration(node); + ts.forEach(node.members, checkSourceElement); + } + function checkClassLikeDeclaration(node) { + checkGrammarClassDeclarationHeritageClauses(node); + checkDecorators(node); + if (node.name) { + checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0); + checkCollisionWithCapturedThisVariable(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(node, symbol); + var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node); + if (baseTypeNode) { + var baseTypes = getBaseTypes(type); + if (baseTypes.length && produceDiagnostics) { + var baseType_1 = baseTypes[0]; + var staticBaseType = getBaseConstructorTypeOfClass(type); + checkBaseTypeAccessibility(staticBaseType, baseTypeNode); + checkSourceElement(baseTypeNode.expression); + if (baseTypeNode.typeArguments) { + ts.forEach(baseTypeNode.typeArguments, checkSourceElement); + for (var _i = 0, _a = getConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments); _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 (!(staticBaseType.symbol && staticBaseType.symbol.flags & 32)) { + var constructors = getInstantiatedConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments); + 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.isSupportedExpressionWithTypeArguments(typeRefNode)) { + 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) { + var declaredType = (t.flags & 4096) ? t.target : t; + if (declaredType.flags & (1024 | 2048)) { + 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 && declaration.flags & 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, node.expression.text); + } + } + } + } + function getTargetSymbol(s) { + return s.flags & 16777216 ? getSymbolLinks(s).target : s; + } + function getClassLikeDeclarationOfSymbol(symbol) { + return ts.forEach(symbol.declarations, function (d) { return ts.isClassLike(d) ? d : undefined; }); + } + function checkKindsOfPropertyMemberOverrides(type, baseType) { + var baseProperties = getPropertiesOfObjectType(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 & 134217728) { + continue; + } + var derived = getTargetSymbol(getPropertyOfObjectType(type, base.name)); + var baseDeclarationFlags = getDeclarationFlagsFromSymbol(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 || !(derivedClassDecl.flags & 128))) { + if (derivedClassDecl.kind === 192) { + 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 = getDeclarationFlagsFromSymbol(derived); + if ((baseDeclarationFlags & 8) || (derivedDeclarationFlags & 8)) { + continue; + } + if ((baseDeclarationFlags & 32) !== (derivedDeclarationFlags & 32)) { + continue; + } + if ((base.flags & derived.flags & 8192) || ((base.flags & 98308) && (derived.flags & 98308))) { + continue; + } + var errorMessage = void 0; + if (base.flags & 8192) { + 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 { + ts.Debug.assert((derived.flags & 4) !== 0); + 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) { + ts.Debug.assert((derived.flags & 8192) !== 0); + errorMessage = ts.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function; + } + else { + ts.Debug.assert((base.flags & 98304) !== 0); + ts.Debug.assert((derived.flags & 8192) !== 0); + errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function; + } + error(derived.valueDeclaration.name, errorMessage, typeToString(baseType), symbolToString(base), typeToString(type)); + } + } + } + } + function isAccessor(kind) { + return kind === 149 || kind === 150; + } + function areTypeParametersIdentical(list1, list2) { + if (!list1 && !list2) { + return true; + } + if (!list1 || !list2 || list1.length !== list2.length) { + return false; + } + for (var i = 0, len = list1.length; i < len; i++) { + var tp1 = list1[i]; + var tp2 = list2[i]; + if (tp1.name.text !== tp2.name.text) { + return false; + } + if (!tp1.constraint && !tp2.constraint) { + continue; + } + if (!tp1.constraint || !tp2.constraint) { + return false; + } + if (!isTypeIdenticalTo(getTypeFromTypeNode(tp1.constraint), getTypeFromTypeNode(tp2.constraint))) { + return false; + } + } + return true; + } + function checkInheritedPropertiesAreIdentical(type, typeNode) { + var baseTypes = getBaseTypes(type); + if (baseTypes.length < 2) { + return true; + } + var seen = {}; + ts.forEach(resolveDeclaredMembers(type).declaredProperties, function (p) { seen[p.name] = { 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 = getPropertiesOfObjectType(getTypeWithThisArgument(base, type.thisType)); + for (var _a = 0, properties_4 = properties; _a < properties_4.length; _a++) { + var prop = properties_4[_a]; + if (!ts.hasProperty(seen, prop.name)) { + seen[prop.name] = { prop: prop, containingType: base }; + } + else { + var existing = seen[prop.name]; + 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(node, symbol); + var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 222); + 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); + } + } + } + ts.forEach(ts.getInterfaceBaseTypeNodes(node), function (heritageElement) { + if (!ts.isSupportedExpressionWithTypeArguments(heritageElement)) { + 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); + } + } + function checkTypeAliasDeclaration(node) { + checkGrammarDecorators(node) || checkGrammarModifiers(node); + checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0); + checkSourceElement(node.type); + } + function computeEnumMemberValues(node) { + var nodeLinks = getNodeLinks(node); + if (!(nodeLinks.flags & 16384)) { + var enumSymbol = getSymbolOfNode(node); + var enumType = getDeclaredTypeOfSymbol(enumSymbol); + var autoValue = 0; + var ambient = ts.isInAmbientContext(node); + var enumIsConst = ts.isConst(node); + for (var _i = 0, _a = node.members; _i < _a.length; _i++) { + var member = _a[_i]; + if (isComputedNonLiteralName(member.name)) { + error(member.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_enums); + } + else { + var text = getTextOfPropertyName(member.name); + if (isNumericLiteralName(text)) { + error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name); + } + } + var previousEnumMemberIsNonConstant = autoValue === undefined; + var initializer = member.initializer; + if (initializer) { + autoValue = computeConstantValueForEnumMemberInitializer(initializer, enumType, enumIsConst, ambient); + } + else if (ambient && !enumIsConst) { + autoValue = undefined; + } + else if (previousEnumMemberIsNonConstant) { + error(member.name, ts.Diagnostics.Enum_member_must_have_initializer); + } + if (autoValue !== undefined) { + getNodeLinks(member).enumMemberValue = autoValue; + autoValue++; + } + } + nodeLinks.flags |= 16384; + } + function computeConstantValueForEnumMemberInitializer(initializer, enumType, enumIsConst, ambient) { + var reportError = true; + var value = evalConstant(initializer); + if (reportError) { + if (value === undefined) { + if (enumIsConst) { + error(initializer, ts.Diagnostics.In_const_enum_declarations_member_initializer_must_be_constant_expression); + } + else if (ambient) { + error(initializer, ts.Diagnostics.In_ambient_enum_declarations_member_initializer_must_be_constant_expression); + } + else { + checkTypeAssignableTo(checkExpression(initializer), enumType, initializer, undefined); + } + } + else if (enumIsConst) { + if (isNaN(value)) { + error(initializer, ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN); + } + else if (!isFinite(value)) { + error(initializer, ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_a_non_finite_value); + } + } + } + return value; + function evalConstant(e) { + switch (e.kind) { + case 185: + var value_1 = evalConstant(e.operand); + if (value_1 === undefined) { + return undefined; + } + switch (e.operator) { + case 35: return value_1; + case 36: return -value_1; + case 50: return ~value_1; + } + return undefined; + case 187: + var left = evalConstant(e.left); + if (left === undefined) { + return undefined; + } + var right = evalConstant(e.right); + if (right === undefined) { + return undefined; + } + switch (e.operatorToken.kind) { + case 47: return left | right; + case 46: return left & right; + case 44: return left >> right; + case 45: return left >>> right; + case 43: return left << right; + case 48: return left ^ right; + case 37: return left * right; + case 39: return left / right; + case 35: return left + right; + case 36: return left - right; + case 40: return left % right; + } + return undefined; + case 8: + return +e.text; + case 178: + return evalConstant(e.expression); + case 69: + case 173: + case 172: + var member = initializer.parent; + var currentType = getTypeOfSymbol(getSymbolOfNode(member.parent)); + var enumType_1; + var propertyName = void 0; + if (e.kind === 69) { + enumType_1 = currentType; + propertyName = e.text; + } + else { + var expression = void 0; + if (e.kind === 173) { + if (e.argumentExpression === undefined || + e.argumentExpression.kind !== 9) { + return undefined; + } + expression = e.expression; + propertyName = e.argumentExpression.text; + } + else { + expression = e.expression; + propertyName = e.name.text; + } + var current = expression; + while (current) { + if (current.kind === 69) { + break; + } + else if (current.kind === 172) { + current = current.expression; + } + else { + return undefined; + } + } + enumType_1 = checkExpression(expression); + if (!(enumType_1.symbol && (enumType_1.symbol.flags & 384))) { + return undefined; + } + } + if (propertyName === undefined) { + return undefined; + } + var property = getPropertyOfObjectType(enumType_1, propertyName); + if (!property || !(property.flags & 8)) { + return undefined; + } + var propertyDecl = property.valueDeclaration; + if (member === propertyDecl) { + return undefined; + } + if (!isBlockScopedNameDeclaredBeforeUse(propertyDecl, member)) { + reportError = false; + error(e, ts.Diagnostics.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums); + return undefined; + } + return getNodeLinks(propertyDecl).enumMemberValue; + } + } + } + } + function checkEnumDeclaration(node) { + if (!produceDiagnostics) { + return; + } + checkGrammarDecorators(node) || checkGrammarModifiers(node); + checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0); + checkCollisionWithCapturedThisVariable(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(decl.name, ts.Diagnostics.Enum_declarations_must_all_be_const_or_non_const); + } + }); + } + var seenEnumMissingInitialInitializer_1 = false; + ts.forEach(enumSymbol.declarations, function (declaration) { + if (declaration.kind !== 224) { + 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_5 = declarations; _i < declarations_5.length; _i++) { + var declaration = declarations_5[_i]; + if ((declaration.kind === 221 || + (declaration.kind === 220 && 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); + } + } + 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 + && ts.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, 221); + if (mergedClass && + inSameLexicalScope(node, mergedClass)) { + getNodeLinks(node).flags |= 32768; + } + } + if (isAmbientExternalModule) { + if (ts.isExternalModuleAugmentation(node)) { + var checkBody = isGlobalAugmentation || (getSymbolOfNode(node).flags & 33554432); + if (checkBody) { + 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(node.name.text)) { + 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); + } + } + } + } + checkSourceElement(node.body); + } + function checkModuleAugmentationElement(node, isGlobalAugmentation) { + switch (node.kind) { + case 200: + for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { + var decl = _a[_i]; + checkModuleAugmentationElement(decl, isGlobalAugmentation); + } + break; + case 235: + case 236: + grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations); + break; + case 229: + case 230: + grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module); + break; + case 169: + case 218: + var name_18 = node.name; + if (ts.isBindingPattern(name_18)) { + for (var _b = 0, _c = name_18.elements; _b < _c.length; _b++) { + var el = _c[_b]; + checkModuleAugmentationElement(el, isGlobalAugmentation); + } + break; + } + case 221: + case 224: + case 220: + case 222: + case 225: + case 223: + 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) { + while (true) { + if (node.kind === 139) { + node = node.left; + } + else if (node.kind === 172) { + node = node.expression; + } + else { + break; + } + } + ts.Debug.assert(node.kind === 69); + 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 === 226 && ts.isAmbientModule(node.parent.parent); + if (node.parent.kind !== 256 && !inAmbientExternalModule) { + error(moduleName, node.kind === 236 ? + ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace : + ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module); + return false; + } + if (inAmbientExternalModule && ts.isExternalModuleNameRelative(moduleName.text)) { + if (!isTopLevelInExternalModuleAugmentation(node)) { + error(node, ts.Diagnostics.Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name); + return false; + } + } + return true; + } + function checkAliasSymbol(node) { + var symbol = getSymbolOfNode(node); + var target = resolveAlias(symbol); + if (target !== unknownSymbol) { + var excludedMeanings = (symbol.flags & (107455 | 1048576) ? 107455 : 0) | + (symbol.flags & 793056 ? 793056 : 0) | + (symbol.flags & 1536 ? 1536 : 0); + if (target.flags & excludedMeanings) { + var message = node.kind === 238 ? + 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)); + } + } + } + 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) && (node.flags & 1023)) { + 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 === 232) { + 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 (node.flags & 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 | 1536).flags & 1536)) { + error(moduleName, ts.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, ts.declarationNameToString(moduleName)); + } + } + if (target.flags & 793056) { + checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0); + } + } + } + else { + if (modulekind === ts.ModuleKind.ES6 && !ts.isInAmbientContext(node)) { + grammarErrorOnNode(node, ts.Diagnostics.Import_assignment_cannot_be_used_when_targeting_ECMAScript_6_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead); + } + } + } + } + function checkExportDeclaration(node) { + if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_declaration_can_only_be_used_in_a_module)) { + return; + } + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023)) { + 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 === 226 && ts.isAmbientModule(node.parent.parent); + if (node.parent.kind !== 256 && !inAmbientExternalModule) { + 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)); + } + } + } + } + function checkGrammarModuleElementContext(node, errorMessage) { + if (node.parent.kind !== 256 && node.parent.kind !== 226 && node.parent.kind !== 225) { + return grammarErrorOnFirstToken(node, errorMessage); + } + } + function checkExportSpecifier(node) { + checkAliasSymbol(node); + if (!node.parent.parent.moduleSpecifier) { + var exportedName = node.propertyName || node.name; + var symbol = resolveName(exportedName, exportedName.text, 107455 | 793056 | 1536 | 8388608, undefined, undefined); + 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, exportedName.text); + } + 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 === 256 ? node.parent : node.parent.parent; + if (container.kind === 225 && !ts.isAmbientModule(container)) { + error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace); + return; + } + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023)) { + grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); + } + if (node.expression.kind === 69) { + markExportAsReferenced(node); + } + else { + checkExpressionCached(node.expression); + } + checkExternalModuleExports(container); + if (node.isExportEquals && !ts.isInAmbientContext(node)) { + if (modulekind === ts.ModuleKind.ES6) { + grammarErrorOnNode(node, ts.Diagnostics.Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_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) { + for (var id in moduleSymbol.exports) { + if (id !== "export=") { + return true; + } + } + return false; + } + function checkExternalModuleExports(node) { + var moduleSymbol = getSymbolOfNode(node); + var links = getSymbolLinks(moduleSymbol); + if (!links.exportsChecked) { + var exportEqualsSymbol = moduleSymbol.exports["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); + for (var id in exports) { + if (id === "__export") { + continue; + } + var _a = exports[id], declarations = _a.declarations, flags = _a.flags; + if (flags & (1536 | 64 | 384)) { + continue; + } + var exportedDeclarationsCount = ts.countWhere(declarations, isNotOverload); + if (flags & 524288 && exportedDeclarationsCount <= 2) { + continue; + } + if (exportedDeclarationsCount > 1) { + for (var _i = 0, declarations_6 = declarations; _i < declarations_6.length; _i++) { + var declaration = declarations_6[_i]; + if (isNotOverload(declaration)) { + diagnostics.add(ts.createDiagnosticForNode(declaration, ts.Diagnostics.Cannot_redeclare_exported_variable_0, id)); + } + } + } + } + links.exportsChecked = true; + } + function isNotOverload(declaration) { + return declaration.kind !== 220 || !!declaration.body; + } + } + function checkSourceElement(node) { + if (!node) { + return; + } + var kind = node.kind; + if (cancellationToken) { + switch (kind) { + case 225: + case 221: + case 222: + case 220: + cancellationToken.throwIfCancellationRequested(); + } + } + switch (kind) { + case 141: + return checkTypeParameter(node); + case 142: + return checkParameter(node); + case 145: + case 144: + return checkPropertyDeclaration(node); + case 156: + case 157: + case 151: + case 152: + return checkSignatureDeclaration(node); + case 153: + return checkSignatureDeclaration(node); + case 147: + case 146: + return checkMethodDeclaration(node); + case 148: + return checkConstructorDeclaration(node); + case 149: + case 150: + return checkAccessorDeclaration(node); + case 155: + return checkTypeReferenceNode(node); + case 154: + return checkTypePredicate(node); + case 158: + return checkTypeQuery(node); + case 159: + return checkTypeLiteral(node); + case 160: + return checkArrayType(node); + case 161: + return checkTupleType(node); + case 162: + case 163: + return checkUnionOrIntersectionType(node); + case 164: + return checkSourceElement(node.type); + case 220: + return checkFunctionDeclaration(node); + case 199: + case 226: + return checkBlock(node); + case 200: + return checkVariableStatement(node); + case 202: + return checkExpressionStatement(node); + case 203: + return checkIfStatement(node); + case 204: + return checkDoStatement(node); + case 205: + return checkWhileStatement(node); + case 206: + return checkForStatement(node); + case 207: + return checkForInStatement(node); + case 208: + return checkForOfStatement(node); + case 209: + case 210: + return checkBreakOrContinueStatement(node); + case 211: + return checkReturnStatement(node); + case 212: + return checkWithStatement(node); + case 213: + return checkSwitchStatement(node); + case 214: + return checkLabeledStatement(node); + case 215: + return checkThrowStatement(node); + case 216: + return checkTryStatement(node); + case 218: + return checkVariableDeclaration(node); + case 169: + return checkBindingElement(node); + case 221: + return checkClassDeclaration(node); + case 222: + return checkInterfaceDeclaration(node); + case 223: + return checkTypeAliasDeclaration(node); + case 224: + return checkEnumDeclaration(node); + case 225: + return checkModuleDeclaration(node); + case 230: + return checkImportDeclaration(node); + case 229: + return checkImportEqualsDeclaration(node); + case 236: + return checkExportDeclaration(node); + case 235: + return checkExportAssignment(node); + case 201: + checkGrammarStatementInAmbientContext(node); + return; + case 217: + checkGrammarStatementInAmbientContext(node); + return; + case 239: + 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 179: + case 180: + case 147: + case 146: + checkFunctionExpressionOrObjectLiteralMethodDeferred(node); + break; + case 149: + case 150: + checkAccessorDeferred(node); + break; + case 192: + checkClassExpressionDeferred(node); + break; + } + } + } + function checkSourceFile(node) { + var start = new Date().getTime(); + checkSourceFileWorker(node); + ts.checkTime += new Date().getTime() - start; + } + function checkSourceFileWorker(node) { + var links = getNodeLinks(node); + if (!(links.flags & 1)) { + if (compilerOptions.skipDefaultLibCheck) { + if (node.hasNoDefaultLib) { + return; + } + } + checkGrammarSourceFile(node); + potentialThisCollisions.length = 0; + deferredNodes = []; + ts.forEach(node.statements, checkSourceElement); + checkDeferredNodes(); + deferredNodes = undefined; + if (ts.isExternalOrCommonJsModule(node)) { + checkExternalModuleExports(node); + } + if (potentialThisCollisions.length) { + ts.forEach(potentialThisCollisions, checkIfThisIsCapturedInEnclosingScope); + potentialThisCollisions.length = 0; + } + links.flags |= 1; + } + } + function getDiagnostics(sourceFile, ct) { + try { + cancellationToken = ct; + return getDiagnosticsWorker(sourceFile); + } + finally { + cancellationToken = undefined; + } + } + function getDiagnosticsWorker(sourceFile) { + throwIfNonDiagnosticsProducing(); + if (sourceFile) { + checkSourceFile(sourceFile); + return diagnostics.getDiagnostics(sourceFile.fileName); + } + 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 === 212 && node.parent.statement === node) { + return true; + } + node = node.parent; + } + } + return false; + } + function getSymbolsInScope(location, meaning) { + var symbols = {}; + var memberFlags = 0; + if (isInsideWithStatementBody(location)) { + return []; + } + populateSymbols(); + return symbolsToArray(symbols); + function populateSymbols() { + while (location) { + if (location.locals && !isGlobalSourceFile(location)) { + copySymbols(location.locals, meaning); + } + switch (location.kind) { + case 256: + if (!ts.isExternalOrCommonJsModule(location)) { + break; + } + case 225: + copySymbols(getSymbolOfNode(location).exports, meaning & 8914931); + break; + case 224: + copySymbols(getSymbolOfNode(location).exports, meaning & 8); + break; + case 192: + var className = location.name; + if (className) { + copySymbol(location.symbol, meaning); + } + case 221: + case 222: + if (!(memberFlags & 32)) { + copySymbols(getSymbolOfNode(location).members, meaning & 793056); + } + break; + case 179: + var funcName = location.name; + if (funcName) { + copySymbol(location.symbol, meaning); + } + break; + } + if (ts.introducesArgumentsExoticObject(location)) { + copySymbol(argumentsSymbol, meaning); + } + memberFlags = location.flags; + location = location.parent; + } + copySymbols(globals, meaning); + } + function copySymbol(symbol, meaning) { + if (symbol.flags & meaning) { + var id = symbol.name; + if (!ts.hasProperty(symbols, id)) { + symbols[id] = symbol; + } + } + } + function copySymbols(source, meaning) { + if (meaning) { + for (var id in source) { + var symbol = source[id]; + copySymbol(symbol, meaning); + } + } + } + } + function isTypeDeclarationName(name) { + return name.kind === 69 && + isTypeDeclaration(name.parent) && + name.parent.name === name; + } + function isTypeDeclaration(node) { + switch (node.kind) { + case 141: + case 221: + case 222: + case 223: + case 224: + return true; + } + } + function isTypeReferenceIdentifier(entityName) { + var node = entityName; + while (node.parent && node.parent.kind === 139) { + node = node.parent; + } + return node.parent && node.parent.kind === 155; + } + function isHeritageClauseElementIdentifier(entityName) { + var node = entityName; + while (node.parent && node.parent.kind === 172) { + node = node.parent; + } + return node.parent && node.parent.kind === 194; + } + 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 === 139) { + nodeOnRightSide = nodeOnRightSide.parent; + } + if (nodeOnRightSide.parent.kind === 229) { + return nodeOnRightSide.parent.moduleReference === nodeOnRightSide && nodeOnRightSide.parent; + } + if (nodeOnRightSide.parent.kind === 235) { + return nodeOnRightSide.parent.expression === nodeOnRightSide && nodeOnRightSide.parent; + } + return undefined; + } + function isInRightSideOfImportOrExportAssignment(node) { + return getLeftSideOfImportEqualsOrExportAssignment(node) !== undefined; + } + function getSymbolOfEntityNameOrPropertyAccessExpression(entityName) { + if (ts.isDeclarationName(entityName)) { + return getSymbolOfNode(entityName.parent); + } + if (ts.isInJavaScriptFile(entityName) && entityName.parent.kind === 172) { + var specialPropertyAssignmentKind = ts.getSpecialPropertyAssignmentKind(entityName.parent.parent); + switch (specialPropertyAssignmentKind) { + case 1: + case 3: + return getSymbolOfNode(entityName.parent); + case 4: + case 2: + return getSymbolOfNode(entityName.parent.parent); + default: + } + } + if (entityName.parent.kind === 235) { + return resolveEntityName(entityName, 107455 | 793056 | 1536 | 8388608); + } + if (entityName.kind !== 172) { + if (isInRightSideOfImportOrExportAssignment(entityName)) { + return getSymbolOfPartOfRightHandSideOfImportEquals(entityName); + } + } + if (ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { + entityName = entityName.parent; + } + if (isHeritageClauseElementIdentifier(entityName)) { + var meaning = 0; + if (entityName.parent.kind === 194) { + meaning = 793056; + if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { + meaning |= 107455; + } + } + else { + meaning = 1536; + } + meaning |= 8388608; + return resolveEntityName(entityName, meaning); + } + else if (ts.isExpression(entityName)) { + if (ts.nodeIsMissing(entityName)) { + return undefined; + } + if (entityName.kind === 69) { + if (ts.isJSXTagName(entityName) && isJsxIntrinsicIdentifier(entityName)) { + return getIntrinsicTagSymbol(entityName.parent); + } + var meaning = 107455 | 8388608; + return resolveEntityName(entityName, meaning); + } + else if (entityName.kind === 172) { + var symbol = getNodeLinks(entityName).resolvedSymbol; + if (!symbol) { + checkPropertyAccessExpression(entityName); + } + return getNodeLinks(entityName).resolvedSymbol; + } + else if (entityName.kind === 139) { + var symbol = getNodeLinks(entityName).resolvedSymbol; + if (!symbol) { + checkQualifiedName(entityName); + } + return getNodeLinks(entityName).resolvedSymbol; + } + } + else if (isTypeReferenceIdentifier(entityName)) { + var meaning = entityName.parent.kind === 155 ? 793056 : 1536; + meaning |= 8388608; + return resolveEntityName(entityName, meaning); + } + else if (entityName.parent.kind === 246) { + return getJsxAttributePropertySymbol(entityName.parent); + } + if (entityName.parent.kind === 154) { + return resolveEntityName(entityName, 1); + } + return undefined; + } + function getSymbolAtLocation(node) { + if (node.kind === 256) { + return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined; + } + if (isInsideWithStatementBody(node)) { + return undefined; + } + if (ts.isDeclarationName(node)) { + return getSymbolOfNode(node.parent); + } + else if (ts.isLiteralComputedPropertyDeclarationName(node)) { + return getSymbolOfNode(node.parent.parent); + } + if (node.kind === 69) { + if (isInRightSideOfImportOrExportAssignment(node)) { + return node.parent.kind === 235 + ? getSymbolOfEntityNameOrPropertyAccessExpression(node) + : getSymbolOfPartOfRightHandSideOfImportEquals(node); + } + else if (node.parent.kind === 169 && + node.parent.parent.kind === 167 && + node === node.parent.propertyName) { + var typeOfPattern = getTypeOfNode(node.parent.parent); + var propertyDeclaration = typeOfPattern && getPropertyOfType(typeOfPattern, node.text); + if (propertyDeclaration) { + return propertyDeclaration; + } + } + } + switch (node.kind) { + case 69: + case 172: + case 139: + return getSymbolOfEntityNameOrPropertyAccessExpression(node); + case 97: + case 95: + var type = ts.isExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node); + return type.symbol; + case 165: + return getTypeFromTypeNode(node).symbol; + case 121: + var constructorDeclaration = node.parent; + if (constructorDeclaration && constructorDeclaration.kind === 148) { + return constructorDeclaration.parent.symbol; + } + return undefined; + case 9: + if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && + ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) || + ((node.parent.kind === 230 || node.parent.kind === 236) && + node.parent.moduleSpecifier === node)) { + return resolveExternalModuleName(node, node); + } + case 8: + if (node.parent.kind === 173 && node.parent.argumentExpression === node) { + var objectType = checkExpression(node.parent.expression); + if (objectType === unknownType) + return undefined; + var apparentType = getApparentType(objectType); + if (apparentType === unknownType) + return undefined; + return getPropertyOfType(apparentType, node.text); + } + break; + } + return undefined; + } + function getShorthandAssignmentValueSymbol(location) { + if (location && location.kind === 254) { + return resolveEntityName(location.name, 107455 | 8388608); + } + return undefined; + } + function getExportSpecifierLocalTargetSymbol(node) { + return node.parent.parent.moduleSpecifier ? + getExternalModuleMember(node.parent.parent, node) : + resolveEntityName(node.propertyName || node.name, 107455 | 793056 | 1536 | 8388608); + } + function getTypeOfNode(node) { + if (isInsideWithStatementBody(node)) { + return unknownType; + } + if (ts.isTypeNode(node)) { + return getTypeFromTypeNode(node); + } + if (ts.isExpression(node)) { + return getTypeOfExpression(node); + } + if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(node)) { + return getBaseTypes(getDeclaredTypeOfSymbol(getSymbolOfNode(node.parent.parent)))[0]; + } + 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 (ts.isDeclarationName(node)) { + var symbol = getSymbolAtLocation(node); + return symbol && getTypeOfSymbol(symbol); + } + if (ts.isBindingPattern(node)) { + return getTypeForVariableLikeDeclaration(node.parent); + } + 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 === 171 || expr.kind === 170); + if (expr.parent.kind === 208) { + var iteratedType = checkRightHandSideOfForOf(expr.parent.expression); + return checkDestructuringAssignment(expr, iteratedType || unknownType); + } + if (expr.parent.kind === 187) { + var iteratedType = checkExpression(expr.parent.right); + return checkDestructuringAssignment(expr, iteratedType || unknownType); + } + if (expr.parent.kind === 253) { + var typeOfParentObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent.parent); + return checkObjectLiteralDestructuringPropertyAssignment(typeOfParentObjectLiteral || unknownType, expr.parent); + } + ts.Debug.assert(expr.parent.kind === 170); + var typeOfArrayLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent); + var elementType = checkIteratedTypeOrElementType(typeOfArrayLiteral || unknownType, expr.parent, 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.text); + } + function getTypeOfExpression(expr) { + if (ts.isRightSideOfQualifiedNameOrPropertyAccess(expr)) { + expr = expr.parent; + } + return checkExpression(expr); + } + function getParentTypeOfClassElement(node) { + var classSymbol = getSymbolOfNode(node.parent); + return node.flags & 32 + ? getTypeOfSymbol(classSymbol) + : getDeclaredTypeOfSymbol(classSymbol); + } + function getAugmentedPropertiesOfType(type) { + type = getApparentType(type); + var propsByName = createSymbolTable(getPropertiesOfType(type)); + if (getSignaturesOfType(type, 0).length || getSignaturesOfType(type, 1).length) { + ts.forEach(getPropertiesOfType(globalFunctionType), function (p) { + if (!ts.hasProperty(propsByName, p.name)) { + propsByName[p.name] = p; + } + }); + } + return getNamedMembers(propsByName); + } + function getRootSymbols(symbol) { + if (symbol.flags & 268435456) { + var symbols_3 = []; + var name_19 = symbol.name; + ts.forEach(getSymbolLinks(symbol).containingType.types, function (t) { + var symbol = getPropertyOfType(t, name_19); + if (symbol) { + symbols_3.push(symbol); + } + }); + return symbols_3; + } + else if (symbol.flags & 67108864) { + var target = void 0; + var next = symbol; + while (next = getSymbolLinks(next).target) { + target = next; + } + if (target) { + return [target]; + } + } + return [symbol]; + } + function isArgumentsLocalBinding(node) { + return getReferencedValueSymbol(node) === argumentsSymbol; + } + function moduleExportsSomeValue(moduleReferenceExpression) { + var moduleSymbol = resolveExternalModuleName(moduleReferenceExpression.parent, moduleReferenceExpression); + if (!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.forEachValue(getExportsOfModule(moduleSymbol), isValue); + } + return symbolLinks.exportsSomeValue; + function isValue(s) { + s = resolveSymbol(s); + return s && !!(s.flags & 107455); + } + } + function getReferencedExportContainer(node) { + var symbol = getReferencedValueSymbol(node); + if (symbol) { + if (symbol.flags & 1048576) { + var exportSymbol = getMergedSymbol(symbol.exportSymbol); + if (exportSymbol.flags & 944) { + return undefined; + } + symbol = exportSymbol; + } + var parentSymbol = getParentOfSymbol(symbol); + if (parentSymbol) { + if (parentSymbol.flags & 512 && parentSymbol.valueDeclaration.kind === 256) { + return parentSymbol.valueDeclaration; + } + for (var n = node.parent; n; n = n.parent) { + if ((n.kind === 225 || n.kind === 224) && getSymbolOfNode(n) === parentSymbol) { + return n; + } + } + } + } + } + function getReferencedImportDeclaration(node) { + var symbol = getReferencedValueSymbol(node); + return symbol && symbol.flags & 8388608 ? getDeclarationOfAliasSymbol(symbol) : 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.name, 107455, undefined, undefined)) { + 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 === 199 && 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) { + var symbol = getReferencedValueSymbol(node); + return symbol && isSymbolOfDeclarationWithCollidingName(symbol) ? symbol.valueDeclaration : undefined; + } + function isDeclarationWithCollidingName(node) { + return isSymbolOfDeclarationWithCollidingName(getSymbolOfNode(node)); + } + function isValueAliasDeclaration(node) { + switch (node.kind) { + case 229: + case 231: + case 232: + case 234: + case 238: + return isAliasResolvedToValue(getSymbolOfNode(node)); + case 236: + var exportClause = node.exportClause; + return exportClause && ts.forEach(exportClause.elements, isValueAliasDeclaration); + case 235: + return node.expression && node.expression.kind === 69 ? isAliasResolvedToValue(getSymbolOfNode(node)) : true; + } + return false; + } + function isTopLevelValueImportEqualsWithEntityName(node) { + if (node.parent.kind !== 256 || !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 (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 getNodeCheckFlags(node) { + return getNodeLinks(node).flags; + } + function getEnumMemberValue(node) { + computeEnumMemberValues(node.parent); + return getNodeLinks(node).enumMemberValue; + } + function getConstantValue(node) { + if (node.kind === 255) { + 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 & 80896 && getSignaturesOfType(type, 0).length > 0; + } + function getTypeReferenceSerializationKind(typeName) { + var valueSymbol = resolveEntityName(typeName, 107455, true); + var constructorType = valueSymbol ? getTypeOfSymbol(valueSymbol) : undefined; + if (constructorType && isConstructorType(constructorType)) { + return ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue; + } + var typeSymbol = resolveEntityName(typeName, 793056, true); + 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 (isTypeOfKind(type, 16)) { + return ts.TypeReferenceSerializationKind.VoidType; + } + else if (isTypeOfKind(type, 8)) { + return ts.TypeReferenceSerializationKind.BooleanType; + } + else if (isTypeOfKind(type, 132)) { + return ts.TypeReferenceSerializationKind.NumberLikeType; + } + else if (isTypeOfKind(type, 258)) { + return ts.TypeReferenceSerializationKind.StringLikeType; + } + else if (isTypeOfKind(type, 8192)) { + return ts.TypeReferenceSerializationKind.ArrayLikeType; + } + else if (isTypeOfKind(type, 16777216)) { + 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)) + ? getTypeOfSymbol(symbol) + : unknownType; + 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(getTypeOfExpression(expr)); + getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags); + } + function writeBaseConstructorTypeOfClass(node, enclosingDeclaration, flags, writer) { + var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(node)); + resolveBaseTypesOfClass(classType); + var baseType = classType.resolvedBaseTypes.length ? classType.resolvedBaseTypes[0] : unknownType; + getSymbolDisplayBuilder().buildTypeDisplay(baseType, writer, enclosingDeclaration, flags); + } + function hasGlobalName(name) { + return ts.hasProperty(globals, name); + } + function getReferencedValueSymbol(reference) { + return getNodeLinks(reference).resolvedSymbol || + resolveName(reference, reference.text, 107455 | 1048576 | 8388608, undefined, undefined); + } + function getReferencedValueDeclaration(reference) { + ts.Debug.assert(!ts.nodeIsSynthesized(reference)); + var symbol = getReferencedValueSymbol(reference); + return symbol && getExportSymbolOfValueSymbolIfExported(symbol).valueDeclaration; + } + function createResolver() { + var resolvedTypeReferenceDirectives = host.getResolvedTypeReferenceDirectives(); + var fileToDirective; + if (resolvedTypeReferenceDirectives) { + fileToDirective = ts.createFileMap(); + for (var key in resolvedTypeReferenceDirectives) { + if (!ts.hasProperty(resolvedTypeReferenceDirectives, key)) { + continue; + } + var resolvedDirective = resolvedTypeReferenceDirectives[key]; + if (!resolvedDirective) { + continue; + } + var file = host.getSourceFile(resolvedDirective.resolvedFileName); + fileToDirective.set(file.path, key); + } + } + return { + getReferencedExportContainer: getReferencedExportContainer, + getReferencedImportDeclaration: getReferencedImportDeclaration, + getReferencedDeclarationWithCollidingName: getReferencedDeclarationWithCollidingName, + isDeclarationWithCollidingName: isDeclarationWithCollidingName, + isValueAliasDeclaration: isValueAliasDeclaration, + hasGlobalName: hasGlobalName, + isReferencedAliasDeclaration: isReferencedAliasDeclaration, + getNodeCheckFlags: getNodeCheckFlags, + isTopLevelValueImportEqualsWithEntityName: isTopLevelValueImportEqualsWithEntityName, + isDeclarationVisible: isDeclarationVisible, + isImplementationOfOverload: isImplementationOfOverload, + writeTypeOfDeclaration: writeTypeOfDeclaration, + writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration, + writeTypeOfExpression: writeTypeOfExpression, + writeBaseConstructorTypeOfClass: writeBaseConstructorTypeOfClass, + isSymbolAccessible: isSymbolAccessible, + isEntityNameVisible: isEntityNameVisible, + getConstantValue: getConstantValue, + collectLinkedAliases: collectLinkedAliases, + getReferencedValueDeclaration: getReferencedValueDeclaration, + getTypeReferenceSerializationKind: getTypeReferenceSerializationKind, + isOptionalParameter: isOptionalParameter, + moduleExportsSomeValue: moduleExportsSomeValue, + isArgumentsLocalBinding: isArgumentsLocalBinding, + getExternalModuleFileFromDeclaration: getExternalModuleFileFromDeclaration, + getTypeReferenceDirectivesForEntityName: getTypeReferenceDirectivesForEntityName, + getTypeReferenceDirectivesForSymbol: getTypeReferenceDirectivesForSymbol + }; + function getTypeReferenceDirectivesForEntityName(node) { + if (!fileToDirective) { + return undefined; + } + var meaning = (node.kind === 172) || (node.kind === 69 && isInTypeQuery(node)) + ? 107455 | 1048576 + : 793056 | 1536; + 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); + } + } + } + return typeReferenceDirectives; + } + function isSymbolFromTypeDeclarationFile(symbol) { + if (!symbol.declarations) { + return false; + } + var current = symbol; + while (true) { + var parent_12 = getParentOfSymbol(current); + if (parent_12) { + current = parent_12; + } + else { + break; + } + } + if (current.valueDeclaration && current.valueDeclaration.kind === 256 && 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.contains(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, 256); + } + function initializeTypeChecker() { + ts.forEach(host.getSourceFiles(), function (file) { + ts.bindSourceFile(file, compilerOptions); + }); + var augmentations; + ts.forEach(host.getSourceFiles(), function (file) { + if (!ts.isExternalOrCommonJsModule(file)) { + mergeSymbolTable(globals, file.locals); + } + if (file.moduleAugmentations.length) { + (augmentations || (augmentations = [])).push(file.moduleAugmentations); + } + if (file.wasReferenced && file.symbol && file.symbol.globalExports) { + mergeSymbolTable(globals, file.symbol.globalExports); + } + }); + if (augmentations) { + for (var _i = 0, augmentations_1 = augmentations; _i < augmentations_1.length; _i++) { + var list = augmentations_1[_i]; + for (var _a = 0, list_2 = list; _a < list_2.length; _a++) { + var augmentation = list_2[_a]; + mergeModuleAugmentation(augmentation); + } + } + } + addToSymbolTable(globals, builtinGlobals, ts.Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0); + getSymbolLinks(undefinedSymbol).type = undefinedType; + getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments"); + getSymbolLinks(unknownSymbol).type = unknownType; + globalArrayType = getGlobalType("Array", 1); + globalObjectType = getGlobalType("Object"); + globalFunctionType = getGlobalType("Function"); + globalStringType = getGlobalType("String"); + globalNumberType = getGlobalType("Number"); + globalBooleanType = getGlobalType("Boolean"); + globalRegExpType = getGlobalType("RegExp"); + jsxElementType = getExportedTypeFromNamespace("JSX", JsxNames.Element); + getGlobalClassDecoratorType = ts.memoize(function () { return getGlobalType("ClassDecorator"); }); + getGlobalPropertyDecoratorType = ts.memoize(function () { return getGlobalType("PropertyDecorator"); }); + getGlobalMethodDecoratorType = ts.memoize(function () { return getGlobalType("MethodDecorator"); }); + getGlobalParameterDecoratorType = ts.memoize(function () { return getGlobalType("ParameterDecorator"); }); + getGlobalTypedPropertyDescriptorType = ts.memoize(function () { return getGlobalType("TypedPropertyDescriptor", 1); }); + getGlobalESSymbolConstructorSymbol = ts.memoize(function () { return getGlobalValueSymbol("Symbol"); }); + getGlobalPromiseType = ts.memoize(function () { return getGlobalType("Promise", 1); }); + tryGetGlobalPromiseType = ts.memoize(function () { return getGlobalSymbol("Promise", 793056, undefined) && getGlobalPromiseType(); }); + getGlobalPromiseLikeType = ts.memoize(function () { return getGlobalType("PromiseLike", 1); }); + getInstantiatedGlobalPromiseLikeType = ts.memoize(createInstantiatedPromiseLikeType); + getGlobalPromiseConstructorSymbol = ts.memoize(function () { return getGlobalValueSymbol("Promise"); }); + getGlobalPromiseConstructorLikeType = ts.memoize(function () { return getGlobalType("PromiseConstructorLike"); }); + getGlobalThenableType = ts.memoize(createThenableType); + getGlobalTemplateStringsArrayType = ts.memoize(function () { return getGlobalType("TemplateStringsArray"); }); + if (languageVersion >= 2) { + getGlobalESSymbolType = ts.memoize(function () { return getGlobalType("Symbol"); }); + getGlobalIterableType = ts.memoize(function () { return getGlobalType("Iterable", 1); }); + getGlobalIteratorType = ts.memoize(function () { return getGlobalType("Iterator", 1); }); + getGlobalIterableIteratorType = ts.memoize(function () { return getGlobalType("IterableIterator", 1); }); + } + else { + getGlobalESSymbolType = ts.memoize(function () { return emptyObjectType; }); + getGlobalIterableType = ts.memoize(function () { return emptyGenericType; }); + getGlobalIteratorType = ts.memoize(function () { return emptyGenericType; }); + getGlobalIterableIteratorType = ts.memoize(function () { return emptyGenericType; }); + } + anyArrayType = createArrayType(anyType); + var symbol = getGlobalSymbol("ReadonlyArray", 793056, undefined); + globalReadonlyArrayType = symbol && getTypeOfGlobalSymbol(symbol, 1); + anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType; + } + function createInstantiatedPromiseLikeType() { + var promiseLikeType = getGlobalPromiseLikeType(); + if (promiseLikeType !== emptyGenericType) { + return createTypeReference(promiseLikeType, [anyType]); + } + return emptyObjectType; + } + function createThenableType() { + var thenPropertySymbol = createSymbol(67108864 | 4, "then"); + getSymbolLinks(thenPropertySymbol).type = globalFunctionType; + var thenableType = createObjectType(65536); + thenableType.properties = [thenPropertySymbol]; + thenableType.members = createSymbolTable(thenableType.properties); + thenableType.callSignatures = []; + thenableType.constructSignatures = []; + return thenableType; + } + function checkGrammarDecorators(node) { + if (!node.decorators) { + return false; + } + if (!ts.nodeCanBeDecorated(node)) { + if (node.kind === 147 && !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 === 149 || node.kind === 150) { + 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) { + switch (node.kind) { + case 149: + case 150: + case 148: + case 145: + case 144: + case 147: + case 146: + case 153: + case 225: + case 230: + case 229: + case 236: + case 235: + case 142: + break; + case 220: + if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 118) && + node.parent.kind !== 226 && node.parent.kind !== 256) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); + } + break; + case 221: + case 222: + case 200: + case 223: + if (node.modifiers && node.parent.kind !== 226 && node.parent.kind !== 256) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); + } + break; + case 224: + if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 74) && + node.parent.kind !== 226 && node.parent.kind !== 256) { + return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); + } + break; + default: + return false; + } + if (!node.modifiers) { + return; + } + var lastStatic, lastPrivate, lastProtected, lastDeclare, lastAsync, lastReadonly; + var flags = 0; + for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) { + var modifier = _a[_i]; + if (modifier.kind !== 128) { + if (node.kind === 144 || node.kind === 146) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind)); + } + if (node.kind === 153) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind)); + } + } + switch (modifier.kind) { + case 74: + if (node.kind !== 224 && node.parent.kind === 221) { + return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(74)); + } + break; + case 112: + case 111: + case 110: + var text = visibilityToString(ts.modifierToFlag(modifier.kind)); + if (modifier.kind === 111) { + lastProtected = modifier; + } + else if (modifier.kind === 110) { + lastPrivate = modifier; + } + 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 === 226 || node.parent.kind === 256) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text); + } + else if (flags & 128) { + if (modifier.kind === 110) { + 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 113: + 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 === 226 || node.parent.kind === 256) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static"); + } + else if (node.kind === 142) { + 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 128: + if (flags & 64) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly"); + } + else if (node.kind !== 145 && node.kind !== 144 && node.kind !== 153 && node.kind !== 142) { + return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature); + } + flags |= 64; + lastReadonly = modifier; + break; + case 82: + 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 === 221) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); + } + else if (node.kind === 142) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); + } + flags |= 1; + break; + case 122: + 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 === 221) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); + } + else if (node.kind === 142) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); + } + else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 226) { + return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); + } + flags |= 2; + lastDeclare = modifier; + break; + case 115: + if (flags & 128) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract"); + } + if (node.kind !== 221) { + if (node.kind !== 147 && + node.kind !== 145 && + node.kind !== 149 && + node.kind !== 150) { + return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration); + } + if (!(node.parent.kind === 221 && node.parent.flags & 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 118: + 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 === 142) { + return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async"); + } + flags |= 256; + lastAsync = modifier; + break; + } + } + if (node.kind === 148) { + 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 === 230 || node.kind === 229) && flags & 2) { + return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare"); + } + else if (node.kind === 142 && (flags & 92) && ts.isBindingPattern(node.name)) { + return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_a_binding_pattern); + } + if (flags & 256) { + return checkGrammarAsyncModifier(node, lastAsync); + } + } + function checkGrammarAsyncModifier(node, asyncModifier) { + if (languageVersion < 2) { + return grammarErrorOnNode(asyncModifier, ts.Diagnostics.Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher); + } + switch (node.kind) { + case 147: + case 220: + case 179: + case 180: + if (!node.asteriskToken) { + return false; + } + break; + } + 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; + var sourceFile = ts.getSourceFileOfNode(list[0]); + return grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Trailing_comma_not_allowed); + } + } + function checkGrammarTypeParameterList(node, 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) { + if (checkGrammarForDisallowedTrailingComma(parameters)) { + return true; + } + 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, node.typeParameters, file) || + checkGrammarParameterList(node.parameters) || checkGrammarArrowFunction(node, file); + } + function checkGrammarArrowFunction(node, file) { + if (node.kind === 180) { + 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 (parameter.flags & 1023) { + 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 !== 132 && parameter.type.kind !== 130) { + 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(node, args) { + if (args) { + var sourceFile = ts.getSourceFileOfNode(node); + for (var _i = 0, args_1 = args; _i < args_1.length; _i++) { + var arg = args_1[_i]; + if (arg.kind === 193) { + return grammarErrorAtPos(sourceFile, arg.pos, 0, ts.Diagnostics.Argument_expression_expected); + } + } + } + } + function checkGrammarArguments(node, args) { + return checkGrammarForDisallowedTrailingComma(args) || + checkGrammarForOmittedArgument(node, args); + } + function checkGrammarHeritageClause(node) { + var types = node.types; + if (checkGrammarForDisallowedTrailingComma(types)) { + return true; + } + if (types && types.length === 0) { + var listType = ts.tokenToString(node.token); + var sourceFile = ts.getSourceFileOfNode(node); + return grammarErrorAtPos(sourceFile, types.pos, 0, ts.Diagnostics._0_list_cannot_be_empty, listType); + } + } + 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 === 83) { + 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 === 106); + 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 === 83) { + if (seenExtendsClause) { + return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen); + } + seenExtendsClause = true; + } + else { + ts.Debug.assert(heritageClause.token === 106); + return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause); + } + checkGrammarHeritageClause(heritageClause); + } + } + return false; + } + function checkGrammarComputedPropertyName(node) { + if (node.kind !== 140) { + return false; + } + var computedPropertyName = node; + if (computedPropertyName.expression.kind === 187 && computedPropertyName.expression.operatorToken.kind === 24) { + 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 === 220 || + node.kind === 179 || + node.kind === 147); + 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); + } + if (languageVersion < 2) { + return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_only_available_when_targeting_ECMAScript_6_or_higher); + } + } + } + function checkGrammarForInvalidQuestionMark(node, questionToken, message) { + if (questionToken) { + return grammarErrorOnNode(questionToken, message); + } + } + function checkGrammarObjectLiteralExpression(node, inDestructuring) { + var seen = {}; + var Property = 1; + var GetAccessor = 2; + var SetAccessor = 4; + var GetOrSetAccessor = GetAccessor | SetAccessor; + var _loop_1 = function(prop) { + var name_20 = prop.name; + if (prop.kind === 193 || + name_20.kind === 140) { + checkGrammarComputedPropertyName(name_20); + return "continue"; + } + if (prop.kind === 254 && !inDestructuring && prop.objectAssignmentInitializer) { + return { value: grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment) }; + } + ts.forEach(prop.modifiers, function (mod) { + if (mod.kind !== 118 || prop.kind !== 147) { + grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod)); + } + }); + var currentKind = void 0; + if (prop.kind === 253 || prop.kind === 254) { + checkGrammarForInvalidQuestionMark(prop, prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional); + if (name_20.kind === 8) { + checkGrammarNumericLiteral(name_20); + } + currentKind = Property; + } + else if (prop.kind === 147) { + currentKind = Property; + } + else if (prop.kind === 149) { + currentKind = GetAccessor; + } + else if (prop.kind === 150) { + currentKind = SetAccessor; + } + else { + ts.Debug.fail("Unexpected syntax kind:" + prop.kind); + } + if (!ts.hasProperty(seen, name_20.text)) { + seen[name_20.text] = currentKind; + } + else { + var existingKind = seen[name_20.text]; + if (currentKind === Property && existingKind === Property) { + return "continue"; + } + else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) { + if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) { + seen[name_20.text] = currentKind | existingKind; + } + else { + return { value: grammarErrorOnNode(name_20, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name) }; + } + } + else { + return { value: grammarErrorOnNode(name_20, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name) }; + } + } + }; + for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { + var prop = _a[_i]; + var state_2 = _loop_1(prop); + if (typeof state_2 === "object") return state_2.value; + } + } + function checkGrammarJsxElement(node) { + var seen = {}; + for (var _i = 0, _a = node.attributes; _i < _a.length; _i++) { + var attr = _a[_i]; + if (attr.kind === 247) { + continue; + } + var jsxAttr = attr; + var name_21 = jsxAttr.name; + if (!ts.hasProperty(seen, name_21.text)) { + seen[name_21.text] = true; + } + else { + return grammarErrorOnNode(name_21, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); + } + var initializer = jsxAttr.initializer; + if (initializer && initializer.kind === 248 && !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.initializer.kind === 219) { + var variableList = forInOrOfStatement.initializer; + if (!checkGrammarVariableDeclarationList(variableList)) { + var declarations = variableList.declarations; + if (!declarations.length) { + return false; + } + if (declarations.length > 1) { + var diagnostic = forInOrOfStatement.kind === 207 + ? 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 === 207 + ? 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 === 207 + ? 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 && !(accessor.flags & 128)) { + return grammarErrorAtPos(ts.getSourceFileOfNode(accessor), accessor.end - 1, ";".length, ts.Diagnostics._0_expected, "{"); + } + 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 === 149 ? + ts.Diagnostics.A_get_accessor_cannot_have_parameters : + ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); + } + else if (kind === 150) { + 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 === 149 ? 0 : 1); + } + function getAccessorThisParameter(accessor) { + if (accessor.parameters.length === (accessor.kind === 149 ? 1 : 2) && + accessor.parameters[0].name.kind === 69 && + accessor.parameters[0].name.originalKeywordKind === 97) { + return accessor.parameters[0]; + } + } + 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 === 171) { + if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) { + return true; + } + else if (node.body === undefined) { + return grammarErrorAtPos(ts.getSourceFileOfNode(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 === 222) { + 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 === 159) { + 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 214: + if (node.label && current.label.text === node.label.text) { + var isMisplacedContinueLabel = node.kind === 209 + && !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 213: + if (node.kind === 210 && !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 === 210 + ? 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 === 210 + ? 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_an_array_destructuring_pattern); + } + if (node.name.kind === 168 || node.name.kind === 167) { + return grammarErrorOnNode(node.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern); + } + if (node.initializer) { + return grammarErrorAtPos(ts.getSourceFileOfNode(node), node.initializer.pos - 1, 1, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); + } + } + } + function checkGrammarVariableDeclaration(node) { + if (node.parent.parent.kind !== 207 && node.parent.parent.kind !== 208) { + if (ts.isInAmbientContext(node)) { + if (node.initializer) { + var equalsTokenLength = "=".length; + return grammarErrorAtPos(ts.getSourceFileOfNode(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); + } + } + } + var checkLetConstNames = (ts.isLet(node) || ts.isConst(node)); + return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name); + } + function checkGrammarNameInLetOrConstDeclarations(name) { + if (name.kind === 69) { + if (name.originalKeywordKind === 108) { + 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 (element.kind !== 193) { + checkGrammarNameInLetOrConstDeclarations(element.name); + } + } + } + } + function checkGrammarVariableDeclarationList(declarationList) { + var declarations = declarationList.declarations; + if (checkGrammarForDisallowedTrailingComma(declarationList.declarations)) { + return true; + } + if (!declarationList.declarations.length) { + return grammarErrorAtPos(ts.getSourceFileOfNode(declarationList), declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.Variable_declaration_list_cannot_be_empty); + } + } + function allowLetAndConstDeclarations(parent) { + switch (parent.kind) { + case 203: + case 204: + case 205: + case 212: + case 206: + case 207: + case 208: + return false; + case 214: + 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 hasParseDiagnostics(sourceFile) { + return sourceFile.parseDiagnostics.length > 0; + } + function grammarErrorOnFirstToken(node, message, arg0, arg1, arg2) { + var sourceFile = ts.getSourceFileOfNode(node); + if (!hasParseDiagnostics(sourceFile)) { + var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos); + diagnostics.add(ts.createFileDiagnostic(sourceFile, span.start, span.length, message, arg0, arg1, arg2)); + return true; + } + } + function grammarErrorAtPos(sourceFile, start, length, message, arg0, arg1, arg2) { + 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(ts.getSourceFileOfNode(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 === 222) { + 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 === 159) { + 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 === 222 || + node.kind === 223 || + node.kind === 230 || + node.kind === 229 || + node.kind === 236 || + node.kind === 235 || + (node.flags & 2) || + (node.flags & (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 === 200) { + if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) { + return true; + } + } + } + } + function checkGrammarSourceFile(node) { + return ts.isInAmbientContext(node) && checkGrammarTopLevelElementsForRequiredDeclareModifier(node); + } + function checkGrammarStatementInAmbientContext(node) { + if (ts.isInAmbientContext(node)) { + if (isAccessor(node.parent.kind)) { + 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 === 199 || node.parent.kind === 226 || node.parent.kind === 256) { + 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.isOctalLiteral && languageVersion >= 1) { + return grammarErrorOnNode(node, ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher); + } + } + function grammarErrorAfterFirstToken(node, message, arg0, arg1, arg2) { + var sourceFile = ts.getSourceFileOfNode(node); + if (!hasParseDiagnostics(sourceFile)) { + var span = ts.getSpanOfTokenAtPosition(sourceFile, node.pos); + diagnostics.add(ts.createFileDiagnostic(sourceFile, ts.textSpanEnd(span), 0, message, arg0, arg1, arg2)); + return true; + } + } + var _a; + } + ts.createTypeChecker = createTypeChecker; +})(ts || (ts = {})); +var ts; +(function (ts) { + var nullSourceMapWriter; + var defaultLastEncodedSourceMapSpan = { + emittedLine: 1, + emittedColumn: 1, + sourceLine: 1, + sourceColumn: 1, + sourceIndex: 0 + }; + function getNullSourceMapWriter() { + if (nullSourceMapWriter === undefined) { + nullSourceMapWriter = { + getSourceMapData: function () { return undefined; }, + setSourceFile: function (sourceFile) { }, + emitStart: function (range) { }, + emitEnd: function (range, stopOverridingSpan) { }, + emitPos: function (pos) { }, + changeEmitSourcePos: function () { }, + getText: function () { return undefined; }, + getSourceMappingURL: function () { return undefined; }, + initialize: function (filePath, sourceMapFilePath, sourceFiles, isBundledEmit) { }, + reset: function () { } + }; + } + return nullSourceMapWriter; + } + ts.getNullSourceMapWriter = getNullSourceMapWriter; + function createSourceMapWriter(host, writer) { + var compilerOptions = host.getCompilerOptions(); + var currentSourceFile; + var sourceMapDir; + var stopOverridingSpan = false; + var modifyLastSourcePos = false; + var sourceMapSourceIndex; + var lastRecordedSourceMapSpan; + var lastEncodedSourceMapSpan; + var lastEncodedNameIndex; + var sourceMapData; + return { + getSourceMapData: function () { return sourceMapData; }, + setSourceFile: setSourceFile, + emitPos: emitPos, + emitStart: emitStart, + emitEnd: emitEnd, + changeEmitSourcePos: changeEmitSourcePos, + getText: getText, + getSourceMappingURL: getSourceMappingURL, + initialize: initialize, + reset: reset + }; + function initialize(filePath, sourceMapFilePath, sourceFiles, isBundledEmit) { + if (sourceMapData) { + reset(); + } + currentSourceFile = 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 (!isBundledEmit) { + ts.Debug.assert(sourceFiles.length === 1); + sourceMapDir = ts.getDirectoryPath(ts.getSourceFilePathInNewDir(sourceFiles[0], 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() { + currentSourceFile = undefined; + sourceMapDir = undefined; + sourceMapSourceIndex = undefined; + lastRecordedSourceMapSpan = undefined; + lastEncodedSourceMapSpan = undefined; + lastEncodedNameIndex = undefined; + sourceMapData = undefined; + } + function updateLastEncodedAndRecordedSpans() { + if (modifyLastSourcePos) { + modifyLastSourcePos = false; + lastRecordedSourceMapSpan.emittedLine = lastEncodedSourceMapSpan.emittedLine; + lastRecordedSourceMapSpan.emittedColumn = lastEncodedSourceMapSpan.emittedColumn; + sourceMapData.sourceMapDecodedMappings.pop(); + lastEncodedSourceMapSpan = sourceMapData.sourceMapDecodedMappings.length ? + sourceMapData.sourceMapDecodedMappings[sourceMapData.sourceMapDecodedMappings.length - 1] : + defaultLastEncodedSourceMapSpan; + var sourceMapMappings = sourceMapData.sourceMapMappings; + var lenthToSet = sourceMapMappings.length - 1; + for (; lenthToSet >= 0; lenthToSet--) { + var currentChar = sourceMapMappings.charAt(lenthToSet); + if (currentChar === ",") { + break; + } + if (currentChar === ";" && lenthToSet !== 0 && sourceMapMappings.charAt(lenthToSet - 1) !== ";") { + break; + } + } + sourceMapData.sourceMapMappings = sourceMapMappings.substr(0, Math.max(0, lenthToSet)); + } + } + 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 (pos === -1) { + return; + } + var sourceLinePos = ts.getLineAndCharacterOfPosition(currentSourceFile, 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 + }; + stopOverridingSpan = false; + } + else if (!stopOverridingSpan) { + lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line; + lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character; + lastRecordedSourceMapSpan.sourceIndex = sourceMapSourceIndex; + } + updateLastEncodedAndRecordedSpans(); + } + function getStartPos(range) { + var rangeHasDecorators = !!range.decorators; + return range.pos !== -1 ? ts.skipTrivia(currentSourceFile.text, rangeHasDecorators ? range.decorators.end : range.pos) : -1; + } + function emitStart(range) { + emitPos(getStartPos(range)); + } + function emitEnd(range, stopOverridingEnd) { + emitPos(range.end); + stopOverridingSpan = stopOverridingEnd; + } + function changeEmitSourcePos() { + ts.Debug.assert(!modifyLastSourcePos); + modifyLastSourcePos = true; + } + function setSourceFile(sourceFile) { + currentSourceFile = sourceFile; + var sourcesDirectoryPath = compilerOptions.sourceRoot ? host.getCommonSourceDirectory() : sourceMapDir; + var source = ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, currentSourceFile.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(sourceFile.fileName); + if (compilerOptions.inlineSources) { + sourceMapData.sourceMapSourcesContent.push(sourceFile.text); + } + } + } + function getText() { + encodeLastRecordedSourceMapSpan(); + return ts.stringify({ + version: 3, + file: sourceMapData.sourceMapFile, + sourceRoot: sourceMapData.sourceMapSourceRoot, + sources: sourceMapData.sourceMapSources, + names: sourceMapData.sourceMapNames, + mappings: sourceMapData.sourceMapMappings, + sourcesContent: sourceMapData.sourceMapSourcesContent + }); + } + function getSourceMappingURL() { + 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 getDeclarationDiagnostics(host, resolver, targetSourceFile) { + var declarationDiagnostics = ts.createDiagnosticCollection(); + ts.forEachExpectedEmitFile(host, getDeclarationDiagnosticsFromFile, targetSourceFile); + return declarationDiagnostics.getDiagnostics(targetSourceFile ? targetSourceFile.fileName : undefined); + function getDeclarationDiagnosticsFromFile(_a, sources, isBundledEmit) { + var declarationFilePath = _a.declarationFilePath; + emitDeclarations(host, resolver, declarationDiagnostics, declarationFilePath, sources, isBundledEmit); + } + } + ts.getDeclarationDiagnostics = getDeclarationDiagnostics; + function emitDeclarations(host, resolver, emitterDiagnostics, declarationFilePath, sourceFiles, isBundledEmit) { + 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 ? function (declaration) { } : writeJsDocComments; + var emit = compilerOptions.stripInternal ? stripInternal : emitNode; + var noDeclare; + 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)) { + addedGlobalFileReference = true; + } + emittedReferencedFiles.push(referencedFile); + } + }); + } + resultHasExternalModuleIndicator = false; + if (!isBundledEmit || !ts.isExternalModule(sourceFile)) { + noDeclare = false; + emitSourceFile(sourceFile); + } + else if (ts.isExternalModule(sourceFile)) { + noDeclare = true; + 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 === 230); + 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) { + for (var directive in usedTypeDirectiveReferences) { + if (ts.hasProperty(usedTypeDirectiveReferences, directive)) { + referencesOutput += "/// " + newLine; + } + } + } + return { + reportedDeclarationError: reportedDeclarationError, + moduleElementDeclarationEmitInfo: allSourcesModuleElementDeclarationEmitInfo, + synchronousDeclarationOutput: writer.getText(), + referencesOutput: referencesOutput + }; + function hasInternalAnnotation(range) { + var comment = currentText.substring(range.pos, range.end); + return comment.indexOf("@internal") >= 0; + } + 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.writeKeyword = writer.write; + writer.writeOperator = writer.write; + writer.writePunctuation = writer.write; + writer.writeSpace = writer.write; + writer.writeStringLiteral = writer.writeLiteral; + writer.writeParameter = 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 === 218) { + nodeToCheck = declaration.parent.parent; + } + else if (declaration.kind === 233 || declaration.kind === 234 || declaration.kind === 231) { + 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 === 230) { + moduleElementEmitInfo.isVisible = true; + } + else { + createAndSetNewTextWriterWithSymbolWriter(); + for (var declarationIndent = moduleElementEmitInfo.indent; declarationIndent; declarationIndent--) { + increaseIndent(); + } + if (nodeToCheck.kind === 225) { + ts.Debug.assert(asynchronousSubModuleDeclarationEmitInfo === undefined); + asynchronousSubModuleDeclarationEmitInfo = []; + } + writeModuleElement(nodeToCheck); + if (nodeToCheck.kind === 225) { + moduleElementEmitInfo.subModuleElementDeclarationEmitInfo = asynchronousSubModuleDeclarationEmitInfo; + asynchronousSubModuleDeclarationEmitInfo = undefined; + } + moduleElementEmitInfo.asynchronousOutput = writer.getText(); + } + } + }); + setWriter(oldWriter); + } + function recordTypeReferenceDirectivesIfNecessary(typeReferenceDirectives) { + if (!typeReferenceDirectives) { + return; + } + if (!usedTypeDirectiveReferences) { + usedTypeDirectiveReferences = {}; + } + for (var _i = 0, typeReferenceDirectives_1 = typeReferenceDirectives; _i < typeReferenceDirectives_1.length; _i++) { + var directive = typeReferenceDirectives_1[_i]; + if (!ts.hasProperty(usedTypeDirectiveReferences, directive)) { + usedTypeDirectiveReferences[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)); + recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning)); + } + 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(": "); + if (type) { + emitType(type); + } + else { + errorNameNode = declaration.name; + resolver.writeTypeOfDeclaration(declaration, enclosingDeclaration, 2, 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, 2, writer); + errorNameNode = undefined; + } + } + function emitLines(nodes) { + for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) { + var node = nodes_2[_i]; + emit(node); + } + } + function emitSeparatedList(nodes, separator, eachNodeEmitFn, canEmitFn) { + var currentWriterPos = writer.getTextPos(); + for (var _i = 0, nodes_3 = nodes; _i < nodes_3.length; _i++) { + var node = nodes_3[_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.getJsDocCommentsFromText(declaration, currentText); + ts.emitNewLineBeforeLeadingComments(currentLineMap, writer, declaration, jsDocComments); + ts.emitComments(currentText, currentLineMap, writer, jsDocComments, true, newLine, ts.writeCommentRange); + } + } + function emitTypeWithNewGetSymbolAccessibilityDiagnostic(type, getSymbolAccessibilityDiagnostic) { + writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic; + emitType(type); + } + function emitType(type) { + switch (type.kind) { + case 117: + case 132: + case 130: + case 120: + case 133: + case 103: + case 135: + case 93: + case 127: + case 165: + case 166: + return writeTextOfNode(currentText, type); + case 194: + return emitExpressionWithTypeArguments(type); + case 155: + return emitTypeReference(type); + case 158: + return emitTypeQuery(type); + case 160: + return emitArrayType(type); + case 161: + return emitTupleType(type); + case 162: + return emitUnionType(type); + case 163: + return emitIntersectionType(type); + case 164: + return emitParenType(type); + case 156: + case 157: + return emitSignatureDeclarationWithJsDocComments(type); + case 159: + return emitTypeLiteral(type); + case 69: + return emitEntityName(type); + case 139: + return emitEntityName(type); + case 154: + return emitTypePredicate(type); + } + function writeEntityName(entityName) { + if (entityName.kind === 69) { + writeTextOfNode(currentText, entityName); + } + else { + var left = entityName.kind === 139 ? entityName.left : entityName.expression; + var right = entityName.kind === 139 ? entityName.right : entityName.name; + writeEntityName(left); + write("."); + writeTextOfNode(currentText, right); + } + } + function emitEntityName(entityName) { + var visibilityResult = resolver.isEntityNameVisible(entityName, entityName.parent.kind === 229 ? entityName.parent : enclosingDeclaration); + handleSymbolAccessibilityError(visibilityResult); + recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForEntityName(entityName)); + writeEntityName(entityName); + } + function emitExpressionWithTypeArguments(node) { + if (ts.isSupportedExpressionWithTypeArguments(node)) { + ts.Debug.assert(node.expression.kind === 69 || node.expression.kind === 172); + 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 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 getExportDefaultTempVariableName() { + var baseName = "_default"; + if (!ts.hasProperty(currentIdentifiers, baseName)) { + return baseName; + } + var count = 0; + while (true) { + count++; + var name_22 = baseName + "_" + count; + if (!ts.hasProperty(currentIdentifiers, name_22)) { + return name_22; + } + } + } + function emitExportAssignment(node) { + if (node.expression.kind === 69) { + write(node.isExportEquals ? "export = " : "export default "); + writeTextOfNode(currentText, node.expression); + } + else { + var tempVarName = getExportDefaultTempVariableName(); + if (!noDeclare) { + write("declare "); + } + write("var "); + write(tempVarName); + write(": "); + writer.getSymbolAccessibilityDiagnostic = getDefaultExportAccessibilityDiagnostic; + resolver.writeTypeOfExpression(node.expression, enclosingDeclaration, 2, writer); + write(";"); + writeLine(); + write(node.isExportEquals ? "export = " : "export default "); + write(tempVarName); + } + write(";"); + writeLine(); + if (node.expression.kind === 69) { + var nodes = resolver.collectLinkedAliases(node.expression); + writeAsynchronousModuleElements(nodes); + } + function getDefaultExportAccessibilityDiagnostic(diagnostic) { + return { + diagnosticMessage: ts.Diagnostics.Default_export_of_the_module_has_or_is_using_private_name_0, + errorNode: node + }; + } + } + function isModuleElementVisible(node) { + return resolver.isDeclarationVisible(node); + } + function emitModuleElement(node, isModuleElementVisible) { + if (isModuleElementVisible) { + writeModuleElement(node); + } + else if (node.kind === 229 || + (node.parent.kind === 256 && isCurrentFileExternalModule)) { + var isVisible = void 0; + if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 256) { + asynchronousSubModuleDeclarationEmitInfo.push({ + node: node, + outputPos: writer.getTextPos(), + indent: writer.getIndent(), + isVisible: isVisible + }); + } + else { + if (node.kind === 230) { + 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 220: + return writeFunctionDeclaration(node); + case 200: + return writeVariableStatement(node); + case 222: + return writeInterfaceDeclaration(node); + case 221: + return writeClassDeclaration(node); + case 223: + return writeTypeAliasDeclaration(node); + case 224: + return writeEnumDeclaration(node); + case 225: + return writeModuleDeclaration(node); + case 229: + return writeImportEqualsDeclaration(node); + case 230: + return writeImportDeclaration(node); + default: + ts.Debug.fail("Unknown symbol kind"); + } + } + function emitModuleElementDeclarationFlags(node) { + if (node.parent.kind === 256) { + if (node.flags & 1) { + write("export "); + } + if (node.flags & 512) { + write("default "); + } + else if (node.kind !== 222 && !noDeclare) { + 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 (node.flags & 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(symbolAccessibilityResult) { + 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 === 232) { + return resolver.isDeclarationVisible(namedBindings); + } + else { + return ts.forEach(namedBindings.elements, function (namedImport) { return resolver.isDeclarationVisible(namedImport); }); + } + } + } + function writeImportDeclaration(node) { + emitJsDocComments(node); + if (node.flags & 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 === 232) { + 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 !== 225; + var moduleSpecifier; + if (parent.kind === 229) { + var node = parent; + moduleSpecifier = ts.getExternalModuleImportEqualsDeclarationExpression(node); + } + else if (parent.kind === 225) { + 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 & 4096) { + write("namespace "); + } + else { + write("module "); + } + if (ts.isExternalModuleAugmentation(node)) { + emitExternalModuleSpecifier(node); + } + else { + writeTextOfNode(currentText, node.name); + } + } + while (node.body.kind !== 226) { + node = node.body; + write("."); + writeTextOfNode(currentText, node.name); + } + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.body.statements); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + 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(symbolAccessibilityResult) { + 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(enumMemberValue.toString()); + } + write(","); + writeLine(); + } + function isPrivateMethodTypeParameter(node) { + return node.parent.kind === 147 && (node.parent.flags & 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 === 156 || + node.parent.kind === 157 || + (node.parent.parent && node.parent.parent.kind === 159)) { + ts.Debug.assert(node.parent.kind === 147 || + node.parent.kind === 146 || + node.parent.kind === 156 || + node.parent.kind === 157 || + node.parent.kind === 151 || + node.parent.kind === 152); + emitType(node.constraint); + } + else { + emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.constraint, getTypeParameterConstraintVisibilityError); + } + } + function getTypeParameterConstraintVisibilityError(symbolAccessibilityResult) { + var diagnosticMessage; + switch (node.parent.kind) { + case 221: + diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; + break; + case 222: + diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; + break; + case 152: + diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 151: + diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 147: + case 146: + if (node.parent.flags & 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 === 221) { + 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 220: + diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_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.isSupportedExpressionWithTypeArguments(node)) { + emitTypeWithNewGetSymbolAccessibilityDiagnostic(node, getHeritageClauseVisibilityError); + } + else if (!isImplementsList && node.expression.kind === 93) { + write("null"); + } + else { + writer.getSymbolAccessibilityDiagnostic = getHeritageClauseVisibilityError; + resolver.writeBaseConstructorTypeOfClass(enclosingDeclaration, enclosingDeclaration, 2, writer); + } + function getHeritageClauseVisibilityError(symbolAccessibilityResult) { + var diagnosticMessage; + if (node.parent.parent.kind === 221) { + 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: node.parent.parent.name + }; + } + } + } + function writeClassDeclaration(node) { + function emitParameterProperties(constructorDeclaration) { + if (constructorDeclaration) { + ts.forEach(constructorDeclaration.parameters, function (param) { + if (param.flags & 92) { + emitPropertyDeclaration(param); + } + }); + } + } + emitJsDocComments(node); + emitModuleElementDeclarationFlags(node); + if (node.flags & 128) { + write("abstract "); + } + write("class "); + writeTextOfNode(currentText, node.name); + var prevEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = node; + emitTypeParameters(node.typeParameters); + var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node); + if (baseTypeNode) { + 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); + emitHeritageClause(ts.getInterfaceBaseTypeNodes(node), false); + write(" {"); + writeLine(); + increaseIndent(); + emitLines(node.members); + decreaseIndent(); + write("}"); + writeLine(); + enclosingDeclaration = prevEnclosingDeclaration; + } + function emitPropertyDeclaration(node) { + if (ts.hasDynamicName(node)) { + return; + } + emitJsDocComments(node); + emitClassMemberDeclarationFlags(node.flags); + emitVariableDeclaration(node); + write(";"); + writeLine(); + } + function emitVariableDeclaration(node) { + if (node.kind !== 218 || resolver.isDeclarationVisible(node)) { + if (ts.isBindingPattern(node.name)) { + emitBindingPattern(node.name); + } + else { + writeTextOfNode(currentText, node.name); + if ((node.kind === 145 || node.kind === 144 || node.kind === 142) && ts.hasQuestionToken(node)) { + write("?"); + } + if ((node.kind === 145 || node.kind === 144) && node.parent.kind === 159) { + emitTypeOfVariableDeclarationFromTypeLiteral(node); + } + else if (!(node.flags & 8)) { + writeTypeOfDeclaration(node, node.type, getVariableDeclarationTypeVisibilityError); + } + } + } + function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { + if (node.kind === 218) { + 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 === 145 || node.kind === 144) { + if (node.flags & 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 === 221) { + 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 !== 193) { + 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) { + 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(node.flags | (accessors.setAccessor ? 0 : 64)); + writeTextOfNode(currentText, node.name); + if (!(node.flags & 8)) { + accessorWithTypeAnnotation = node; + var type = getTypeAnnotationFromAccessor(node); + if (!type) { + var anotherAccessor = node.kind === 149 ? 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 === 149 + ? accessor.type + : accessor.parameters.length > 0 + ? accessor.parameters[0].type + : undefined; + } + } + function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) { + var diagnosticMessage; + if (accessorWithTypeAnnotation.kind === 150) { + if (accessorWithTypeAnnotation.parent.flags & 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 (accessorWithTypeAnnotation.flags & 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 === 220) { + emitModuleElementDeclarationFlags(node); + } + else if (node.kind === 147 || node.kind === 148) { + emitClassMemberDeclarationFlags(node.flags); + } + if (node.kind === 220) { + write("function "); + writeTextOfNode(currentText, node.name); + } + else if (node.kind === 148) { + 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 === 153) { + emitClassMemberDeclarationFlags(node.flags); + write("["); + } + else { + if (node.kind === 152 || node.kind === 157) { + write("new "); + } + else if (node.kind === 156) { + 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 === 153) { + write("]"); + } + else { + write(")"); + } + var isFunctionTypeOrConstructorType = node.kind === 156 || node.kind === 157; + if (isFunctionTypeOrConstructorType || node.parent.kind === 159) { + if (node.type) { + write(isFunctionTypeOrConstructorType ? " => " : ": "); + emitType(node.type); + } + } + else if (node.kind !== 148 && !(node.flags & 8)) { + writeReturnTypeAtSignature(node, getReturnTypeVisibilityError); + } + enclosingDeclaration = prevEnclosingDeclaration; + if (!isFunctionTypeOrConstructorType) { + write(";"); + writeLine(); + } + else if (closeParenthesizedFunctionType) { + write(")"); + } + function getReturnTypeVisibilityError(symbolAccessibilityResult) { + var diagnosticMessage; + switch (node.kind) { + case 152: + 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 151: + 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 153: + 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 147: + case 146: + if (node.flags & 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 === 221) { + 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 220: + 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 === 156 || + node.parent.kind === 157 || + node.parent.parent.kind === 159) { + emitTypeOfVariableDeclarationFromTypeLiteral(node); + } + else if (!(node.parent.flags & 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 148: + 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 152: + 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 151: + 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 147: + case 146: + if (node.parent.flags & 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 === 221) { + 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 220: + 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 === 167) { + write("{"); + emitCommaList(bindingPattern.elements, emitBindingElement); + write("}"); + } + else if (bindingPattern.kind === 168) { + write("["); + var elements = bindingPattern.elements; + emitCommaList(elements, emitBindingElement); + if (elements && elements.hasTrailingComma) { + write(", "); + } + write("]"); + } + } + function emitBindingElement(bindingElement) { + if (bindingElement.kind === 193) { + write(" "); + } + else if (bindingElement.kind === 169) { + 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 === 69); + if (bindingElement.dotDotDotToken) { + write("..."); + } + writeTextOfNode(currentText, bindingElement.name); + } + } + } + } + } + function emitNode(node) { + switch (node.kind) { + case 220: + case 225: + case 229: + case 222: + case 221: + case 223: + case 224: + return emitModuleElement(node, isModuleElementVisible(node)); + case 200: + return emitModuleElement(node, isVariableStatementVisible(node)); + case 230: + return emitModuleElement(node, !node.importClause); + case 236: + return emitExportDeclaration(node); + case 148: + case 147: + case 146: + return writeFunctionDeclaration(node); + case 152: + case 151: + case 153: + return emitSignatureDeclarationWithJsDocComments(node); + case 149: + case 150: + return emitAccessorDeclaration(node); + case 145: + case 144: + return emitPropertyDeclaration(node); + case 255: + return emitEnumMemberDeclaration(node); + case 235: + return emitExportAssignment(node); + case 256: + return emitSourceFile(node); + } + } + function writeReferencePath(referencedFile, addBundledFileReference) { + var declFileName; + var addedBundledEmitReference = false; + if (ts.isDeclarationFile(referencedFile)) { + declFileName = referencedFile.fileName; + } + else { + ts.forEachExpectedEmitFile(host, getDeclFileName, referencedFile); + } + if (declFileName) { + declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(declarationFilePath)), declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, false); + referencesOutput += "/// " + newLine; + } + return addedBundledEmitReference; + function getDeclFileName(emitFileNames, sourceFiles, isBundledEmit) { + 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, sourceFiles, isBundledEmit, host, resolver, emitterDiagnostics) { + var emitDeclarationResult = emitDeclarations(host, resolver, emitterDiagnostics, declarationFilePath, sourceFiles, isBundledEmit); + var emitSkipped = emitDeclarationResult.reportedDeclarationError || host.isEmitBlocked(declarationFilePath) || host.getCompilerOptions().noEmit; + if (!emitSkipped) { + 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) { + function getResolvedExternalModuleName(host, file) { + return file.moduleName || ts.getExternalModuleNameFromPath(host, file.fileName); + } + ts.getResolvedExternalModuleName = getResolvedExternalModuleName; + function getExternalModuleNameFromDeclaration(host, resolver, declaration) { + var file = resolver.getExternalModuleFileFromDeclaration(declaration); + if (!file || ts.isDeclarationFile(file)) { + return undefined; + } + return getResolvedExternalModuleName(host, file); + } + ts.getExternalModuleNameFromDeclaration = getExternalModuleNameFromDeclaration; + var entities = { + "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 + }; + function emitFiles(resolver, host, targetSourceFile) { + var extendsHelper = "\nvar __extends = (this && this.__extends) || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};"; + var assignHelper = "\nvar __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};"; + var decorateHelper = "\nvar __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};"; + var metadataHelper = "\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};"; + var paramHelper = "\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};"; + var awaiterHelper = "\nvar __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};"; + var compilerOptions = host.getCompilerOptions(); + var languageVersion = ts.getEmitScriptTarget(compilerOptions); + var modulekind = ts.getEmitModuleKind(compilerOptions); + var sourceMapDataList = compilerOptions.sourceMap || compilerOptions.inlineSourceMap ? [] : undefined; + var emittedFilesList = compilerOptions.listEmittedFiles ? [] : undefined; + var emitterDiagnostics = ts.createDiagnosticCollection(); + var emitSkipped = false; + var newLine = host.getNewLine(); + var emitJavaScript = createFileEmitter(); + ts.forEachExpectedEmitFile(host, emitFile, targetSourceFile); + return { + emitSkipped: emitSkipped, + diagnostics: emitterDiagnostics.getDiagnostics(), + emittedFiles: emittedFilesList, + sourceMaps: sourceMapDataList + }; + function isUniqueLocalName(name, container) { + for (var node = container; ts.isNodeDescendentOf(node, container); node = node.nextContainer) { + if (node.locals && ts.hasProperty(node.locals, name)) { + if (node.locals[name].flags & (107455 | 1048576 | 8388608)) { + return false; + } + } + } + return true; + } + function setLabeledJump(state, isBreak, labelText, labelMarker) { + if (isBreak) { + if (!state.labeledNonLocalBreaks) { + state.labeledNonLocalBreaks = {}; + } + state.labeledNonLocalBreaks[labelText] = labelMarker; + } + else { + if (!state.labeledNonLocalContinues) { + state.labeledNonLocalContinues = {}; + } + state.labeledNonLocalContinues[labelText] = labelMarker; + } + } + function hoistVariableDeclarationFromLoop(state, declaration) { + if (!state.hoistedLocalVariables) { + state.hoistedLocalVariables = []; + } + visit(declaration.name); + function visit(node) { + if (node.kind === 69) { + state.hoistedLocalVariables.push(node); + } + else { + for (var _a = 0, _b = node.elements; _a < _b.length; _a++) { + var element = _b[_a]; + visit(element.name); + } + } + } + } + function createFileEmitter() { + var writer = ts.createTextWriter(newLine); + var write = writer.write, writeTextOfNode = writer.writeTextOfNode, writeLine = writer.writeLine, increaseIndent = writer.increaseIndent, decreaseIndent = writer.decreaseIndent; + var sourceMap = compilerOptions.sourceMap || compilerOptions.inlineSourceMap ? ts.createSourceMapWriter(host, writer) : ts.getNullSourceMapWriter(); + var setSourceFile = sourceMap.setSourceFile, emitStart = sourceMap.emitStart, emitEnd = sourceMap.emitEnd, emitPos = sourceMap.emitPos; + var currentSourceFile; + var currentText; + var currentLineMap; + var currentFileIdentifiers; + var renamedDependencies; + var isEs6Module; + var isCurrentFileExternalModule; + var exportFunctionForFile; + var contextObjectForFile; + var generatedNameSet; + var nodeToGeneratedName; + var computedPropertyNamesToGeneratedNames; + var decoratedClassAliases; + var convertedLoopState; + var extendsEmitted; + var assignEmitted; + var decorateEmitted; + var paramEmitted; + var awaiterEmitted; + var tempFlags = 0; + var tempVariables; + var tempParameters; + var externalImports; + var exportSpecifiers; + var exportEquals; + var hasExportStarsToExportValues; + var detachedCommentsInfo; + var sourceMapData; + var isOwnFileEmit; + var emitLeadingCommentsOfPosition = compilerOptions.removeComments ? function (pos) { } : emitLeadingCommentsOfPositionWorker; + var setSourceMapWriterEmit = compilerOptions.sourceMap || compilerOptions.inlineSourceMap ? changeSourceMapEmit : function (writer) { }; + var moduleEmitDelegates = (_a = {}, + _a[ts.ModuleKind.ES6] = emitES6Module, + _a[ts.ModuleKind.AMD] = emitAMDModule, + _a[ts.ModuleKind.System] = emitSystemModule, + _a[ts.ModuleKind.UMD] = emitUMDModule, + _a[ts.ModuleKind.CommonJS] = emitCommonJSModule, + _a + ); + var bundleEmitDelegates = (_b = {}, + _b[ts.ModuleKind.ES6] = function () { }, + _b[ts.ModuleKind.AMD] = emitAMDModule, + _b[ts.ModuleKind.System] = emitSystemModule, + _b[ts.ModuleKind.UMD] = function () { }, + _b[ts.ModuleKind.CommonJS] = function () { }, + _b + ); + return doEmit; + function doEmit(jsFilePath, sourceMapFilePath, sourceFiles, isBundledEmit) { + sourceMap.initialize(jsFilePath, sourceMapFilePath, sourceFiles, isBundledEmit); + generatedNameSet = {}; + nodeToGeneratedName = []; + decoratedClassAliases = []; + isOwnFileEmit = !isBundledEmit; + if (isBundledEmit && modulekind) { + ts.forEach(sourceFiles, emitEmitHelpers); + } + ts.forEach(sourceFiles, emitSourceFile); + writeLine(); + var sourceMappingURL = sourceMap.getSourceMappingURL(); + if (sourceMappingURL) { + write("//# sourceMappingURL=" + sourceMappingURL); + } + writeEmittedFiles(writer.getText(), jsFilePath, sourceMapFilePath, compilerOptions.emitBOM, sourceFiles); + sourceMap.reset(); + writer.reset(); + currentSourceFile = undefined; + currentText = undefined; + currentLineMap = undefined; + exportFunctionForFile = undefined; + contextObjectForFile = undefined; + generatedNameSet = undefined; + nodeToGeneratedName = undefined; + decoratedClassAliases = undefined; + computedPropertyNamesToGeneratedNames = undefined; + convertedLoopState = undefined; + extendsEmitted = false; + decorateEmitted = false; + paramEmitted = false; + awaiterEmitted = false; + assignEmitted = false; + tempFlags = 0; + tempVariables = undefined; + tempParameters = undefined; + externalImports = undefined; + exportSpecifiers = undefined; + exportEquals = undefined; + hasExportStarsToExportValues = undefined; + detachedCommentsInfo = undefined; + sourceMapData = undefined; + isEs6Module = false; + renamedDependencies = undefined; + isCurrentFileExternalModule = false; + } + function emitSourceFile(sourceFile) { + currentSourceFile = sourceFile; + currentText = sourceFile.text; + currentLineMap = ts.getLineStarts(sourceFile); + exportFunctionForFile = undefined; + contextObjectForFile = undefined; + isEs6Module = sourceFile.symbol && sourceFile.symbol.exports && !!sourceFile.symbol.exports["___esModule"]; + renamedDependencies = sourceFile.renamedDependencies; + currentFileIdentifiers = sourceFile.identifiers; + isCurrentFileExternalModule = ts.isExternalModule(sourceFile); + setSourceFile(sourceFile); + emitNodeWithCommentsAndWithoutSourcemap(sourceFile); + } + function isUniqueName(name) { + return !resolver.hasGlobalName(name) && + !ts.hasProperty(currentFileIdentifiers, name) && + !ts.hasProperty(generatedNameSet, name); + } + function makeTempVariableName(flags) { + if (flags && !(tempFlags & flags)) { + var name_23 = flags === 268435456 ? "_i" : "_n"; + if (isUniqueName(name_23)) { + tempFlags |= flags; + return name_23; + } + } + while (true) { + var count = tempFlags & 268435455; + tempFlags++; + if (count !== 8 && count !== 13) { + var name_24 = count < 26 ? "_" + String.fromCharCode(97 + count) : "_" + (count - 26); + if (isUniqueName(name_24)) { + return name_24; + } + } + } + } + function makeUniqueName(baseName) { + if (baseName.charCodeAt(baseName.length - 1) !== 95) { + baseName += "_"; + } + var i = 1; + while (true) { + var generatedName = baseName + i; + if (isUniqueName(generatedName)) { + return generatedNameSet[generatedName] = generatedName; + } + i++; + } + } + function generateNameForModuleOrEnum(node) { + var name = node.name.text; + return isUniqueLocalName(name, node) ? name : makeUniqueName(name); + } + function generateNameForImportOrExportDeclaration(node) { + var expr = ts.getExternalModuleName(node); + var baseName = expr.kind === 9 ? + ts.escapeIdentifier(ts.makeIdentifierFromModuleName(expr.text)) : "module"; + return makeUniqueName(baseName); + } + function generateNameForExportDefault() { + return makeUniqueName("default"); + } + function generateNameForClassExpression() { + return makeUniqueName("class"); + } + function generateNameForNode(node) { + switch (node.kind) { + case 69: + return makeUniqueName(node.text); + case 225: + case 224: + return generateNameForModuleOrEnum(node); + case 230: + case 236: + return generateNameForImportOrExportDeclaration(node); + case 220: + case 221: + case 235: + return generateNameForExportDefault(); + case 192: + return generateNameForClassExpression(); + } + } + function getGeneratedNameForNode(node) { + var id = ts.getNodeId(node); + return nodeToGeneratedName[id] || (nodeToGeneratedName[id] = ts.unescapeIdentifier(generateNameForNode(node))); + } + function writeEmittedFiles(emitOutput, jsFilePath, sourceMapFilePath, writeByteOrderMark, sourceFiles) { + 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, emitOutput, writeByteOrderMark, sourceFiles); + } + function createTempVariable(flags) { + var result = ts.createSynthesizedNode(69); + result.text = makeTempVariableName(flags); + return result; + } + function recordTempDeclaration(name) { + if (!tempVariables) { + tempVariables = []; + } + tempVariables.push(name); + } + function createAndRecordTempVariable(flags) { + var temp = createTempVariable(flags); + recordTempDeclaration(temp); + return temp; + } + function emitTempDeclarations(newLine) { + if (tempVariables) { + if (newLine) { + writeLine(); + } + else { + write(" "); + } + write("var "); + emitCommaList(tempVariables); + write(";"); + } + } + function emitToken(tokenKind, startPos, emitFn) { + var tokenStartPos = ts.skipTrivia(currentText, startPos); + emitPos(tokenStartPos); + var tokenString = ts.tokenToString(tokenKind); + if (emitFn) { + emitFn(); + } + else { + write(tokenString); + } + var tokenEndPos = tokenStartPos + tokenString.length; + emitPos(tokenEndPos); + return tokenEndPos; + } + function emitOptional(prefix, node) { + if (node) { + write(prefix); + emit(node); + } + } + function emitParenthesizedIf(node, parenthesized) { + if (parenthesized) { + write("("); + } + emit(node); + if (parenthesized) { + write(")"); + } + } + function emitLinePreservingList(parent, nodes, allowTrailingComma, spacesBetweenBraces) { + ts.Debug.assert(nodes.length > 0); + increaseIndent(); + if (nodeStartPositionsAreOnSameLine(parent, nodes[0])) { + if (spacesBetweenBraces) { + write(" "); + } + } + else { + writeLine(); + } + for (var i = 0, n = nodes.length; i < n; i++) { + if (i) { + if (nodeEndIsOnSameLineAsNodeStart(nodes[i - 1], nodes[i])) { + write(", "); + } + else { + write(","); + writeLine(); + } + } + emit(nodes[i]); + } + if (nodes.hasTrailingComma && allowTrailingComma) { + write(","); + } + decreaseIndent(); + if (nodeEndPositionsAreOnSameLine(parent, ts.lastOrUndefined(nodes))) { + if (spacesBetweenBraces) { + write(" "); + } + } + else { + writeLine(); + } + } + function emitList(nodes, start, count, multiLine, trailingComma, leadingComma, noTrailingNewLine, emitNode) { + if (!emitNode) { + emitNode = emit; + } + for (var i = 0; i < count; i++) { + if (multiLine) { + if (i || leadingComma) { + write(","); + } + writeLine(); + } + else { + if (i || leadingComma) { + write(", "); + } + } + var node = nodes[start + i]; + emitTrailingCommentsOfPosition(node.pos); + emitNode(node); + leadingComma = true; + } + if (trailingComma) { + write(","); + } + if (multiLine && !noTrailingNewLine) { + writeLine(); + } + return count; + } + function emitCommaList(nodes) { + if (nodes) { + emitList(nodes, 0, nodes.length, false, false); + } + } + function emitLines(nodes) { + emitLinesStartingAt(nodes, 0); + } + function emitLinesStartingAt(nodes, startIndex) { + for (var i = startIndex; i < nodes.length; i++) { + writeLine(); + emit(nodes[i]); + } + } + function isBinaryOrOctalIntegerLiteral(node, text) { + if (node.kind === 8 && text.length > 1) { + switch (text.charCodeAt(1)) { + case 98: + case 66: + case 111: + case 79: + return true; + } + } + return false; + } + function emitLiteral(node) { + var text = getLiteralText(node); + if ((compilerOptions.sourceMap || compilerOptions.inlineSourceMap) && (node.kind === 9 || ts.isTemplateLiteralKind(node.kind))) { + writer.writeLiteral(text); + } + else if (languageVersion < 2 && isBinaryOrOctalIntegerLiteral(node, text)) { + write(node.text); + } + else { + write(text); + } + } + function getLiteralText(node) { + if (languageVersion < 2 && (ts.isTemplateLiteralKind(node.kind) || node.hasExtendedUnicodeEscape)) { + return getQuotedEscapedLiteralText('"', node.text, '"'); + } + if (node.parent) { + return ts.getTextOfNodeFromSourceText(currentText, node); + } + switch (node.kind) { + case 9: + return getQuotedEscapedLiteralText('"', node.text, '"'); + case 11: + return getQuotedEscapedLiteralText("`", node.text, "`"); + case 12: + return getQuotedEscapedLiteralText("`", node.text, "${"); + case 13: + return getQuotedEscapedLiteralText("}", node.text, "${"); + case 14: + return getQuotedEscapedLiteralText("}", node.text, "`"); + case 8: + return node.text; + } + ts.Debug.fail("Literal kind '" + node.kind + "' not accounted for."); + } + function getQuotedEscapedLiteralText(leftQuote, text, rightQuote) { + return leftQuote + ts.escapeNonAsciiCharacters(ts.escapeString(text)) + rightQuote; + } + function emitDownlevelRawTemplateLiteral(node) { + var text = ts.getTextOfNodeFromSourceText(currentText, node); + var isLast = node.kind === 11 || node.kind === 14; + text = text.substring(1, text.length - (isLast ? 1 : 2)); + text = text.replace(/\r\n?/g, "\n"); + text = ts.escapeString(text); + write("\"" + text + "\""); + } + function emitDownlevelTaggedTemplateArray(node, literalEmitter) { + write("["); + if (node.template.kind === 11) { + literalEmitter(node.template); + } + else { + literalEmitter(node.template.head); + ts.forEach(node.template.templateSpans, function (child) { + write(", "); + literalEmitter(child.literal); + }); + } + write("]"); + } + function emitDownlevelTaggedTemplate(node) { + var tempVariable = createAndRecordTempVariable(0); + write("("); + emit(tempVariable); + write(" = "); + emitDownlevelTaggedTemplateArray(node, emit); + write(", "); + emit(tempVariable); + write(".raw = "); + emitDownlevelTaggedTemplateArray(node, emitDownlevelRawTemplateLiteral); + write(", "); + emitParenthesizedIf(node.tag, needsParenthesisForPropertyAccessOrInvocation(node.tag)); + write("("); + emit(tempVariable); + if (node.template.kind === 189) { + ts.forEach(node.template.templateSpans, function (templateSpan) { + write(", "); + var needsParens = templateSpan.expression.kind === 187 + && templateSpan.expression.operatorToken.kind === 24; + emitParenthesizedIf(templateSpan.expression, needsParens); + }); + } + write("))"); + } + function emitTemplateExpression(node) { + if (languageVersion >= 2) { + ts.forEachChild(node, emit); + return; + } + var emitOuterParens = ts.isExpression(node.parent) + && templateNeedsParens(node, node.parent); + if (emitOuterParens) { + write("("); + } + var headEmitted = false; + if (shouldEmitTemplateHead()) { + emitLiteral(node.head); + headEmitted = true; + } + for (var i = 0, n = node.templateSpans.length; i < n; i++) { + var templateSpan = node.templateSpans[i]; + var needsParens = templateSpan.expression.kind !== 178 + && comparePrecedenceToBinaryPlus(templateSpan.expression) !== 1; + if (i > 0 || headEmitted) { + write(" + "); + } + emitParenthesizedIf(templateSpan.expression, needsParens); + if (templateSpan.literal.text.length !== 0) { + write(" + "); + emitLiteral(templateSpan.literal); + } + } + if (emitOuterParens) { + write(")"); + } + function shouldEmitTemplateHead() { + ts.Debug.assert(node.templateSpans.length !== 0); + return node.head.text.length !== 0 || node.templateSpans[0].literal.text.length === 0; + } + function templateNeedsParens(template, parent) { + switch (parent.kind) { + case 174: + case 175: + return parent.expression === template; + case 176: + case 178: + return false; + default: + return comparePrecedenceToBinaryPlus(parent) !== -1; + } + } + function comparePrecedenceToBinaryPlus(expression) { + switch (expression.kind) { + case 187: + switch (expression.operatorToken.kind) { + case 37: + case 39: + case 40: + return 1; + case 35: + case 36: + return 0; + default: + return -1; + } + case 190: + case 188: + return -1; + default: + return 1; + } + } + } + function emitTemplateSpan(span) { + emit(span.expression); + emit(span.literal); + } + function jsxEmitReact(node) { + function emitTagName(name) { + if (name.kind === 69 && ts.isIntrinsicJsxName(name.text)) { + write('"'); + emit(name); + write('"'); + } + else { + emit(name); + } + } + function emitAttributeName(name) { + if (/^[A-Za-z_]\w*$/.test(name.text)) { + emit(name); + } + else { + write('"'); + emit(name); + write('"'); + } + } + function emitJsxAttribute(node) { + emitAttributeName(node.name); + write(": "); + if (node.initializer) { + emit(node.initializer); + } + else { + write("true"); + } + } + function emitJsxElement(openingNode, children) { + var syntheticReactRef = ts.createSynthesizedNode(69); + syntheticReactRef.text = compilerOptions.reactNamespace ? compilerOptions.reactNamespace : "React"; + syntheticReactRef.parent = openingNode; + emitLeadingComments(openingNode); + emitExpressionIdentifier(syntheticReactRef); + write(".createElement("); + emitTagName(openingNode.tagName); + write(", "); + if (openingNode.attributes.length === 0) { + write("null"); + } + else { + var attrs = openingNode.attributes; + if (ts.forEach(attrs, function (attr) { return attr.kind === 247; })) { + write("__assign("); + var haveOpenedObjectLiteral = false; + for (var i = 0; i < attrs.length; i++) { + if (attrs[i].kind === 247) { + if (i === 0) { + write("{}, "); + } + if (haveOpenedObjectLiteral) { + write("}"); + haveOpenedObjectLiteral = false; + } + if (i > 0) { + write(", "); + } + emit(attrs[i].expression); + } + else { + ts.Debug.assert(attrs[i].kind === 246); + if (haveOpenedObjectLiteral) { + write(", "); + } + else { + haveOpenedObjectLiteral = true; + if (i > 0) { + write(", "); + } + write("{"); + } + emitJsxAttribute(attrs[i]); + } + } + if (haveOpenedObjectLiteral) + write("}"); + write(")"); + } + else { + write("{"); + for (var i = 0, n = attrs.length; i < n; i++) { + if (i > 0) { + write(", "); + } + emitJsxAttribute(attrs[i]); + } + write("}"); + } + } + if (children) { + var firstChild = void 0; + var multipleEmittableChildren = false; + for (var i = 0, n = children.length; i < n; i++) { + var jsxChild = children[i]; + if (isJsxChildEmittable(jsxChild)) { + if (!firstChild) { + write(", "); + firstChild = jsxChild; + } + else { + if (!multipleEmittableChildren) { + multipleEmittableChildren = true; + increaseIndent(); + writeLine(); + emit(firstChild); + } + write(", "); + writeLine(); + emit(jsxChild); + } + } + } + if (multipleEmittableChildren) { + decreaseIndent(); + } + else if (firstChild) { + if (firstChild.kind !== 241 && firstChild.kind !== 242) { + emit(firstChild); + } + else { + increaseIndent(); + writeLine(); + emit(firstChild); + writeLine(); + decreaseIndent(); + } + } + } + write(")"); + emitTrailingComments(openingNode); + } + if (node.kind === 241) { + emitJsxElement(node.openingElement, node.children); + } + else { + ts.Debug.assert(node.kind === 242); + emitJsxElement(node); + } + } + function jsxEmitPreserve(node) { + function emitJsxAttribute(node) { + emit(node.name); + if (node.initializer) { + write("="); + emit(node.initializer); + } + } + function emitJsxSpreadAttribute(node) { + write("{..."); + emit(node.expression); + write("}"); + } + function emitAttributes(attribs) { + for (var i = 0, n = attribs.length; i < n; i++) { + if (i > 0) { + write(" "); + } + if (attribs[i].kind === 247) { + emitJsxSpreadAttribute(attribs[i]); + } + else { + ts.Debug.assert(attribs[i].kind === 246); + emitJsxAttribute(attribs[i]); + } + } + } + function emitJsxOpeningOrSelfClosingElement(node) { + write("<"); + emit(node.tagName); + if (node.attributes.length > 0 || (node.kind === 242)) { + write(" "); + } + emitAttributes(node.attributes); + if (node.kind === 242) { + write("/>"); + } + else { + write(">"); + } + } + function emitJsxClosingElement(node) { + write(""); + } + function emitJsxElement(node) { + emitJsxOpeningOrSelfClosingElement(node.openingElement); + for (var i = 0, n = node.children.length; i < n; i++) { + emit(node.children[i]); + } + emitJsxClosingElement(node.closingElement); + } + if (node.kind === 241) { + emitJsxElement(node); + } + else { + ts.Debug.assert(node.kind === 242); + emitJsxOpeningOrSelfClosingElement(node); + } + } + function emitExpressionForPropertyName(node) { + ts.Debug.assert(node.kind !== 169); + if (node.kind === 9) { + emitLiteral(node); + } + else if (node.kind === 140) { + if (ts.nodeIsDecorated(node.parent)) { + if (!computedPropertyNamesToGeneratedNames) { + computedPropertyNamesToGeneratedNames = []; + } + var generatedName = computedPropertyNamesToGeneratedNames[ts.getNodeId(node)]; + if (generatedName) { + write(generatedName); + return; + } + generatedName = createAndRecordTempVariable(0).text; + computedPropertyNamesToGeneratedNames[ts.getNodeId(node)] = generatedName; + write(generatedName); + write(" = "); + } + emit(node.expression); + } + else { + write('"'); + if (node.kind === 8) { + write(node.text); + } + else { + writeTextOfNode(currentText, node); + } + write('"'); + } + } + function isExpressionIdentifier(node) { + var parent = node.parent; + switch (parent.kind) { + case 170: + case 195: + case 184: + case 187: + case 174: + case 249: + case 140: + case 188: + case 143: + case 181: + case 204: + case 173: + case 235: + case 202: + case 194: + case 206: + case 207: + case 208: + case 203: + case 245: + case 242: + case 243: + case 247: + case 248: + case 175: + case 196: + case 178: + case 186: + case 185: + case 211: + case 254: + case 191: + case 213: + case 176: + case 197: + case 215: + case 177: + case 182: + case 183: + case 205: + case 212: + case 190: + return true; + case 169: + case 255: + case 142: + case 253: + case 145: + case 218: + return parent.initializer === node; + case 172: + return parent.expression === node; + case 180: + case 179: + return parent.body === node; + case 229: + return parent.moduleReference === node; + case 139: + return parent.left === node; + } + return false; + } + function emitExpressionIdentifier(node) { + var container = resolver.getReferencedExportContainer(node); + if (container) { + if (container.kind === 256) { + if (modulekind !== ts.ModuleKind.ES6 && modulekind !== ts.ModuleKind.System) { + write("exports."); + } + } + else { + write(getGeneratedNameForNode(container)); + write("."); + } + } + else { + if (modulekind !== ts.ModuleKind.ES6) { + var declaration = resolver.getReferencedImportDeclaration(node); + if (declaration) { + if (declaration.kind === 231) { + write(getGeneratedNameForNode(declaration.parent)); + write(languageVersion === 0 ? '["default"]' : ".default"); + return; + } + else if (declaration.kind === 234) { + write(getGeneratedNameForNode(declaration.parent.parent.parent)); + var name_25 = declaration.propertyName || declaration.name; + var identifier = ts.getTextOfNodeFromSourceText(currentText, name_25); + if (languageVersion === 0 && identifier === "default") { + write('["default"]'); + } + else { + write("."); + write(identifier); + } + return; + } + } + } + if (languageVersion < 2) { + var declaration = resolver.getReferencedDeclarationWithCollidingName(node); + if (declaration) { + write(getGeneratedNameForNode(declaration.name)); + return; + } + } + else if (resolver.getNodeCheckFlags(node) & 1048576) { + var declaration = resolver.getReferencedValueDeclaration(node); + if (declaration) { + var classAlias = decoratedClassAliases[ts.getNodeId(declaration)]; + if (classAlias !== undefined) { + write(classAlias); + return; + } + } + } + } + if (ts.nodeIsSynthesized(node)) { + write(node.text); + } + else { + writeTextOfNode(currentText, node); + } + } + function isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(node) { + if (languageVersion < 2) { + var parent_13 = node.parent; + switch (parent_13.kind) { + case 169: + case 221: + case 224: + case 218: + return parent_13.name === node && resolver.isDeclarationWithCollidingName(parent_13); + } + } + return false; + } + function emitIdentifier(node) { + if (convertedLoopState) { + if (node.text == "arguments" && resolver.isArgumentsLocalBinding(node)) { + var name_26 = convertedLoopState.argumentsName || (convertedLoopState.argumentsName = makeUniqueName("arguments")); + write(name_26); + return; + } + } + if (!node.parent) { + write(node.text); + } + else if (isExpressionIdentifier(node)) { + emitExpressionIdentifier(node); + } + else if (isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(node)) { + write(getGeneratedNameForNode(node)); + } + else if (ts.nodeIsSynthesized(node)) { + write(node.text); + } + else { + writeTextOfNode(currentText, node); + } + } + function emitThis(node) { + if (resolver.getNodeCheckFlags(node) & 2) { + write("_this"); + } + else if (convertedLoopState) { + write(convertedLoopState.thisName || (convertedLoopState.thisName = makeUniqueName("this"))); + } + else { + write("this"); + } + } + function emitSuper(node) { + if (languageVersion >= 2) { + write("super"); + } + else { + var flags = resolver.getNodeCheckFlags(node); + if (flags & 256) { + write("_super.prototype"); + } + else { + write("_super"); + } + } + } + function emitObjectBindingPattern(node) { + write("{ "); + var elements = node.elements; + emitList(elements, 0, elements.length, false, elements.hasTrailingComma); + write(" }"); + } + function emitArrayBindingPattern(node) { + write("["); + var elements = node.elements; + emitList(elements, 0, elements.length, false, elements.hasTrailingComma); + write("]"); + } + function emitBindingElement(node) { + if (node.propertyName) { + emit(node.propertyName); + write(": "); + } + if (node.dotDotDotToken) { + write("..."); + } + if (ts.isBindingPattern(node.name)) { + emit(node.name); + } + else { + emitModuleMemberName(node); + } + emitOptional(" = ", node.initializer); + } + function emitSpreadElementExpression(node) { + write("..."); + emit(node.expression); + } + function emitYieldExpression(node) { + write(ts.tokenToString(114)); + if (node.asteriskToken) { + write("*"); + } + if (node.expression) { + write(" "); + emit(node.expression); + } + } + function emitAwaitExpression(node) { + var needsParenthesis = needsParenthesisForAwaitExpressionAsYield(node); + if (needsParenthesis) { + write("("); + } + write(ts.tokenToString(114)); + write(" "); + emit(node.expression); + if (needsParenthesis) { + write(")"); + } + } + function needsParenthesisForAwaitExpressionAsYield(node) { + if (node.parent.kind === 187 && !ts.isAssignmentOperator(node.parent.operatorToken.kind)) { + return true; + } + else if (node.parent.kind === 188 && node.parent.condition === node) { + return true; + } + return false; + } + function needsParenthesisForPropertyAccessOrInvocation(node) { + switch (node.kind) { + case 69: + case 170: + case 172: + case 173: + case 174: + case 178: + return false; + } + return true; + } + function emitListWithSpread(elements, needsUniqueCopy, multiLine, trailingComma, useConcat) { + var pos = 0; + var group = 0; + var length = elements.length; + while (pos < length) { + if (group === 1 && useConcat) { + write(".concat("); + } + else if (group > 0) { + write(", "); + } + var e = elements[pos]; + if (e.kind === 191) { + e = e.expression; + emitParenthesizedIf(e, group === 0 && needsParenthesisForPropertyAccessOrInvocation(e)); + pos++; + if (pos === length && group === 0 && needsUniqueCopy && e.kind !== 170) { + write(".slice()"); + } + } + else { + var i = pos; + while (i < length && elements[i].kind !== 191) { + i++; + } + write("["); + if (multiLine) { + increaseIndent(); + } + emitList(elements, pos, i - pos, multiLine, trailingComma && i === length); + if (multiLine) { + decreaseIndent(); + } + write("]"); + pos = i; + } + group++; + } + if (group > 1) { + if (useConcat) { + write(")"); + } + } + } + function isSpreadElementExpression(node) { + return node.kind === 191; + } + function emitArrayLiteral(node) { + var elements = node.elements; + if (elements.length === 0) { + write("[]"); + } + else if (languageVersion >= 2 || !ts.forEach(elements, isSpreadElementExpression)) { + write("["); + emitLinePreservingList(node, node.elements, elements.hasTrailingComma, false); + write("]"); + } + else { + emitListWithSpread(elements, true, node.multiLine, elements.hasTrailingComma, true); + } + } + function emitObjectLiteralBody(node, numElements) { + if (numElements === 0) { + write("{}"); + return; + } + write("{"); + if (numElements > 0) { + var properties = node.properties; + if (numElements === properties.length) { + emitLinePreservingList(node, properties, languageVersion >= 1, true); + } + else { + var multiLine = node.multiLine; + if (!multiLine) { + write(" "); + } + else { + increaseIndent(); + } + emitList(properties, 0, numElements, multiLine, false); + if (!multiLine) { + write(" "); + } + else { + decreaseIndent(); + } + } + } + write("}"); + } + function emitDownlevelObjectLiteralWithComputedProperties(node, firstComputedPropertyIndex) { + var multiLine = node.multiLine; + var properties = node.properties; + write("("); + if (multiLine) { + increaseIndent(); + } + var tempVar = createAndRecordTempVariable(0); + emit(tempVar); + write(" = "); + emitObjectLiteralBody(node, firstComputedPropertyIndex); + for (var i = firstComputedPropertyIndex, n = properties.length; i < n; i++) { + writeComma(); + var property = properties[i]; + emitStart(property); + if (property.kind === 149 || property.kind === 150) { + var accessors = ts.getAllAccessorDeclarations(node.properties, property); + if (property !== accessors.firstAccessor) { + continue; + } + write("Object.defineProperty("); + emit(tempVar); + write(", "); + emitStart(property.name); + emitExpressionForPropertyName(property.name); + emitEnd(property.name); + write(", {"); + increaseIndent(); + if (accessors.getAccessor) { + writeLine(); + emitLeadingComments(accessors.getAccessor); + write("get: "); + emitStart(accessors.getAccessor); + write("function "); + emitSignatureAndBody(accessors.getAccessor); + emitEnd(accessors.getAccessor); + emitTrailingComments(accessors.getAccessor); + write(","); + } + if (accessors.setAccessor) { + writeLine(); + emitLeadingComments(accessors.setAccessor); + write("set: "); + emitStart(accessors.setAccessor); + write("function "); + emitSignatureAndBody(accessors.setAccessor); + emitEnd(accessors.setAccessor); + emitTrailingComments(accessors.setAccessor); + write(","); + } + writeLine(); + write("enumerable: true,"); + writeLine(); + write("configurable: true"); + decreaseIndent(); + writeLine(); + write("})"); + emitEnd(property); + } + else { + emitLeadingComments(property); + emitStart(property.name); + emit(tempVar); + emitMemberAccessForPropertyName(property.name); + emitEnd(property.name); + write(" = "); + if (property.kind === 253) { + emit(property.initializer); + } + else if (property.kind === 254) { + emitExpressionIdentifier(property.name); + } + else if (property.kind === 147) { + emitFunctionDeclaration(property); + } + else { + ts.Debug.fail("ObjectLiteralElement type not accounted for: " + property.kind); + } + } + emitEnd(property); + } + writeComma(); + emit(tempVar); + if (multiLine) { + decreaseIndent(); + writeLine(); + } + write(")"); + function writeComma() { + if (multiLine) { + write(","); + writeLine(); + } + else { + write(", "); + } + } + } + function emitObjectLiteral(node) { + var properties = node.properties; + if (languageVersion < 2) { + var numProperties = properties.length; + var numInitialNonComputedProperties = numProperties; + for (var i = 0, n = properties.length; i < n; i++) { + if (properties[i].name.kind === 140) { + numInitialNonComputedProperties = i; + break; + } + } + var hasComputedProperty = numInitialNonComputedProperties !== properties.length; + if (hasComputedProperty) { + emitDownlevelObjectLiteralWithComputedProperties(node, numInitialNonComputedProperties); + return; + } + } + emitObjectLiteralBody(node, properties.length); + } + function createBinaryExpression(left, operator, right, startsOnNewLine) { + var result = ts.createSynthesizedNode(187, startsOnNewLine); + result.operatorToken = ts.createSynthesizedNode(operator); + result.left = left; + result.right = right; + return result; + } + function createPropertyAccessExpression(expression, name) { + var result = ts.createSynthesizedNode(172); + result.expression = parenthesizeForAccess(expression); + result.dotToken = ts.createSynthesizedNode(21); + result.name = name; + return result; + } + function createElementAccessExpression(expression, argumentExpression) { + var result = ts.createSynthesizedNode(173); + result.expression = parenthesizeForAccess(expression); + result.argumentExpression = argumentExpression; + return result; + } + function parenthesizeForAccess(expr) { + while (expr.kind === 177 || + expr.kind === 195 || + expr.kind === 196) { + expr = expr.expression; + } + if (ts.isLeftHandSideExpression(expr) && + expr.kind !== 175 && + expr.kind !== 8) { + return expr; + } + var node = ts.createSynthesizedNode(178); + node.expression = expr; + return node; + } + function emitComputedPropertyName(node) { + write("["); + emitExpressionForPropertyName(node); + write("]"); + } + function emitMethod(node) { + if (languageVersion >= 2 && node.asteriskToken) { + write("*"); + } + emit(node.name); + if (languageVersion < 2) { + write(": function "); + } + emitSignatureAndBody(node); + } + function emitPropertyAssignment(node) { + emit(node.name); + write(": "); + emitTrailingCommentsOfPosition(node.initializer.pos); + emit(node.initializer); + } + function isNamespaceExportReference(node) { + var container = resolver.getReferencedExportContainer(node); + return container && container.kind !== 256; + } + function isImportedReference(node) { + var declaration = resolver.getReferencedImportDeclaration(node); + return declaration && (declaration.kind === 231 || declaration.kind === 234); + } + function emitShorthandPropertyAssignment(node) { + writeTextOfNode(currentText, node.name); + if (languageVersion < 2 || (modulekind !== ts.ModuleKind.ES6 && isImportedReference(node.name)) || isNamespaceExportReference(node.name)) { + write(": "); + emit(node.name); + } + if (languageVersion >= 2 && node.objectAssignmentInitializer) { + write(" = "); + emit(node.objectAssignmentInitializer); + } + } + function tryEmitConstantValue(node) { + var constantValue = tryGetConstEnumValue(node); + if (constantValue !== undefined) { + write(constantValue.toString()); + if (!compilerOptions.removeComments) { + var propertyName = node.kind === 172 ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); + write(" /* " + propertyName + " */"); + } + return true; + } + return false; + } + function tryGetConstEnumValue(node) { + if (compilerOptions.isolatedModules) { + return undefined; + } + return node.kind === 172 || node.kind === 173 + ? resolver.getConstantValue(node) + : undefined; + } + function indentIfOnDifferentLines(parent, node1, node2, valueToWriteWhenNotIndenting) { + var realNodesAreOnDifferentLines = !ts.nodeIsSynthesized(parent) && !nodeEndIsOnSameLineAsNodeStart(node1, node2); + var synthesizedNodeIsOnDifferentLine = synthesizedNodeStartsOnNewLine(node2); + if (realNodesAreOnDifferentLines || synthesizedNodeIsOnDifferentLine) { + increaseIndent(); + writeLine(); + return true; + } + else { + if (valueToWriteWhenNotIndenting) { + write(valueToWriteWhenNotIndenting); + } + return false; + } + } + function emitPropertyAccess(node) { + if (tryEmitConstantValue(node)) { + return; + } + if (languageVersion === 2 && + node.expression.kind === 95 && + isInAsyncMethodWithSuperInES6(node)) { + var name_27 = ts.createSynthesizedNode(9); + name_27.text = node.name.text; + emitSuperAccessInAsyncMethod(node.expression, name_27); + return; + } + emit(node.expression); + var indentedBeforeDot = indentIfOnDifferentLines(node, node.expression, node.dotToken); + var shouldEmitSpace = false; + if (!indentedBeforeDot) { + if (node.expression.kind === 8) { + var text = ts.getTextOfNodeFromSourceText(currentText, node.expression); + shouldEmitSpace = text.indexOf(ts.tokenToString(21)) < 0; + } + else { + var constantValue = tryGetConstEnumValue(node.expression); + shouldEmitSpace = isFinite(constantValue) && Math.floor(constantValue) === constantValue; + } + } + if (shouldEmitSpace) { + write(" ."); + } + else { + write("."); + } + var indentedAfterDot = indentIfOnDifferentLines(node, node.dotToken, node.name); + emit(node.name); + decreaseIndentIf(indentedBeforeDot, indentedAfterDot); + } + function emitQualifiedName(node) { + emit(node.left); + write("."); + emit(node.right); + } + function emitQualifiedNameAsExpression(node, useFallback) { + if (node.left.kind === 69) { + emitEntityNameAsExpression(node.left, useFallback); + } + else if (useFallback) { + var temp = createAndRecordTempVariable(0); + write("("); + emitNodeWithoutSourceMap(temp); + write(" = "); + emitEntityNameAsExpression(node.left, true); + write(") && "); + emitNodeWithoutSourceMap(temp); + } + else { + emitEntityNameAsExpression(node.left, false); + } + write("."); + emit(node.right); + } + function emitEntityNameAsExpression(node, useFallback) { + switch (node.kind) { + case 69: + if (useFallback) { + write("typeof "); + emitExpressionIdentifier(node); + write(" !== 'undefined' && "); + } + emitExpressionIdentifier(node); + break; + case 139: + emitQualifiedNameAsExpression(node, useFallback); + break; + default: + emitNodeWithoutSourceMap(node); + break; + } + } + function emitIndexedAccess(node) { + if (tryEmitConstantValue(node)) { + return; + } + if (languageVersion === 2 && + node.expression.kind === 95 && + isInAsyncMethodWithSuperInES6(node)) { + emitSuperAccessInAsyncMethod(node.expression, node.argumentExpression); + return; + } + emit(node.expression); + write("["); + emit(node.argumentExpression); + write("]"); + } + function hasSpreadElement(elements) { + return ts.forEach(elements, function (e) { return e.kind === 191; }); + } + function skipParentheses(node) { + while (node.kind === 178 || + node.kind === 177 || + node.kind === 195 || + node.kind === 196) { + node = node.expression; + } + return node; + } + function emitCallTarget(node) { + if (node.kind === 69 || node.kind === 97 || node.kind === 95) { + emit(node); + return node; + } + var temp = createAndRecordTempVariable(0); + write("("); + emit(temp); + write(" = "); + emit(node); + write(")"); + return temp; + } + function emitCallWithSpread(node) { + var target; + var expr = skipParentheses(node.expression); + if (expr.kind === 172) { + target = emitCallTarget(expr.expression); + write("."); + emit(expr.name); + } + else if (expr.kind === 173) { + target = emitCallTarget(expr.expression); + write("["); + emit(expr.argumentExpression); + write("]"); + } + else if (expr.kind === 95) { + target = expr; + write("_super"); + } + else { + emit(node.expression); + } + write(".apply("); + if (target) { + if (target.kind === 95) { + emitThis(target); + } + else { + emit(target); + } + } + else { + write("void 0"); + } + write(", "); + emitListWithSpread(node.arguments, false, false, false, true); + write(")"); + } + function isInAsyncMethodWithSuperInES6(node) { + if (languageVersion === 2) { + var container = ts.getSuperContainer(node, false); + if (container && resolver.getNodeCheckFlags(container) & (2048 | 4096)) { + return true; + } + } + return false; + } + function emitSuperAccessInAsyncMethod(superNode, argumentExpression) { + var container = ts.getSuperContainer(superNode, false); + var isSuperBinding = resolver.getNodeCheckFlags(container) & 4096; + write("_super("); + emit(argumentExpression); + write(isSuperBinding ? ").value" : ")"); + } + function emitCallExpression(node) { + if (languageVersion < 2 && hasSpreadElement(node.arguments)) { + emitCallWithSpread(node); + return; + } + var expression = node.expression; + var superCall = false; + var isAsyncMethodWithSuper = false; + if (expression.kind === 95) { + emitSuper(expression); + superCall = true; + } + else { + superCall = ts.isSuperPropertyOrElementAccess(expression); + isAsyncMethodWithSuper = superCall && isInAsyncMethodWithSuperInES6(node); + emit(expression); + } + if (superCall && (languageVersion < 2 || isAsyncMethodWithSuper)) { + write(".call("); + emitThis(expression); + if (node.arguments.length) { + write(", "); + emitCommaList(node.arguments); + } + write(")"); + } + else { + write("("); + emitCommaList(node.arguments); + write(")"); + } + } + function emitNewExpression(node) { + write("new "); + if (languageVersion === 1 && + node.arguments && + hasSpreadElement(node.arguments)) { + write("("); + var target = emitCallTarget(node.expression); + write(".bind.apply("); + emit(target); + write(", [void 0].concat("); + emitListWithSpread(node.arguments, false, false, false, false); + write(")))"); + write("()"); + } + else { + emit(node.expression); + if (node.arguments) { + write("("); + emitCommaList(node.arguments); + write(")"); + } + } + } + function emitTaggedTemplateExpression(node) { + if (languageVersion >= 2) { + emit(node.tag); + write(" "); + emit(node.template); + } + else { + emitDownlevelTaggedTemplate(node); + } + } + function emitParenExpression(node) { + if (!ts.nodeIsSynthesized(node) && node.parent.kind !== 180) { + if (node.expression.kind === 177 || + node.expression.kind === 195 || + node.expression.kind === 196) { + var operand = node.expression.expression; + while (operand.kind === 177 || + operand.kind === 195 || + operand.kind === 196) { + operand = operand.expression; + } + if (operand.kind !== 185 && + operand.kind !== 183 && + operand.kind !== 182 && + operand.kind !== 181 && + operand.kind !== 186 && + operand.kind !== 175 && + !(operand.kind === 174 && node.parent.kind === 175) && + !(operand.kind === 179 && node.parent.kind === 174) && + !(operand.kind === 8 && node.parent.kind === 172)) { + emit(operand); + return; + } + } + } + write("("); + emit(node.expression); + write(")"); + } + function emitDeleteExpression(node) { + write(ts.tokenToString(78)); + write(" "); + emit(node.expression); + } + function emitVoidExpression(node) { + write(ts.tokenToString(103)); + write(" "); + emit(node.expression); + } + function emitTypeOfExpression(node) { + write(ts.tokenToString(101)); + write(" "); + emit(node.expression); + } + function isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node) { + if (!isCurrentFileSystemExternalModule() || node.kind !== 69 || ts.nodeIsSynthesized(node)) { + return false; + } + var isVariableDeclarationOrBindingElement = node.parent && (node.parent.kind === 218 || node.parent.kind === 169); + var targetDeclaration = isVariableDeclarationOrBindingElement + ? node.parent + : resolver.getReferencedValueDeclaration(node); + return isSourceFileLevelDeclarationInSystemJsModule(targetDeclaration, true); + } + function emitPrefixUnaryExpression(node) { + var exportChanged = (node.operator === 41 || node.operator === 42) && + isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.operand); + if (exportChanged) { + write(exportFunctionForFile + "(\""); + emitNodeWithoutSourceMap(node.operand); + write("\", "); + } + write(ts.tokenToString(node.operator)); + if (node.operand.kind === 185) { + var operand = node.operand; + if (node.operator === 35 && (operand.operator === 35 || operand.operator === 41)) { + write(" "); + } + else if (node.operator === 36 && (operand.operator === 36 || operand.operator === 42)) { + write(" "); + } + } + emit(node.operand); + if (exportChanged) { + write(")"); + } + } + function emitPostfixUnaryExpression(node) { + var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.operand); + if (exportChanged) { + write("(" + exportFunctionForFile + "(\""); + emitNodeWithoutSourceMap(node.operand); + write("\", "); + write(ts.tokenToString(node.operator)); + emit(node.operand); + if (node.operator === 41) { + write(") - 1)"); + } + else { + write(") + 1)"); + } + } + else { + emit(node.operand); + write(ts.tokenToString(node.operator)); + } + } + function shouldHoistDeclarationInSystemJsModule(node) { + return isSourceFileLevelDeclarationInSystemJsModule(node, false); + } + function isSourceFileLevelDeclarationInSystemJsModule(node, isExported) { + if (!node || !isCurrentFileSystemExternalModule()) { + return false; + } + var current = ts.getRootDeclaration(node).parent; + while (current) { + if (current.kind === 256) { + return !isExported || ((ts.getCombinedNodeFlags(node) & 1) !== 0); + } + else if (ts.isDeclaration(current)) { + return false; + } + else { + current = current.parent; + } + } + } + function emitExponentiationOperator(node) { + var leftHandSideExpression = node.left; + if (node.operatorToken.kind === 60) { + var synthesizedLHS = void 0; + var shouldEmitParentheses = false; + if (ts.isElementAccessExpression(leftHandSideExpression)) { + shouldEmitParentheses = true; + write("("); + synthesizedLHS = ts.createSynthesizedNode(173, false); + var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, false, false); + synthesizedLHS.expression = identifier; + if (leftHandSideExpression.argumentExpression.kind !== 8 && + leftHandSideExpression.argumentExpression.kind !== 9) { + var tempArgumentExpression = createAndRecordTempVariable(268435456); + synthesizedLHS.argumentExpression = tempArgumentExpression; + emitAssignment(tempArgumentExpression, leftHandSideExpression.argumentExpression, true, leftHandSideExpression.expression); + } + else { + synthesizedLHS.argumentExpression = leftHandSideExpression.argumentExpression; + } + write(", "); + } + else if (ts.isPropertyAccessExpression(leftHandSideExpression)) { + shouldEmitParentheses = true; + write("("); + synthesizedLHS = ts.createSynthesizedNode(172, false); + var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, false, false); + synthesizedLHS.expression = identifier; + synthesizedLHS.dotToken = leftHandSideExpression.dotToken; + synthesizedLHS.name = leftHandSideExpression.name; + write(", "); + } + emit(synthesizedLHS || leftHandSideExpression); + write(" = "); + write("Math.pow("); + emit(synthesizedLHS || leftHandSideExpression); + write(", "); + emit(node.right); + write(")"); + if (shouldEmitParentheses) { + write(")"); + } + } + else { + write("Math.pow("); + emit(leftHandSideExpression); + write(", "); + emit(node.right); + write(")"); + } + } + function emitBinaryExpression(node) { + if (languageVersion < 2 && node.operatorToken.kind === 56 && + (node.left.kind === 171 || node.left.kind === 170)) { + emitDestructuring(node, node.parent.kind === 202); + } + else { + var exportChanged = node.operatorToken.kind >= 56 && + node.operatorToken.kind <= 68 && + isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.left); + if (exportChanged) { + write(exportFunctionForFile + "(\""); + emitNodeWithoutSourceMap(node.left); + write("\", "); + } + if (node.operatorToken.kind === 38 || node.operatorToken.kind === 60) { + emitExponentiationOperator(node); + } + else { + emit(node.left); + var indentedBeforeOperator = indentIfOnDifferentLines(node, node.left, node.operatorToken, node.operatorToken.kind !== 24 ? " " : undefined); + write(ts.tokenToString(node.operatorToken.kind)); + var indentedAfterOperator = indentIfOnDifferentLines(node, node.operatorToken, node.right, " "); + emit(node.right); + decreaseIndentIf(indentedBeforeOperator, indentedAfterOperator); + } + if (exportChanged) { + write(")"); + } + } + } + function synthesizedNodeStartsOnNewLine(node) { + return ts.nodeIsSynthesized(node) && node.startsOnNewLine; + } + function emitConditionalExpression(node) { + emit(node.condition); + var indentedBeforeQuestion = indentIfOnDifferentLines(node, node.condition, node.questionToken, " "); + write("?"); + var indentedAfterQuestion = indentIfOnDifferentLines(node, node.questionToken, node.whenTrue, " "); + emit(node.whenTrue); + decreaseIndentIf(indentedBeforeQuestion, indentedAfterQuestion); + var indentedBeforeColon = indentIfOnDifferentLines(node, node.whenTrue, node.colonToken, " "); + write(":"); + var indentedAfterColon = indentIfOnDifferentLines(node, node.colonToken, node.whenFalse, " "); + emit(node.whenFalse); + decreaseIndentIf(indentedBeforeColon, indentedAfterColon); + } + function decreaseIndentIf(value1, value2) { + if (value1) { + decreaseIndent(); + } + if (value2) { + decreaseIndent(); + } + } + function isSingleLineEmptyBlock(node) { + if (node && node.kind === 199) { + var block = node; + return block.statements.length === 0 && nodeEndIsOnSameLineAsNodeStart(block, block); + } + } + function emitBlock(node) { + if (isSingleLineEmptyBlock(node)) { + emitToken(15, node.pos); + write(" "); + emitToken(16, node.statements.end); + return; + } + emitToken(15, node.pos); + increaseIndent(); + if (node.kind === 226) { + ts.Debug.assert(node.parent.kind === 225); + emitCaptureThisForNodeIfNecessary(node.parent); + } + emitLines(node.statements); + if (node.kind === 226) { + emitTempDeclarations(true); + } + decreaseIndent(); + writeLine(); + emitToken(16, node.statements.end); + } + function emitEmbeddedStatement(node) { + if (node.kind === 199) { + write(" "); + emit(node); + } + else { + increaseIndent(); + writeLine(); + emit(node); + decreaseIndent(); + } + } + function emitExpressionStatement(node) { + emitParenthesizedIf(node.expression, node.expression.kind === 180); + write(";"); + } + function emitIfStatement(node) { + var endPos = emitToken(88, node.pos); + write(" "); + endPos = emitToken(17, endPos); + emit(node.expression); + emitToken(18, node.expression.end); + emitEmbeddedStatement(node.thenStatement); + if (node.elseStatement) { + writeLine(); + emitToken(80, node.thenStatement.end); + if (node.elseStatement.kind === 203) { + write(" "); + emit(node.elseStatement); + } + else { + emitEmbeddedStatement(node.elseStatement); + } + } + } + function emitDoStatement(node) { + emitLoop(node, emitDoStatementWorker); + } + function emitDoStatementWorker(node, loop) { + write("do"); + if (loop) { + emitConvertedLoopCall(loop, true); + } + else { + emitNormalLoopBody(node, true); + } + if (node.statement.kind === 199) { + write(" "); + } + else { + writeLine(); + } + write("while ("); + emit(node.expression); + write(");"); + } + function emitWhileStatement(node) { + emitLoop(node, emitWhileStatementWorker); + } + function emitWhileStatementWorker(node, loop) { + write("while ("); + emit(node.expression); + write(")"); + if (loop) { + emitConvertedLoopCall(loop, true); + } + else { + emitNormalLoopBody(node, true); + } + } + function tryEmitStartOfVariableDeclarationList(decl) { + if (shouldHoistVariable(decl, true)) { + return false; + } + if (convertedLoopState && (ts.getCombinedNodeFlags(decl) & 3072) === 0) { + for (var _a = 0, _b = decl.declarations; _a < _b.length; _a++) { + var varDecl = _b[_a]; + hoistVariableDeclarationFromLoop(convertedLoopState, varDecl); + } + return false; + } + emitStart(decl); + if (decl && languageVersion >= 2) { + if (ts.isLet(decl)) { + write("let "); + } + else if (ts.isConst(decl)) { + write("const "); + } + else { + write("var "); + } + } + else { + write("var "); + } + return true; + } + function emitVariableDeclarationListSkippingUninitializedEntries(list) { + var started = false; + for (var _a = 0, _b = list.declarations; _a < _b.length; _a++) { + var decl = _b[_a]; + if (!decl.initializer) { + continue; + } + if (!started) { + started = true; + } + else { + write(", "); + } + emit(decl); + } + return started; + } + function shouldConvertLoopBody(node) { + return languageVersion < 2 && + (resolver.getNodeCheckFlags(node) & 65536) !== 0; + } + function emitLoop(node, loopEmitter) { + var shouldConvert = shouldConvertLoopBody(node); + if (!shouldConvert) { + loopEmitter(node, undefined); + } + else { + var loop = convertLoopBody(node); + if (node.parent.kind === 214) { + emitLabelAndColon(node.parent); + } + loopEmitter(node, loop); + } + } + function convertLoopBody(node) { + var functionName = makeUniqueName("_loop"); + var loopInitializer; + switch (node.kind) { + case 206: + case 207: + case 208: + var initializer = node.initializer; + if (initializer && initializer.kind === 219) { + loopInitializer = node.initializer; + } + break; + } + var loopParameters; + var loopOutParameters; + if (loopInitializer && (ts.getCombinedNodeFlags(loopInitializer) & 3072)) { + loopParameters = []; + for (var _a = 0, _b = loopInitializer.declarations; _a < _b.length; _a++) { + var varDeclaration = _b[_a]; + processVariableDeclaration(varDeclaration.name); + } + } + var bodyIsBlock = node.statement.kind === 199; + var paramList = loopParameters ? loopParameters.join(", ") : ""; + writeLine(); + write("var " + functionName + " = function(" + paramList + ")"); + var convertedOuterLoopState = convertedLoopState; + convertedLoopState = { loopOutParameters: loopOutParameters }; + if (convertedOuterLoopState) { + if (convertedOuterLoopState.argumentsName) { + convertedLoopState.argumentsName = convertedOuterLoopState.argumentsName; + } + if (convertedOuterLoopState.thisName) { + convertedLoopState.thisName = convertedOuterLoopState.thisName; + } + if (convertedOuterLoopState.hoistedLocalVariables) { + convertedLoopState.hoistedLocalVariables = convertedOuterLoopState.hoistedLocalVariables; + } + } + write(" {"); + writeLine(); + increaseIndent(); + if (bodyIsBlock) { + emitLines(node.statement.statements); + } + else { + emit(node.statement); + } + writeLine(); + copyLoopOutParameters(convertedLoopState, 1, true); + decreaseIndent(); + writeLine(); + write("};"); + writeLine(); + if (loopOutParameters) { + write("var "); + for (var i = 0; i < loopOutParameters.length; i++) { + if (i !== 0) { + write(", "); + } + write(loopOutParameters[i].outParamName); + } + write(";"); + writeLine(); + } + if (convertedLoopState.argumentsName) { + if (convertedOuterLoopState) { + convertedOuterLoopState.argumentsName = convertedLoopState.argumentsName; + } + else { + write("var " + convertedLoopState.argumentsName + " = arguments;"); + writeLine(); + } + } + if (convertedLoopState.thisName) { + if (convertedOuterLoopState) { + convertedOuterLoopState.thisName = convertedLoopState.thisName; + } + else { + write("var " + convertedLoopState.thisName + " = this;"); + writeLine(); + } + } + if (convertedLoopState.hoistedLocalVariables) { + if (convertedOuterLoopState) { + convertedOuterLoopState.hoistedLocalVariables = convertedLoopState.hoistedLocalVariables; + } + else { + write("var "); + var seen = void 0; + for (var _c = 0, _d = convertedLoopState.hoistedLocalVariables; _c < _d.length; _c++) { + var id = _d[_c]; + if (!seen) { + seen = {}; + } + else { + write(", "); + } + if (!ts.hasProperty(seen, id.text)) { + emit(id); + seen[id.text] = id.text; + } + } + write(";"); + writeLine(); + } + } + var currentLoopState = convertedLoopState; + convertedLoopState = convertedOuterLoopState; + return { functionName: functionName, paramList: paramList, state: currentLoopState }; + function processVariableDeclaration(name) { + if (name.kind === 69) { + var nameText = isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(name) + ? getGeneratedNameForNode(name) + : name.text; + loopParameters.push(nameText); + if (resolver.getNodeCheckFlags(name.parent) & 2097152) { + var reassignedVariable = { originalName: name, outParamName: makeUniqueName("out_" + nameText) }; + (loopOutParameters || (loopOutParameters = [])).push(reassignedVariable); + } + } + else { + for (var _a = 0, _b = name.elements; _a < _b.length; _a++) { + var element = _b[_a]; + processVariableDeclaration(element.name); + } + } + } + } + function emitNormalLoopBody(node, emitAsEmbeddedStatement) { + var saveAllowedNonLabeledJumps; + if (convertedLoopState) { + saveAllowedNonLabeledJumps = convertedLoopState.allowedNonLabeledJumps; + convertedLoopState.allowedNonLabeledJumps = 2 | 4; + } + if (emitAsEmbeddedStatement) { + emitEmbeddedStatement(node.statement); + } + else if (node.statement.kind === 199) { + emitLines(node.statement.statements); + } + else { + writeLine(); + emit(node.statement); + } + if (convertedLoopState) { + convertedLoopState.allowedNonLabeledJumps = saveAllowedNonLabeledJumps; + } + } + function copyLoopOutParameters(state, copyDirection, emitAsStatements) { + if (state.loopOutParameters) { + for (var _a = 0, _b = state.loopOutParameters; _a < _b.length; _a++) { + var outParam = _b[_a]; + if (copyDirection === 0) { + emitIdentifier(outParam.originalName); + write(" = " + outParam.outParamName); + } + else { + write(outParam.outParamName + " = "); + emitIdentifier(outParam.originalName); + } + if (emitAsStatements) { + write(";"); + writeLine(); + } + else { + write(", "); + } + } + } + } + function emitConvertedLoopCall(loop, emitAsBlock) { + if (emitAsBlock) { + write(" {"); + writeLine(); + increaseIndent(); + } + var isSimpleLoop = !(loop.state.nonLocalJumps & ~4) && + !loop.state.labeledNonLocalBreaks && + !loop.state.labeledNonLocalContinues; + var loopResult = makeUniqueName("state"); + if (!isSimpleLoop) { + write("var " + loopResult + " = "); + } + write(loop.functionName + "(" + loop.paramList + ");"); + writeLine(); + copyLoopOutParameters(loop.state, 0, true); + if (!isSimpleLoop) { + writeLine(); + if (loop.state.nonLocalJumps & 8) { + write("if (typeof " + loopResult + " === \"object\") "); + if (convertedLoopState) { + write("return " + loopResult + ";"); + convertedLoopState.nonLocalJumps |= 8; + } + else { + write("return " + loopResult + ".value;"); + } + writeLine(); + } + if (loop.state.nonLocalJumps & 2) { + write("if (" + loopResult + " === \"break\") break;"); + writeLine(); + } + emitDispatchTableForLabeledJumps(loopResult, loop.state, convertedLoopState); + } + if (emitAsBlock) { + writeLine(); + decreaseIndent(); + write("}"); + } + function emitDispatchTableForLabeledJumps(loopResultVariable, currentLoop, outerLoop) { + if (!currentLoop.labeledNonLocalBreaks && !currentLoop.labeledNonLocalContinues) { + return; + } + write("switch(" + loopResultVariable + ") {"); + increaseIndent(); + emitDispatchEntriesForLabeledJumps(currentLoop.labeledNonLocalBreaks, true, loopResultVariable, outerLoop); + emitDispatchEntriesForLabeledJumps(currentLoop.labeledNonLocalContinues, false, loopResultVariable, outerLoop); + decreaseIndent(); + writeLine(); + write("}"); + } + function emitDispatchEntriesForLabeledJumps(table, isBreak, loopResultVariable, outerLoop) { + if (!table) { + return; + } + for (var labelText in table) { + var labelMarker = table[labelText]; + writeLine(); + write("case \"" + labelMarker + "\": "); + if (!outerLoop || (outerLoop.labels && outerLoop.labels[labelText])) { + if (isBreak) { + write("break "); + } + else { + write("continue "); + } + write(labelText + ";"); + } + else { + setLabeledJump(outerLoop, isBreak, labelText, labelMarker); + write("return " + loopResultVariable + ";"); + } + } + } + } + function emitForStatement(node) { + emitLoop(node, emitForStatementWorker); + } + function emitForStatementWorker(node, loop) { + var endPos = emitToken(86, node.pos); + write(" "); + endPos = emitToken(17, endPos); + if (node.initializer && node.initializer.kind === 219) { + var variableDeclarationList = node.initializer; + var startIsEmitted = tryEmitStartOfVariableDeclarationList(variableDeclarationList); + if (startIsEmitted) { + emitCommaList(variableDeclarationList.declarations); + } + else { + emitVariableDeclarationListSkippingUninitializedEntries(variableDeclarationList); + } + } + else if (node.initializer) { + emit(node.initializer); + } + write(";"); + emitOptional(" ", node.condition); + write(";"); + emitOptional(" ", node.incrementor); + write(")"); + if (loop) { + emitConvertedLoopCall(loop, true); + } + else { + emitNormalLoopBody(node, true); + } + } + function emitForInOrForOfStatement(node) { + if (languageVersion < 2 && node.kind === 208) { + emitLoop(node, emitDownLevelForOfStatementWorker); + } + else { + emitLoop(node, emitForInOrForOfStatementWorker); + } + } + function emitForInOrForOfStatementWorker(node, loop) { + var endPos = emitToken(86, node.pos); + write(" "); + endPos = emitToken(17, endPos); + if (node.initializer.kind === 219) { + var variableDeclarationList = node.initializer; + if (variableDeclarationList.declarations.length >= 1) { + tryEmitStartOfVariableDeclarationList(variableDeclarationList); + emit(variableDeclarationList.declarations[0]); + } + } + else { + emit(node.initializer); + } + if (node.kind === 207) { + write(" in "); + } + else { + write(" of "); + } + emit(node.expression); + emitToken(18, node.expression.end); + if (loop) { + emitConvertedLoopCall(loop, true); + } + else { + emitNormalLoopBody(node, true); + } + } + function emitDownLevelForOfStatementWorker(node, loop) { + var endPos = emitToken(86, node.pos); + write(" "); + endPos = emitToken(17, endPos); + var counter = createTempVariable(268435456); + var rhsReference = ts.createSynthesizedNode(69); + rhsReference.text = node.expression.kind === 69 ? + makeUniqueName(node.expression.text) : + makeTempVariableName(0); + emitStart(node.expression); + write("var "); + emitNodeWithoutSourceMap(counter); + write(" = 0"); + emitEnd(node.expression); + write(", "); + emitStart(node.expression); + emitNodeWithoutSourceMap(rhsReference); + write(" = "); + emitNodeWithoutSourceMap(node.expression); + emitEnd(node.expression); + write("; "); + emitStart(node.expression); + emitNodeWithoutSourceMap(counter); + write(" < "); + emitNodeWithCommentsAndWithoutSourcemap(rhsReference); + write(".length"); + emitEnd(node.expression); + write("; "); + emitStart(node.expression); + emitNodeWithoutSourceMap(counter); + write("++"); + emitEnd(node.expression); + emitToken(18, node.expression.end); + write(" {"); + writeLine(); + increaseIndent(); + var rhsIterationValue = createElementAccessExpression(rhsReference, counter); + emitStart(node.initializer); + if (node.initializer.kind === 219) { + write("var "); + var variableDeclarationList = node.initializer; + if (variableDeclarationList.declarations.length > 0) { + var declaration = variableDeclarationList.declarations[0]; + if (ts.isBindingPattern(declaration.name)) { + emitDestructuring(declaration, false, rhsIterationValue); + } + else { + emitNodeWithCommentsAndWithoutSourcemap(declaration); + write(" = "); + emitNodeWithoutSourceMap(rhsIterationValue); + } + } + else { + emitNodeWithoutSourceMap(createTempVariable(0)); + write(" = "); + emitNodeWithoutSourceMap(rhsIterationValue); + } + } + else { + var assignmentExpression = createBinaryExpression(node.initializer, 56, rhsIterationValue, false); + if (node.initializer.kind === 170 || node.initializer.kind === 171) { + emitDestructuring(assignmentExpression, true, undefined); + } + else { + emitNodeWithCommentsAndWithoutSourcemap(assignmentExpression); + } + } + emitEnd(node.initializer); + write(";"); + if (loop) { + writeLine(); + emitConvertedLoopCall(loop, false); + } + else { + emitNormalLoopBody(node, false); + } + writeLine(); + decreaseIndent(); + write("}"); + } + function emitBreakOrContinueStatement(node) { + if (convertedLoopState) { + var jump = node.kind === 210 ? 2 : 4; + var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels[node.label.text]) || + (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump)); + if (!canUseBreakOrContinue) { + write("return "); + copyLoopOutParameters(convertedLoopState, 1, false); + if (!node.label) { + if (node.kind === 210) { + convertedLoopState.nonLocalJumps |= 2; + write("\"break\";"); + } + else { + convertedLoopState.nonLocalJumps |= 4; + write("\"continue\";"); + } + } + else { + var labelMarker = void 0; + if (node.kind === 210) { + labelMarker = "break-" + node.label.text; + setLabeledJump(convertedLoopState, true, node.label.text, labelMarker); + } + else { + labelMarker = "continue-" + node.label.text; + setLabeledJump(convertedLoopState, false, node.label.text, labelMarker); + } + write("\"" + labelMarker + "\";"); + } + return; + } + } + emitToken(node.kind === 210 ? 70 : 75, node.pos); + emitOptional(" ", node.label); + write(";"); + } + function emitReturnStatement(node) { + if (convertedLoopState) { + convertedLoopState.nonLocalJumps |= 8; + write("return { value: "); + if (node.expression) { + emit(node.expression); + } + else { + write("void 0"); + } + write(" };"); + return; + } + emitToken(94, node.pos); + emitOptional(" ", node.expression); + write(";"); + } + function emitWithStatement(node) { + write("with ("); + emit(node.expression); + write(")"); + emitEmbeddedStatement(node.statement); + } + function emitSwitchStatement(node) { + var endPos = emitToken(96, node.pos); + write(" "); + emitToken(17, endPos); + emit(node.expression); + endPos = emitToken(18, node.expression.end); + write(" "); + var saveAllowedNonLabeledJumps; + if (convertedLoopState) { + saveAllowedNonLabeledJumps = convertedLoopState.allowedNonLabeledJumps; + convertedLoopState.allowedNonLabeledJumps |= 2; + } + emitCaseBlock(node.caseBlock, endPos); + if (convertedLoopState) { + convertedLoopState.allowedNonLabeledJumps = saveAllowedNonLabeledJumps; + } + } + function emitCaseBlock(node, startPos) { + emitToken(15, startPos); + increaseIndent(); + emitLines(node.clauses); + decreaseIndent(); + writeLine(); + emitToken(16, node.clauses.end); + } + function nodeStartPositionsAreOnSameLine(node1, node2) { + return ts.getLineOfLocalPositionFromLineMap(currentLineMap, ts.skipTrivia(currentText, node1.pos)) === + ts.getLineOfLocalPositionFromLineMap(currentLineMap, ts.skipTrivia(currentText, node2.pos)); + } + function nodeEndPositionsAreOnSameLine(node1, node2) { + return ts.getLineOfLocalPositionFromLineMap(currentLineMap, node1.end) === + ts.getLineOfLocalPositionFromLineMap(currentLineMap, node2.end); + } + function nodeEndIsOnSameLineAsNodeStart(node1, node2) { + return ts.getLineOfLocalPositionFromLineMap(currentLineMap, node1.end) === + ts.getLineOfLocalPositionFromLineMap(currentLineMap, ts.skipTrivia(currentText, node2.pos)); + } + function emitCaseOrDefaultClause(node) { + if (node.kind === 249) { + write("case "); + emit(node.expression); + write(":"); + } + else { + write("default:"); + } + if (node.statements.length === 1 && nodeStartPositionsAreOnSameLine(node, node.statements[0])) { + write(" "); + emit(node.statements[0]); + } + else { + increaseIndent(); + emitLines(node.statements); + decreaseIndent(); + } + } + function emitThrowStatement(node) { + write("throw "); + emit(node.expression); + write(";"); + } + function emitTryStatement(node) { + write("try "); + emit(node.tryBlock); + emit(node.catchClause); + if (node.finallyBlock) { + writeLine(); + write("finally "); + emit(node.finallyBlock); + } + } + function emitCatchClause(node) { + writeLine(); + var endPos = emitToken(72, node.pos); + write(" "); + emitToken(17, endPos); + emit(node.variableDeclaration); + emitToken(18, node.variableDeclaration ? node.variableDeclaration.end : endPos); + write(" "); + emitBlock(node.block); + } + function emitDebuggerStatement(node) { + emitToken(76, node.pos); + write(";"); + } + function emitLabelAndColon(node) { + emit(node.label); + write(": "); + } + function emitLabeledStatement(node) { + if (!ts.isIterationStatement(node.statement, false) || !shouldConvertLoopBody(node.statement)) { + emitLabelAndColon(node); + } + if (convertedLoopState) { + if (!convertedLoopState.labels) { + convertedLoopState.labels = {}; + } + convertedLoopState.labels[node.label.text] = node.label.text; + } + emit(node.statement); + if (convertedLoopState) { + convertedLoopState.labels[node.label.text] = undefined; + } + } + function getContainingModule(node) { + do { + node = node.parent; + } while (node && node.kind !== 225); + return node; + } + function emitContainingModuleName(node) { + var container = getContainingModule(node); + write(container ? getGeneratedNameForNode(container) : "exports"); + } + function emitModuleMemberName(node) { + emitStart(node.name); + if (ts.getCombinedNodeFlags(node) & 1) { + var container = getContainingModule(node); + if (container) { + write(getGeneratedNameForNode(container)); + write("."); + } + else if (modulekind !== ts.ModuleKind.ES6 && modulekind !== ts.ModuleKind.System) { + write("exports."); + } + } + emitNodeWithCommentsAndWithoutSourcemap(node.name); + emitEnd(node.name); + } + function createVoidZero() { + var zero = ts.createSynthesizedNode(8); + zero.text = "0"; + var result = ts.createSynthesizedNode(183); + result.expression = zero; + return result; + } + function emitEs6ExportDefaultCompat(node) { + if (node.parent.kind === 256) { + ts.Debug.assert(!!(node.flags & 512) || node.kind === 235); + if (modulekind === ts.ModuleKind.CommonJS || modulekind === ts.ModuleKind.AMD || modulekind === ts.ModuleKind.UMD) { + if (!isEs6Module) { + if (languageVersion !== 0) { + write('Object.defineProperty(exports, "__esModule", { value: true });'); + writeLine(); + } + else { + write("exports.__esModule = true;"); + writeLine(); + } + } + } + } + } + function emitExportMemberAssignment(node) { + if (node.flags & 1) { + writeLine(); + emitStart(node); + if (modulekind === ts.ModuleKind.System && node.parent === currentSourceFile) { + write(exportFunctionForFile + "(\""); + if (node.flags & 512) { + write("default"); + } + else { + emitNodeWithCommentsAndWithoutSourcemap(node.name); + } + write("\", "); + emitDeclarationName(node); + write(")"); + } + else { + if (node.flags & 512) { + emitEs6ExportDefaultCompat(node); + if (languageVersion === 0) { + write('exports["default"]'); + } + else { + write("exports.default"); + } + } + else { + emitModuleMemberName(node); + } + write(" = "); + emitDeclarationName(node); + } + emitEnd(node); + write(";"); + } + } + function emitExportMemberAssignments(name) { + if (modulekind === ts.ModuleKind.System) { + return; + } + if (!exportEquals && exportSpecifiers && ts.hasProperty(exportSpecifiers, name.text)) { + for (var _a = 0, _b = exportSpecifiers[name.text]; _a < _b.length; _a++) { + var specifier = _b[_a]; + writeLine(); + emitStart(specifier.name); + emitContainingModuleName(specifier); + write("."); + emitNodeWithCommentsAndWithoutSourcemap(specifier.name); + emitEnd(specifier.name); + write(" = "); + emitExpressionIdentifier(name); + write(";"); + } + } + } + function emitExportSpecifierInSystemModule(specifier) { + ts.Debug.assert(modulekind === ts.ModuleKind.System); + if (!resolver.getReferencedValueDeclaration(specifier.propertyName || specifier.name) && !resolver.isValueAliasDeclaration(specifier)) { + return; + } + writeLine(); + emitStart(specifier.name); + write(exportFunctionForFile + "(\""); + emitNodeWithCommentsAndWithoutSourcemap(specifier.name); + write("\", "); + emitExpressionIdentifier(specifier.propertyName || specifier.name); + write(")"); + emitEnd(specifier.name); + write(";"); + } + function emitAssignment(name, value, shouldEmitCommaBeforeAssignment, nodeForSourceMap) { + if (shouldEmitCommaBeforeAssignment) { + write(", "); + } + var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(name); + if (exportChanged) { + write(exportFunctionForFile + "(\""); + emitNodeWithCommentsAndWithoutSourcemap(name); + write("\", "); + } + var isVariableDeclarationOrBindingElement = name.parent && (name.parent.kind === 218 || name.parent.kind === 169); + emitStart(isFirstVariableDeclaration(nodeForSourceMap) ? nodeForSourceMap.parent : nodeForSourceMap); + withTemporaryNoSourceMap(function () { + if (isVariableDeclarationOrBindingElement) { + emitModuleMemberName(name.parent); + } + else { + emit(name); + } + write(" = "); + emit(value); + }); + emitEnd(nodeForSourceMap, true); + if (exportChanged) { + write(")"); + } + } + function emitTempVariableAssignment(expression, canDefineTempVariablesInPlace, shouldEmitCommaBeforeAssignment, sourceMapNode) { + var identifier = createTempVariable(0); + if (!canDefineTempVariablesInPlace) { + recordTempDeclaration(identifier); + } + emitAssignment(identifier, expression, shouldEmitCommaBeforeAssignment, sourceMapNode || expression.parent); + return identifier; + } + function isFirstVariableDeclaration(root) { + return root.kind === 218 && + root.parent.kind === 219 && + root.parent.declarations[0] === root; + } + function emitDestructuring(root, isAssignmentExpressionStatement, value) { + var emitCount = 0; + var canDefineTempVariablesInPlace = false; + if (root.kind === 218) { + var isExported = ts.getCombinedNodeFlags(root) & 1; + var isSourceLevelForSystemModuleKind = shouldHoistDeclarationInSystemJsModule(root); + canDefineTempVariablesInPlace = !isExported && !isSourceLevelForSystemModuleKind; + } + else if (root.kind === 142) { + canDefineTempVariablesInPlace = true; + } + if (root.kind === 187) { + emitAssignmentExpression(root); + } + else { + ts.Debug.assert(!isAssignmentExpressionStatement); + if (isFirstVariableDeclaration(root)) { + sourceMap.changeEmitSourcePos(); + } + emitBindingElement(root, value); + } + function ensureIdentifier(expr, reuseIdentifierExpressions, sourceMapNode) { + if (expr.kind === 69 && reuseIdentifierExpressions) { + return expr; + } + var identifier = emitTempVariableAssignment(expr, canDefineTempVariablesInPlace, emitCount > 0, sourceMapNode); + emitCount++; + return identifier; + } + function createDefaultValueCheck(value, defaultValue, sourceMapNode) { + value = ensureIdentifier(value, true, sourceMapNode); + var equals = ts.createSynthesizedNode(187); + equals.left = value; + equals.operatorToken = ts.createSynthesizedNode(32); + equals.right = createVoidZero(); + return createConditionalExpression(equals, defaultValue, value); + } + function createConditionalExpression(condition, whenTrue, whenFalse) { + var cond = ts.createSynthesizedNode(188); + cond.condition = condition; + cond.questionToken = ts.createSynthesizedNode(53); + cond.whenTrue = whenTrue; + cond.colonToken = ts.createSynthesizedNode(54); + cond.whenFalse = whenFalse; + return cond; + } + function createNumericLiteral(value) { + var node = ts.createSynthesizedNode(8); + node.text = "" + value; + return node; + } + function createPropertyAccessForDestructuringProperty(object, propName) { + var index; + var nameIsComputed = propName.kind === 140; + if (nameIsComputed) { + index = ensureIdentifier(propName.expression, false, propName); + } + else { + index = ts.createSynthesizedNode(propName.kind); + index.text = ts.unescapeIdentifier(propName.text); + } + return !nameIsComputed && index.kind === 69 + ? createPropertyAccessExpression(object, index) + : createElementAccessExpression(object, index); + } + function createSliceCall(value, sliceIndex) { + var call = ts.createSynthesizedNode(174); + var sliceIdentifier = ts.createSynthesizedNode(69); + sliceIdentifier.text = "slice"; + call.expression = createPropertyAccessExpression(value, sliceIdentifier); + call.arguments = ts.createSynthesizedNodeArray(); + call.arguments[0] = createNumericLiteral(sliceIndex); + return call; + } + function emitObjectLiteralAssignment(target, value, sourceMapNode) { + var properties = target.properties; + if (properties.length !== 1) { + value = ensureIdentifier(value, true, sourceMapNode); + } + for (var _a = 0, properties_5 = properties; _a < properties_5.length; _a++) { + var p = properties_5[_a]; + if (p.kind === 253 || p.kind === 254) { + var propName = p.name; + var target_1 = p.kind === 254 ? p : p.initializer || propName; + emitDestructuringAssignment(target_1, createPropertyAccessForDestructuringProperty(value, propName), p); + } + } + } + function emitArrayLiteralAssignment(target, value, sourceMapNode) { + var elements = target.elements; + if (elements.length !== 1) { + value = ensureIdentifier(value, true, sourceMapNode); + } + for (var i = 0; i < elements.length; i++) { + var e = elements[i]; + if (e.kind !== 193) { + if (e.kind !== 191) { + emitDestructuringAssignment(e, createElementAccessExpression(value, createNumericLiteral(i)), e); + } + else if (i === elements.length - 1) { + emitDestructuringAssignment(e.expression, createSliceCall(value, i), e); + } + } + } + } + function emitDestructuringAssignment(target, value, sourceMapNode) { + if (target.kind === 254) { + if (target.objectAssignmentInitializer) { + value = createDefaultValueCheck(value, target.objectAssignmentInitializer, sourceMapNode); + } + target = target.name; + } + else if (target.kind === 187 && target.operatorToken.kind === 56) { + value = createDefaultValueCheck(value, target.right, sourceMapNode); + target = target.left; + } + if (target.kind === 171) { + emitObjectLiteralAssignment(target, value, sourceMapNode); + } + else if (target.kind === 170) { + emitArrayLiteralAssignment(target, value, sourceMapNode); + } + else { + emitAssignment(target, value, emitCount > 0, sourceMapNode); + emitCount++; + } + } + function emitAssignmentExpression(root) { + var target = root.left; + var value = root.right; + if (ts.isEmptyObjectLiteralOrArrayLiteral(target)) { + emit(value); + } + else if (isAssignmentExpressionStatement) { + emitDestructuringAssignment(target, value, ts.nodeIsSynthesized(root) ? target : root); + } + else { + if (root.parent.kind !== 178) { + write("("); + } + value = ensureIdentifier(value, true, root); + emitDestructuringAssignment(target, value, root); + write(", "); + emit(value); + if (root.parent.kind !== 178) { + write(")"); + } + } + } + function emitBindingElement(target, value) { + if (target.initializer) { + value = value ? createDefaultValueCheck(value, target.initializer, target) : target.initializer; + } + else if (!value) { + value = createVoidZero(); + } + if (ts.isBindingPattern(target.name)) { + var pattern = target.name; + var elements = pattern.elements; + var numElements = elements.length; + if (numElements !== 1) { + value = ensureIdentifier(value, numElements !== 0, target); + } + for (var i = 0; i < numElements; i++) { + var element = elements[i]; + if (pattern.kind === 167) { + var propName = element.propertyName || element.name; + emitBindingElement(element, createPropertyAccessForDestructuringProperty(value, propName)); + } + else if (element.kind !== 193) { + if (!element.dotDotDotToken) { + emitBindingElement(element, createElementAccessExpression(value, createNumericLiteral(i))); + } + else if (i === numElements - 1) { + emitBindingElement(element, createSliceCall(value, i)); + } + } + } + } + else { + emitAssignment(target.name, value, emitCount > 0, target); + emitCount++; + } + } + } + function emitVariableDeclaration(node) { + if (ts.isBindingPattern(node.name)) { + var isExported = ts.getCombinedNodeFlags(node) & 1; + if (languageVersion >= 2 && (!isExported || modulekind === ts.ModuleKind.ES6)) { + var isTopLevelDeclarationInSystemModule = modulekind === ts.ModuleKind.System && + shouldHoistVariable(node, true); + if (isTopLevelDeclarationInSystemModule) { + write("("); + } + emit(node.name); + emitOptional(" = ", node.initializer); + if (isTopLevelDeclarationInSystemModule) { + write(")"); + } + } + else { + emitDestructuring(node, false); + } + } + else { + var initializer = node.initializer; + if (!initializer && + languageVersion < 2 && + node.name.kind === 69) { + var container = ts.getEnclosingBlockScopeContainer(node); + var flags = resolver.getNodeCheckFlags(node); + var isCapturedInFunction = flags & 131072; + var isDeclaredInLoop = flags & 262144; + var emittedAsTopLevel = ts.isBlockScopedContainerTopLevel(container) || + (isCapturedInFunction && isDeclaredInLoop && container.kind === 199 && ts.isIterationStatement(container.parent, false)); + var emittedAsNestedLetDeclaration = ts.getCombinedNodeFlags(node) & 1024 && + !emittedAsTopLevel; + var emitExplicitInitializer = emittedAsNestedLetDeclaration && + container.kind !== 207 && + container.kind !== 208 && + (!resolver.isDeclarationWithCollidingName(node) || + (isDeclaredInLoop && !isCapturedInFunction && !ts.isIterationStatement(container, false))); + if (emitExplicitInitializer) { + initializer = createVoidZero(); + } + } + var exportChanged = isNameOfExportedSourceLevelDeclarationInSystemExternalModule(node.name); + if (exportChanged) { + write(exportFunctionForFile + "(\""); + emitNodeWithCommentsAndWithoutSourcemap(node.name); + write("\", "); + } + emitModuleMemberName(node); + emitOptional(" = ", initializer); + if (exportChanged) { + write(")"); + } + } + } + function emitExportVariableAssignments(node) { + if (node.kind === 193) { + return; + } + var name = node.name; + if (name.kind === 69) { + emitExportMemberAssignments(name); + } + else if (ts.isBindingPattern(name)) { + ts.forEach(name.elements, emitExportVariableAssignments); + } + } + function isES6ExportedDeclaration(node) { + return !!(node.flags & 1) && + modulekind === ts.ModuleKind.ES6 && + node.parent.kind === 256; + } + function emitVariableStatement(node) { + var startIsEmitted = false; + if (node.flags & 1) { + if (isES6ExportedDeclaration(node)) { + write("export "); + startIsEmitted = tryEmitStartOfVariableDeclarationList(node.declarationList); + } + } + else { + startIsEmitted = tryEmitStartOfVariableDeclarationList(node.declarationList); + } + if (startIsEmitted) { + emitCommaList(node.declarationList.declarations); + write(";"); + } + else { + var atLeastOneItem = emitVariableDeclarationListSkippingUninitializedEntries(node.declarationList); + if (atLeastOneItem) { + write(";"); + } + } + if (modulekind !== ts.ModuleKind.ES6 && node.parent === currentSourceFile) { + ts.forEach(node.declarationList.declarations, emitExportVariableAssignments); + } + } + function shouldEmitLeadingAndTrailingCommentsForVariableStatement(node) { + if (!(node.flags & 1)) { + return true; + } + if (isES6ExportedDeclaration(node)) { + return true; + } + for (var _a = 0, _b = node.declarationList.declarations; _a < _b.length; _a++) { + var declaration = _b[_a]; + if (declaration.initializer) { + return true; + } + } + return false; + } + function emitParameter(node) { + if (languageVersion < 2) { + if (ts.isBindingPattern(node.name)) { + var name_28 = createTempVariable(0); + if (!tempParameters) { + tempParameters = []; + } + tempParameters.push(name_28); + emit(name_28); + } + else { + emit(node.name); + } + } + else { + if (node.dotDotDotToken) { + write("..."); + } + emit(node.name); + emitOptional(" = ", node.initializer); + } + } + function emitDefaultValueAssignments(node) { + if (languageVersion < 2) { + var tempIndex_1 = 0; + ts.forEach(node.parameters, function (parameter) { + if (parameter.dotDotDotToken) { + return; + } + var paramName = parameter.name, initializer = parameter.initializer; + if (ts.isBindingPattern(paramName)) { + var hasBindingElements = paramName.elements.length > 0; + if (hasBindingElements || initializer) { + writeLine(); + write("var "); + if (hasBindingElements) { + emitDestructuring(parameter, false, tempParameters[tempIndex_1]); + } + else { + emit(tempParameters[tempIndex_1]); + write(" = "); + emit(initializer); + } + write(";"); + tempIndex_1++; + } + } + else if (initializer) { + writeLine(); + emitStart(parameter); + write("if ("); + emitNodeWithoutSourceMap(paramName); + write(" === void 0)"); + emitEnd(parameter); + write(" { "); + emitStart(parameter); + emitNodeWithCommentsAndWithoutSourcemap(paramName); + write(" = "); + emitNodeWithCommentsAndWithoutSourcemap(initializer); + emitEnd(parameter); + write("; }"); + } + }); + } + } + function emitRestParameter(node) { + if (languageVersion < 2 && ts.hasDeclaredRestParameter(node)) { + var restIndex = node.parameters.length - 1; + var restParam = node.parameters[restIndex]; + if (ts.isBindingPattern(restParam.name)) { + return; + } + var tempName = createTempVariable(268435456).text; + writeLine(); + emitLeadingComments(restParam); + emitStart(restParam); + write("var "); + emitNodeWithCommentsAndWithoutSourcemap(restParam.name); + write(" = [];"); + emitEnd(restParam); + emitTrailingComments(restParam); + writeLine(); + write("for ("); + emitStart(restParam); + write("var " + tempName + " = " + restIndex + ";"); + emitEnd(restParam); + write(" "); + emitStart(restParam); + write(tempName + " < arguments.length;"); + emitEnd(restParam); + write(" "); + emitStart(restParam); + write(tempName + "++"); + emitEnd(restParam); + write(") {"); + increaseIndent(); + writeLine(); + emitStart(restParam); + emitNodeWithCommentsAndWithoutSourcemap(restParam.name); + write("[" + tempName + " - " + restIndex + "] = arguments[" + tempName + "];"); + emitEnd(restParam); + decreaseIndent(); + writeLine(); + write("}"); + } + } + function emitAccessor(node) { + write(node.kind === 149 ? "get " : "set "); + emit(node.name); + emitSignatureAndBody(node); + } + function shouldEmitAsArrowFunction(node) { + return node.kind === 180 && languageVersion >= 2; + } + function emitDeclarationName(node) { + if (node.name) { + emitNodeWithCommentsAndWithoutSourcemap(node.name); + } + else { + write(getGeneratedNameForNode(node)); + } + } + function shouldEmitFunctionName(node) { + if (node.kind === 179) { + return !!node.name; + } + if (node.kind === 220) { + return !!node.name || modulekind !== ts.ModuleKind.ES6; + } + } + function emitFunctionDeclaration(node) { + if (ts.nodeIsMissing(node.body)) { + return emitCommentsOnNotEmittedNode(node); + } + var kind = node.kind, parent = node.parent; + if (kind !== 147 && + kind !== 146 && + parent && + parent.kind !== 253 && + parent.kind !== 174 && + parent.kind !== 170) { + emitLeadingComments(node); + } + emitStart(node); + if (!shouldEmitAsArrowFunction(node)) { + if (isES6ExportedDeclaration(node)) { + write("export "); + if (node.flags & 512) { + write("default "); + } + } + write("function"); + if (languageVersion >= 2 && node.asteriskToken) { + write("*"); + } + write(" "); + } + if (shouldEmitFunctionName(node)) { + emitDeclarationName(node); + } + emitSignatureAndBody(node); + if (modulekind !== ts.ModuleKind.ES6 && kind === 220 && parent === currentSourceFile && node.name) { + emitExportMemberAssignments(node.name); + } + emitEnd(node); + if (kind !== 147 && + kind !== 146 && + kind !== 180) { + emitTrailingComments(node); + } + } + function emitCaptureThisForNodeIfNecessary(node) { + if (resolver.getNodeCheckFlags(node) & 4) { + writeLine(); + emitStart(node); + write("var _this = this;"); + emitEnd(node); + } + } + function emitSignatureParameters(node) { + increaseIndent(); + write("("); + if (node) { + var parameters = node.parameters; + var skipCount = node.parameters.length && node.parameters[0].name.text === "this" ? 1 : 0; + var omitCount = languageVersion < 2 && ts.hasDeclaredRestParameter(node) ? 1 : 0; + emitList(parameters, skipCount, parameters.length - omitCount - skipCount, false, false); + } + write(")"); + decreaseIndent(); + } + function emitSignatureParametersForArrow(node) { + if (node.parameters.length === 1 && node.pos === node.parameters[0].pos) { + emit(node.parameters[0]); + return; + } + emitSignatureParameters(node); + } + function emitAsyncFunctionBodyForES6(node) { + var promiseConstructor = ts.getEntityNameFromTypeNode(node.type); + var isArrowFunction = node.kind === 180; + var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192) !== 0; + if (!isArrowFunction) { + write(" {"); + increaseIndent(); + writeLine(); + if (resolver.getNodeCheckFlags(node) & 4096) { + writeLines("\nconst _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);"); + writeLine(); + } + else if (resolver.getNodeCheckFlags(node) & 2048) { + write("const _super = name => super[name];"); + writeLine(); + } + write("return"); + } + write(" __awaiter(this"); + if (hasLexicalArguments) { + write(", arguments, "); + } + else { + write(", void 0, "); + } + if (languageVersion >= 2 || !promiseConstructor) { + write("void 0"); + } + else { + emitEntityNameAsExpression(promiseConstructor, false); + } + write(", function* ()"); + emitFunctionBody(node); + write(")"); + if (!isArrowFunction) { + write(";"); + decreaseIndent(); + writeLine(); + write("}"); + } + } + function emitFunctionBody(node) { + if (!node.body) { + write(" { }"); + } + else { + if (node.body.kind === 199) { + emitBlockFunctionBody(node, node.body); + } + else { + emitExpressionFunctionBody(node, node.body); + } + } + } + function emitSignatureAndBody(node) { + var saveConvertedLoopState = convertedLoopState; + var saveTempFlags = tempFlags; + var saveTempVariables = tempVariables; + var saveTempParameters = tempParameters; + convertedLoopState = undefined; + tempFlags = 0; + tempVariables = undefined; + tempParameters = undefined; + if (shouldEmitAsArrowFunction(node)) { + emitSignatureParametersForArrow(node); + write(" =>"); + } + else { + emitSignatureParameters(node); + } + var isAsync = ts.isAsyncFunctionLike(node); + if (isAsync) { + emitAsyncFunctionBodyForES6(node); + } + else { + emitFunctionBody(node); + } + if (!isES6ExportedDeclaration(node)) { + emitExportMemberAssignment(node); + } + ts.Debug.assert(convertedLoopState === undefined); + convertedLoopState = saveConvertedLoopState; + tempFlags = saveTempFlags; + tempVariables = saveTempVariables; + tempParameters = saveTempParameters; + } + function emitFunctionBodyPreamble(node) { + emitCaptureThisForNodeIfNecessary(node); + emitDefaultValueAssignments(node); + emitRestParameter(node); + } + function emitExpressionFunctionBody(node, body) { + if (languageVersion < 2 || node.flags & 256) { + emitDownLevelExpressionFunctionBody(node, body); + return; + } + write(" "); + var current = body; + while (current.kind === 177) { + current = current.expression; + } + emitParenthesizedIf(body, current.kind === 171); + } + function emitDownLevelExpressionFunctionBody(node, body) { + write(" {"); + increaseIndent(); + var outPos = writer.getTextPos(); + emitDetachedCommentsAndUpdateCommentsInfo(node.body); + emitFunctionBodyPreamble(node); + var preambleEmitted = writer.getTextPos() !== outPos; + decreaseIndent(); + if (!preambleEmitted && nodeStartPositionsAreOnSameLine(node, body)) { + write(" "); + emitStart(body); + write("return "); + emit(body); + emitEnd(body); + write(";"); + emitTempDeclarations(false); + write(" "); + } + else { + increaseIndent(); + writeLine(); + emitLeadingComments(node.body); + emitStart(body); + write("return "); + emit(body); + emitEnd(body); + write(";"); + emitTrailingComments(node.body); + emitTempDeclarations(true); + decreaseIndent(); + writeLine(); + } + emitStart(node.body); + write("}"); + emitEnd(node.body); + } + function emitBlockFunctionBody(node, body) { + write(" {"); + var initialTextPos = writer.getTextPos(); + increaseIndent(); + emitDetachedCommentsAndUpdateCommentsInfo(body.statements); + var startIndex = emitDirectivePrologues(body.statements, true); + emitFunctionBodyPreamble(node); + decreaseIndent(); + var preambleEmitted = writer.getTextPos() !== initialTextPos; + if (!preambleEmitted && nodeEndIsOnSameLineAsNodeStart(body, body)) { + for (var _a = 0, _b = body.statements; _a < _b.length; _a++) { + var statement = _b[_a]; + write(" "); + emit(statement); + } + emitTempDeclarations(false); + write(" "); + emitLeadingCommentsOfPosition(body.statements.end); + } + else { + increaseIndent(); + emitLinesStartingAt(body.statements, startIndex); + emitTempDeclarations(true); + writeLine(); + emitLeadingCommentsOfPosition(body.statements.end); + decreaseIndent(); + } + emitToken(16, body.statements.end); + } + function getSuperCallAtGivenIndex(ctor, index) { + if (!ctor.body) { + return undefined; + } + var statements = ctor.body.statements; + if (!statements || index >= statements.length) { + return undefined; + } + var statement = statements[index]; + if (statement.kind === 202) { + return ts.isSuperCallExpression(statement.expression) ? statement : undefined; + } + } + function emitParameterPropertyAssignments(node) { + ts.forEach(node.parameters, function (param) { + if (param.flags & 92) { + writeLine(); + emitStart(param); + emitStart(param.name); + write("this."); + emitNodeWithoutSourceMap(param.name); + emitEnd(param.name); + write(" = "); + emit(param.name); + write(";"); + emitEnd(param); + } + }); + } + function emitMemberAccessForPropertyName(memberName) { + if (memberName.kind === 9 || memberName.kind === 8) { + write("["); + emitNodeWithCommentsAndWithoutSourcemap(memberName); + write("]"); + } + else if (memberName.kind === 140) { + emitComputedPropertyName(memberName); + } + else { + write("."); + emitNodeWithCommentsAndWithoutSourcemap(memberName); + } + } + function getInitializedProperties(node, isStatic) { + var properties = []; + for (var _a = 0, _b = node.members; _a < _b.length; _a++) { + var member = _b[_a]; + if (member.kind === 145 && isStatic === ((member.flags & 32) !== 0) && member.initializer) { + properties.push(member); + } + } + return properties; + } + function emitPropertyDeclarations(node, properties) { + for (var _a = 0, properties_6 = properties; _a < properties_6.length; _a++) { + var property = properties_6[_a]; + emitPropertyDeclaration(node, property); + } + } + function emitPropertyDeclaration(node, property, receiver, isExpression) { + writeLine(); + emitLeadingComments(property); + emitStart(property); + emitStart(property.name); + if (receiver) { + emit(receiver); + } + else { + if (property.flags & 32) { + emitDeclarationName(node); + } + else { + write("this"); + } + } + emitMemberAccessForPropertyName(property.name); + emitEnd(property.name); + write(" = "); + emit(property.initializer); + if (!isExpression) { + write(";"); + } + emitEnd(property); + emitTrailingComments(property); + } + function emitMemberFunctionsForES5AndLower(node) { + ts.forEach(node.members, function (member) { + if (member.kind === 198) { + writeLine(); + write(";"); + } + else if (member.kind === 147 || node.kind === 146) { + if (!member.body) { + return emitCommentsOnNotEmittedNode(member); + } + writeLine(); + emitLeadingComments(member); + emitStart(member); + emitStart(member.name); + emitClassMemberPrefix(node, member); + emitMemberAccessForPropertyName(member.name); + emitEnd(member.name); + write(" = "); + emitFunctionDeclaration(member); + emitEnd(member); + write(";"); + emitTrailingComments(member); + } + else if (member.kind === 149 || member.kind === 150) { + var accessors = ts.getAllAccessorDeclarations(node.members, member); + if (member === accessors.firstAccessor) { + writeLine(); + emitStart(member); + write("Object.defineProperty("); + emitStart(member.name); + emitClassMemberPrefix(node, member); + write(", "); + emitExpressionForPropertyName(member.name); + emitEnd(member.name); + write(", {"); + increaseIndent(); + if (accessors.getAccessor) { + writeLine(); + emitLeadingComments(accessors.getAccessor); + write("get: "); + emitStart(accessors.getAccessor); + write("function "); + emitSignatureAndBody(accessors.getAccessor); + emitEnd(accessors.getAccessor); + emitTrailingComments(accessors.getAccessor); + write(","); + } + if (accessors.setAccessor) { + writeLine(); + emitLeadingComments(accessors.setAccessor); + write("set: "); + emitStart(accessors.setAccessor); + write("function "); + emitSignatureAndBody(accessors.setAccessor); + emitEnd(accessors.setAccessor); + emitTrailingComments(accessors.setAccessor); + write(","); + } + writeLine(); + write("enumerable: true,"); + writeLine(); + write("configurable: true"); + decreaseIndent(); + writeLine(); + write("});"); + emitEnd(member); + } + } + }); + } + function emitMemberFunctionsForES6AndHigher(node) { + for (var _a = 0, _b = node.members; _a < _b.length; _a++) { + var member = _b[_a]; + if ((member.kind === 147 || node.kind === 146) && !member.body) { + emitCommentsOnNotEmittedNode(member); + } + else if (member.kind === 147 || + member.kind === 149 || + member.kind === 150) { + writeLine(); + emitLeadingComments(member); + emitStart(member); + if (member.flags & 32) { + write("static "); + } + if (member.kind === 149) { + write("get "); + } + else if (member.kind === 150) { + write("set "); + } + if (member.asteriskToken) { + write("*"); + } + emit(member.name); + emitSignatureAndBody(member); + emitEnd(member); + emitTrailingComments(member); + } + else if (member.kind === 198) { + writeLine(); + write(";"); + } + } + } + function emitConstructor(node, baseTypeElement) { + var saveConvertedLoopState = convertedLoopState; + var saveTempFlags = tempFlags; + var saveTempVariables = tempVariables; + var saveTempParameters = tempParameters; + convertedLoopState = undefined; + tempFlags = 0; + tempVariables = undefined; + tempParameters = undefined; + emitConstructorWorker(node, baseTypeElement); + ts.Debug.assert(convertedLoopState === undefined); + convertedLoopState = saveConvertedLoopState; + tempFlags = saveTempFlags; + tempVariables = saveTempVariables; + tempParameters = saveTempParameters; + } + function emitConstructorWorker(node, baseTypeElement) { + var hasInstancePropertyWithInitializer = false; + ts.forEach(node.members, function (member) { + if (member.kind === 148 && !member.body) { + emitCommentsOnNotEmittedNode(member); + } + if (member.kind === 145 && member.initializer && (member.flags & 32) === 0) { + hasInstancePropertyWithInitializer = true; + } + }); + var ctor = ts.getFirstConstructorWithBody(node); + if (languageVersion >= 2 && !ctor && !hasInstancePropertyWithInitializer) { + return; + } + if (ctor) { + emitLeadingComments(ctor); + } + emitStart(ctor || node); + if (languageVersion < 2) { + write("function "); + emitDeclarationName(node); + emitSignatureParameters(ctor); + } + else { + write("constructor"); + if (ctor) { + emitSignatureParameters(ctor); + } + else { + if (baseTypeElement) { + write("(...args)"); + } + else { + write("()"); + } + } + } + var startIndex = 0; + write(" {"); + increaseIndent(); + if (ctor) { + startIndex = emitDirectivePrologues(ctor.body.statements, true); + emitDetachedCommentsAndUpdateCommentsInfo(ctor.body.statements); + } + emitCaptureThisForNodeIfNecessary(node); + var superCall; + if (ctor) { + emitDefaultValueAssignments(ctor); + emitRestParameter(ctor); + if (baseTypeElement) { + superCall = getSuperCallAtGivenIndex(ctor, startIndex); + if (superCall) { + writeLine(); + emit(superCall); + } + } + emitParameterPropertyAssignments(ctor); + } + else { + if (baseTypeElement) { + writeLine(); + emitStart(baseTypeElement); + if (languageVersion < 2) { + write("_super.apply(this, arguments);"); + } + else { + write("super(...args);"); + } + emitEnd(baseTypeElement); + } + } + emitPropertyDeclarations(node, getInitializedProperties(node, false)); + if (ctor) { + var statements = ctor.body.statements; + if (superCall) { + statements = statements.slice(1); + } + emitLinesStartingAt(statements, startIndex); + } + emitTempDeclarations(true); + writeLine(); + if (ctor) { + emitLeadingCommentsOfPosition(ctor.body.statements.end); + } + decreaseIndent(); + emitToken(16, ctor ? ctor.body.statements.end : node.members.end); + emitEnd(ctor || node); + if (ctor) { + emitTrailingComments(ctor); + } + } + function emitClassExpression(node) { + return emitClassLikeDeclaration(node); + } + function emitClassDeclaration(node) { + return emitClassLikeDeclaration(node); + } + function emitClassLikeDeclaration(node) { + if (languageVersion < 2) { + emitClassLikeDeclarationBelowES6(node); + } + else { + emitClassLikeDeclarationForES6AndHigher(node); + } + if (modulekind !== ts.ModuleKind.ES6 && node.parent === currentSourceFile && node.name) { + emitExportMemberAssignments(node.name); + } + } + function emitClassLikeDeclarationForES6AndHigher(node) { + var decoratedClassAlias; + var isHoistedDeclarationInSystemModule = shouldHoistDeclarationInSystemJsModule(node); + var isDecorated = ts.nodeIsDecorated(node); + var rewriteAsClassExpression = isDecorated || isHoistedDeclarationInSystemModule; + if (node.kind === 221) { + if (rewriteAsClassExpression) { + if (isDecorated && resolver.getNodeCheckFlags(node) & 524288) { + decoratedClassAlias = ts.unescapeIdentifier(makeUniqueName(node.name ? node.name.text : "default")); + decoratedClassAliases[ts.getNodeId(node)] = decoratedClassAlias; + write("let " + decoratedClassAlias + ";"); + writeLine(); + } + if (isES6ExportedDeclaration(node) && !(node.flags & 512)) { + write("export "); + } + if (!isHoistedDeclarationInSystemModule) { + write("let "); + } + emitDeclarationName(node); + if (decoratedClassAlias !== undefined) { + write(" = " + decoratedClassAlias); + } + write(" = "); + } + else if (isES6ExportedDeclaration(node)) { + write("export "); + if (node.flags & 512) { + write("default "); + } + } + } + var staticProperties = getInitializedProperties(node, true); + var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 192; + var tempVariable; + if (isClassExpressionWithStaticProperties) { + tempVariable = createAndRecordTempVariable(0); + write("("); + increaseIndent(); + emit(tempVariable); + write(" = "); + } + write("class"); + if (node.name || (node.flags & 512 && (staticProperties.length > 0 || modulekind !== ts.ModuleKind.ES6) && !rewriteAsClassExpression)) { + write(" "); + emitDeclarationName(node); + } + var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node); + if (baseTypeNode) { + write(" extends "); + emit(baseTypeNode.expression); + } + write(" {"); + increaseIndent(); + writeLine(); + emitConstructor(node, baseTypeNode); + emitMemberFunctionsForES6AndHigher(node); + decreaseIndent(); + writeLine(); + emitToken(16, node.members.end); + if (rewriteAsClassExpression) { + decoratedClassAliases[ts.getNodeId(node)] = undefined; + write(";"); + } + if (isClassExpressionWithStaticProperties) { + for (var _a = 0, staticProperties_1 = staticProperties; _a < staticProperties_1.length; _a++) { + var property = staticProperties_1[_a]; + write(","); + writeLine(); + emitPropertyDeclaration(node, property, tempVariable, true); + } + write(","); + writeLine(); + emit(tempVariable); + decreaseIndent(); + write(")"); + } + else { + writeLine(); + emitPropertyDeclarations(node, staticProperties); + emitDecoratorsOfClass(node, decoratedClassAlias); + } + if (!(node.flags & 1)) { + return; + } + if (modulekind !== ts.ModuleKind.ES6) { + emitExportMemberAssignment(node); + } + else { + if (node.flags & 512) { + if (isDecorated) { + writeLine(); + write("export default "); + emitDeclarationName(node); + write(";"); + } + } + else if (node.parent.kind !== 256) { + writeLine(); + emitStart(node); + emitModuleMemberName(node); + write(" = "); + emitDeclarationName(node); + emitEnd(node); + write(";"); + } + } + } + function emitClassLikeDeclarationBelowES6(node) { + if (node.kind === 221) { + if (!shouldHoistDeclarationInSystemJsModule(node)) { + write("var "); + } + emitDeclarationName(node); + write(" = "); + } + write("(function ("); + var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node); + if (baseTypeNode) { + write("_super"); + } + write(") {"); + var saveTempFlags = tempFlags; + var saveTempVariables = tempVariables; + var saveTempParameters = tempParameters; + var saveComputedPropertyNamesToGeneratedNames = computedPropertyNamesToGeneratedNames; + var saveConvertedLoopState = convertedLoopState; + convertedLoopState = undefined; + tempFlags = 0; + tempVariables = undefined; + tempParameters = undefined; + computedPropertyNamesToGeneratedNames = undefined; + increaseIndent(); + if (baseTypeNode) { + writeLine(); + emitStart(baseTypeNode); + write("__extends("); + emitDeclarationName(node); + write(", _super);"); + emitEnd(baseTypeNode); + } + writeLine(); + emitConstructor(node, baseTypeNode); + emitMemberFunctionsForES5AndLower(node); + emitPropertyDeclarations(node, getInitializedProperties(node, true)); + writeLine(); + emitDecoratorsOfClass(node, undefined); + writeLine(); + emitToken(16, node.members.end, function () { + write("return "); + emitDeclarationName(node); + }); + write(";"); + emitTempDeclarations(true); + ts.Debug.assert(convertedLoopState === undefined); + convertedLoopState = saveConvertedLoopState; + tempFlags = saveTempFlags; + tempVariables = saveTempVariables; + tempParameters = saveTempParameters; + computedPropertyNamesToGeneratedNames = saveComputedPropertyNamesToGeneratedNames; + decreaseIndent(); + writeLine(); + emitToken(16, node.members.end); + emitStart(node); + write("("); + if (baseTypeNode) { + emit(baseTypeNode.expression); + } + write("))"); + if (node.kind === 221) { + write(";"); + } + emitEnd(node); + if (node.kind === 221) { + emitExportMemberAssignment(node); + } + } + function emitClassMemberPrefix(node, member) { + emitDeclarationName(node); + if (!(member.flags & 32)) { + write(".prototype"); + } + } + function emitDecoratorsOfClass(node, decoratedClassAlias) { + emitDecoratorsOfMembers(node, 0); + emitDecoratorsOfMembers(node, 32); + emitDecoratorsOfConstructor(node, decoratedClassAlias); + } + function emitDecoratorsOfConstructor(node, decoratedClassAlias) { + var decorators = node.decorators; + var constructor = ts.getFirstConstructorWithBody(node); + var firstParameterDecorator = constructor && ts.forEach(constructor.parameters, function (parameter) { return parameter.decorators; }); + if (!decorators && !firstParameterDecorator) { + return; + } + writeLine(); + emitStart(node.decorators || firstParameterDecorator); + emitDeclarationName(node); + if (decoratedClassAlias !== undefined) { + write(" = " + decoratedClassAlias); + } + write(" = __decorate(["); + increaseIndent(); + writeLine(); + var decoratorCount = decorators ? decorators.length : 0; + var argumentsWritten = emitList(decorators, 0, decoratorCount, true, false, false, true, function (decorator) { return emit(decorator.expression); }); + if (firstParameterDecorator) { + argumentsWritten += emitDecoratorsOfParameters(constructor, argumentsWritten > 0); + } + emitSerializedTypeMetadata(node, argumentsWritten >= 0); + decreaseIndent(); + writeLine(); + write("], "); + emitDeclarationName(node); + write(")"); + emitEnd(node.decorators || firstParameterDecorator); + write(";"); + writeLine(); + } + function emitDecoratorsOfMembers(node, staticFlag) { + for (var _a = 0, _b = node.members; _a < _b.length; _a++) { + var member = _b[_a]; + if ((member.flags & 32) !== staticFlag) { + continue; + } + if (!ts.nodeCanBeDecorated(member)) { + continue; + } + var decorators = void 0; + var functionLikeMember = void 0; + if (ts.isAccessor(member)) { + var accessors = ts.getAllAccessorDeclarations(node.members, member); + if (member !== accessors.firstAccessor) { + continue; + } + decorators = accessors.firstAccessor.decorators; + if (!decorators && accessors.secondAccessor) { + decorators = accessors.secondAccessor.decorators; + } + functionLikeMember = accessors.setAccessor; + } + else { + decorators = member.decorators; + if (member.kind === 147) { + functionLikeMember = member; + } + } + var firstParameterDecorator = functionLikeMember && ts.forEach(functionLikeMember.parameters, function (parameter) { return parameter.decorators; }); + if (!decorators && !firstParameterDecorator) { + continue; + } + writeLine(); + emitStart(decorators || firstParameterDecorator); + write("__decorate(["); + increaseIndent(); + writeLine(); + var decoratorCount = decorators ? decorators.length : 0; + var argumentsWritten = emitList(decorators, 0, decoratorCount, true, false, false, true, function (decorator) { return emit(decorator.expression); }); + if (firstParameterDecorator) { + argumentsWritten += emitDecoratorsOfParameters(functionLikeMember, argumentsWritten > 0); + } + emitSerializedTypeMetadata(member, argumentsWritten > 0); + decreaseIndent(); + writeLine(); + write("], "); + emitClassMemberPrefix(node, member); + write(", "); + emitExpressionForPropertyName(member.name); + if (languageVersion > 0) { + if (member.kind !== 145) { + write(", null"); + } + else { + write(", void 0"); + } + } + write(")"); + emitEnd(decorators || firstParameterDecorator); + write(";"); + writeLine(); + } + } + function emitDecoratorsOfParameters(node, leadingComma) { + var argumentsWritten = 0; + if (node) { + var parameterIndex_1 = 0; + for (var _a = 0, _b = node.parameters; _a < _b.length; _a++) { + var parameter = _b[_a]; + if (ts.nodeIsDecorated(parameter)) { + var decorators = parameter.decorators; + argumentsWritten += emitList(decorators, 0, decorators.length, true, false, leadingComma, true, function (decorator) { + write("__param(" + parameterIndex_1 + ", "); + emit(decorator.expression); + write(")"); + }); + leadingComma = true; + } + parameterIndex_1++; + } + } + return argumentsWritten; + } + function shouldEmitTypeMetadata(node) { + switch (node.kind) { + case 147: + case 149: + case 150: + case 145: + return true; + } + return false; + } + function shouldEmitReturnTypeMetadata(node) { + switch (node.kind) { + case 147: + return true; + } + return false; + } + function shouldEmitParamTypesMetadata(node) { + switch (node.kind) { + case 221: + case 147: + case 150: + return true; + } + return false; + } + function emitSerializedTypeOfNode(node) { + switch (node.kind) { + case 221: + write("Function"); + return; + case 145: + emitSerializedTypeNode(node.type); + return; + case 142: + emitSerializedTypeNode(node.type); + return; + case 149: + emitSerializedTypeNode(node.type); + return; + case 150: + emitSerializedTypeNode(ts.getSetAccessorTypeAnnotationNode(node)); + return; + } + if (ts.isFunctionLike(node)) { + write("Function"); + return; + } + write("void 0"); + } + function emitSerializedTypeNode(node) { + if (node) { + switch (node.kind) { + case 103: + write("void 0"); + return; + case 164: + emitSerializedTypeNode(node.type); + return; + case 156: + case 157: + write("Function"); + return; + case 160: + case 161: + write("Array"); + return; + case 154: + case 120: + write("Boolean"); + return; + case 132: + case 166: + write("String"); + return; + case 130: + write("Number"); + return; + case 133: + write("Symbol"); + return; + case 155: + emitSerializedTypeReferenceNode(node); + return; + case 158: + case 159: + case 162: + case 163: + case 117: + case 165: + break; + default: + ts.Debug.fail("Cannot serialize unexpected type node."); + break; + } + } + write("Object"); + } + function emitSerializedTypeReferenceNode(node) { + var location = node.parent; + while (ts.isDeclaration(location) || ts.isTypeNode(location)) { + location = location.parent; + } + var typeName = ts.cloneEntityName(node.typeName, location); + var result = resolver.getTypeReferenceSerializationKind(typeName); + switch (result) { + case ts.TypeReferenceSerializationKind.Unknown: + var temp = createAndRecordTempVariable(0); + write("(typeof ("); + emitNodeWithoutSourceMap(temp); + write(" = "); + emitEntityNameAsExpression(typeName, true); + write(") === 'function' && "); + emitNodeWithoutSourceMap(temp); + write(") || Object"); + break; + case ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue: + emitEntityNameAsExpression(typeName, false); + break; + case ts.TypeReferenceSerializationKind.VoidType: + write("void 0"); + break; + case ts.TypeReferenceSerializationKind.BooleanType: + write("Boolean"); + break; + case ts.TypeReferenceSerializationKind.NumberLikeType: + write("Number"); + break; + case ts.TypeReferenceSerializationKind.StringLikeType: + write("String"); + break; + case ts.TypeReferenceSerializationKind.ArrayLikeType: + write("Array"); + break; + case ts.TypeReferenceSerializationKind.ESSymbolType: + if (languageVersion < 2) { + write("typeof Symbol === 'function' ? Symbol : Object"); + } + else { + write("Symbol"); + } + break; + case ts.TypeReferenceSerializationKind.TypeWithCallSignature: + write("Function"); + break; + case ts.TypeReferenceSerializationKind.ObjectType: + write("Object"); + break; + } + } + function emitSerializedParameterTypesOfNode(node) { + if (node) { + var valueDeclaration = void 0; + if (node.kind === 221) { + valueDeclaration = ts.getFirstConstructorWithBody(node); + } + else if (ts.isFunctionLike(node) && ts.nodeIsPresent(node.body)) { + valueDeclaration = node; + } + if (valueDeclaration) { + var parameters = valueDeclaration.parameters; + var parameterCount = parameters.length; + if (parameterCount > 0) { + for (var i = 0; i < parameterCount; i++) { + if (i > 0) { + write(", "); + } + if (parameters[i].dotDotDotToken) { + var parameterType = parameters[i].type; + if (parameterType.kind === 160) { + parameterType = parameterType.elementType; + } + else if (parameterType.kind === 155 && parameterType.typeArguments && parameterType.typeArguments.length === 1) { + parameterType = parameterType.typeArguments[0]; + } + else { + parameterType = undefined; + } + emitSerializedTypeNode(parameterType); + } + else { + emitSerializedTypeOfNode(parameters[i]); + } + } + } + } + } + } + function emitSerializedReturnTypeOfNode(node) { + if (node && ts.isFunctionLike(node) && node.type) { + emitSerializedTypeNode(node.type); + return; + } + write("void 0"); + } + function emitSerializedTypeMetadata(node, writeComma) { + var argumentsWritten = 0; + if (compilerOptions.emitDecoratorMetadata) { + if (shouldEmitTypeMetadata(node)) { + if (writeComma) { + write(", "); + } + writeLine(); + write("__metadata('design:type', "); + emitSerializedTypeOfNode(node); + write(")"); + argumentsWritten++; + } + if (shouldEmitParamTypesMetadata(node)) { + if (writeComma || argumentsWritten) { + write(", "); + } + writeLine(); + write("__metadata('design:paramtypes', ["); + emitSerializedParameterTypesOfNode(node); + write("])"); + argumentsWritten++; + } + if (shouldEmitReturnTypeMetadata(node)) { + if (writeComma || argumentsWritten) { + write(", "); + } + writeLine(); + write("__metadata('design:returntype', "); + emitSerializedReturnTypeOfNode(node); + write(")"); + argumentsWritten++; + } + } + return argumentsWritten; + } + function emitInterfaceDeclaration(node) { + emitCommentsOnNotEmittedNode(node); + } + function shouldEmitEnumDeclaration(node) { + var isConstEnum = ts.isConst(node); + return !isConstEnum || compilerOptions.preserveConstEnums || compilerOptions.isolatedModules; + } + function emitEnumDeclaration(node) { + if (!shouldEmitEnumDeclaration(node)) { + return; + } + if (!shouldHoistDeclarationInSystemJsModule(node)) { + var isES6ExportedEnum = isES6ExportedDeclaration(node); + if (!(node.flags & 1) || (isES6ExportedEnum && isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 224))) { + emitStart(node); + if (isES6ExportedEnum) { + write("export "); + } + write("var "); + emit(node.name); + emitEnd(node); + write(";"); + } + } + writeLine(); + emitStart(node); + write("(function ("); + emitStart(node.name); + write(getGeneratedNameForNode(node)); + emitEnd(node.name); + write(") {"); + increaseIndent(); + emitLines(node.members); + decreaseIndent(); + writeLine(); + emitToken(16, node.members.end); + write(")("); + emitModuleMemberName(node); + write(" || ("); + emitModuleMemberName(node); + write(" = {}));"); + emitEnd(node); + if (!isES6ExportedDeclaration(node) && node.flags & 1 && !shouldHoistDeclarationInSystemJsModule(node)) { + writeLine(); + emitStart(node); + write("var "); + emit(node.name); + write(" = "); + emitModuleMemberName(node); + emitEnd(node); + write(";"); + } + if (modulekind !== ts.ModuleKind.ES6 && node.parent === currentSourceFile) { + if (modulekind === ts.ModuleKind.System && (node.flags & 1)) { + writeLine(); + write(exportFunctionForFile + "(\""); + emitDeclarationName(node); + write("\", "); + emitDeclarationName(node); + write(");"); + } + emitExportMemberAssignments(node.name); + } + } + function emitEnumMember(node) { + var enumParent = node.parent; + emitStart(node); + write(getGeneratedNameForNode(enumParent)); + write("["); + write(getGeneratedNameForNode(enumParent)); + write("["); + emitExpressionForPropertyName(node.name); + write("] = "); + writeEnumMemberDeclarationValue(node); + write("] = "); + emitExpressionForPropertyName(node.name); + emitEnd(node); + write(";"); + } + function writeEnumMemberDeclarationValue(member) { + var value = resolver.getConstantValue(member); + if (value !== undefined) { + write(value.toString()); + return; + } + else if (member.initializer) { + emit(member.initializer); + } + else { + write("undefined"); + } + } + function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { + if (moduleDeclaration.body.kind === 225) { + var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); + return recursiveInnerModule || moduleDeclaration.body; + } + } + function shouldEmitModuleDeclaration(node) { + return ts.isInstantiatedModule(node, compilerOptions.preserveConstEnums || compilerOptions.isolatedModules); + } + function isModuleMergedWithES6Class(node) { + return languageVersion === 2 && !!(resolver.getNodeCheckFlags(node) & 32768); + } + function isFirstDeclarationOfKind(node, declarations, kind) { + return !ts.forEach(declarations, function (declaration) { return declaration.kind === kind && declaration.pos < node.pos; }); + } + function emitModuleDeclaration(node) { + var shouldEmit = shouldEmitModuleDeclaration(node); + if (!shouldEmit) { + return emitCommentsOnNotEmittedNode(node); + } + var hoistedInDeclarationScope = shouldHoistDeclarationInSystemJsModule(node); + var emitVarForModule = !hoistedInDeclarationScope && !isModuleMergedWithES6Class(node); + if (emitVarForModule) { + var isES6ExportedNamespace = isES6ExportedDeclaration(node); + if (!isES6ExportedNamespace || isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 225)) { + emitStart(node); + if (isES6ExportedNamespace) { + write("export "); + } + write("var "); + emit(node.name); + write(";"); + emitEnd(node); + writeLine(); + } + } + emitStart(node); + write("(function ("); + emitStart(node.name); + write(getGeneratedNameForNode(node)); + emitEnd(node.name); + write(") "); + if (node.body.kind === 226) { + var saveConvertedLoopState = convertedLoopState; + var saveTempFlags = tempFlags; + var saveTempVariables = tempVariables; + convertedLoopState = undefined; + tempFlags = 0; + tempVariables = undefined; + emit(node.body); + ts.Debug.assert(convertedLoopState === undefined); + convertedLoopState = saveConvertedLoopState; + tempFlags = saveTempFlags; + tempVariables = saveTempVariables; + } + else { + write("{"); + increaseIndent(); + emitCaptureThisForNodeIfNecessary(node); + writeLine(); + emit(node.body); + decreaseIndent(); + writeLine(); + var moduleBlock = getInnerMostModuleDeclarationFromDottedModule(node).body; + emitToken(16, moduleBlock.statements.end); + } + write(")("); + if ((node.flags & 1) && !isES6ExportedDeclaration(node)) { + emit(node.name); + write(" = "); + } + emitModuleMemberName(node); + write(" || ("); + emitModuleMemberName(node); + write(" = {}));"); + emitEnd(node); + if (!isES6ExportedDeclaration(node) && node.name.kind === 69 && node.parent === currentSourceFile) { + if (modulekind === ts.ModuleKind.System && (node.flags & 1)) { + writeLine(); + write(exportFunctionForFile + "(\""); + emitDeclarationName(node); + write("\", "); + emitDeclarationName(node); + write(");"); + } + emitExportMemberAssignments(node.name); + } + } + function tryRenameExternalModule(moduleName) { + if (renamedDependencies && ts.hasProperty(renamedDependencies, moduleName.text)) { + return "\"" + renamedDependencies[moduleName.text] + "\""; + } + return undefined; + } + function emitRequire(moduleName) { + if (moduleName.kind === 9) { + write("require("); + var text = tryRenameExternalModule(moduleName); + if (text) { + write(text); + } + else { + emitStart(moduleName); + emitLiteral(moduleName); + emitEnd(moduleName); + } + emitToken(18, moduleName.end); + } + else { + write("require()"); + } + } + function getNamespaceDeclarationNode(node) { + if (node.kind === 229) { + return node; + } + var importClause = node.importClause; + if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 232) { + return importClause.namedBindings; + } + } + function isDefaultImport(node) { + return node.kind === 230 && node.importClause && !!node.importClause.name; + } + function emitExportImportAssignments(node) { + if (ts.isAliasSymbolDeclaration(node) && resolver.isValueAliasDeclaration(node)) { + emitExportMemberAssignments(node.name); + } + ts.forEachChild(node, emitExportImportAssignments); + } + function emitImportDeclaration(node) { + if (modulekind !== ts.ModuleKind.ES6) { + return emitExternalImportDeclaration(node); + } + if (node.importClause) { + var shouldEmitDefaultBindings = resolver.isReferencedAliasDeclaration(node.importClause); + var shouldEmitNamedBindings = node.importClause.namedBindings && resolver.isReferencedAliasDeclaration(node.importClause.namedBindings, true); + if (shouldEmitDefaultBindings || shouldEmitNamedBindings) { + write("import "); + emitStart(node.importClause); + if (shouldEmitDefaultBindings) { + emit(node.importClause.name); + if (shouldEmitNamedBindings) { + write(", "); + } + } + if (shouldEmitNamedBindings) { + emitLeadingComments(node.importClause.namedBindings); + emitStart(node.importClause.namedBindings); + if (node.importClause.namedBindings.kind === 232) { + write("* as "); + emit(node.importClause.namedBindings.name); + } + else { + write("{ "); + emitExportOrImportSpecifierList(node.importClause.namedBindings.elements, resolver.isReferencedAliasDeclaration); + write(" }"); + } + emitEnd(node.importClause.namedBindings); + emitTrailingComments(node.importClause.namedBindings); + } + emitEnd(node.importClause); + write(" from "); + emit(node.moduleSpecifier); + write(";"); + } + } + else { + write("import "); + emit(node.moduleSpecifier); + write(";"); + } + } + function emitExternalImportDeclaration(node) { + if (ts.contains(externalImports, node)) { + var isExportedImport = node.kind === 229 && (node.flags & 1) !== 0; + var namespaceDeclaration = getNamespaceDeclarationNode(node); + var varOrConst = (languageVersion <= 1) ? "var " : "const "; + if (modulekind !== ts.ModuleKind.AMD) { + emitLeadingComments(node); + emitStart(node); + if (namespaceDeclaration && !isDefaultImport(node)) { + if (!isExportedImport) { + write(varOrConst); + } + ; + emitModuleMemberName(namespaceDeclaration); + write(" = "); + } + else { + var isNakedImport = 230 && !node.importClause; + if (!isNakedImport) { + write(varOrConst); + write(getGeneratedNameForNode(node)); + write(" = "); + } + } + emitRequire(ts.getExternalModuleName(node)); + if (namespaceDeclaration && isDefaultImport(node)) { + write(", "); + emitModuleMemberName(namespaceDeclaration); + write(" = "); + write(getGeneratedNameForNode(node)); + } + write(";"); + emitEnd(node); + emitExportImportAssignments(node); + emitTrailingComments(node); + } + else { + if (isExportedImport) { + emitModuleMemberName(namespaceDeclaration); + write(" = "); + emit(namespaceDeclaration.name); + write(";"); + } + else if (namespaceDeclaration && isDefaultImport(node)) { + write(varOrConst); + emitModuleMemberName(namespaceDeclaration); + write(" = "); + write(getGeneratedNameForNode(node)); + write(";"); + } + emitExportImportAssignments(node); + } + } + } + function emitImportEqualsDeclaration(node) { + if (ts.isExternalModuleImportEqualsDeclaration(node)) { + emitExternalImportDeclaration(node); + return; + } + if (resolver.isReferencedAliasDeclaration(node) || + (!isCurrentFileExternalModule && resolver.isTopLevelValueImportEqualsWithEntityName(node))) { + emitLeadingComments(node); + emitStart(node); + var variableDeclarationIsHoisted = shouldHoistVariable(node, true); + var isExported = isSourceFileLevelDeclarationInSystemJsModule(node, true); + if (!variableDeclarationIsHoisted) { + ts.Debug.assert(!isExported); + if (isES6ExportedDeclaration(node)) { + write("export "); + write("var "); + } + else if (!(node.flags & 1)) { + write("var "); + } + } + if (isExported) { + write(exportFunctionForFile + "(\""); + emitNodeWithoutSourceMap(node.name); + write("\", "); + } + emitModuleMemberName(node); + write(" = "); + emit(node.moduleReference); + if (isExported) { + write(")"); + } + write(";"); + emitEnd(node); + emitExportImportAssignments(node); + emitTrailingComments(node); + } + } + function emitExportDeclaration(node) { + ts.Debug.assert(modulekind !== ts.ModuleKind.System); + if (modulekind !== ts.ModuleKind.ES6) { + if (node.moduleSpecifier && (!node.exportClause || resolver.isValueAliasDeclaration(node))) { + emitStart(node); + var generatedName = getGeneratedNameForNode(node); + if (node.exportClause) { + if (modulekind !== ts.ModuleKind.AMD) { + write("var "); + write(generatedName); + write(" = "); + emitRequire(ts.getExternalModuleName(node)); + write(";"); + } + for (var _a = 0, _b = node.exportClause.elements; _a < _b.length; _a++) { + var specifier = _b[_a]; + if (resolver.isValueAliasDeclaration(specifier)) { + writeLine(); + emitStart(specifier); + emitContainingModuleName(specifier); + write("."); + emitNodeWithCommentsAndWithoutSourcemap(specifier.name); + write(" = "); + write(generatedName); + write("."); + emitNodeWithCommentsAndWithoutSourcemap(specifier.propertyName || specifier.name); + write(";"); + emitEnd(specifier); + } + } + } + else { + if (hasExportStarsToExportValues && resolver.moduleExportsSomeValue(node.moduleSpecifier)) { + writeLine(); + write("__export("); + if (modulekind !== ts.ModuleKind.AMD) { + emitRequire(ts.getExternalModuleName(node)); + } + else { + write(generatedName); + } + write(");"); + } + } + emitEnd(node); + } + } + else { + if (!node.exportClause || resolver.isValueAliasDeclaration(node)) { + write("export "); + if (node.exportClause) { + write("{ "); + emitExportOrImportSpecifierList(node.exportClause.elements, resolver.isValueAliasDeclaration); + write(" }"); + } + else { + write("*"); + } + if (node.moduleSpecifier) { + write(" from "); + emit(node.moduleSpecifier); + } + write(";"); + } + } + } + function emitExportOrImportSpecifierList(specifiers, shouldEmit) { + ts.Debug.assert(modulekind === ts.ModuleKind.ES6); + var needsComma = false; + for (var _a = 0, specifiers_1 = specifiers; _a < specifiers_1.length; _a++) { + var specifier = specifiers_1[_a]; + if (shouldEmit(specifier)) { + if (needsComma) { + write(", "); + } + if (specifier.propertyName) { + emit(specifier.propertyName); + write(" as "); + } + emit(specifier.name); + needsComma = true; + } + } + } + function emitExportAssignment(node) { + if (!node.isExportEquals && resolver.isValueAliasDeclaration(node)) { + if (modulekind === ts.ModuleKind.ES6) { + writeLine(); + emitStart(node); + write("export default "); + var expression = node.expression; + emit(expression); + if (expression.kind !== 220 && + expression.kind !== 221) { + write(";"); + } + emitEnd(node); + } + else { + writeLine(); + emitStart(node); + if (modulekind === ts.ModuleKind.System) { + write(exportFunctionForFile + "(\"default\","); + emit(node.expression); + write(")"); + } + else { + emitEs6ExportDefaultCompat(node); + emitContainingModuleName(node); + if (languageVersion === 0) { + write('["default"] = '); + } + else { + write(".default = "); + } + emit(node.expression); + } + write(";"); + emitEnd(node); + } + } + } + function collectExternalModuleInfo(sourceFile) { + externalImports = []; + exportSpecifiers = {}; + exportEquals = undefined; + hasExportStarsToExportValues = false; + for (var _a = 0, _b = sourceFile.statements; _a < _b.length; _a++) { + var node = _b[_a]; + switch (node.kind) { + case 230: + if (!node.importClause || + resolver.isReferencedAliasDeclaration(node.importClause, true)) { + externalImports.push(node); + } + break; + case 229: + if (node.moduleReference.kind === 240 && resolver.isReferencedAliasDeclaration(node)) { + externalImports.push(node); + } + break; + case 236: + if (node.moduleSpecifier) { + if (!node.exportClause) { + if (resolver.moduleExportsSomeValue(node.moduleSpecifier)) { + externalImports.push(node); + hasExportStarsToExportValues = true; + } + } + else if (resolver.isValueAliasDeclaration(node)) { + externalImports.push(node); + } + } + else { + for (var _c = 0, _d = node.exportClause.elements; _c < _d.length; _c++) { + var specifier = _d[_c]; + var name_29 = (specifier.propertyName || specifier.name).text; + (exportSpecifiers[name_29] || (exportSpecifiers[name_29] = [])).push(specifier); + } + } + break; + case 235: + if (node.isExportEquals && !exportEquals) { + exportEquals = node; + } + break; + } + } + } + function emitExportStarHelper() { + if (hasExportStarsToExportValues) { + writeLine(); + write("function __export(m) {"); + increaseIndent(); + writeLine(); + write("for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];"); + decreaseIndent(); + writeLine(); + write("}"); + } + } + function getLocalNameForExternalImport(node) { + var namespaceDeclaration = getNamespaceDeclarationNode(node); + if (namespaceDeclaration && !isDefaultImport(node)) { + return ts.getTextOfNodeFromSourceText(currentText, namespaceDeclaration.name); + } + if (node.kind === 230 && node.importClause) { + return getGeneratedNameForNode(node); + } + if (node.kind === 236 && node.moduleSpecifier) { + return getGeneratedNameForNode(node); + } + } + function getExternalModuleNameText(importNode, emitRelativePathAsModuleName) { + if (emitRelativePathAsModuleName) { + var name_30 = getExternalModuleNameFromDeclaration(host, resolver, importNode); + if (name_30) { + return "\"" + name_30 + "\""; + } + } + var moduleName = ts.getExternalModuleName(importNode); + if (moduleName.kind === 9) { + return tryRenameExternalModule(moduleName) || getLiteralText(moduleName); + } + return undefined; + } + function emitVariableDeclarationsForImports() { + if (externalImports.length === 0) { + return; + } + writeLine(); + var started = false; + for (var _a = 0, externalImports_1 = externalImports; _a < externalImports_1.length; _a++) { + var importNode = externalImports_1[_a]; + var skipNode = importNode.kind === 236 || + (importNode.kind === 230 && !importNode.importClause); + if (skipNode) { + continue; + } + if (!started) { + write("var "); + started = true; + } + else { + write(", "); + } + write(getLocalNameForExternalImport(importNode)); + } + if (started) { + write(";"); + } + } + function emitLocalStorageForExportedNamesIfNecessary(exportedDeclarations) { + if (!hasExportStarsToExportValues) { + return undefined; + } + if (!exportedDeclarations && ts.isEmpty(exportSpecifiers)) { + var hasExportDeclarationWithExportClause = false; + for (var _a = 0, externalImports_2 = externalImports; _a < externalImports_2.length; _a++) { + var externalImport = externalImports_2[_a]; + if (externalImport.kind === 236 && externalImport.exportClause) { + hasExportDeclarationWithExportClause = true; + break; + } + } + if (!hasExportDeclarationWithExportClause) { + return emitExportStarFunction(undefined); + } + } + var exportedNamesStorageRef = makeUniqueName("exportedNames"); + writeLine(); + write("var " + exportedNamesStorageRef + " = {"); + increaseIndent(); + var started = false; + if (exportedDeclarations) { + for (var i = 0; i < exportedDeclarations.length; i++) { + writeExportedName(exportedDeclarations[i]); + } + } + if (exportSpecifiers) { + for (var n in exportSpecifiers) { + for (var _b = 0, _c = exportSpecifiers[n]; _b < _c.length; _b++) { + var specifier = _c[_b]; + writeExportedName(specifier.name); + } + } + } + for (var _d = 0, externalImports_3 = externalImports; _d < externalImports_3.length; _d++) { + var externalImport = externalImports_3[_d]; + if (externalImport.kind !== 236) { + continue; + } + var exportDecl = externalImport; + if (!exportDecl.exportClause) { + continue; + } + for (var _e = 0, _f = exportDecl.exportClause.elements; _e < _f.length; _e++) { + var element = _f[_e]; + writeExportedName(element.name || element.propertyName); + } + } + decreaseIndent(); + writeLine(); + write("};"); + return emitExportStarFunction(exportedNamesStorageRef); + function emitExportStarFunction(localNames) { + var exportStarFunction = makeUniqueName("exportStar"); + writeLine(); + write("function " + exportStarFunction + "(m) {"); + increaseIndent(); + writeLine(); + write("var exports = {};"); + writeLine(); + write("for(var n in m) {"); + increaseIndent(); + writeLine(); + write("if (n !== \"default\""); + if (localNames) { + write("&& !" + localNames + ".hasOwnProperty(n)"); + } + write(") exports[n] = m[n];"); + decreaseIndent(); + writeLine(); + write("}"); + writeLine(); + write(exportFunctionForFile + "(exports);"); + decreaseIndent(); + writeLine(); + write("}"); + return exportStarFunction; + } + function writeExportedName(node) { + if (node.kind !== 69 && node.flags & 512) { + return; + } + if (started) { + write(","); + } + else { + started = true; + } + writeLine(); + write("'"); + if (node.kind === 69) { + emitNodeWithCommentsAndWithoutSourcemap(node); + } + else { + emitDeclarationName(node); + } + write("': true"); + } + } + function processTopLevelVariableAndFunctionDeclarations(node) { + var hoistedVars; + var hoistedFunctionDeclarations; + var exportedDeclarations; + visit(node); + if (hoistedVars) { + writeLine(); + write("var "); + var seen = {}; + for (var i = 0; i < hoistedVars.length; i++) { + var local = hoistedVars[i]; + var name_31 = local.kind === 69 + ? local + : local.name; + if (name_31) { + var text = ts.unescapeIdentifier(name_31.text); + if (ts.hasProperty(seen, text)) { + continue; + } + else { + seen[text] = text; + } + } + if (i !== 0) { + write(", "); + } + if (local.kind === 221 || local.kind === 225 || local.kind === 224) { + emitDeclarationName(local); + } + else { + emit(local); + } + var flags = ts.getCombinedNodeFlags(local.kind === 69 ? local.parent : local); + if (flags & 1) { + if (!exportedDeclarations) { + exportedDeclarations = []; + } + exportedDeclarations.push(local); + } + } + write(";"); + } + if (hoistedFunctionDeclarations) { + for (var _a = 0, hoistedFunctionDeclarations_1 = hoistedFunctionDeclarations; _a < hoistedFunctionDeclarations_1.length; _a++) { + var f = hoistedFunctionDeclarations_1[_a]; + writeLine(); + emit(f); + if (f.flags & 1) { + if (!exportedDeclarations) { + exportedDeclarations = []; + } + exportedDeclarations.push(f); + } + } + } + return exportedDeclarations; + function visit(node) { + if (node.flags & 2) { + return; + } + if (node.kind === 220) { + if (!hoistedFunctionDeclarations) { + hoistedFunctionDeclarations = []; + } + hoistedFunctionDeclarations.push(node); + return; + } + if (node.kind === 221) { + if (!hoistedVars) { + hoistedVars = []; + } + hoistedVars.push(node); + return; + } + if (node.kind === 224) { + if (shouldEmitEnumDeclaration(node)) { + if (!hoistedVars) { + hoistedVars = []; + } + hoistedVars.push(node); + } + return; + } + if (node.kind === 225) { + if (shouldEmitModuleDeclaration(node)) { + if (!hoistedVars) { + hoistedVars = []; + } + hoistedVars.push(node); + } + return; + } + if (node.kind === 218 || node.kind === 169) { + if (shouldHoistVariable(node, false)) { + var name_32 = node.name; + if (name_32.kind === 69) { + if (!hoistedVars) { + hoistedVars = []; + } + hoistedVars.push(name_32); + } + else { + ts.forEachChild(name_32, visit); + } + } + return; + } + if (ts.isInternalModuleImportEqualsDeclaration(node) && resolver.isValueAliasDeclaration(node)) { + if (!hoistedVars) { + hoistedVars = []; + } + hoistedVars.push(node.name); + return; + } + if (ts.isBindingPattern(node)) { + ts.forEach(node.elements, visit); + return; + } + if (!ts.isDeclaration(node)) { + ts.forEachChild(node, visit); + } + } + } + function shouldHoistVariable(node, checkIfSourceFileLevelDecl) { + if (checkIfSourceFileLevelDecl && !shouldHoistDeclarationInSystemJsModule(node)) { + return false; + } + return (ts.getCombinedNodeFlags(node) & 3072) === 0 || + ts.getEnclosingBlockScopeContainer(node).kind === 256; + } + function isCurrentFileSystemExternalModule() { + return modulekind === ts.ModuleKind.System && isCurrentFileExternalModule; + } + function emitSystemModuleBody(node, dependencyGroups, startIndex) { + emitVariableDeclarationsForImports(); + writeLine(); + var exportedDeclarations = processTopLevelVariableAndFunctionDeclarations(node); + var exportStarFunction = emitLocalStorageForExportedNamesIfNecessary(exportedDeclarations); + writeLine(); + write("return {"); + increaseIndent(); + writeLine(); + emitSetters(exportStarFunction, dependencyGroups); + writeLine(); + emitExecute(node, startIndex); + decreaseIndent(); + writeLine(); + write("}"); + emitTempDeclarations(true); + } + function emitSetters(exportStarFunction, dependencyGroups) { + write("setters:["); + for (var i = 0; i < dependencyGroups.length; i++) { + if (i !== 0) { + write(","); + } + writeLine(); + increaseIndent(); + var group = dependencyGroups[i]; + var parameterName = makeUniqueName(ts.forEach(group, getLocalNameForExternalImport) || ""); + write("function (" + parameterName + ") {"); + increaseIndent(); + for (var _a = 0, group_1 = group; _a < group_1.length; _a++) { + var entry = group_1[_a]; + var importVariableName = getLocalNameForExternalImport(entry) || ""; + switch (entry.kind) { + case 230: + if (!entry.importClause) { + break; + } + case 229: + ts.Debug.assert(importVariableName !== ""); + writeLine(); + write(importVariableName + " = " + parameterName + ";"); + writeLine(); + break; + case 236: + ts.Debug.assert(importVariableName !== ""); + if (entry.exportClause) { + writeLine(); + write(exportFunctionForFile + "({"); + writeLine(); + increaseIndent(); + for (var i_1 = 0, len = entry.exportClause.elements.length; i_1 < len; i_1++) { + if (i_1 !== 0) { + write(","); + writeLine(); + } + var e = entry.exportClause.elements[i_1]; + write("\""); + emitNodeWithCommentsAndWithoutSourcemap(e.name); + write("\": " + parameterName + "[\""); + emitNodeWithCommentsAndWithoutSourcemap(e.propertyName || e.name); + write("\"]"); + } + decreaseIndent(); + writeLine(); + write("});"); + } + else { + writeLine(); + write(exportStarFunction + "(" + parameterName + ");"); + } + writeLine(); + break; + } + } + decreaseIndent(); + write("}"); + decreaseIndent(); + } + write("],"); + } + function emitExecute(node, startIndex) { + write("execute: function() {"); + increaseIndent(); + writeLine(); + for (var i = startIndex; i < node.statements.length; i++) { + var statement = node.statements[i]; + switch (statement.kind) { + case 220: + case 230: + continue; + case 236: + if (!statement.moduleSpecifier) { + for (var _a = 0, _b = statement.exportClause.elements; _a < _b.length; _a++) { + var element = _b[_a]; + emitExportSpecifierInSystemModule(element); + } + } + continue; + case 229: + if (!ts.isInternalModuleImportEqualsDeclaration(statement)) { + continue; + } + default: + writeLine(); + emit(statement); + } + } + decreaseIndent(); + writeLine(); + write("}"); + } + function writeModuleName(node, emitRelativePathAsModuleName) { + var moduleName = node.moduleName; + if (moduleName || (emitRelativePathAsModuleName && (moduleName = getResolvedExternalModuleName(host, node)))) { + write("\"" + moduleName + "\", "); + } + } + function emitSystemModule(node, emitRelativePathAsModuleName) { + collectExternalModuleInfo(node); + ts.Debug.assert(!exportFunctionForFile); + exportFunctionForFile = makeUniqueName("exports"); + contextObjectForFile = makeUniqueName("context"); + writeLine(); + write("System.register("); + writeModuleName(node, emitRelativePathAsModuleName); + write("["); + var groupIndices = {}; + var dependencyGroups = []; + for (var i = 0; i < externalImports.length; i++) { + var text = getExternalModuleNameText(externalImports[i], emitRelativePathAsModuleName); + if (text === undefined) { + continue; + } + var key = text.substr(1, text.length - 2); + if (ts.hasProperty(groupIndices, key)) { + var groupIndex = groupIndices[key]; + dependencyGroups[groupIndex].push(externalImports[i]); + continue; + } + else { + groupIndices[key] = dependencyGroups.length; + dependencyGroups.push([externalImports[i]]); + } + if (i !== 0) { + write(", "); + } + write(text); + } + write("], function(" + exportFunctionForFile + ", " + contextObjectForFile + ") {"); + writeLine(); + increaseIndent(); + var startIndex = emitDirectivePrologues(node.statements, true, !compilerOptions.noImplicitUseStrict); + writeLine(); + write("var __moduleName = " + contextObjectForFile + " && " + contextObjectForFile + ".id;"); + writeLine(); + emitEmitHelpers(node); + emitCaptureThisForNodeIfNecessary(node); + emitSystemModuleBody(node, dependencyGroups, startIndex); + decreaseIndent(); + writeLine(); + write("});"); + } + function getAMDDependencyNames(node, includeNonAmdDependencies, emitRelativePathAsModuleName) { + var aliasedModuleNames = []; + var unaliasedModuleNames = []; + var importAliasNames = []; + for (var _a = 0, _b = node.amdDependencies; _a < _b.length; _a++) { + var amdDependency = _b[_a]; + if (amdDependency.name) { + aliasedModuleNames.push('"' + amdDependency.path + '"'); + importAliasNames.push(amdDependency.name); + } + else { + unaliasedModuleNames.push('"' + amdDependency.path + '"'); + } + } + for (var _c = 0, externalImports_4 = externalImports; _c < externalImports_4.length; _c++) { + var importNode = externalImports_4[_c]; + var externalModuleName = getExternalModuleNameText(importNode, emitRelativePathAsModuleName); + var importAliasName = getLocalNameForExternalImport(importNode); + if (includeNonAmdDependencies && importAliasName) { + aliasedModuleNames.push(externalModuleName); + importAliasNames.push(importAliasName); + } + else { + unaliasedModuleNames.push(externalModuleName); + } + } + return { aliasedModuleNames: aliasedModuleNames, unaliasedModuleNames: unaliasedModuleNames, importAliasNames: importAliasNames }; + } + function emitAMDDependencies(node, includeNonAmdDependencies, emitRelativePathAsModuleName) { + var dependencyNames = getAMDDependencyNames(node, includeNonAmdDependencies, emitRelativePathAsModuleName); + emitAMDDependencyList(dependencyNames); + write(", "); + emitAMDFactoryHeader(dependencyNames); + } + function emitAMDDependencyList(_a) { + var aliasedModuleNames = _a.aliasedModuleNames, unaliasedModuleNames = _a.unaliasedModuleNames; + write('["require", "exports"'); + if (aliasedModuleNames.length) { + write(", "); + write(aliasedModuleNames.join(", ")); + } + if (unaliasedModuleNames.length) { + write(", "); + write(unaliasedModuleNames.join(", ")); + } + write("]"); + } + function emitAMDFactoryHeader(_a) { + var importAliasNames = _a.importAliasNames; + write("function (require, exports"); + if (importAliasNames.length) { + write(", "); + write(importAliasNames.join(", ")); + } + write(") {"); + } + function emitAMDModule(node, emitRelativePathAsModuleName) { + emitEmitHelpers(node); + collectExternalModuleInfo(node); + writeLine(); + write("define("); + writeModuleName(node, emitRelativePathAsModuleName); + emitAMDDependencies(node, true, emitRelativePathAsModuleName); + increaseIndent(); + var startIndex = emitDirectivePrologues(node.statements, true, !compilerOptions.noImplicitUseStrict); + emitExportStarHelper(); + emitCaptureThisForNodeIfNecessary(node); + emitLinesStartingAt(node.statements, startIndex); + emitExportEquals(true); + emitTempDeclarations(true); + decreaseIndent(); + writeLine(); + write("});"); + } + function emitCommonJSModule(node) { + var startIndex = emitDirectivePrologues(node.statements, false, !compilerOptions.noImplicitUseStrict); + emitEmitHelpers(node); + collectExternalModuleInfo(node); + emitExportStarHelper(); + emitCaptureThisForNodeIfNecessary(node); + emitLinesStartingAt(node.statements, startIndex); + emitExportEquals(false); + emitTempDeclarations(true); + } + function emitUMDModule(node) { + emitEmitHelpers(node); + collectExternalModuleInfo(node); + var dependencyNames = getAMDDependencyNames(node, false); + writeLines("(function (factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n var v = factory(require, exports); if (v !== undefined) module.exports = v;\n }\n else if (typeof define === 'function' && define.amd) {\n define("); + emitAMDDependencyList(dependencyNames); + write(", factory);"); + writeLines(" }\n})("); + emitAMDFactoryHeader(dependencyNames); + increaseIndent(); + var startIndex = emitDirectivePrologues(node.statements, true, !compilerOptions.noImplicitUseStrict); + emitExportStarHelper(); + emitCaptureThisForNodeIfNecessary(node); + emitLinesStartingAt(node.statements, startIndex); + emitExportEquals(true); + emitTempDeclarations(true); + decreaseIndent(); + writeLine(); + write("});"); + } + function emitES6Module(node) { + externalImports = undefined; + exportSpecifiers = undefined; + exportEquals = undefined; + hasExportStarsToExportValues = false; + var startIndex = emitDirectivePrologues(node.statements, false); + emitEmitHelpers(node); + emitCaptureThisForNodeIfNecessary(node); + emitLinesStartingAt(node.statements, startIndex); + emitTempDeclarations(true); + } + function emitExportEquals(emitAsReturn) { + if (exportEquals && resolver.isValueAliasDeclaration(exportEquals)) { + writeLine(); + emitStart(exportEquals); + write(emitAsReturn ? "return " : "module.exports = "); + emit(exportEquals.expression); + write(";"); + emitEnd(exportEquals); + } + } + function emitJsxElement(node) { + switch (compilerOptions.jsx) { + case 2: + jsxEmitReact(node); + break; + case 1: + default: + jsxEmitPreserve(node); + break; + } + } + function trimReactWhitespaceAndApplyEntities(node) { + var result = undefined; + var text = ts.getTextOfNode(node, true); + 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 - firstNonWhitespace + 1 > 0)) { + var part = text.substr(firstNonWhitespace, lastNonWhitespace - firstNonWhitespace + 1); + result = (result ? result + "\" + ' ' + \"" : "") + ts.escapeString(part); + } + firstNonWhitespace = -1; + } + else if (!ts.isWhiteSpace(c)) { + lastNonWhitespace = i; + if (firstNonWhitespace === -1) { + firstNonWhitespace = i; + } + } + } + if (firstNonWhitespace !== -1) { + var part = text.substr(firstNonWhitespace); + result = (result ? result + "\" + ' ' + \"" : "") + ts.escapeString(part); + } + if (result) { + result = result.replace(/&(\w+);/g, function (s, m) { + if (entities[m] !== undefined) { + var ch = String.fromCharCode(entities[m]); + return ch === '"' ? "\\\"" : ch; + } + else { + return s; + } + }); + } + return result; + } + function isJsxChildEmittable(child) { + if (child.kind === 248) { + return !!child.expression; + } + else if (child.kind === 244) { + return !!getTextToEmit(child); + } + return true; + } + ; + function getTextToEmit(node) { + switch (compilerOptions.jsx) { + case 2: + var text = trimReactWhitespaceAndApplyEntities(node); + if (text === undefined || text.length === 0) { + return undefined; + } + else { + return text; + } + case 1: + default: + return ts.getTextOfNode(node, true); + } + } + function emitJsxText(node) { + switch (compilerOptions.jsx) { + case 2: + write('"'); + write(trimReactWhitespaceAndApplyEntities(node)); + write('"'); + break; + case 1: + default: + writer.writeLiteral(ts.getTextOfNode(node, true)); + break; + } + } + function emitJsxExpression(node) { + if (node.expression) { + switch (compilerOptions.jsx) { + case 1: + default: + write("{"); + emit(node.expression); + write("}"); + break; + case 2: + emit(node.expression); + break; + } + } + } + function isUseStrictPrologue(node) { + return node.expression.text === "use strict"; + } + function ensureUseStrictPrologue(startWithNewLine, writeUseStrict) { + if (writeUseStrict) { + if (startWithNewLine) { + writeLine(); + } + write("\"use strict\";"); + } + } + function emitDirectivePrologues(statements, startWithNewLine, ensureUseStrict) { + var foundUseStrict = false; + for (var i = 0; i < statements.length; i++) { + if (ts.isPrologueDirective(statements[i])) { + if (isUseStrictPrologue(statements[i])) { + foundUseStrict = true; + } + if (startWithNewLine || i > 0) { + writeLine(); + } + emit(statements[i]); + } + else { + ensureUseStrictPrologue(startWithNewLine || i > 0, !foundUseStrict && ensureUseStrict); + return i; + } + } + ensureUseStrictPrologue(startWithNewLine, !foundUseStrict && ensureUseStrict); + return statements.length; + } + function writeLines(text) { + var lines = text.split(/\r\n|\r|\n/g); + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + if (line.length) { + writeLine(); + write(line); + } + } + } + function emitEmitHelpers(node) { + if (!compilerOptions.noEmitHelpers) { + if (languageVersion < 2 && !extendsEmitted && node.flags & 262144) { + writeLines(extendsHelper); + extendsEmitted = true; + } + if (compilerOptions.jsx !== 1 && !assignEmitted && (node.flags & 1073741824)) { + writeLines(assignHelper); + assignEmitted = true; + } + if (!decorateEmitted && node.flags & 524288) { + writeLines(decorateHelper); + if (compilerOptions.emitDecoratorMetadata) { + writeLines(metadataHelper); + } + decorateEmitted = true; + } + if (!paramEmitted && node.flags & 1048576) { + writeLines(paramHelper); + paramEmitted = true; + } + if (!awaiterEmitted && node.flags & 2097152) { + writeLines(awaiterHelper); + awaiterEmitted = true; + } + } + } + function emitSourceFileNode(node) { + writeLine(); + emitShebang(); + emitDetachedCommentsAndUpdateCommentsInfo(node); + if (ts.isExternalModule(node) || compilerOptions.isolatedModules) { + if (isOwnFileEmit || (!ts.isExternalModule(node) && compilerOptions.isolatedModules)) { + var emitModule = moduleEmitDelegates[modulekind] || moduleEmitDelegates[ts.ModuleKind.CommonJS]; + emitModule(node); + } + else { + bundleEmitDelegates[modulekind](node, true); + } + } + else { + var startIndex = emitDirectivePrologues(node.statements, false); + externalImports = undefined; + exportSpecifiers = undefined; + exportEquals = undefined; + hasExportStarsToExportValues = false; + emitEmitHelpers(node); + emitCaptureThisForNodeIfNecessary(node); + emitLinesStartingAt(node.statements, startIndex); + emitTempDeclarations(true); + } + emitLeadingComments(node.endOfFileToken); + } + function emit(node) { + emitNodeConsideringCommentsOption(node, emitNodeWithSourceMap); + } + function emitNodeWithCommentsAndWithoutSourcemap(node) { + emitNodeConsideringCommentsOption(node, emitNodeWithoutSourceMap); + } + function emitNodeConsideringCommentsOption(node, emitNodeConsideringSourcemap) { + if (node) { + if (node.flags & 2) { + return emitCommentsOnNotEmittedNode(node); + } + if (isSpecializedCommentHandling(node)) { + return emitNodeWithoutSourceMap(node); + } + var emitComments_1 = shouldEmitLeadingAndTrailingComments(node); + if (emitComments_1) { + emitLeadingComments(node); + } + emitNodeConsideringSourcemap(node); + if (emitComments_1) { + emitTrailingComments(node); + } + } + } + function emitNodeWithSourceMap(node) { + if (node) { + emitStart(node); + emitNodeWithoutSourceMap(node); + emitEnd(node); + } + } + function emitNodeWithoutSourceMap(node) { + if (node) { + emitJavaScriptWorker(node); + } + } + function changeSourceMapEmit(writer) { + sourceMap = writer; + emitStart = writer.emitStart; + emitEnd = writer.emitEnd; + emitPos = writer.emitPos; + setSourceFile = writer.setSourceFile; + } + function withTemporaryNoSourceMap(callback) { + var prevSourceMap = sourceMap; + setSourceMapWriterEmit(ts.getNullSourceMapWriter()); + callback(); + setSourceMapWriterEmit(prevSourceMap); + } + function isSpecializedCommentHandling(node) { + switch (node.kind) { + case 222: + case 220: + case 230: + case 229: + case 223: + case 235: + return true; + } + } + function shouldEmitLeadingAndTrailingComments(node) { + switch (node.kind) { + case 200: + return shouldEmitLeadingAndTrailingCommentsForVariableStatement(node); + case 225: + return shouldEmitModuleDeclaration(node); + case 224: + return shouldEmitEnumDeclaration(node); + } + ts.Debug.assert(!isSpecializedCommentHandling(node)); + if (node.kind !== 199 && + node.parent && + node.parent.kind === 180 && + node.parent.body === node && + languageVersion <= 1) { + return false; + } + return true; + } + function emitJavaScriptWorker(node) { + switch (node.kind) { + case 69: + return emitIdentifier(node); + case 142: + return emitParameter(node); + case 147: + case 146: + return emitMethod(node); + case 149: + case 150: + return emitAccessor(node); + case 97: + return emitThis(node); + case 95: + return emitSuper(node); + case 93: + return write("null"); + case 99: + return write("true"); + case 84: + return write("false"); + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + return emitLiteral(node); + case 189: + return emitTemplateExpression(node); + case 197: + return emitTemplateSpan(node); + case 241: + case 242: + return emitJsxElement(node); + case 244: + return emitJsxText(node); + case 248: + return emitJsxExpression(node); + case 139: + return emitQualifiedName(node); + case 167: + return emitObjectBindingPattern(node); + case 168: + return emitArrayBindingPattern(node); + case 169: + return emitBindingElement(node); + case 170: + return emitArrayLiteral(node); + case 171: + return emitObjectLiteral(node); + case 253: + return emitPropertyAssignment(node); + case 254: + return emitShorthandPropertyAssignment(node); + case 140: + return emitComputedPropertyName(node); + case 172: + return emitPropertyAccess(node); + case 173: + return emitIndexedAccess(node); + case 174: + return emitCallExpression(node); + case 175: + return emitNewExpression(node); + case 176: + return emitTaggedTemplateExpression(node); + case 177: + case 195: + case 196: + return emit(node.expression); + case 178: + return emitParenExpression(node); + case 220: + case 179: + case 180: + return emitFunctionDeclaration(node); + case 181: + return emitDeleteExpression(node); + case 182: + return emitTypeOfExpression(node); + case 183: + return emitVoidExpression(node); + case 184: + return emitAwaitExpression(node); + case 185: + return emitPrefixUnaryExpression(node); + case 186: + return emitPostfixUnaryExpression(node); + case 187: + return emitBinaryExpression(node); + case 188: + return emitConditionalExpression(node); + case 191: + return emitSpreadElementExpression(node); + case 190: + return emitYieldExpression(node); + case 193: + return; + case 199: + case 226: + return emitBlock(node); + case 200: + return emitVariableStatement(node); + case 201: + return write(";"); + case 202: + return emitExpressionStatement(node); + case 203: + return emitIfStatement(node); + case 204: + return emitDoStatement(node); + case 205: + return emitWhileStatement(node); + case 206: + return emitForStatement(node); + case 208: + case 207: + return emitForInOrForOfStatement(node); + case 209: + case 210: + return emitBreakOrContinueStatement(node); + case 211: + return emitReturnStatement(node); + case 212: + return emitWithStatement(node); + case 213: + return emitSwitchStatement(node); + case 249: + case 250: + return emitCaseOrDefaultClause(node); + case 214: + return emitLabeledStatement(node); + case 215: + return emitThrowStatement(node); + case 216: + return emitTryStatement(node); + case 252: + return emitCatchClause(node); + case 217: + return emitDebuggerStatement(node); + case 218: + return emitVariableDeclaration(node); + case 192: + return emitClassExpression(node); + case 221: + return emitClassDeclaration(node); + case 222: + return emitInterfaceDeclaration(node); + case 224: + return emitEnumDeclaration(node); + case 255: + return emitEnumMember(node); + case 225: + return emitModuleDeclaration(node); + case 230: + return emitImportDeclaration(node); + case 229: + return emitImportEqualsDeclaration(node); + case 236: + return emitExportDeclaration(node); + case 235: + return emitExportAssignment(node); + case 256: + return emitSourceFileNode(node); + } + } + function hasDetachedComments(pos) { + return detachedCommentsInfo !== undefined && ts.lastOrUndefined(detachedCommentsInfo).nodePos === pos; + } + function getLeadingCommentsWithoutDetachedComments() { + var leadingComments = ts.getLeadingCommentRanges(currentText, ts.lastOrUndefined(detachedCommentsInfo).detachedCommentEndPos); + if (detachedCommentsInfo.length - 1) { + detachedCommentsInfo.pop(); + } + else { + detachedCommentsInfo = undefined; + } + return leadingComments; + } + function isTripleSlashComment(comment) { + if (currentText.charCodeAt(comment.pos + 1) === 47 && + comment.pos + 2 < comment.end && + currentText.charCodeAt(comment.pos + 2) === 47) { + var textSubStr = currentText.substring(comment.pos, comment.end); + return textSubStr.match(ts.fullTripleSlashReferencePathRegEx) || + textSubStr.match(ts.fullTripleSlashAMDReferencePathRegEx) ? + true : false; + } + return false; + } + function getLeadingCommentsToEmit(node) { + if (node.parent) { + if (node.parent.kind === 256 || node.pos !== node.parent.pos) { + if (hasDetachedComments(node.pos)) { + return getLeadingCommentsWithoutDetachedComments(); + } + else { + return ts.getLeadingCommentRangesOfNodeFromText(node, currentText); + } + } + } + } + function getTrailingCommentsToEmit(node) { + if (node.parent) { + if (node.parent.kind === 256 || node.end !== node.parent.end) { + return ts.getTrailingCommentRanges(currentText, node.end); + } + } + } + function emitCommentsOnNotEmittedNode(node) { + emitLeadingCommentsWorker(node, false); + } + function emitLeadingComments(node) { + return emitLeadingCommentsWorker(node, true); + } + function emitLeadingCommentsWorker(node, isEmittedNode) { + if (compilerOptions.removeComments) { + return; + } + var leadingComments; + if (isEmittedNode) { + leadingComments = getLeadingCommentsToEmit(node); + } + else { + if (node.pos === 0) { + leadingComments = ts.filter(getLeadingCommentsToEmit(node), isTripleSlashComment); + } + } + ts.emitNewLineBeforeLeadingComments(currentLineMap, writer, node, leadingComments); + ts.emitComments(currentText, currentLineMap, writer, leadingComments, true, newLine, writeComment); + } + function emitTrailingComments(node) { + if (compilerOptions.removeComments) { + return; + } + var trailingComments = getTrailingCommentsToEmit(node); + ts.emitComments(currentText, currentLineMap, writer, trailingComments, false, newLine, writeComment); + } + function emitTrailingCommentsOfPosition(pos) { + if (compilerOptions.removeComments) { + return; + } + var trailingComments = ts.getTrailingCommentRanges(currentText, pos); + ts.emitComments(currentText, currentLineMap, writer, trailingComments, true, newLine, writeComment); + } + function emitLeadingCommentsOfPositionWorker(pos) { + if (compilerOptions.removeComments) { + return; + } + var leadingComments; + if (hasDetachedComments(pos)) { + leadingComments = getLeadingCommentsWithoutDetachedComments(); + } + else { + leadingComments = ts.getLeadingCommentRanges(currentText, pos); + } + ts.emitNewLineBeforeLeadingComments(currentLineMap, writer, { pos: pos, end: pos }, leadingComments); + ts.emitComments(currentText, currentLineMap, writer, leadingComments, true, newLine, writeComment); + } + function emitDetachedCommentsAndUpdateCommentsInfo(node) { + var currentDetachedCommentInfo = ts.emitDetachedComments(currentText, currentLineMap, writer, writeComment, node, newLine, compilerOptions.removeComments); + if (currentDetachedCommentInfo) { + if (detachedCommentsInfo) { + detachedCommentsInfo.push(currentDetachedCommentInfo); + } + else { + detachedCommentsInfo = [currentDetachedCommentInfo]; + } + } + } + function writeComment(text, lineMap, writer, comment, newLine) { + emitPos(comment.pos); + ts.writeCommentRange(text, lineMap, writer, comment, newLine); + emitPos(comment.end); + } + function emitShebang() { + var shebang = ts.getShebang(currentText); + if (shebang) { + write(shebang); + writeLine(); + } + } + var _a, _b; + } + function emitFile(_a, sourceFiles, isBundledEmit) { + var jsFilePath = _a.jsFilePath, sourceMapFilePath = _a.sourceMapFilePath, declarationFilePath = _a.declarationFilePath; + if (!host.isEmitBlocked(jsFilePath) && !compilerOptions.noEmit) { + emitJavaScript(jsFilePath, sourceMapFilePath, sourceFiles, isBundledEmit); + } + else { + emitSkipped = true; + } + if (declarationFilePath) { + emitSkipped = ts.writeDeclarationFile(declarationFilePath, sourceFiles, isBundledEmit, host, resolver, emitterDiagnostics) || emitSkipped; + } + if (!emitSkipped && emittedFilesList) { + emittedFilesList.push(jsFilePath); + if (sourceMapFilePath) { + emittedFilesList.push(sourceMapFilePath); + } + if (declarationFilePath) { + emittedFilesList.push(declarationFilePath); + } + } + } + } + ts.emitFiles = emitFiles; +})(ts || (ts = {})); +var ts; +(function (ts) { + ts.programTime = 0; + ts.emitTime = 0; + ts.ioReadTime = 0; + ts.ioWriteTime = 0; + var emptyArray = []; + var defaultLibrarySearchPaths = [ + "types/", + "node_modules/", + "node_modules/@types/", + ]; + ts.version = "1.9.0"; + function findConfigFile(searchPath, fileExists) { + while (true) { + var fileName = ts.combinePaths(searchPath, "tsconfig.json"); + 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; + } + for (var i = 0, n = Math.min(commonPathComponents.length, sourcePathComponents.length); 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 trace(host, message) { + host.trace(ts.formatMessage.apply(undefined, arguments)); + } + function isTraceEnabled(compilerOptions, host) { + return compilerOptions.traceResolution && host.trace !== undefined; + } + 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; + } + function createResolvedModule(resolvedFileName, isExternalLibraryImport, failedLookupLocations) { + return { resolvedModule: resolvedFileName ? { resolvedFileName: resolvedFileName, isExternalLibraryImport: isExternalLibraryImport } : undefined, failedLookupLocations: failedLookupLocations }; + } + function moduleHasNonRelativeName(moduleName) { + if (ts.isRootedDiskPath(moduleName)) { + return false; + } + var i = moduleName.lastIndexOf("./", 1); + var startsWithDotSlashOrDotDotSlash = i === 0 || (i === 1 && moduleName.charCodeAt(0) === 46); + return !startsWithDotSlashOrDotDotSlash; + } + function tryReadTypesSection(packageJsonPath, baseDirectory, state) { + var jsonContent; + try { + var jsonText = state.host.readFile(packageJsonPath); + jsonContent = jsonText ? JSON.parse(jsonText) : {}; + } + catch (e) { + jsonContent = {}; + } + var typesFile; + var fieldName; + if (jsonContent.typings) { + if (typeof jsonContent.typings === "string") { + fieldName = "typings"; + typesFile = jsonContent.typings; + } + else { + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.Expected_type_of_0_field_in_package_json_to_be_string_got_1, "typings", typeof jsonContent.typings); + } + } + } + if (!typesFile && jsonContent.types) { + if (typeof jsonContent.types === "string") { + fieldName = "types"; + typesFile = jsonContent.types; + } + else { + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.Expected_type_of_0_field_in_package_json_to_be_string_got_1, "types", typeof jsonContent.types); + } + } + } + if (typesFile) { + var typesFilePath = ts.normalizePath(ts.combinePaths(baseDirectory, typesFile)); + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.package_json_has_0_field_1_that_references_2, fieldName, typesFile, typesFilePath); + } + return typesFilePath; + } + return undefined; + } + var typeReferenceExtensions = [".d.ts"]; + function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host) { + var traceEnabled = isTraceEnabled(options, host); + var moduleResolutionState = { + compilerOptions: options, + host: host, + skipTsx: true, + traceEnabled: traceEnabled + }; + var rootDir = options.typesRoot || (options.configFilePath ? ts.getDirectoryPath(options.configFilePath) : undefined); + if (traceEnabled) { + if (containingFile === undefined) { + if (rootDir === 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, rootDir); + } + } + else { + if (rootDir === 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, rootDir); + } + } + } + var failedLookupLocations = []; + if (rootDir !== undefined) { + var effectivePrimarySearchPaths = options.typesSearchPaths || defaultLibrarySearchPaths; + for (var _i = 0, effectivePrimarySearchPaths_1 = effectivePrimarySearchPaths; _i < effectivePrimarySearchPaths_1.length; _i++) { + var searchPath = effectivePrimarySearchPaths_1[_i]; + var primaryPath = ts.combinePaths(rootDir, searchPath); + if (traceEnabled) { + trace(host, ts.Diagnostics.Resolving_with_primary_search_path_0, primaryPath); + } + var candidate = ts.combinePaths(primaryPath, typeReferenceDirectiveName); + var candidateDirectory = ts.getDirectoryPath(candidate); + var resolvedFile_1 = loadNodeModuleFromDirectory(typeReferenceExtensions, candidate, failedLookupLocations, !directoryProbablyExists(candidateDirectory, host), moduleResolutionState); + if (resolvedFile_1) { + if (traceEnabled) { + trace(host, ts.Diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2, typeReferenceDirectiveName, resolvedFile_1, true); + } + return { + resolvedTypeReferenceDirective: { primary: true, resolvedFileName: resolvedFile_1 }, + failedLookupLocations: failedLookupLocations + }; + } + } + } + else { + if (traceEnabled) { + trace(host, ts.Diagnostics.Root_directory_cannot_be_determined_skipping_primary_search_paths); + } + } + var resolvedFile; + var initialLocationForSecondaryLookup; + if (containingFile) { + initialLocationForSecondaryLookup = ts.getDirectoryPath(containingFile); + } + else { + initialLocationForSecondaryLookup = rootDir; + } + if (initialLocationForSecondaryLookup !== undefined) { + if (traceEnabled) { + trace(host, ts.Diagnostics.Looking_up_in_node_modules_folder_initial_location_0, initialLocationForSecondaryLookup); + } + resolvedFile = loadModuleFromNodeModules(typeReferenceDirectiveName, initialLocationForSecondaryLookup, failedLookupLocations, moduleResolutionState); + if (traceEnabled) { + if (resolvedFile) { + trace(host, ts.Diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2, typeReferenceDirectiveName, resolvedFile, false); + } + else { + trace(host, ts.Diagnostics.Type_reference_directive_0_was_not_resolved, typeReferenceDirectiveName); + } + } + } + else { + if (traceEnabled) { + trace(host, ts.Diagnostics.Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder); + } + } + return { + resolvedTypeReferenceDirective: resolvedFile + ? { primary: false, resolvedFileName: resolvedFile } + : undefined, + failedLookupLocations: failedLookupLocations + }; + } + ts.resolveTypeReferenceDirective = resolveTypeReferenceDirective; + function resolveModuleName(moduleName, containingFile, compilerOptions, host) { + var traceEnabled = isTraceEnabled(compilerOptions, host); + if (traceEnabled) { + trace(host, ts.Diagnostics.Resolving_module_0_from_1, moduleName, containingFile); + } + 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]); + } + } + var result; + switch (moduleResolution) { + case ts.ModuleResolutionKind.NodeJs: + result = nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host); + break; + case ts.ModuleResolutionKind.Classic: + result = classicNameResolver(moduleName, containingFile, compilerOptions, host); + break; + } + 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(moduleName, containingDirectory, loader, failedLookupLocations, supportedExtensions, state) { + if (moduleHasNonRelativeName(moduleName)) { + return tryLoadModuleUsingBaseUrl(moduleName, loader, failedLookupLocations, supportedExtensions, state); + } + else { + return tryLoadModuleUsingRootDirs(moduleName, containingDirectory, loader, failedLookupLocations, supportedExtensions, state); + } + } + function tryLoadModuleUsingRootDirs(moduleName, containingDirectory, loader, failedLookupLocations, supportedExtensions, 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(candidate, supportedExtensions, 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(candidate_1, supportedExtensions, 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(moduleName, loader, failedLookupLocations, supportedExtensions, 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 longestMatchPrefixLength = -1; + var matchedPattern; + var matchedStar; + 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); + } + for (var key in state.compilerOptions.paths) { + var pattern = key; + var indexOfStar = pattern.indexOf("*"); + if (indexOfStar !== -1) { + var prefix = pattern.substr(0, indexOfStar); + var suffix = pattern.substr(indexOfStar + 1); + if (moduleName.length >= prefix.length + suffix.length && + ts.startsWith(moduleName, prefix) && + ts.endsWith(moduleName, suffix)) { + if (prefix.length > longestMatchPrefixLength) { + longestMatchPrefixLength = prefix.length; + matchedPattern = pattern; + matchedStar = moduleName.substr(prefix.length, moduleName.length - suffix.length); + } + } + } + else if (pattern === moduleName) { + matchedPattern = pattern; + matchedStar = undefined; + break; + } + } + } + if (matchedPattern) { + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.Module_name_0_matched_pattern_1, moduleName, matchedPattern); + } + for (var _i = 0, _a = state.compilerOptions.paths[matchedPattern]; _i < _a.length; _i++) { + var subst = _a[_i]; + var path = matchedStar ? subst.replace("\*", matchedStar) : 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 resolvedFileName = loader(candidate, supportedExtensions, failedLookupLocations, !directoryProbablyExists(ts.getDirectoryPath(candidate), state.host), state); + if (resolvedFileName) { + return resolvedFileName; + } + } + return undefined; + } + 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(candidate, supportedExtensions, failedLookupLocations, !directoryProbablyExists(ts.getDirectoryPath(candidate), state.host), state); + } + } + function nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host) { + var containingDirectory = ts.getDirectoryPath(containingFile); + var supportedExtensions = ts.getSupportedExtensions(compilerOptions); + var traceEnabled = isTraceEnabled(compilerOptions, host); + var failedLookupLocations = []; + var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled, skipTsx: false }; + var resolvedFileName = tryLoadModuleUsingOptionalResolutionSettings(moduleName, containingDirectory, nodeLoadModuleByRelativeName, failedLookupLocations, supportedExtensions, state); + var isExternalLibraryImport = false; + if (!resolvedFileName) { + if (moduleHasNonRelativeName(moduleName)) { + if (traceEnabled) { + trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder, moduleName); + } + resolvedFileName = loadModuleFromNodeModules(moduleName, containingDirectory, failedLookupLocations, state); + isExternalLibraryImport = resolvedFileName !== undefined; + } + else { + var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); + resolvedFileName = nodeLoadModuleByRelativeName(candidate, supportedExtensions, failedLookupLocations, false, state); + } + } + if (resolvedFileName && host.realpath) { + var originalFileName = resolvedFileName; + resolvedFileName = ts.normalizePath(host.realpath(resolvedFileName)); + if (traceEnabled) { + trace(host, ts.Diagnostics.Resolving_real_path_for_0_result_1, originalFileName, resolvedFileName); + } + } + return createResolvedModule(resolvedFileName, isExternalLibraryImport, failedLookupLocations); + } + ts.nodeModuleNameResolver = nodeModuleNameResolver; + function nodeLoadModuleByRelativeName(candidate, supportedExtensions, failedLookupLocations, onlyRecordFailures, state) { + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.Loading_module_as_file_Slash_folder_candidate_module_location_0, candidate); + } + var resolvedFileName = loadModuleFromFile(candidate, supportedExtensions, failedLookupLocations, onlyRecordFailures, state); + return resolvedFileName || loadNodeModuleFromDirectory(supportedExtensions, candidate, failedLookupLocations, onlyRecordFailures, state); + } + function directoryProbablyExists(directoryName, host) { + return !host.directoryExists || host.directoryExists(directoryName); + } + ts.directoryProbablyExists = directoryProbablyExists; + function loadModuleFromFile(candidate, extensions, failedLookupLocation, onlyRecordFailures, state) { + if (!onlyRecordFailures) { + var directory = ts.getDirectoryPath(candidate); + if (directory) { + onlyRecordFailures = !directoryProbablyExists(directory, state.host); + } + } + return ts.forEach(extensions, tryLoad); + function tryLoad(ext) { + if (ext === ".tsx" && state.skipTsx) { + return undefined; + } + var fileName = ts.fileExtensionIs(candidate, ext) ? candidate : candidate + ext; + if (!onlyRecordFailures && 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); + } + failedLookupLocation.push(fileName); + return undefined; + } + } + } + function loadNodeModuleFromDirectory(extensions, candidate, failedLookupLocation, onlyRecordFailures, state) { + var packageJsonPath = ts.combinePaths(candidate, "package.json"); + var directoryExists = !onlyRecordFailures && directoryProbablyExists(candidate, state.host); + if (directoryExists && state.host.fileExists(packageJsonPath)) { + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.Found_package_json_at_0, packageJsonPath); + } + var typesFile = tryReadTypesSection(packageJsonPath, candidate, state); + if (typesFile) { + var result = loadModuleFromFile(typesFile, extensions, failedLookupLocation, !directoryProbablyExists(ts.getDirectoryPath(typesFile), state.host), state); + if (result) { + return result; + } + } + else { + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.package_json_does_not_have_types_field); + } + } + } + else { + if (state.traceEnabled) { + trace(state.host, ts.Diagnostics.File_0_does_not_exist, packageJsonPath); + } + failedLookupLocation.push(packageJsonPath); + } + return loadModuleFromFile(ts.combinePaths(candidate, "index"), extensions, failedLookupLocation, !directoryExists, state); + } + function loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state) { + var nodeModulesFolder = ts.combinePaths(directory, "node_modules"); + var nodeModulesFolderExists = directoryProbablyExists(nodeModulesFolder, state.host); + var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName)); + var result = loadModuleFromFile(candidate, ts.supportedTypeScriptExtensions, failedLookupLocations, !nodeModulesFolderExists, state); + if (result) { + return result; + } + result = loadNodeModuleFromDirectory(ts.supportedTypeScriptExtensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state); + if (result) { + return result; + } + } + function loadModuleFromNodeModules(moduleName, directory, failedLookupLocations, state) { + directory = ts.normalizeSlashes(directory); + while (true) { + var baseName = ts.getBaseFileName(directory); + if (baseName !== "node_modules") { + var result = loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state) || + loadModuleFromNodeModulesFolder(ts.combinePaths("@types", moduleName), directory, failedLookupLocations, state); + if (result) { + return result; + } + } + var parentPath = ts.getDirectoryPath(directory); + if (parentPath === directory) { + break; + } + directory = parentPath; + } + return undefined; + } + function classicNameResolver(moduleName, containingFile, compilerOptions, host) { + var traceEnabled = isTraceEnabled(compilerOptions, host); + var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled, skipTsx: !compilerOptions.jsx }; + var failedLookupLocations = []; + var supportedExtensions = ts.getSupportedExtensions(compilerOptions); + var containingDirectory = ts.getDirectoryPath(containingFile); + var resolvedFileName = tryLoadModuleUsingOptionalResolutionSettings(moduleName, containingDirectory, loadModuleFromFile, failedLookupLocations, supportedExtensions, state); + if (resolvedFileName) { + return createResolvedModule(resolvedFileName, false, failedLookupLocations); + } + var referencedSourceFile; + if (moduleHasNonRelativeName(moduleName)) { + while (true) { + var searchName = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); + referencedSourceFile = loadModuleFromFile(searchName, supportedExtensions, failedLookupLocations, false, state); + if (referencedSourceFile) { + break; + } + var parentPath = ts.getDirectoryPath(containingDirectory); + if (parentPath === containingDirectory) { + break; + } + containingDirectory = parentPath; + } + } + else { + var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); + referencedSourceFile = loadModuleFromFile(candidate, supportedExtensions, failedLookupLocations, false, state); + } + return referencedSourceFile + ? { resolvedModule: { resolvedFileName: referencedSourceFile }, failedLookupLocations: failedLookupLocations } + : { resolvedModule: undefined, failedLookupLocations: failedLookupLocations }; + } + ts.classicNameResolver = classicNameResolver; + ts.defaultInitCompilerOptions = { + module: ts.ModuleKind.CommonJS, + target: 1, + noImplicitAny: false, + sourceMap: false + }; + function createCompilerHost(options, setParentNodes) { + var existingDirectories = {}; + function getCanonicalFileName(fileName) { + return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); + } + var unsupportedFileEncodingErrorCode = -2147024809; + function getSourceFile(fileName, languageVersion, onError) { + var text; + try { + var start = new Date().getTime(); + text = ts.sys.readFile(fileName, options.charset); + ts.ioReadTime += new Date().getTime() - start; + } + catch (e) { + if (onError) { + onError(e.number === unsupportedFileEncodingErrorCode + ? ts.createCompilerDiagnostic(ts.Diagnostics.Unsupported_file_encoding).messageText + : e.message); + } + text = ""; + } + return text !== undefined ? ts.createSourceFile(fileName, text, languageVersion, setParentNodes) : undefined; + } + function directoryExists(directoryPath) { + if (ts.hasProperty(existingDirectories, directoryPath)) { + return true; + } + if (ts.sys.directoryExists(directoryPath)) { + existingDirectories[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 = {}; + } + var hash = ts.sys.createHash(data); + var mtimeBefore = ts.sys.getModifiedTime(fileName); + if (mtimeBefore && ts.hasProperty(outputFingerprints, fileName)) { + var fingerprint = outputFingerprints[fileName]; + if (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[fileName] = { + hash: hash, + byteOrderMark: writeByteOrderMark, + mtime: mtimeAfter + }; + } + function writeFile(fileName, data, writeByteOrderMark, onError) { + try { + var start = new Date().getTime(); + 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.ioWriteTime += new Date().getTime() - start; + } + 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); }, + 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) { + diagnostics = diagnostics.concat(program.getDeclarationDiagnostics(sourceFile, cancellationToken)); + } + return ts.sortAndDeduplicateDiagnostics(diagnostics); + } + ts.getPreEmitDiagnostics = getPreEmitDiagnostics; + function flattenDiagnosticMessageText(messageText, newLine) { + if (typeof messageText === "string") { + 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 = {}; + for (var _i = 0, names_1 = names; _i < names_1.length; _i++) { + var name_33 = names_1[_i]; + var result = void 0; + if (ts.hasProperty(cache, name_33)) { + result = cache[name_33]; + } + else { + result = loader(name_33, containingFile); + cache[name_33] = result; + } + resolutions.push(result); + } + return resolutions; + } + function createProgram(rootNames, options, host, oldProgram) { + var program; + var files = []; + var commonSourceDirectory; + var diagnosticsProducingTypeChecker; + var noDiagnosticsTypeChecker; + var classifiableNames; + var resolvedTypeReferenceDirectives = {}; + var fileProcessingDiagnostics = ts.createDiagnosticCollection(); + var start = new Date().getTime(); + host = host || createCompilerHost(options); + var skipDefaultLib = options.noLib; + var programDiagnostics = ts.createDiagnosticCollection(); + var currentDirectory = host.getCurrentDirectory(); + var supportedExtensions = ts.getSupportedExtensions(options); + var hasEmitBlockingDiagnostics = ts.createFileMap(getCanonicalFileName); + var resolveModuleNamesWorker; + if (host.resolveModuleNames) { + resolveModuleNamesWorker = function (moduleNames, containingFile) { return host.resolveModuleNames(moduleNames, containingFile); }; + } + else { + var loader_1 = function (moduleName, containingFile) { return resolveModuleName(moduleName, containingFile, options, host).resolvedModule; }; + resolveModuleNamesWorker = function (moduleNames, containingFile) { return loadWithLocalCache(moduleNames, containingFile, loader_1); }; + } + var resolveTypeReferenceDirectiveNamesWorker; + if (host.resolveTypeReferenceDirectives) { + resolveTypeReferenceDirectiveNamesWorker = function (typeDirectiveNames, containingFile) { return host.resolveTypeReferenceDirectives(typeDirectiveNames, containingFile); }; + } + else { + var loader_2 = function (typesRef, containingFile) { return resolveTypeReferenceDirective(typesRef, containingFile, options, host).resolvedTypeReferenceDirective; }; + resolveTypeReferenceDirectiveNamesWorker = function (typeReferenceDirectiveNames, containingFile) { return loadWithLocalCache(typeReferenceDirectiveNames, containingFile, loader_2); }; + } + var filesByName = ts.createFileMap(); + var filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? ts.createFileMap(function (fileName) { return fileName.toLowerCase(); }) : undefined; + if (!tryReuseStructureFromOldProgram()) { + if (options.types && options.types.length) { + var resolutions = resolveTypeReferenceDirectiveNamesWorker(options.types, undefined); + for (var i = 0; i < options.types.length; i++) { + processTypeReferenceDirective(options.types[i], resolutions[i]); + } + } + ts.forEach(rootNames, function (name) { return processRootFile(name, false); }); + if (!skipDefaultLib) { + if (!options.lib) { + processRootFile(host.getDefaultLibFileName(options), true); + } + else { + var libDirectory_1 = host.getDefaultLibLocation ? host.getDefaultLibLocation() : ts.getDirectoryPath(host.getDefaultLibFileName(options)); + ts.forEach(options.lib, function (libFileName) { + processRootFile(ts.combinePaths(libDirectory_1, libFileName), true); + }); + } + } + } + oldProgram = undefined; + program = { + getRootFileNames: function () { return rootNames; }, + getSourceFile: getSourceFile, + getSourceFileByPath: getSourceFileByPath, + getSourceFiles: function () { return files; }, + 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; } + }; + verifyCompilerOptions(); + ts.programTime += new Date().getTime() - start; + return program; + function getCommonSourceDirectory() { + if (typeof commonSourceDirectory === "undefined") { + if (options.rootDir && checkSourceFilesBelongToPath(files, options.rootDir)) { + commonSourceDirectory = ts.getNormalizedAbsolutePath(options.rootDir, currentDirectory); + } + else { + commonSourceDirectory = computeCommonSourceDirectory(files); + } + if (commonSourceDirectory && commonSourceDirectory[commonSourceDirectory.length - 1] !== ts.directorySeparator) { + commonSourceDirectory += ts.directorySeparator; + } + } + return commonSourceDirectory; + } + function getClassifiableNames() { + if (!classifiableNames) { + getTypeChecker(); + classifiableNames = {}; + for (var _i = 0, files_3 = files; _i < files_3.length; _i++) { + var sourceFile = files_3[_i]; + ts.copyMap(sourceFile.classifiableNames, classifiableNames); + } + } + return classifiableNames; + } + function tryReuseStructureFromOldProgram() { + if (!oldProgram) { + return false; + } + var oldOptions = oldProgram.getCompilerOptions(); + if ((oldOptions.module !== options.module) || + (oldOptions.noResolve !== options.noResolve) || + (oldOptions.target !== options.target) || + (oldOptions.noLib !== options.noLib) || + (oldOptions.jsx !== options.jsx) || + (oldOptions.allowJs !== options.allowJs) || + (oldOptions.rootDir !== options.rootDir) || + (oldOptions.typesSearchPaths !== options.typesSearchPaths) || + (oldOptions.configFilePath !== options.configFilePath) || + (oldOptions.baseUrl !== options.baseUrl) || + (oldOptions.typesRoot !== options.typesRoot) || + !ts.arrayIsEqualTo(oldOptions.rootDirs, options.rootDirs) || + !ts.mapIsEqualTo(oldOptions.paths, options.paths)) { + return false; + } + ts.Debug.assert(!oldProgram.structureIsReused); + var oldRootNames = oldProgram.getRootFileNames(); + if (!ts.arrayIsEqualTo(oldRootNames, rootNames)) { + return false; + } + if (!ts.arrayIsEqualTo(options.types, oldOptions.types)) { + return false; + } + var newSourceFiles = []; + var filePaths = []; + var modifiedSourceFiles = []; + for (var _i = 0, _a = oldProgram.getSourceFiles(); _i < _a.length; _i++) { + var oldSourceFile = _a[_i]; + var newSourceFile = host.getSourceFileByPath + ? host.getSourceFileByPath(oldSourceFile.fileName, oldSourceFile.path, options.target) + : host.getSourceFile(oldSourceFile.fileName, options.target); + if (!newSourceFile) { + return false; + } + newSourceFile.path = oldSourceFile.path; + filePaths.push(newSourceFile.path); + if (oldSourceFile !== newSourceFile) { + if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) { + return false; + } + if (!ts.arrayIsEqualTo(oldSourceFile.referencedFiles, newSourceFile.referencedFiles, fileReferenceIsEqualTo)) { + return false; + } + collectExternalModuleReferences(newSourceFile); + if (!ts.arrayIsEqualTo(oldSourceFile.imports, newSourceFile.imports, moduleNameIsEqualTo)) { + return false; + } + if (!ts.arrayIsEqualTo(oldSourceFile.moduleAugmentations, newSourceFile.moduleAugmentations, moduleNameIsEqualTo)) { + return false; + } + if (!ts.arrayIsEqualTo(oldSourceFile.typeReferenceDirectives, newSourceFile.typeReferenceDirectives, fileReferenceIsEqualTo)) { + return false; + } + var newSourceFilePath = ts.getNormalizedAbsolutePath(newSourceFile.fileName, currentDirectory); + if (resolveModuleNamesWorker) { + var moduleNames = ts.map(ts.concatenate(newSourceFile.imports, newSourceFile.moduleAugmentations), getTextOfLiteral); + var resolutions = resolveModuleNamesWorker(moduleNames, newSourceFilePath); + var resolutionsChanged = ts.hasChangesInResolutions(moduleNames, resolutions, oldSourceFile.resolvedModules, ts.moduleResolutionIsEqualTo); + if (resolutionsChanged) { + return false; + } + } + 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) { + return false; + } + } + newSourceFile.resolvedModules = oldSourceFile.resolvedModules; + newSourceFile.resolvedTypeReferenceDirectiveNames = oldSourceFile.resolvedTypeReferenceDirectiveNames; + modifiedSourceFiles.push(newSourceFile); + } + else { + newSourceFile = oldSourceFile; + } + newSourceFiles.push(newSourceFile); + } + for (var i = 0, len = newSourceFiles.length; i < len; i++) { + filesByName.set(filePaths[i], newSourceFiles[i]); + } + files = newSourceFiles; + fileProcessingDiagnostics = oldProgram.getFileProcessingDiagnostics(); + for (var _b = 0, modifiedSourceFiles_1 = modifiedSourceFiles; _b < modifiedSourceFiles_1.length; _b++) { + var modifiedFile = modifiedSourceFiles_1[_b]; + fileProcessingDiagnostics.reattachFileDiagnostics(modifiedFile); + } + resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives(); + oldProgram.structureIsReused = true; + return true; + } + 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, + writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }), + isEmitBlocked: isEmitBlocked + }; + } + function getDiagnosticsProducingTypeChecker() { + return diagnosticsProducingTypeChecker || (diagnosticsProducingTypeChecker = ts.createTypeChecker(program, true)); + } + function getTypeChecker() { + return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = ts.createTypeChecker(program, false)); + } + function emit(sourceFile, writeFileCallback, cancellationToken) { + var _this = this; + return runWithCancellationToken(function () { return emitWorker(_this, sourceFile, writeFileCallback, cancellationToken); }); + } + function isEmitBlocked(emitFileName) { + return hasEmitBlockingDiagnostics.contains(ts.toPath(emitFileName, currentDirectory, getCanonicalFileName)); + } + function emitWorker(program, sourceFile, writeFileCallback, cancellationToken) { + 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); + var start = new Date().getTime(); + var emitResult = ts.emitFiles(emitResolver, getEmitHost(writeFileCallback), sourceFile); + ts.emitTime += new Date().getTime() - start; + return emitResult; + } + function getSourceFile(fileName) { + return getSourceFileByPath(ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + } + function getSourceFileByPath(path) { + return filesByName.get(path); + } + function getDiagnosticsHelper(sourceFile, getDiagnostics, cancellationToken) { + if (sourceFile) { + return getDiagnostics(sourceFile, cancellationToken); + } + var allDiagnostics = []; + ts.forEach(program.getSourceFiles(), function (sourceFile) { + if (cancellationToken) { + cancellationToken.throwIfCancellationRequested(); + } + ts.addRange(allDiagnostics, getDiagnostics(sourceFile, cancellationToken)); + }); + return ts.sortAndDeduplicateDiagnostics(allDiagnostics); + } + 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, cancellationToken) { + 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 runWithCancellationToken(function () { + var typeChecker = getDiagnosticsProducingTypeChecker(); + ts.Debug.assert(!!sourceFile.bindDiagnostics); + var bindDiagnostics = sourceFile.bindDiagnostics; + var checkDiagnostics = ts.isSourceFileJavaScript(sourceFile) ? + getJavaScriptSemanticDiagnosticsForFile(sourceFile, cancellationToken) : + typeChecker.getDiagnostics(sourceFile, cancellationToken); + var fileProcessingDiagnosticsInFile = fileProcessingDiagnostics.getDiagnostics(sourceFile.fileName); + var programDiagnosticsInFile = programDiagnostics.getDiagnostics(sourceFile.fileName); + return bindDiagnostics.concat(checkDiagnostics).concat(fileProcessingDiagnosticsInFile).concat(programDiagnosticsInFile); + }); + } + function getJavaScriptSemanticDiagnosticsForFile(sourceFile, cancellationToken) { + return runWithCancellationToken(function () { + var diagnostics = []; + walk(sourceFile); + return diagnostics; + function walk(node) { + if (!node) { + return false; + } + switch (node.kind) { + case 229: + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_a_ts_file)); + return true; + case 235: + if (node.isExportEquals) { + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_a_ts_file)); + return true; + } + break; + case 221: + var classDeclaration = node; + if (checkModifiers(classDeclaration.modifiers) || + checkTypeParameters(classDeclaration.typeParameters)) { + return true; + } + break; + case 251: + var heritageClause = node; + if (heritageClause.token === 106) { + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_a_ts_file)); + return true; + } + break; + case 222: + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.interface_declarations_can_only_be_used_in_a_ts_file)); + return true; + case 225: + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.module_declarations_can_only_be_used_in_a_ts_file)); + return true; + case 223: + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.type_aliases_can_only_be_used_in_a_ts_file)); + return true; + case 147: + case 146: + case 148: + case 149: + case 150: + case 179: + case 220: + case 180: + case 220: + var functionDeclaration = node; + if (checkModifiers(functionDeclaration.modifiers) || + checkTypeParameters(functionDeclaration.typeParameters) || + checkTypeAnnotation(functionDeclaration.type)) { + return true; + } + break; + case 200: + var variableStatement = node; + if (checkModifiers(variableStatement.modifiers)) { + return true; + } + break; + case 218: + var variableDeclaration = node; + if (checkTypeAnnotation(variableDeclaration.type)) { + return true; + } + break; + case 174: + case 175: + var expression = node; + if (expression.typeArguments && expression.typeArguments.length > 0) { + var start_2 = expression.typeArguments.pos; + diagnostics.push(ts.createFileDiagnostic(sourceFile, start_2, expression.typeArguments.end - start_2, ts.Diagnostics.type_arguments_can_only_be_used_in_a_ts_file)); + return true; + } + break; + case 142: + var parameter = node; + if (parameter.modifiers) { + var start_3 = parameter.modifiers.pos; + diagnostics.push(ts.createFileDiagnostic(sourceFile, start_3, parameter.modifiers.end - start_3, ts.Diagnostics.parameter_modifiers_can_only_be_used_in_a_ts_file)); + return true; + } + if (parameter.questionToken) { + diagnostics.push(ts.createDiagnosticForNode(parameter.questionToken, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, "?")); + return true; + } + if (parameter.type) { + diagnostics.push(ts.createDiagnosticForNode(parameter.type, ts.Diagnostics.types_can_only_be_used_in_a_ts_file)); + return true; + } + break; + case 145: + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.property_declarations_can_only_be_used_in_a_ts_file)); + return true; + case 224: + diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); + return true; + case 177: + var typeAssertionExpression = node; + diagnostics.push(ts.createDiagnosticForNode(typeAssertionExpression.type, ts.Diagnostics.type_assertion_expressions_can_only_be_used_in_a_ts_file)); + return true; + case 143: + if (!options.experimentalDecorators) { + diagnostics.push(ts.createDiagnosticForNode(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)); + } + return true; + } + return ts.forEachChild(node, walk); + } + function checkTypeParameters(typeParameters) { + if (typeParameters) { + var start_4 = typeParameters.pos; + diagnostics.push(ts.createFileDiagnostic(sourceFile, start_4, typeParameters.end - start_4, ts.Diagnostics.type_parameter_declarations_can_only_be_used_in_a_ts_file)); + return true; + } + return false; + } + function checkTypeAnnotation(type) { + if (type) { + diagnostics.push(ts.createDiagnosticForNode(type, ts.Diagnostics.types_can_only_be_used_in_a_ts_file)); + return true; + } + return false; + } + function checkModifiers(modifiers) { + if (modifiers) { + for (var _i = 0, modifiers_1 = modifiers; _i < modifiers_1.length; _i++) { + var modifier = modifiers_1[_i]; + switch (modifier.kind) { + case 112: + case 110: + case 111: + case 128: + case 122: + diagnostics.push(ts.createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind))); + return true; + case 113: + case 82: + case 74: + case 77: + case 115: + } + } + } + return false; + } + }); + } + function getDeclarationDiagnosticsWorker(sourceFile, cancellationToken) { + return runWithCancellationToken(function () { + var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile, cancellationToken); + var writeFile = function () { }; + return ts.getDeclarationDiagnostics(getEmitHost(writeFile), resolver, sourceFile); + }); + } + function getDeclarationDiagnosticsForFile(sourceFile, cancellationToken) { + return ts.isDeclarationFile(sourceFile) ? [] : getDeclarationDiagnosticsWorker(sourceFile, cancellationToken); + } + function getOptionsDiagnostics() { + var allDiagnostics = []; + ts.addRange(allDiagnostics, fileProcessingDiagnostics.getGlobalDiagnostics()); + ts.addRange(allDiagnostics, programDiagnostics.getGlobalDiagnostics()); + return ts.sortAndDeduplicateDiagnostics(allDiagnostics); + } + function getGlobalDiagnostics() { + var allDiagnostics = []; + ts.addRange(allDiagnostics, getDiagnosticsProducingTypeChecker().getGlobalDiagnostics()); + return ts.sortAndDeduplicateDiagnostics(allDiagnostics); + } + function hasExtension(fileName) { + return ts.getBaseFileName(fileName).indexOf(".") >= 0; + } + function processRootFile(fileName, isDefaultLib) { + processSourceFile(ts.normalizePath(fileName), isDefaultLib, true); + } + function fileReferenceIsEqualTo(a, b) { + return a.fileName === b.fileName; + } + function moduleNameIsEqualTo(a, b) { + return a.text === b.text; + } + function getTextOfLiteral(literal) { + return literal.text; + } + function collectExternalModuleReferences(file) { + if (file.imports) { + return; + } + var isJavaScriptFile = ts.isSourceFileJavaScript(file); + var isExternalModuleFile = ts.isExternalModule(file); + var imports; + var moduleAugmentations; + for (var _i = 0, _a = file.statements; _i < _a.length; _i++) { + var node = _a[_i]; + collectModuleReferences(node, false); + if (isJavaScriptFile) { + collectRequireCalls(node); + } + } + file.imports = imports || emptyArray; + file.moduleAugmentations = moduleAugmentations || emptyArray; + return; + function collectModuleReferences(node, inAmbientModule) { + switch (node.kind) { + case 230: + case 229: + case 236: + var moduleNameExpr = ts.getExternalModuleName(node); + if (!moduleNameExpr || moduleNameExpr.kind !== 9) { + break; + } + if (!moduleNameExpr.text) { + break; + } + if (!inAmbientModule || !ts.isExternalModuleNameRelative(moduleNameExpr.text)) { + (imports || (imports = [])).push(moduleNameExpr); + } + break; + case 225: + if (ts.isAmbientModule(node) && (inAmbientModule || node.flags & 2 || ts.isDeclarationFile(file))) { + var moduleName = node.name; + if (isExternalModuleFile || (inAmbientModule && !ts.isExternalModuleNameRelative(moduleName.text))) { + (moduleAugmentations || (moduleAugmentations = [])).push(moduleName); + } + else if (!inAmbientModule) { + for (var _i = 0, _a = node.body.statements; _i < _a.length; _i++) { + var statement = _a[_i]; + collectModuleReferences(statement, true); + } + } + } + } + } + function collectRequireCalls(node) { + if (ts.isRequireCall(node, true)) { + (imports || (imports = [])).push(node.arguments[0]); + } + else { + ts.forEachChild(node, collectRequireCalls); + } + } + } + function processSourceFile(fileName, isDefaultLib, isReference, refFile, refPos, refEnd) { + var diagnosticArgument; + var diagnostic; + if (hasExtension(fileName)) { + if (!options.allowNonTsExtensions && !ts.forEach(supportedExtensions, function (extension) { return ts.fileExtensionIs(host.getCanonicalFileName(fileName), extension); })) { + diagnostic = ts.Diagnostics.File_0_has_unsupported_extension_The_only_supported_extensions_are_1; + diagnosticArgument = [fileName, "'" + supportedExtensions.join("', '") + "'"]; + } + else if (!findSourceFile(fileName, ts.toPath(fileName, currentDirectory, getCanonicalFileName), isDefaultLib, isReference, refFile, refPos, refEnd)) { + diagnostic = ts.Diagnostics.File_0_not_found; + diagnosticArgument = [fileName]; + } + else if (refFile && host.getCanonicalFileName(fileName) === host.getCanonicalFileName(refFile.fileName)) { + diagnostic = ts.Diagnostics.A_file_cannot_have_a_reference_to_itself; + diagnosticArgument = [fileName]; + } + } + else { + var nonTsFile = options.allowNonTsExtensions && findSourceFile(fileName, ts.toPath(fileName, currentDirectory, getCanonicalFileName), isDefaultLib, isReference, refFile, refPos, refEnd); + if (!nonTsFile) { + if (options.allowNonTsExtensions) { + diagnostic = ts.Diagnostics.File_0_not_found; + diagnosticArgument = [fileName]; + } + else if (!ts.forEach(supportedExtensions, function (extension) { return findSourceFile(fileName + extension, ts.toPath(fileName + extension, currentDirectory, getCanonicalFileName), isDefaultLib, isReference, refFile, refPos, refEnd); })) { + diagnostic = ts.Diagnostics.File_0_not_found; + fileName += ".ts"; + diagnosticArgument = [fileName]; + } + } + } + if (diagnostic) { + if (refFile !== undefined && refEnd !== undefined && refPos !== undefined) { + fileProcessingDiagnostics.add(ts.createFileDiagnostic.apply(void 0, [refFile, refPos, refEnd - refPos, diagnostic].concat(diagnosticArgument))); + } + else { + fileProcessingDiagnostics.add(ts.createCompilerDiagnostic.apply(void 0, [diagnostic].concat(diagnosticArgument))); + } + } + } + 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 findSourceFile(fileName, path, isDefaultLib, isReference, refFile, refPos, refEnd) { + if (filesByName.contains(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) { + file_1.wasReferenced = file_1.wasReferenced || isReference; + } + 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)); + } + }); + filesByName.set(path, file); + if (file) { + file.wasReferenced = file.wasReferenced || isReference; + file.path = path; + if (host.useCaseSensitiveFileNames()) { + var existingFile = filesByNameIgnoreCase.get(path); + if (existingFile) { + reportFileNamesDifferOnlyInCasingError(fileName, existingFile.fileName, refFile, refPos, refEnd); + } + else { + filesByNameIgnoreCase.set(path, file); + } + } + skipDefaultLib = skipDefaultLib || file.hasNoDefaultLib; + var basePath = ts.getDirectoryPath(fileName); + if (!options.noResolve) { + processReferencedFiles(file, basePath, isDefaultLib); + processTypeReferenceDirectives(file); + } + processImportedModules(file, basePath); + if (isDefaultLib) { + files.unshift(file); + } + else { + files.push(file); + } + } + return file; + } + function processReferencedFiles(file, basePath, isDefaultLib) { + ts.forEach(file.referencedFiles, function (ref) { + var referencedFileName = resolveTripleslashReference(ref.fileName, file.fileName); + processSourceFile(referencedFileName, isDefaultLib, true, file, ref.pos, ref.end); + }); + } + function processTypeReferenceDirectives(file) { + var typeDirectives = ts.map(file.typeReferenceDirectives, function (l) { return l.fileName; }); + var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeDirectives, file.fileName); + for (var i = 0; i < typeDirectives.length; i++) { + var ref = file.typeReferenceDirectives[i]; + var resolvedTypeReferenceDirective = resolutions[i]; + ts.setResolvedTypeReferenceDirective(file, ref.fileName, resolvedTypeReferenceDirective); + processTypeReferenceDirective(ref.fileName, resolvedTypeReferenceDirective, file, ref.pos, ref.end); + } + } + function processTypeReferenceDirective(typeReferenceDirective, resolvedTypeReferenceDirective, refFile, refPos, refEnd) { + var previousResolution = resolvedTypeReferenceDirectives[typeReferenceDirective]; + if (previousResolution && previousResolution.primary) { + return; + } + var saveResolution = true; + if (resolvedTypeReferenceDirective) { + if (resolvedTypeReferenceDirective.primary) { + processSourceFile(resolvedTypeReferenceDirective.resolvedFileName, false, true, refFile, refPos, refEnd); + } + else { + if (previousResolution) { + var otherFileText = host.readFile(resolvedTypeReferenceDirective.resolvedFileName); + if (otherFileText !== getSourceFile(previousResolution.resolvedFileName).text) { + fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Conflicting_library_definitions_for_0_found_at_1_and_2_Copy_the_correct_file_to_the_typings_folder_to_resolve_this_conflict, typeReferenceDirective, resolvedTypeReferenceDirective.resolvedFileName, previousResolution.resolvedFileName)); + } + saveResolution = false; + } + else { + processSourceFile(resolvedTypeReferenceDirective.resolvedFileName, false, true, refFile, refPos, refEnd); + } + } + } + else { + fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_name_0, typeReferenceDirective)); + } + if (saveResolution) { + resolvedTypeReferenceDirectives[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, basePath) { + collectExternalModuleReferences(file); + if (file.imports.length || file.moduleAugmentations.length) { + file.resolvedModules = {}; + var moduleNames = ts.map(ts.concatenate(file.imports, file.moduleAugmentations), getTextOfLiteral); + var resolutions = resolveModuleNamesWorker(moduleNames, ts.getNormalizedAbsolutePath(file.fileName, currentDirectory)); + for (var i = 0; i < moduleNames.length; i++) { + var resolution = resolutions[i]; + ts.setResolvedModule(file, moduleNames[i], resolution); + var shouldAddFile = resolution && + !options.noResolve && + i < file.imports.length; + if (shouldAddFile) { + var importedFile = findSourceFile(resolution.resolvedFileName, ts.toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName), false, false, file, ts.skipTrivia(file.text, file.imports[i].pos), file.imports[i].end); + if (importedFile && resolution.isExternalLibraryImport) { + if (!ts.isExternalModule(importedFile) && importedFile.statements.length) { + var start_5 = ts.getTokenPosOfNode(file.imports[i], file); + fileProcessingDiagnostics.add(ts.createFileDiagnostic(file, start_5, file.imports[i].end - start_5, ts.Diagnostics.Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_the_package_definition, importedFile.fileName)); + } + else if (importedFile.referencedFiles.length) { + var firstRef = importedFile.referencedFiles[0]; + fileProcessingDiagnostics.add(ts.createFileDiagnostic(importedFile, firstRef.pos, firstRef.end - firstRef.pos, ts.Diagnostics.Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_package_author_to_update_the_package_definition)); + } + } + } + } + } + else { + file.resolvedModules = undefined; + } + return; + } + 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 (!ts.isDeclarationFile(sourceFile)) { + 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) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "declaration", "isolatedModules")); + } + if (options.noEmitOnError) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "noEmitOnError", "isolatedModules")); + } + if (options.out) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "isolatedModules")); + } + if (options.outFile) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "outFile", "isolatedModules")); + } + } + if (options.inlineSourceMap) { + if (options.sourceMap) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "sourceMap", "inlineSourceMap")); + } + if (options.mapRoot) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "mapRoot", "inlineSourceMap")); + } + } + if (options.paths && options.baseUrl === undefined) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_paths_cannot_be_used_without_specifying_baseUrl_option)); + } + if (options.paths) { + for (var key in options.paths) { + if (!ts.hasProperty(options.paths, key)) { + continue; + } + if (!hasZeroOrOneAsteriskCharacter(key)) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, key)); + } + if (ts.isArray(options.paths[key])) { + for (var _i = 0, _a = options.paths[key]; _i < _a.length; _i++) { + var subst = _a[_i]; + var typeOfSubst = typeof subst; + if (typeOfSubst === "string") { + if (!hasZeroOrOneAsteriskCharacter(subst)) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character, subst, key)); + } + } + else { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2, subst, key, typeOfSubst)); + } + } + } + else { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substututions_for_pattern_0_should_be_an_array, key)); + } + } + } + if (options.inlineSources) { + if (!options.sourceMap && !options.inlineSourceMap) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_inlineSources_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided)); + } + if (options.sourceRoot) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "sourceRoot", "inlineSources")); + } + } + if (options.out && options.outFile) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "outFile")); + } + if (!options.sourceMap && (options.mapRoot || options.sourceRoot)) { + if (options.mapRoot) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "mapRoot", "sourceMap")); + } + if (options.sourceRoot && !options.inlineSourceMap) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "sourceRoot", "sourceMap")); + } + } + if (options.declarationDir) { + if (!options.declaration) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "declarationDir", "declaration")); + } + if (options.out || options.outFile) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "declarationDir", options.out ? "out" : "outFile")); + } + } + if (options.lib && options.noLib) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "lib", "noLib")); + } + var languageVersion = options.target || 0; + var outFile = options.outFile || options.out; + var firstExternalModuleSourceFile = ts.forEach(files, function (f) { return ts.isExternalModule(f) ? f : undefined; }); + if (options.isolatedModules) { + if (options.module === ts.ModuleKind.None && languageVersion < 2) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher)); + } + var firstNonExternalModuleSourceFile = ts.forEach(files, function (f) { return !ts.isExternalModule(f) && !ts.isDeclarationFile(f) ? f : undefined; }); + if (firstNonExternalModuleSourceFile) { + var span = ts.getErrorSpanForNode(firstNonExternalModuleSourceFile, firstNonExternalModuleSourceFile); + programDiagnostics.add(ts.createFileDiagnostic(firstNonExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided)); + } + } + else if (firstExternalModuleSourceFile && languageVersion < 2 && options.module === ts.ModuleKind.None) { + var span = ts.getErrorSpanForNode(firstExternalModuleSourceFile, firstExternalModuleSourceFile.externalModuleIndicator); + programDiagnostics.add(ts.createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, ts.Diagnostics.Cannot_compile_modules_unless_the_module_flag_is_provided_with_a_valid_module_type_Consider_setting_the_module_compiler_option_in_a_tsconfig_json_file)); + } + if (options.module === ts.ModuleKind.ES6 && languageVersion < 2) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_compile_modules_into_es2015_when_targeting_ES5_or_lower)); + } + if (outFile && options.module && !(options.module === ts.ModuleKind.AMD || options.module === ts.ModuleKind.System)) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Only_amd_and_system_modules_are_supported_alongside_0, 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; })) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files)); + } + } + if (!options.noEmit && options.allowJs && options.declaration) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "allowJs", "declaration")); + } + if (options.emitDecoratorMetadata && + !options.experimentalDecorators) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "emitDecoratorMetadata", "experimentalDecorators")); + } + if (options.reactNamespace && !ts.isIdentifier(options.reactNamespace, languageVersion)) { + programDiagnostics.add(ts.createCompilerDiagnostic(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.createFileMap(!host.useCaseSensitiveFileNames() ? function (key) { return key.toLocaleLowerCase(); } : undefined); + ts.forEachExpectedEmitFile(emitHost, function (emitFileNames, sourceFiles, isBundledEmit) { + verifyEmitFilePath(emitFileNames.jsFilePath, emitFilesSeen_1); + verifyEmitFilePath(emitFileNames.declarationFilePath, emitFilesSeen_1); + }); + } + function verifyEmitFilePath(emitFileName, emitFilesSeen) { + if (emitFileName) { + var emitFilePath = ts.toPath(emitFileName, currentDirectory, getCanonicalFileName); + if (filesByName.contains(emitFilePath)) { + createEmitBlockingDiagnostics(emitFileName, emitFilePath, ts.Diagnostics.Cannot_write_file_0_because_it_would_overwrite_input_file); + } + if (emitFilesSeen.contains(emitFilePath)) { + createEmitBlockingDiagnostics(emitFileName, emitFilePath, ts.Diagnostics.Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files); + } + else { + emitFilesSeen.set(emitFilePath, true); + } + } + } + } + function createEmitBlockingDiagnostics(emitFileName, emitFilePath, message) { + hasEmitBlockingDiagnostics.set(ts.toPath(emitFileName, currentDirectory, getCanonicalFileName), true); + programDiagnostics.add(ts.createCompilerDiagnostic(message, emitFileName)); + } + } + ts.createProgram = createProgram; +})(ts || (ts = {})); +var ts; +(function (ts) { + var BreakpointResolver; + (function (BreakpointResolver) { + function spanInSourceFileAtLocation(sourceFile, position) { + if (sourceFile.isDeclarationFile) { + return undefined; + } + var tokenAtLocation = ts.getTokenAtPosition(sourceFile, position); + var lineOfPosition = sourceFile.getLineAndCharacterOfPosition(position).line; + if (sourceFile.getLineAndCharacterOfPosition(tokenAtLocation.getStart(sourceFile)).line > lineOfPosition) { + tokenAtLocation = ts.findPrecedingToken(tokenAtLocation.pos, sourceFile); + if (!tokenAtLocation || sourceFile.getLineAndCharacterOfPosition(tokenAtLocation.getEnd()).line !== lineOfPosition) { + return undefined; + } + } + if (ts.isInAmbientContext(tokenAtLocation)) { + return undefined; + } + return spanInNode(tokenAtLocation); + function textSpan(startNode, endNode) { + var start = startNode.decorators ? + ts.skipTrivia(sourceFile.text, startNode.decorators.end) : + startNode.getStart(sourceFile); + return ts.createTextSpanFromBounds(start, (endNode || startNode).getEnd()); + } + function textSpanEndingAtNextToken(startNode, previousTokenToFindNextEndToken) { + return textSpan(startNode, ts.findNextToken(previousTokenToFindNextEndToken, previousTokenToFindNextEndToken.parent)); + } + function spanInNodeIfStartsOnSameLine(node, otherwiseOnNode) { + if (node && lineOfPosition === sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line) { + return spanInNode(node); + } + return spanInNode(otherwiseOnNode); + } + function spanInNodeArray(nodeArray) { + return ts.createTextSpanFromBounds(ts.skipTrivia(sourceFile.text, nodeArray.pos), nodeArray.end); + } + function spanInPreviousNode(node) { + return spanInNode(ts.findPrecedingToken(node.pos, sourceFile)); + } + function spanInNextNode(node) { + return spanInNode(ts.findNextToken(node, node.parent)); + } + function spanInNode(node) { + if (node) { + switch (node.kind) { + case 200: + return spanInVariableDeclaration(node.declarationList.declarations[0]); + case 218: + case 145: + case 144: + return spanInVariableDeclaration(node); + case 142: + return spanInParameterDeclaration(node); + case 220: + case 147: + case 146: + case 149: + case 150: + case 148: + case 179: + case 180: + return spanInFunctionDeclaration(node); + case 199: + if (ts.isFunctionBlock(node)) { + return spanInFunctionBlock(node); + } + case 226: + return spanInBlock(node); + case 252: + return spanInBlock(node.block); + case 202: + return textSpan(node.expression); + case 211: + return textSpan(node.getChildAt(0), node.expression); + case 205: + return textSpanEndingAtNextToken(node, node.expression); + case 204: + return spanInNode(node.statement); + case 217: + return textSpan(node.getChildAt(0)); + case 203: + return textSpanEndingAtNextToken(node, node.expression); + case 214: + return spanInNode(node.statement); + case 210: + case 209: + return textSpan(node.getChildAt(0), node.label); + case 206: + return spanInForStatement(node); + case 207: + return textSpanEndingAtNextToken(node, node.expression); + case 208: + return spanInInitializerOfForLike(node); + case 213: + return textSpanEndingAtNextToken(node, node.expression); + case 249: + case 250: + return spanInNode(node.statements[0]); + case 216: + return spanInBlock(node.tryBlock); + case 215: + return textSpan(node, node.expression); + case 235: + return textSpan(node, node.expression); + case 229: + return textSpan(node, node.moduleReference); + case 230: + return textSpan(node, node.moduleSpecifier); + case 236: + return textSpan(node, node.moduleSpecifier); + case 225: + if (ts.getModuleInstanceState(node) !== 1) { + return undefined; + } + case 221: + case 224: + case 255: + case 169: + return textSpan(node); + case 212: + return spanInNode(node.statement); + case 143: + return spanInNodeArray(node.parent.decorators); + case 167: + case 168: + return spanInBindingPattern(node); + case 222: + case 223: + return undefined; + case 23: + case 1: + return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile)); + case 24: + return spanInPreviousNode(node); + case 15: + return spanInOpenBraceToken(node); + case 16: + return spanInCloseBraceToken(node); + case 20: + return spanInCloseBracketToken(node); + case 17: + return spanInOpenParenToken(node); + case 18: + return spanInCloseParenToken(node); + case 54: + return spanInColonToken(node); + case 27: + case 25: + return spanInGreaterThanOrLessThanToken(node); + case 104: + return spanInWhileKeyword(node); + case 80: + case 72: + case 85: + return spanInNextNode(node); + case 138: + return spanInOfKeyword(node); + default: + if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node)) { + return spanInArrayLiteralOrObjectLiteralDestructuringPattern(node); + } + if ((node.kind === 69 || + node.kind == 191 || + node.kind === 253 || + node.kind === 254) && + ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) { + return textSpan(node); + } + if (node.kind === 187) { + var binaryExpression = node; + if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.left)) { + return spanInArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.left); + } + if (binaryExpression.operatorToken.kind === 56 && + ts.isArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.parent)) { + return textSpan(node); + } + if (binaryExpression.operatorToken.kind === 24) { + return spanInNode(binaryExpression.left); + } + } + if (ts.isExpression(node)) { + switch (node.parent.kind) { + case 204: + return spanInPreviousNode(node); + case 143: + return spanInNode(node.parent); + case 206: + case 208: + return textSpan(node); + case 187: + if (node.parent.operatorToken.kind === 24) { + return textSpan(node); + } + break; + case 180: + if (node.parent.body === node) { + return textSpan(node); + } + break; + } + } + if (node.parent.kind === 253 && + node.parent.name === node && + !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.parent)) { + return spanInNode(node.parent.initializer); + } + if (node.parent.kind === 177 && node.parent.type === node) { + return spanInNextNode(node.parent.type); + } + if (ts.isFunctionLike(node.parent) && node.parent.type === node) { + return spanInPreviousNode(node); + } + if ((node.parent.kind === 218 || + node.parent.kind === 142)) { + var paramOrVarDecl = node.parent; + if (paramOrVarDecl.initializer === node || + paramOrVarDecl.type === node || + ts.isAssignmentOperator(node.kind)) { + return spanInPreviousNode(node); + } + } + if (node.parent.kind === 187) { + var binaryExpression = node.parent; + if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.left) && + (binaryExpression.right === node || + binaryExpression.operatorToken === node)) { + return spanInPreviousNode(node); + } + } + return spanInNode(node.parent); + } + } + function textSpanFromVariableDeclaration(variableDeclaration) { + var declarations = variableDeclaration.parent.declarations; + if (declarations && declarations[0] === variableDeclaration) { + return textSpan(ts.findPrecedingToken(variableDeclaration.pos, sourceFile, variableDeclaration.parent), variableDeclaration); + } + else { + return textSpan(variableDeclaration); + } + } + function spanInVariableDeclaration(variableDeclaration) { + if (variableDeclaration.parent.parent.kind === 207) { + return spanInNode(variableDeclaration.parent.parent); + } + if (ts.isBindingPattern(variableDeclaration.name)) { + return spanInBindingPattern(variableDeclaration.name); + } + if (variableDeclaration.initializer || + (variableDeclaration.flags & 1) || + variableDeclaration.parent.parent.kind === 208) { + return textSpanFromVariableDeclaration(variableDeclaration); + } + var declarations = variableDeclaration.parent.declarations; + if (declarations && declarations[0] !== variableDeclaration) { + return spanInNode(ts.findPrecedingToken(variableDeclaration.pos, sourceFile, variableDeclaration.parent)); + } + } + function canHaveSpanInParameterDeclaration(parameter) { + return !!parameter.initializer || parameter.dotDotDotToken !== undefined || + !!(parameter.flags & 4) || !!(parameter.flags & 8); + } + function spanInParameterDeclaration(parameter) { + if (ts.isBindingPattern(parameter.name)) { + return spanInBindingPattern(parameter.name); + } + else if (canHaveSpanInParameterDeclaration(parameter)) { + return textSpan(parameter); + } + else { + var functionDeclaration = parameter.parent; + var indexOfParameter = ts.indexOf(functionDeclaration.parameters, parameter); + if (indexOfParameter) { + return spanInParameterDeclaration(functionDeclaration.parameters[indexOfParameter - 1]); + } + else { + return spanInNode(functionDeclaration.body); + } + } + } + function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) { + return !!(functionDeclaration.flags & 1) || + (functionDeclaration.parent.kind === 221 && functionDeclaration.kind !== 148); + } + function spanInFunctionDeclaration(functionDeclaration) { + if (!functionDeclaration.body) { + return undefined; + } + if (canFunctionHaveSpanInWholeDeclaration(functionDeclaration)) { + return textSpan(functionDeclaration); + } + return spanInNode(functionDeclaration.body); + } + function spanInFunctionBlock(block) { + var nodeForSpanInBlock = block.statements.length ? block.statements[0] : block.getLastToken(); + if (canFunctionHaveSpanInWholeDeclaration(block.parent)) { + return spanInNodeIfStartsOnSameLine(block.parent, nodeForSpanInBlock); + } + return spanInNode(nodeForSpanInBlock); + } + function spanInBlock(block) { + switch (block.parent.kind) { + case 225: + if (ts.getModuleInstanceState(block.parent) !== 1) { + return undefined; + } + case 205: + case 203: + case 207: + return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]); + case 206: + case 208: + return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]); + } + return spanInNode(block.statements[0]); + } + function spanInInitializerOfForLike(forLikeStatement) { + if (forLikeStatement.initializer.kind === 219) { + var variableDeclarationList = forLikeStatement.initializer; + if (variableDeclarationList.declarations.length > 0) { + return spanInNode(variableDeclarationList.declarations[0]); + } + } + else { + return spanInNode(forLikeStatement.initializer); + } + } + function spanInForStatement(forStatement) { + if (forStatement.initializer) { + return spanInInitializerOfForLike(forStatement); + } + if (forStatement.condition) { + return textSpan(forStatement.condition); + } + if (forStatement.incrementor) { + return textSpan(forStatement.incrementor); + } + } + function spanInBindingPattern(bindingPattern) { + var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 193 ? element : undefined; }); + if (firstBindingElement) { + return spanInNode(firstBindingElement); + } + if (bindingPattern.parent.kind === 169) { + return textSpan(bindingPattern.parent); + } + return textSpanFromVariableDeclaration(bindingPattern.parent); + } + function spanInArrayLiteralOrObjectLiteralDestructuringPattern(node) { + ts.Debug.assert(node.kind !== 168 && node.kind !== 167); + var elements = node.kind === 170 ? + node.elements : + node.properties; + var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 193 ? element : undefined; }); + if (firstBindingElement) { + return spanInNode(firstBindingElement); + } + return textSpan(node.parent.kind === 187 ? node.parent : node); + } + function spanInOpenBraceToken(node) { + switch (node.parent.kind) { + case 224: + var enumDeclaration = node.parent; + return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile)); + case 221: + var classDeclaration = node.parent; + return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile)); + case 227: + return spanInNodeIfStartsOnSameLine(node.parent.parent, node.parent.clauses[0]); + } + return spanInNode(node.parent); + } + function spanInCloseBraceToken(node) { + switch (node.parent.kind) { + case 226: + if (ts.getModuleInstanceState(node.parent.parent) !== 1) { + return undefined; + } + case 224: + case 221: + return textSpan(node); + case 199: + if (ts.isFunctionBlock(node.parent)) { + return textSpan(node); + } + case 252: + return spanInNode(ts.lastOrUndefined(node.parent.statements)); + case 227: + var caseBlock = node.parent; + var lastClause = ts.lastOrUndefined(caseBlock.clauses); + if (lastClause) { + return spanInNode(ts.lastOrUndefined(lastClause.statements)); + } + return undefined; + case 167: + var bindingPattern = node.parent; + return spanInNode(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern); + default: + if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) { + var objectLiteral = node.parent; + return textSpan(ts.lastOrUndefined(objectLiteral.properties) || objectLiteral); + } + return spanInNode(node.parent); + } + } + function spanInCloseBracketToken(node) { + switch (node.parent.kind) { + case 168: + var bindingPattern = node.parent; + return textSpan(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern); + default: + if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) { + var arrayLiteral = node.parent; + return textSpan(ts.lastOrUndefined(arrayLiteral.elements) || arrayLiteral); + } + return spanInNode(node.parent); + } + } + function spanInOpenParenToken(node) { + if (node.parent.kind === 204 || + node.parent.kind === 174 || + node.parent.kind === 175) { + return spanInPreviousNode(node); + } + if (node.parent.kind === 178) { + return spanInNextNode(node); + } + return spanInNode(node.parent); + } + function spanInCloseParenToken(node) { + switch (node.parent.kind) { + case 179: + case 220: + case 180: + case 147: + case 146: + case 149: + case 150: + case 148: + case 205: + case 204: + case 206: + case 208: + case 174: + case 175: + case 178: + return spanInPreviousNode(node); + default: + return spanInNode(node.parent); + } + } + function spanInColonToken(node) { + if (ts.isFunctionLike(node.parent) || + node.parent.kind === 253 || + node.parent.kind === 142) { + return spanInPreviousNode(node); + } + return spanInNode(node.parent); + } + function spanInGreaterThanOrLessThanToken(node) { + if (node.parent.kind === 177) { + return spanInNextNode(node); + } + return spanInNode(node.parent); + } + function spanInWhileKeyword(node) { + if (node.parent.kind === 204) { + return textSpanEndingAtNextToken(node, node.parent.expression); + } + return spanInNode(node.parent); + } + function spanInOfKeyword(node) { + if (node.parent.kind === 208) { + return spanInNextNode(node); + } + return spanInNode(node.parent); + } + } + } + BreakpointResolver.spanInSourceFileAtLocation = spanInSourceFileAtLocation; + })(BreakpointResolver = ts.BreakpointResolver || (ts.BreakpointResolver = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var OutliningElementsCollector; + (function (OutliningElementsCollector) { + function collectElements(sourceFile) { + var elements = []; + var collapseText = "..."; + function addOutliningSpan(hintSpanNode, startElement, endElement, autoCollapse) { + if (hintSpanNode && startElement && endElement) { + var span = { + textSpan: ts.createTextSpanFromBounds(startElement.pos, endElement.end), + hintSpan: ts.createTextSpanFromBounds(hintSpanNode.getStart(), hintSpanNode.end), + bannerText: collapseText, + autoCollapse: autoCollapse + }; + elements.push(span); + } + } + function addOutliningSpanComments(commentSpan, autoCollapse) { + if (commentSpan) { + var span = { + textSpan: ts.createTextSpanFromBounds(commentSpan.pos, commentSpan.end), + hintSpan: ts.createTextSpanFromBounds(commentSpan.pos, commentSpan.end), + bannerText: collapseText, + autoCollapse: autoCollapse + }; + elements.push(span); + } + } + function addOutliningForLeadingCommentsForNode(n) { + var comments = ts.getLeadingCommentRangesOfNode(n, sourceFile); + if (comments) { + var firstSingleLineCommentStart = -1; + var lastSingleLineCommentEnd = -1; + var isFirstSingleLineComment = true; + var singleLineCommentCount = 0; + for (var _i = 0, comments_2 = comments; _i < comments_2.length; _i++) { + var currentComment = comments_2[_i]; + if (currentComment.kind === 2) { + if (isFirstSingleLineComment) { + firstSingleLineCommentStart = currentComment.pos; + } + isFirstSingleLineComment = false; + lastSingleLineCommentEnd = currentComment.end; + singleLineCommentCount++; + } + else if (currentComment.kind === 3) { + combineAndAddMultipleSingleLineComments(singleLineCommentCount, firstSingleLineCommentStart, lastSingleLineCommentEnd); + addOutliningSpanComments(currentComment, false); + singleLineCommentCount = 0; + lastSingleLineCommentEnd = -1; + isFirstSingleLineComment = true; + } + } + combineAndAddMultipleSingleLineComments(singleLineCommentCount, firstSingleLineCommentStart, lastSingleLineCommentEnd); + } + } + function combineAndAddMultipleSingleLineComments(count, start, end) { + if (count > 1) { + var multipleSingleLineComments = { + pos: start, + end: end, + kind: 2 + }; + addOutliningSpanComments(multipleSingleLineComments, false); + } + } + function autoCollapse(node) { + return ts.isFunctionBlock(node) && node.parent.kind !== 180; + } + var depth = 0; + var maxDepth = 20; + function walk(n) { + if (depth > maxDepth) { + return; + } + if (ts.isDeclaration(n)) { + addOutliningForLeadingCommentsForNode(n); + } + switch (n.kind) { + case 199: + if (!ts.isFunctionBlock(n)) { + var parent_14 = n.parent; + var openBrace = ts.findChildOfKind(n, 15, sourceFile); + var closeBrace = ts.findChildOfKind(n, 16, sourceFile); + if (parent_14.kind === 204 || + parent_14.kind === 207 || + parent_14.kind === 208 || + parent_14.kind === 206 || + parent_14.kind === 203 || + parent_14.kind === 205 || + parent_14.kind === 212 || + parent_14.kind === 252) { + addOutliningSpan(parent_14, openBrace, closeBrace, autoCollapse(n)); + break; + } + if (parent_14.kind === 216) { + var tryStatement = parent_14; + if (tryStatement.tryBlock === n) { + addOutliningSpan(parent_14, openBrace, closeBrace, autoCollapse(n)); + break; + } + else if (tryStatement.finallyBlock === n) { + var finallyKeyword = ts.findChildOfKind(tryStatement, 85, sourceFile); + if (finallyKeyword) { + addOutliningSpan(finallyKeyword, openBrace, closeBrace, autoCollapse(n)); + break; + } + } + } + var span = ts.createTextSpanFromBounds(n.getStart(), n.end); + elements.push({ + textSpan: span, + hintSpan: span, + bannerText: collapseText, + autoCollapse: autoCollapse(n) + }); + break; + } + case 226: { + var openBrace = ts.findChildOfKind(n, 15, sourceFile); + var closeBrace = ts.findChildOfKind(n, 16, sourceFile); + addOutliningSpan(n.parent, openBrace, closeBrace, autoCollapse(n)); + break; + } + case 221: + case 222: + case 224: + case 171: + case 227: { + var openBrace = ts.findChildOfKind(n, 15, sourceFile); + var closeBrace = ts.findChildOfKind(n, 16, sourceFile); + addOutliningSpan(n, openBrace, closeBrace, autoCollapse(n)); + break; + } + case 170: + var openBracket = ts.findChildOfKind(n, 19, sourceFile); + var closeBracket = ts.findChildOfKind(n, 20, sourceFile); + addOutliningSpan(n, openBracket, closeBracket, autoCollapse(n)); + break; + } + depth++; + ts.forEachChild(n, walk); + depth--; + } + walk(sourceFile); + return elements; + } + OutliningElementsCollector.collectElements = collectElements; + })(OutliningElementsCollector = ts.OutliningElementsCollector || (ts.OutliningElementsCollector = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var NavigateTo; + (function (NavigateTo) { + function getNavigateToItems(program, cancellationToken, searchValue, maxResultCount) { + var patternMatcher = ts.createPatternMatcher(searchValue); + var rawItems = []; + var baseSensitivity = { sensitivity: "base" }; + ts.forEach(program.getSourceFiles(), function (sourceFile) { + cancellationToken.throwIfCancellationRequested(); + var nameToDeclarations = sourceFile.getNamedDeclarations(); + for (var name_34 in nameToDeclarations) { + var declarations = ts.getProperty(nameToDeclarations, name_34); + if (declarations) { + var matches = patternMatcher.getMatchesForLastSegmentOfPattern(name_34); + if (!matches) { + continue; + } + for (var _i = 0, declarations_7 = declarations; _i < declarations_7.length; _i++) { + var declaration = declarations_7[_i]; + if (patternMatcher.patternContainsDots) { + var containers = getContainers(declaration); + if (!containers) { + return undefined; + } + matches = patternMatcher.getMatches(containers, name_34); + if (!matches) { + continue; + } + } + var fileName = sourceFile.fileName; + var matchKind = bestMatchKind(matches); + rawItems.push({ name: name_34, fileName: fileName, matchKind: matchKind, isCaseSensitive: allMatchesAreCaseSensitive(matches), declaration: declaration }); + } + } + } + }); + rawItems.sort(compareNavigateToItems); + if (maxResultCount !== undefined) { + rawItems = rawItems.slice(0, maxResultCount); + } + var items = ts.map(rawItems, createNavigateToItem); + return items; + function allMatchesAreCaseSensitive(matches) { + ts.Debug.assert(matches.length > 0); + for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) { + var match = matches_1[_i]; + if (!match.isCaseSensitive) { + return false; + } + } + return true; + } + function getTextOfIdentifierOrLiteral(node) { + if (node) { + if (node.kind === 69 || + node.kind === 9 || + node.kind === 8) { + return node.text; + } + } + return undefined; + } + function tryAddSingleDeclarationName(declaration, containers) { + if (declaration && declaration.name) { + var text = getTextOfIdentifierOrLiteral(declaration.name); + if (text !== undefined) { + containers.unshift(text); + } + else if (declaration.name.kind === 140) { + return tryAddComputedPropertyName(declaration.name.expression, containers, true); + } + else { + return false; + } + } + return true; + } + function tryAddComputedPropertyName(expression, containers, includeLastPortion) { + var text = getTextOfIdentifierOrLiteral(expression); + if (text !== undefined) { + if (includeLastPortion) { + containers.unshift(text); + } + return true; + } + if (expression.kind === 172) { + var propertyAccess = expression; + if (includeLastPortion) { + containers.unshift(propertyAccess.name.text); + } + return tryAddComputedPropertyName(propertyAccess.expression, containers, true); + } + return false; + } + function getContainers(declaration) { + var containers = []; + if (declaration.name.kind === 140) { + if (!tryAddComputedPropertyName(declaration.name.expression, containers, false)) { + return undefined; + } + } + declaration = ts.getContainerNode(declaration); + while (declaration) { + if (!tryAddSingleDeclarationName(declaration, containers)) { + return undefined; + } + declaration = ts.getContainerNode(declaration); + } + return containers; + } + function bestMatchKind(matches) { + ts.Debug.assert(matches.length > 0); + var bestMatchKind = ts.PatternMatchKind.camelCase; + for (var _i = 0, matches_2 = matches; _i < matches_2.length; _i++) { + var match = matches_2[_i]; + var kind = match.kind; + if (kind < bestMatchKind) { + bestMatchKind = kind; + } + } + return bestMatchKind; + } + function compareNavigateToItems(i1, i2) { + return i1.matchKind - i2.matchKind || + i1.name.localeCompare(i2.name, undefined, baseSensitivity) || + i1.name.localeCompare(i2.name); + } + function createNavigateToItem(rawItem) { + var declaration = rawItem.declaration; + var container = ts.getContainerNode(declaration); + return { + name: rawItem.name, + kind: ts.getNodeKind(declaration), + kindModifiers: ts.getNodeModifiers(declaration), + matchKind: ts.PatternMatchKind[rawItem.matchKind], + isCaseSensitive: rawItem.isCaseSensitive, + fileName: rawItem.fileName, + textSpan: ts.createTextSpanFromBounds(declaration.getStart(), declaration.getEnd()), + containerName: container && container.name ? container.name.text : "", + containerKind: container && container.name ? ts.getNodeKind(container) : "" + }; + } + } + NavigateTo.getNavigateToItems = getNavigateToItems; + })(NavigateTo = ts.NavigateTo || (ts.NavigateTo = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var NavigationBar; + (function (NavigationBar) { + function getNavigationBarItems(sourceFile, compilerOptions) { + if (ts.isSourceFileJavaScript(sourceFile)) { + return getJsNavigationBarItems(sourceFile, compilerOptions); + } + var hasGlobalNode = false; + return getItemsWorker(getTopLevelNodes(sourceFile), createTopLevelItem); + function getIndent(node) { + var indent = hasGlobalNode ? 1 : 0; + var current = node.parent; + while (current) { + switch (current.kind) { + case 225: + do { + current = current.parent; + } while (current.kind === 225); + case 221: + case 224: + case 222: + case 220: + indent++; + } + current = current.parent; + } + return indent; + } + function getChildNodes(nodes) { + var childNodes = []; + function visit(node) { + switch (node.kind) { + case 200: + ts.forEach(node.declarationList.declarations, visit); + break; + case 167: + case 168: + ts.forEach(node.elements, visit); + break; + case 236: + if (node.exportClause) { + ts.forEach(node.exportClause.elements, visit); + } + break; + case 230: + var importClause = node.importClause; + if (importClause) { + if (importClause.name) { + childNodes.push(importClause); + } + if (importClause.namedBindings) { + if (importClause.namedBindings.kind === 232) { + childNodes.push(importClause.namedBindings); + } + else { + ts.forEach(importClause.namedBindings.elements, visit); + } + } + } + break; + case 169: + case 218: + if (ts.isBindingPattern(node.name)) { + visit(node.name); + break; + } + case 221: + case 224: + case 222: + case 225: + case 220: + case 229: + case 234: + case 238: + childNodes.push(node); + break; + } + } + ts.forEach(nodes, visit); + return sortNodes(childNodes); + } + function getTopLevelNodes(node) { + var topLevelNodes = []; + topLevelNodes.push(node); + addTopLevelNodes(node.statements, topLevelNodes); + return topLevelNodes; + } + function sortNodes(nodes) { + return nodes.slice(0).sort(function (n1, n2) { + if (n1.name && n2.name) { + return ts.getPropertyNameForPropertyNameNode(n1.name).localeCompare(ts.getPropertyNameForPropertyNameNode(n2.name)); + } + else if (n1.name) { + return 1; + } + else if (n2.name) { + return -1; + } + else { + return n1.kind - n2.kind; + } + }); + } + function addTopLevelNodes(nodes, topLevelNodes) { + nodes = sortNodes(nodes); + for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) { + var node = nodes_4[_i]; + switch (node.kind) { + case 221: + topLevelNodes.push(node); + for (var _a = 0, _b = node.members; _a < _b.length; _a++) { + var member = _b[_a]; + if (member.kind === 147 || member.kind === 148) { + if (member.body) { + if (hasNamedFunctionDeclarations(member.body.statements)) { + topLevelNodes.push(member); + } + addTopLevelNodes(member.body.statements, topLevelNodes); + } + } + } + break; + case 224: + case 222: + case 223: + topLevelNodes.push(node); + break; + case 225: + var moduleDeclaration = node; + topLevelNodes.push(node); + addTopLevelNodes(getInnermostModule(moduleDeclaration).body.statements, topLevelNodes); + break; + case 220: + var functionDeclaration = node; + if (isTopLevelFunctionDeclaration(functionDeclaration)) { + topLevelNodes.push(node); + addTopLevelNodes(functionDeclaration.body.statements, topLevelNodes); + } + break; + } + } + } + function hasNamedFunctionDeclarations(nodes) { + for (var _i = 0, nodes_5 = nodes; _i < nodes_5.length; _i++) { + var s = nodes_5[_i]; + if (s.kind === 220 && !isEmpty(s.name.text)) { + return true; + } + } + return false; + } + function isTopLevelFunctionDeclaration(functionDeclaration) { + if (functionDeclaration.kind === 220) { + if (functionDeclaration.body && functionDeclaration.body.kind === 199) { + if (hasNamedFunctionDeclarations(functionDeclaration.body.statements)) { + return true; + } + if (!ts.isFunctionBlock(functionDeclaration.parent)) { + return true; + } + else { + var grandParentKind = functionDeclaration.parent.parent.kind; + if (grandParentKind === 147 || + grandParentKind === 148) { + return true; + } + } + } + } + return false; + } + function getItemsWorker(nodes, createItem) { + var items = []; + var keyToItem = {}; + for (var _i = 0, nodes_6 = nodes; _i < nodes_6.length; _i++) { + var child = nodes_6[_i]; + var item = createItem(child); + if (item !== undefined) { + if (item.text.length > 0) { + var key = item.text + "-" + item.kind + "-" + item.indent; + var itemWithSameName = keyToItem[key]; + if (itemWithSameName) { + merge(itemWithSameName, item); + } + else { + keyToItem[key] = item; + items.push(item); + } + } + } + } + return items; + } + function merge(target, source) { + ts.addRange(target.spans, source.spans); + if (source.childItems) { + if (!target.childItems) { + target.childItems = []; + } + outer: for (var _i = 0, _a = source.childItems; _i < _a.length; _i++) { + var sourceChild = _a[_i]; + for (var _b = 0, _c = target.childItems; _b < _c.length; _b++) { + var targetChild = _c[_b]; + if (targetChild.text === sourceChild.text && targetChild.kind === sourceChild.kind) { + merge(targetChild, sourceChild); + continue outer; + } + } + target.childItems.push(sourceChild); + } + } + } + function createChildItem(node) { + switch (node.kind) { + case 142: + if (ts.isBindingPattern(node.name)) { + break; + } + if ((node.flags & 1023) === 0) { + return undefined; + } + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); + case 147: + case 146: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberFunctionElement); + case 149: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberGetAccessorElement); + case 150: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberSetAccessorElement); + case 153: + return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); + case 255: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); + case 151: + return createItem(node, "()", ts.ScriptElementKind.callSignatureElement); + case 152: + return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); + case 145: + case 144: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); + case 220: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.functionElement); + case 218: + case 169: + var variableDeclarationNode = void 0; + var name_35; + if (node.kind === 169) { + name_35 = node.name; + variableDeclarationNode = node; + while (variableDeclarationNode && variableDeclarationNode.kind !== 218) { + variableDeclarationNode = variableDeclarationNode.parent; + } + ts.Debug.assert(variableDeclarationNode !== undefined); + } + else { + ts.Debug.assert(!ts.isBindingPattern(node.name)); + variableDeclarationNode = node; + name_35 = node.name; + } + if (ts.isConst(variableDeclarationNode)) { + return createItem(node, getTextOfNode(name_35), ts.ScriptElementKind.constElement); + } + else if (ts.isLet(variableDeclarationNode)) { + return createItem(node, getTextOfNode(name_35), ts.ScriptElementKind.letElement); + } + else { + return createItem(node, getTextOfNode(name_35), ts.ScriptElementKind.variableElement); + } + case 148: + return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); + case 238: + case 234: + case 229: + case 231: + case 232: + return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.alias); + } + return undefined; + function createItem(node, name, scriptElementKind) { + return getNavigationBarItem(name, scriptElementKind, ts.getNodeModifiers(node), [getNodeSpan(node)]); + } + } + function isEmpty(text) { + return !text || text.trim() === ""; + } + function getNavigationBarItem(text, kind, kindModifiers, spans, childItems, indent) { + if (childItems === void 0) { childItems = []; } + if (indent === void 0) { indent = 0; } + if (isEmpty(text)) { + return undefined; + } + return { + text: text, + kind: kind, + kindModifiers: kindModifiers, + spans: spans, + childItems: childItems, + indent: indent, + bolded: false, + grayed: false + }; + } + function createTopLevelItem(node) { + switch (node.kind) { + case 256: + return createSourceFileItem(node); + case 221: + return createClassItem(node); + case 147: + case 148: + return createMemberFunctionLikeItem(node); + case 224: + return createEnumItem(node); + case 222: + return createInterfaceItem(node); + case 225: + return createModuleItem(node); + case 220: + return createFunctionItem(node); + case 223: + return createTypeAliasItem(node); + } + return undefined; + function getModuleName(moduleDeclaration) { + if (ts.isAmbientModule(moduleDeclaration)) { + return getTextOfNode(moduleDeclaration.name); + } + var result = []; + result.push(moduleDeclaration.name.text); + while (moduleDeclaration.body && moduleDeclaration.body.kind === 225) { + moduleDeclaration = moduleDeclaration.body; + result.push(moduleDeclaration.name.text); + } + return result.join("."); + } + function createModuleItem(node) { + var moduleName = getModuleName(node); + var childItems = getItemsWorker(getChildNodes(getInnermostModule(node).body.statements), createChildItem); + return getNavigationBarItem(moduleName, ts.ScriptElementKind.moduleElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); + } + function createFunctionItem(node) { + if (node.body && node.body.kind === 199) { + var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem); + return getNavigationBarItem(!node.name ? "default" : node.name.text, ts.ScriptElementKind.functionElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); + } + return undefined; + } + function createTypeAliasItem(node) { + return getNavigationBarItem(node.name.text, ts.ScriptElementKind.typeElement, ts.getNodeModifiers(node), [getNodeSpan(node)], [], getIndent(node)); + } + function createMemberFunctionLikeItem(node) { + if (node.body && node.body.kind === 199) { + var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem); + var scriptElementKind = void 0; + var memberFunctionName = void 0; + if (node.kind === 147) { + memberFunctionName = ts.getPropertyNameForPropertyNameNode(node.name); + scriptElementKind = ts.ScriptElementKind.memberFunctionElement; + } + else { + memberFunctionName = "constructor"; + scriptElementKind = ts.ScriptElementKind.constructorImplementationElement; + } + return getNavigationBarItem(memberFunctionName, scriptElementKind, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); + } + return undefined; + } + function createSourceFileItem(node) { + var childItems = getItemsWorker(getChildNodes(node.statements), createChildItem); + if (childItems === undefined || childItems.length === 0) { + return undefined; + } + hasGlobalNode = true; + var rootName = ts.isExternalModule(node) + ? "\"" + ts.escapeString(ts.getBaseFileName(ts.removeFileExtension(ts.normalizePath(node.fileName)))) + "\"" + : ""; + return getNavigationBarItem(rootName, ts.ScriptElementKind.moduleElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)], childItems); + } + function createClassItem(node) { + var childItems; + if (node.members) { + var constructor = ts.forEach(node.members, function (member) { + return member.kind === 148 && member; + }); + var nodes = removeDynamicallyNamedProperties(node); + if (constructor) { + ts.addRange(nodes, ts.filter(constructor.parameters, function (p) { return !ts.isBindingPattern(p.name); })); + } + childItems = getItemsWorker(sortNodes(nodes), createChildItem); + } + var nodeName = !node.name ? "default" : node.name.text; + return getNavigationBarItem(nodeName, ts.ScriptElementKind.classElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); + } + function createEnumItem(node) { + var childItems = getItemsWorker(sortNodes(removeComputedProperties(node)), createChildItem); + return getNavigationBarItem(node.name.text, ts.ScriptElementKind.enumElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); + } + function createInterfaceItem(node) { + var childItems = getItemsWorker(sortNodes(removeDynamicallyNamedProperties(node)), createChildItem); + return getNavigationBarItem(node.name.text, ts.ScriptElementKind.interfaceElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); + } + } + function removeComputedProperties(node) { + return ts.filter(node.members, function (member) { return member.name === undefined || member.name.kind !== 140; }); + } + function removeDynamicallyNamedProperties(node) { + return ts.filter(node.members, function (member) { return !ts.hasDynamicName(member); }); + } + function getInnermostModule(node) { + while (node.body.kind === 225) { + node = node.body; + } + return node; + } + function getNodeSpan(node) { + return node.kind === 256 + ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) + : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); + } + function getTextOfNode(node) { + return ts.getTextOfNodeFromSourceText(sourceFile.text, node); + } + } + NavigationBar.getNavigationBarItems = getNavigationBarItems; + function getJsNavigationBarItems(sourceFile, compilerOptions) { + var anonFnText = ""; + var anonClassText = ""; + var indent = 0; + var rootName = ts.isExternalModule(sourceFile) ? + "\"" + ts.escapeString(ts.getBaseFileName(ts.removeFileExtension(ts.normalizePath(sourceFile.fileName)))) + "\"" + : ""; + var sourceFileItem = getNavBarItem(rootName, ts.ScriptElementKind.moduleElement, [getNodeSpan(sourceFile)]); + var topItem = sourceFileItem; + ts.forEachChild(sourceFile, visitNode); + function visitNode(node) { + var newItem = createNavBarItem(node); + if (newItem) { + topItem.childItems.push(newItem); + } + if (newItem && (ts.isFunctionLike(node) || ts.isClassLike(node))) { + var lastTop = topItem; + indent++; + topItem = newItem; + ts.forEachChild(node, visitNode); + topItem = lastTop; + indent--; + if (newItem && newItem.text === anonFnText && newItem.childItems.length === 0) { + topItem.childItems.pop(); + } + } + else { + ts.forEachChild(node, visitNode); + } + } + function createNavBarItem(node) { + switch (node.kind) { + case 218: + if (node.parent.parent + .parent.kind !== 256) { + return undefined; + } + var varDecl = node; + if (varDecl.initializer && (varDecl.initializer.kind === 179 || + varDecl.initializer.kind === 180 || + varDecl.initializer.kind === 192)) { + return undefined; + } + case 220: + case 221: + case 148: + case 149: + case 150: + var name_36 = node.flags && (node.flags & 512) && !node.name ? "default" : + node.kind === 148 ? "constructor" : + ts.declarationNameToString(node.name); + return getNavBarItem(name_36, getScriptKindForElementKind(node.kind), [getNodeSpan(node)]); + case 179: + case 180: + case 192: + return getDefineModuleItem(node) || getFunctionOrClassExpressionItem(node); + case 147: + var methodDecl = node; + return getNavBarItem(ts.declarationNameToString(methodDecl.name), ts.ScriptElementKind.memberFunctionElement, [getNodeSpan(node)]); + case 235: + return getNavBarItem("default", ts.ScriptElementKind.variableElement, [getNodeSpan(node)]); + case 231: + if (!node.name) { + return undefined; + } + case 234: + case 232: + case 238: + if (node.kind === 238) { + if (!node.parent.parent.moduleSpecifier && !node.propertyName) { + return undefined; + } + } + var decl = node; + if (!decl.name) { + return undefined; + } + var declName = ts.declarationNameToString(decl.name); + return getNavBarItem(declName, ts.ScriptElementKind.constElement, [getNodeSpan(node)]); + default: + return undefined; + } + } + function getNavBarItem(text, kind, spans, kindModifiers) { + if (kindModifiers === void 0) { kindModifiers = ts.ScriptElementKindModifier.none; } + return { + text: text, kind: kind, kindModifiers: kindModifiers, spans: spans, childItems: [], indent: indent, bolded: false, grayed: false + }; + } + function getDefineModuleItem(node) { + if (node.kind !== 179 && node.kind !== 180) { + return undefined; + } + if (node.parent.kind !== 174) { + return undefined; + } + var callExpr = node.parent; + if (callExpr.expression.kind !== 69 || callExpr.expression.getText() !== "define") { + return undefined; + } + var defaultName = node.getSourceFile().fileName; + if (callExpr.arguments[0].kind === 9) { + defaultName = (callExpr.arguments[0]).text; + } + return getNavBarItem(defaultName, ts.ScriptElementKind.moduleElement, [getNodeSpan(node.parent)]); + } + function getFunctionOrClassExpressionItem(node) { + if (node.kind !== 179 && + node.kind !== 180 && + node.kind !== 192) { + return undefined; + } + var fnExpr = node; + var fnName; + if (fnExpr.name && ts.getFullWidth(fnExpr.name) > 0) { + fnName = ts.declarationNameToString(fnExpr.name); + } + else { + if (fnExpr.parent.kind === 218) { + fnName = ts.declarationNameToString(fnExpr.parent.name); + } + else if (fnExpr.parent.kind === 187 && + fnExpr.parent.operatorToken.kind === 56) { + fnName = fnExpr.parent.left.getText(); + } + else if (fnExpr.parent.kind === 253 && + fnExpr.parent.name) { + fnName = fnExpr.parent.name.getText(); + } + else { + fnName = node.kind === 192 ? anonClassText : anonFnText; + } + } + var scriptKind = node.kind === 192 ? ts.ScriptElementKind.classElement : ts.ScriptElementKind.functionElement; + return getNavBarItem(fnName, scriptKind, [getNodeSpan(node)]); + } + function getNodeSpan(node) { + return node.kind === 256 + ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) + : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); + } + function getScriptKindForElementKind(kind) { + switch (kind) { + case 218: + return ts.ScriptElementKind.variableElement; + case 220: + return ts.ScriptElementKind.functionElement; + case 221: + return ts.ScriptElementKind.classElement; + case 148: + return ts.ScriptElementKind.constructorImplementationElement; + case 149: + return ts.ScriptElementKind.memberGetAccessorElement; + case 150: + return ts.ScriptElementKind.memberSetAccessorElement; + default: + return "unknown"; + } + } + return sourceFileItem.childItems; + } + NavigationBar.getJsNavigationBarItems = getJsNavigationBarItems; + })(NavigationBar = ts.NavigationBar || (ts.NavigationBar = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + (function (PatternMatchKind) { + PatternMatchKind[PatternMatchKind["exact"] = 0] = "exact"; + PatternMatchKind[PatternMatchKind["prefix"] = 1] = "prefix"; + PatternMatchKind[PatternMatchKind["substring"] = 2] = "substring"; + PatternMatchKind[PatternMatchKind["camelCase"] = 3] = "camelCase"; + })(ts.PatternMatchKind || (ts.PatternMatchKind = {})); + var PatternMatchKind = ts.PatternMatchKind; + function createPatternMatch(kind, punctuationStripped, isCaseSensitive, camelCaseWeight) { + return { + kind: kind, + punctuationStripped: punctuationStripped, + isCaseSensitive: isCaseSensitive, + camelCaseWeight: camelCaseWeight + }; + } + function createPatternMatcher(pattern) { + var stringToWordSpans = {}; + pattern = pattern.trim(); + var dotSeparatedSegments = pattern.split(".").map(function (p) { return createSegment(p.trim()); }); + var invalidPattern = dotSeparatedSegments.length === 0 || ts.forEach(dotSeparatedSegments, segmentIsInvalid); + return { + getMatches: getMatches, + getMatchesForLastSegmentOfPattern: getMatchesForLastSegmentOfPattern, + patternContainsDots: dotSeparatedSegments.length > 1 + }; + function skipMatch(candidate) { + return invalidPattern || !candidate; + } + function getMatchesForLastSegmentOfPattern(candidate) { + if (skipMatch(candidate)) { + return undefined; + } + return matchSegment(candidate, ts.lastOrUndefined(dotSeparatedSegments)); + } + function getMatches(candidateContainers, candidate) { + if (skipMatch(candidate)) { + return undefined; + } + var candidateMatch = matchSegment(candidate, ts.lastOrUndefined(dotSeparatedSegments)); + if (!candidateMatch) { + return undefined; + } + candidateContainers = candidateContainers || []; + if (dotSeparatedSegments.length - 1 > candidateContainers.length) { + return undefined; + } + var totalMatch = candidateMatch; + for (var i = dotSeparatedSegments.length - 2, j = candidateContainers.length - 1; i >= 0; i -= 1, j -= 1) { + var segment = dotSeparatedSegments[i]; + var containerName = candidateContainers[j]; + var containerMatch = matchSegment(containerName, segment); + if (!containerMatch) { + return undefined; + } + ts.addRange(totalMatch, containerMatch); + } + return totalMatch; + } + function getWordSpans(word) { + if (!ts.hasProperty(stringToWordSpans, word)) { + stringToWordSpans[word] = breakIntoWordSpans(word); + } + return stringToWordSpans[word]; + } + function matchTextChunk(candidate, chunk, punctuationStripped) { + var index = indexOfIgnoringCase(candidate, chunk.textLowerCase); + if (index === 0) { + if (chunk.text.length === candidate.length) { + return createPatternMatch(PatternMatchKind.exact, punctuationStripped, candidate === chunk.text); + } + else { + return createPatternMatch(PatternMatchKind.prefix, punctuationStripped, startsWith(candidate, chunk.text)); + } + } + var isLowercase = chunk.isLowerCase; + if (isLowercase) { + if (index > 0) { + var wordSpans = getWordSpans(candidate); + for (var _i = 0, wordSpans_1 = wordSpans; _i < wordSpans_1.length; _i++) { + var span = wordSpans_1[_i]; + if (partStartsWith(candidate, span, chunk.text, true)) { + return createPatternMatch(PatternMatchKind.substring, punctuationStripped, partStartsWith(candidate, span, chunk.text, false)); + } + } + } + } + else { + if (candidate.indexOf(chunk.text) > 0) { + return createPatternMatch(PatternMatchKind.substring, punctuationStripped, true); + } + } + if (!isLowercase) { + if (chunk.characterSpans.length > 0) { + var candidateParts = getWordSpans(candidate); + var camelCaseWeight = tryCamelCaseMatch(candidate, candidateParts, chunk, false); + if (camelCaseWeight !== undefined) { + return createPatternMatch(PatternMatchKind.camelCase, punctuationStripped, true, camelCaseWeight); + } + camelCaseWeight = tryCamelCaseMatch(candidate, candidateParts, chunk, true); + if (camelCaseWeight !== undefined) { + return createPatternMatch(PatternMatchKind.camelCase, punctuationStripped, false, camelCaseWeight); + } + } + } + if (isLowercase) { + if (chunk.text.length < candidate.length) { + if (index > 0 && isUpperCaseLetter(candidate.charCodeAt(index))) { + return createPatternMatch(PatternMatchKind.substring, punctuationStripped, false); + } + } + } + return undefined; + } + function containsSpaceOrAsterisk(text) { + for (var i = 0; i < text.length; i++) { + var ch = text.charCodeAt(i); + if (ch === 32 || ch === 42) { + return true; + } + } + return false; + } + function matchSegment(candidate, segment) { + if (!containsSpaceOrAsterisk(segment.totalTextChunk.text)) { + var match = matchTextChunk(candidate, segment.totalTextChunk, false); + if (match) { + return [match]; + } + } + var subWordTextChunks = segment.subWordTextChunks; + var matches = undefined; + for (var _i = 0, subWordTextChunks_1 = subWordTextChunks; _i < subWordTextChunks_1.length; _i++) { + var subWordTextChunk = subWordTextChunks_1[_i]; + var result = matchTextChunk(candidate, subWordTextChunk, true); + if (!result) { + return undefined; + } + matches = matches || []; + matches.push(result); + } + return matches; + } + function partStartsWith(candidate, candidateSpan, pattern, ignoreCase, patternSpan) { + var patternPartStart = patternSpan ? patternSpan.start : 0; + var patternPartLength = patternSpan ? patternSpan.length : pattern.length; + if (patternPartLength > candidateSpan.length) { + return false; + } + if (ignoreCase) { + for (var i = 0; i < patternPartLength; i++) { + var ch1 = pattern.charCodeAt(patternPartStart + i); + var ch2 = candidate.charCodeAt(candidateSpan.start + i); + if (toLowerCase(ch1) !== toLowerCase(ch2)) { + return false; + } + } + } + else { + for (var i = 0; i < patternPartLength; i++) { + var ch1 = pattern.charCodeAt(patternPartStart + i); + var ch2 = candidate.charCodeAt(candidateSpan.start + i); + if (ch1 !== ch2) { + return false; + } + } + } + return true; + } + function tryCamelCaseMatch(candidate, candidateParts, chunk, ignoreCase) { + var chunkCharacterSpans = chunk.characterSpans; + var currentCandidate = 0; + var currentChunkSpan = 0; + var firstMatch = undefined; + var contiguous = undefined; + while (true) { + if (currentChunkSpan === chunkCharacterSpans.length) { + var weight = 0; + if (contiguous) { + weight += 1; + } + if (firstMatch === 0) { + weight += 2; + } + return weight; + } + else if (currentCandidate === candidateParts.length) { + return undefined; + } + var candidatePart = candidateParts[currentCandidate]; + var gotOneMatchThisCandidate = false; + for (; currentChunkSpan < chunkCharacterSpans.length; currentChunkSpan++) { + var chunkCharacterSpan = chunkCharacterSpans[currentChunkSpan]; + if (gotOneMatchThisCandidate) { + if (!isUpperCaseLetter(chunk.text.charCodeAt(chunkCharacterSpans[currentChunkSpan - 1].start)) || + !isUpperCaseLetter(chunk.text.charCodeAt(chunkCharacterSpans[currentChunkSpan].start))) { + break; + } + } + if (!partStartsWith(candidate, candidatePart, chunk.text, ignoreCase, chunkCharacterSpan)) { + break; + } + gotOneMatchThisCandidate = true; + firstMatch = firstMatch === undefined ? currentCandidate : firstMatch; + contiguous = contiguous === undefined ? true : contiguous; + candidatePart = ts.createTextSpan(candidatePart.start + chunkCharacterSpan.length, candidatePart.length - chunkCharacterSpan.length); + } + if (!gotOneMatchThisCandidate && contiguous !== undefined) { + contiguous = false; + } + currentCandidate++; + } + } + } + ts.createPatternMatcher = createPatternMatcher; + function createSegment(text) { + return { + totalTextChunk: createTextChunk(text), + subWordTextChunks: breakPatternIntoTextChunks(text) + }; + } + function segmentIsInvalid(segment) { + return segment.subWordTextChunks.length === 0; + } + function isUpperCaseLetter(ch) { + if (ch >= 65 && ch <= 90) { + return true; + } + if (ch < 127 || !ts.isUnicodeIdentifierStart(ch, 2)) { + return false; + } + var str = String.fromCharCode(ch); + return str === str.toUpperCase(); + } + function isLowerCaseLetter(ch) { + if (ch >= 97 && ch <= 122) { + return true; + } + if (ch < 127 || !ts.isUnicodeIdentifierStart(ch, 2)) { + return false; + } + var str = String.fromCharCode(ch); + return str === str.toLowerCase(); + } + function startsWith(string, search) { + for (var i = 0, n = search.length; i < n; i++) { + if (string.charCodeAt(i) !== search.charCodeAt(i)) { + return false; + } + } + return true; + } + function indexOfIgnoringCase(string, value) { + for (var i = 0, n = string.length - value.length; i <= n; i++) { + if (startsWithIgnoringCase(string, value, i)) { + return i; + } + } + return -1; + } + function startsWithIgnoringCase(string, value, start) { + for (var i = 0, n = value.length; i < n; i++) { + var ch1 = toLowerCase(string.charCodeAt(i + start)); + var ch2 = value.charCodeAt(i); + if (ch1 !== ch2) { + return false; + } + } + return true; + } + function toLowerCase(ch) { + if (ch >= 65 && ch <= 90) { + return 97 + (ch - 65); + } + if (ch < 127) { + return ch; + } + return String.fromCharCode(ch).toLowerCase().charCodeAt(0); + } + function isDigit(ch) { + return ch >= 48 && ch <= 57; + } + function isWordChar(ch) { + return isUpperCaseLetter(ch) || isLowerCaseLetter(ch) || isDigit(ch) || ch === 95 || ch === 36; + } + function breakPatternIntoTextChunks(pattern) { + var result = []; + var wordStart = 0; + var wordLength = 0; + for (var i = 0; i < pattern.length; i++) { + var ch = pattern.charCodeAt(i); + if (isWordChar(ch)) { + if (wordLength === 0) { + wordStart = i; + } + wordLength++; + } + else { + if (wordLength > 0) { + result.push(createTextChunk(pattern.substr(wordStart, wordLength))); + wordLength = 0; + } + } + } + if (wordLength > 0) { + result.push(createTextChunk(pattern.substr(wordStart, wordLength))); + } + return result; + } + function createTextChunk(text) { + var textLowerCase = text.toLowerCase(); + return { + text: text, + textLowerCase: textLowerCase, + isLowerCase: text === textLowerCase, + characterSpans: breakIntoCharacterSpans(text) + }; + } + function breakIntoCharacterSpans(identifier) { + return breakIntoSpans(identifier, false); + } + ts.breakIntoCharacterSpans = breakIntoCharacterSpans; + function breakIntoWordSpans(identifier) { + return breakIntoSpans(identifier, true); + } + ts.breakIntoWordSpans = breakIntoWordSpans; + function breakIntoSpans(identifier, word) { + var result = []; + var wordStart = 0; + for (var i = 1, n = identifier.length; i < n; i++) { + var lastIsDigit = isDigit(identifier.charCodeAt(i - 1)); + var currentIsDigit = isDigit(identifier.charCodeAt(i)); + var hasTransitionFromLowerToUpper = transitionFromLowerToUpper(identifier, word, i); + var hasTransitionFromUpperToLower = transitionFromUpperToLower(identifier, word, i, wordStart); + if (charIsPunctuation(identifier.charCodeAt(i - 1)) || + charIsPunctuation(identifier.charCodeAt(i)) || + lastIsDigit !== currentIsDigit || + hasTransitionFromLowerToUpper || + hasTransitionFromUpperToLower) { + if (!isAllPunctuation(identifier, wordStart, i)) { + result.push(ts.createTextSpan(wordStart, i - wordStart)); + } + wordStart = i; + } + } + if (!isAllPunctuation(identifier, wordStart, identifier.length)) { + result.push(ts.createTextSpan(wordStart, identifier.length - wordStart)); + } + return result; + } + function charIsPunctuation(ch) { + switch (ch) { + case 33: + case 34: + case 35: + case 37: + case 38: + case 39: + case 40: + case 41: + case 42: + case 44: + case 45: + case 46: + case 47: + case 58: + case 59: + case 63: + case 64: + case 91: + case 92: + case 93: + case 95: + case 123: + case 125: + return true; + } + return false; + } + function isAllPunctuation(identifier, start, end) { + for (var i = start; i < end; i++) { + var ch = identifier.charCodeAt(i); + if (!charIsPunctuation(ch) || ch === 95 || ch === 36) { + return false; + } + } + return true; + } + function transitionFromUpperToLower(identifier, word, index, wordStart) { + if (word) { + if (index !== wordStart && + index + 1 < identifier.length) { + var currentIsUpper = isUpperCaseLetter(identifier.charCodeAt(index)); + var nextIsLower = isLowerCaseLetter(identifier.charCodeAt(index + 1)); + if (currentIsUpper && nextIsLower) { + for (var i = wordStart; i < index; i++) { + if (!isUpperCaseLetter(identifier.charCodeAt(i))) { + return false; + } + } + return true; + } + } + } + return false; + } + function transitionFromLowerToUpper(identifier, word, index) { + var lastIsUpper = isUpperCaseLetter(identifier.charCodeAt(index - 1)); + var currentIsUpper = isUpperCaseLetter(identifier.charCodeAt(index)); + var transition = word + ? (currentIsUpper && !lastIsUpper) + : currentIsUpper; + return transition; + } +})(ts || (ts = {})); +var ts; +(function (ts) { + var SignatureHelp; + (function (SignatureHelp) { + var emptyArray = []; + function getSignatureHelpItems(program, sourceFile, position, cancellationToken) { + var typeChecker = program.getTypeChecker(); + var startingToken = ts.findTokenOnLeftOfPosition(sourceFile, position); + if (!startingToken) { + return undefined; + } + var argumentInfo = getContainingArgumentInfo(startingToken); + cancellationToken.throwIfCancellationRequested(); + if (!argumentInfo) { + return undefined; + } + var call = argumentInfo.invocation; + var candidates = []; + var resolvedSignature = typeChecker.getResolvedSignature(call, candidates); + cancellationToken.throwIfCancellationRequested(); + if (!candidates.length) { + if (ts.isSourceFileJavaScript(sourceFile)) { + return createJavaScriptSignatureHelpItems(argumentInfo); + } + return undefined; + } + return createSignatureHelpItems(candidates, resolvedSignature, argumentInfo); + function createJavaScriptSignatureHelpItems(argumentInfo) { + if (argumentInfo.invocation.kind !== 174) { + return undefined; + } + var callExpression = argumentInfo.invocation; + var expression = callExpression.expression; + var name = expression.kind === 69 + ? expression + : expression.kind === 172 + ? expression.name + : undefined; + if (!name || !name.text) { + return undefined; + } + var typeChecker = program.getTypeChecker(); + for (var _i = 0, _a = program.getSourceFiles(); _i < _a.length; _i++) { + var sourceFile_1 = _a[_i]; + var nameToDeclarations = sourceFile_1.getNamedDeclarations(); + var declarations = ts.getProperty(nameToDeclarations, name.text); + if (declarations) { + for (var _b = 0, declarations_8 = declarations; _b < declarations_8.length; _b++) { + var declaration = declarations_8[_b]; + var symbol = declaration.symbol; + if (symbol) { + var type = typeChecker.getTypeOfSymbolAtLocation(symbol, declaration); + if (type) { + var callSignatures = type.getCallSignatures(); + if (callSignatures && callSignatures.length) { + return createSignatureHelpItems(callSignatures, callSignatures[0], argumentInfo); + } + } + } + } + } + } + } + function getImmediatelyContainingArgumentInfo(node) { + if (node.parent.kind === 174 || node.parent.kind === 175) { + var callExpression = node.parent; + if (node.kind === 25 || + node.kind === 17) { + var list = getChildListThatStartsWithOpenerToken(callExpression, node, sourceFile); + var isTypeArgList = callExpression.typeArguments && callExpression.typeArguments.pos === list.pos; + ts.Debug.assert(list !== undefined); + return { + kind: isTypeArgList ? 0 : 1, + invocation: callExpression, + argumentsSpan: getApplicableSpanForArguments(list), + argumentIndex: 0, + argumentCount: getArgumentCount(list) + }; + } + var listItemInfo = ts.findListItemInfo(node); + if (listItemInfo) { + var list = listItemInfo.list; + var isTypeArgList = callExpression.typeArguments && callExpression.typeArguments.pos === list.pos; + var argumentIndex = getArgumentIndex(list, node); + var argumentCount = getArgumentCount(list); + ts.Debug.assert(argumentIndex === 0 || argumentIndex < argumentCount, "argumentCount < argumentIndex, " + argumentCount + " < " + argumentIndex); + return { + kind: isTypeArgList ? 0 : 1, + invocation: callExpression, + argumentsSpan: getApplicableSpanForArguments(list), + argumentIndex: argumentIndex, + argumentCount: argumentCount + }; + } + } + else if (node.kind === 11 && node.parent.kind === 176) { + if (ts.isInsideTemplateLiteral(node, position)) { + return getArgumentListInfoForTemplate(node.parent, 0); + } + } + else if (node.kind === 12 && node.parent.parent.kind === 176) { + var templateExpression = node.parent; + var tagExpression = templateExpression.parent; + ts.Debug.assert(templateExpression.kind === 189); + var argumentIndex = ts.isInsideTemplateLiteral(node, position) ? 0 : 1; + return getArgumentListInfoForTemplate(tagExpression, argumentIndex); + } + else if (node.parent.kind === 197 && node.parent.parent.parent.kind === 176) { + var templateSpan = node.parent; + var templateExpression = templateSpan.parent; + var tagExpression = templateExpression.parent; + ts.Debug.assert(templateExpression.kind === 189); + if (node.kind === 14 && !ts.isInsideTemplateLiteral(node, position)) { + return undefined; + } + var spanIndex = templateExpression.templateSpans.indexOf(templateSpan); + var argumentIndex = getArgumentIndexForTemplatePiece(spanIndex, node); + return getArgumentListInfoForTemplate(tagExpression, argumentIndex); + } + return undefined; + } + function getArgumentIndex(argumentsList, node) { + var argumentIndex = 0; + var listChildren = argumentsList.getChildren(); + for (var _i = 0, listChildren_1 = listChildren; _i < listChildren_1.length; _i++) { + var child = listChildren_1[_i]; + if (child === node) { + break; + } + if (child.kind !== 24) { + argumentIndex++; + } + } + return argumentIndex; + } + function getArgumentCount(argumentsList) { + var listChildren = argumentsList.getChildren(); + var argumentCount = ts.countWhere(listChildren, function (arg) { return arg.kind !== 24; }); + if (listChildren.length > 0 && ts.lastOrUndefined(listChildren).kind === 24) { + argumentCount++; + } + return argumentCount; + } + function getArgumentIndexForTemplatePiece(spanIndex, node) { + ts.Debug.assert(position >= node.getStart(), "Assumed 'position' could not occur before node."); + if (ts.isTemplateLiteralKind(node.kind)) { + if (ts.isInsideTemplateLiteral(node, position)) { + return 0; + } + return spanIndex + 2; + } + return spanIndex + 1; + } + function getArgumentListInfoForTemplate(tagExpression, argumentIndex) { + var argumentCount = tagExpression.template.kind === 11 + ? 1 + : tagExpression.template.templateSpans.length + 1; + ts.Debug.assert(argumentIndex === 0 || argumentIndex < argumentCount, "argumentCount < argumentIndex, " + argumentCount + " < " + argumentIndex); + return { + kind: 2, + invocation: tagExpression, + argumentsSpan: getApplicableSpanForTaggedTemplate(tagExpression), + argumentIndex: argumentIndex, + argumentCount: argumentCount + }; + } + function getApplicableSpanForArguments(argumentsList) { + var applicableSpanStart = argumentsList.getFullStart(); + var applicableSpanEnd = ts.skipTrivia(sourceFile.text, argumentsList.getEnd(), false); + return ts.createTextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); + } + function getApplicableSpanForTaggedTemplate(taggedTemplate) { + var template = taggedTemplate.template; + var applicableSpanStart = template.getStart(); + var applicableSpanEnd = template.getEnd(); + if (template.kind === 189) { + var lastSpan = ts.lastOrUndefined(template.templateSpans); + if (lastSpan.literal.getFullWidth() === 0) { + applicableSpanEnd = ts.skipTrivia(sourceFile.text, applicableSpanEnd, false); + } + } + return ts.createTextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); + } + function getContainingArgumentInfo(node) { + for (var n = node; n.kind !== 256; n = n.parent) { + if (ts.isFunctionBlock(n)) { + return undefined; + } + if (n.pos < n.parent.pos || n.end > n.parent.end) { + ts.Debug.fail("Node of kind " + n.kind + " is not a subspan of its parent of kind " + n.parent.kind); + } + var argumentInfo_1 = getImmediatelyContainingArgumentInfo(n); + if (argumentInfo_1) { + return argumentInfo_1; + } + } + return undefined; + } + function getChildListThatStartsWithOpenerToken(parent, openerToken, sourceFile) { + var children = parent.getChildren(sourceFile); + var indexOfOpenerToken = children.indexOf(openerToken); + ts.Debug.assert(indexOfOpenerToken >= 0 && children.length > indexOfOpenerToken + 1); + return children[indexOfOpenerToken + 1]; + } + function selectBestInvalidOverloadIndex(candidates, argumentCount) { + var maxParamsSignatureIndex = -1; + var maxParams = -1; + for (var i = 0; i < candidates.length; i++) { + var candidate = candidates[i]; + if (candidate.hasRestParameter || candidate.parameters.length >= argumentCount) { + return i; + } + if (candidate.parameters.length > maxParams) { + maxParams = candidate.parameters.length; + maxParamsSignatureIndex = i; + } + } + return maxParamsSignatureIndex; + } + function createSignatureHelpItems(candidates, bestSignature, argumentListInfo) { + var applicableSpan = argumentListInfo.argumentsSpan; + var isTypeParameterList = argumentListInfo.kind === 0; + var invocation = argumentListInfo.invocation; + var callTarget = ts.getInvokedExpression(invocation); + var callTargetSymbol = typeChecker.getSymbolAtLocation(callTarget); + var callTargetDisplayParts = callTargetSymbol && ts.symbolToDisplayParts(typeChecker, callTargetSymbol, undefined, undefined); + var items = ts.map(candidates, function (candidateSignature) { + var signatureHelpParameters; + var prefixDisplayParts = []; + var suffixDisplayParts = []; + if (callTargetDisplayParts) { + ts.addRange(prefixDisplayParts, callTargetDisplayParts); + } + if (isTypeParameterList) { + prefixDisplayParts.push(ts.punctuationPart(25)); + var typeParameters = candidateSignature.typeParameters; + signatureHelpParameters = typeParameters && typeParameters.length > 0 ? ts.map(typeParameters, createSignatureHelpParameterForTypeParameter) : emptyArray; + suffixDisplayParts.push(ts.punctuationPart(27)); + var parameterParts = ts.mapToDisplayParts(function (writer) { + return typeChecker.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.thisType, candidateSignature.parameters, writer, invocation); + }); + ts.addRange(suffixDisplayParts, parameterParts); + } + else { + var typeParameterParts = ts.mapToDisplayParts(function (writer) { + return typeChecker.getSymbolDisplayBuilder().buildDisplayForTypeParametersAndDelimiters(candidateSignature.typeParameters, writer, invocation); + }); + ts.addRange(prefixDisplayParts, typeParameterParts); + prefixDisplayParts.push(ts.punctuationPart(17)); + var parameters = candidateSignature.parameters; + signatureHelpParameters = parameters.length > 0 ? ts.map(parameters, createSignatureHelpParameterForParameter) : emptyArray; + suffixDisplayParts.push(ts.punctuationPart(18)); + } + var returnTypeParts = ts.mapToDisplayParts(function (writer) { + return typeChecker.getSymbolDisplayBuilder().buildReturnTypeDisplay(candidateSignature, writer, invocation); + }); + ts.addRange(suffixDisplayParts, returnTypeParts); + return { + isVariadic: candidateSignature.hasRestParameter, + prefixDisplayParts: prefixDisplayParts, + suffixDisplayParts: suffixDisplayParts, + separatorDisplayParts: [ts.punctuationPart(24), ts.spacePart()], + parameters: signatureHelpParameters, + documentation: candidateSignature.getDocumentationComment() + }; + }); + var argumentIndex = argumentListInfo.argumentIndex; + var argumentCount = argumentListInfo.argumentCount; + var selectedItemIndex = candidates.indexOf(bestSignature); + if (selectedItemIndex < 0) { + selectedItemIndex = selectBestInvalidOverloadIndex(candidates, argumentCount); + } + ts.Debug.assert(argumentIndex === 0 || argumentIndex < argumentCount, "argumentCount < argumentIndex, " + argumentCount + " < " + argumentIndex); + return { + items: items, + applicableSpan: applicableSpan, + selectedItemIndex: selectedItemIndex, + argumentIndex: argumentIndex, + argumentCount: argumentCount + }; + function createSignatureHelpParameterForParameter(parameter) { + var displayParts = ts.mapToDisplayParts(function (writer) { + return typeChecker.getSymbolDisplayBuilder().buildParameterDisplay(parameter, writer, invocation); + }); + return { + name: parameter.name, + documentation: parameter.getDocumentationComment(), + displayParts: displayParts, + isOptional: typeChecker.isOptionalParameter(parameter.valueDeclaration) + }; + } + function createSignatureHelpParameterForTypeParameter(typeParameter) { + var displayParts = ts.mapToDisplayParts(function (writer) { + return typeChecker.getSymbolDisplayBuilder().buildTypeParameterDisplay(typeParameter, writer, invocation); + }); + return { + name: typeParameter.symbol.name, + documentation: emptyArray, + displayParts: displayParts, + isOptional: false + }; + } + } + } + SignatureHelp.getSignatureHelpItems = getSignatureHelpItems; + })(SignatureHelp = ts.SignatureHelp || (ts.SignatureHelp = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + function getLineStartPositionForPosition(position, sourceFile) { + var lineStarts = sourceFile.getLineStarts(); + var line = sourceFile.getLineAndCharacterOfPosition(position).line; + return lineStarts[line]; + } + ts.getLineStartPositionForPosition = getLineStartPositionForPosition; + function rangeContainsRange(r1, r2) { + return startEndContainsRange(r1.pos, r1.end, r2); + } + ts.rangeContainsRange = rangeContainsRange; + function startEndContainsRange(start, end, range) { + return start <= range.pos && end >= range.end; + } + ts.startEndContainsRange = startEndContainsRange; + function rangeContainsStartEnd(range, start, end) { + return range.pos <= start && range.end >= end; + } + ts.rangeContainsStartEnd = rangeContainsStartEnd; + function rangeOverlapsWithStartEnd(r1, start, end) { + return startEndOverlapsWithStartEnd(r1.pos, r1.end, start, end); + } + ts.rangeOverlapsWithStartEnd = rangeOverlapsWithStartEnd; + function startEndOverlapsWithStartEnd(start1, end1, start2, end2) { + var start = Math.max(start1, start2); + var end = Math.min(end1, end2); + return start < end; + } + ts.startEndOverlapsWithStartEnd = startEndOverlapsWithStartEnd; + function positionBelongsToNode(candidate, position, sourceFile) { + return candidate.end > position || !isCompletedNode(candidate, sourceFile); + } + ts.positionBelongsToNode = positionBelongsToNode; + function isCompletedNode(n, sourceFile) { + if (ts.nodeIsMissing(n)) { + return false; + } + switch (n.kind) { + case 221: + case 222: + case 224: + case 171: + case 167: + case 159: + case 199: + case 226: + case 227: + return nodeEndsWith(n, 16, sourceFile); + case 252: + return isCompletedNode(n.block, sourceFile); + case 175: + if (!n.arguments) { + return true; + } + case 174: + case 178: + case 164: + return nodeEndsWith(n, 18, sourceFile); + case 156: + case 157: + return isCompletedNode(n.type, sourceFile); + case 148: + case 149: + case 150: + case 220: + case 179: + case 147: + case 146: + case 152: + case 151: + case 180: + if (n.body) { + return isCompletedNode(n.body, sourceFile); + } + if (n.type) { + return isCompletedNode(n.type, sourceFile); + } + return hasChildOfKind(n, 18, sourceFile); + case 225: + return n.body && isCompletedNode(n.body, sourceFile); + case 203: + if (n.elseStatement) { + return isCompletedNode(n.elseStatement, sourceFile); + } + return isCompletedNode(n.thenStatement, sourceFile); + case 202: + return isCompletedNode(n.expression, sourceFile) || + hasChildOfKind(n, 23); + case 170: + case 168: + case 173: + case 140: + case 161: + return nodeEndsWith(n, 20, sourceFile); + case 153: + if (n.type) { + return isCompletedNode(n.type, sourceFile); + } + return hasChildOfKind(n, 20, sourceFile); + case 249: + case 250: + return false; + case 206: + case 207: + case 208: + case 205: + return isCompletedNode(n.statement, sourceFile); + case 204: + var hasWhileKeyword = findChildOfKind(n, 104, sourceFile); + if (hasWhileKeyword) { + return nodeEndsWith(n, 18, sourceFile); + } + return isCompletedNode(n.statement, sourceFile); + case 158: + return isCompletedNode(n.exprName, sourceFile); + case 182: + case 181: + case 183: + case 190: + case 191: + var unaryWordExpression = n; + return isCompletedNode(unaryWordExpression.expression, sourceFile); + case 176: + return isCompletedNode(n.template, sourceFile); + case 189: + var lastSpan = ts.lastOrUndefined(n.templateSpans); + return isCompletedNode(lastSpan, sourceFile); + case 197: + return ts.nodeIsPresent(n.literal); + case 185: + return isCompletedNode(n.operand, sourceFile); + case 187: + return isCompletedNode(n.right, sourceFile); + case 188: + return isCompletedNode(n.whenFalse, sourceFile); + default: + return true; + } + } + ts.isCompletedNode = isCompletedNode; + function nodeEndsWith(n, expectedLastToken, sourceFile) { + var children = n.getChildren(sourceFile); + if (children.length) { + var last = ts.lastOrUndefined(children); + if (last.kind === expectedLastToken) { + return true; + } + else if (last.kind === 23 && children.length !== 1) { + return children[children.length - 2].kind === expectedLastToken; + } + } + return false; + } + function findListItemInfo(node) { + var list = findContainingList(node); + if (!list) { + return undefined; + } + var children = list.getChildren(); + var listItemIndex = ts.indexOf(children, node); + return { + listItemIndex: listItemIndex, + list: list + }; + } + ts.findListItemInfo = findListItemInfo; + function hasChildOfKind(n, kind, sourceFile) { + return !!findChildOfKind(n, kind, sourceFile); + } + ts.hasChildOfKind = hasChildOfKind; + function findChildOfKind(n, kind, sourceFile) { + return ts.forEach(n.getChildren(sourceFile), function (c) { return c.kind === kind && c; }); + } + ts.findChildOfKind = findChildOfKind; + function findContainingList(node) { + var syntaxList = ts.forEach(node.parent.getChildren(), function (c) { + if (c.kind === 279 && c.pos <= node.pos && c.end >= node.end) { + return c; + } + }); + ts.Debug.assert(!syntaxList || ts.contains(syntaxList.getChildren(), node)); + return syntaxList; + } + ts.findContainingList = findContainingList; + function getTouchingWord(sourceFile, position) { + return getTouchingToken(sourceFile, position, function (n) { return isWord(n.kind); }); + } + ts.getTouchingWord = getTouchingWord; + function getTouchingPropertyName(sourceFile, position) { + return getTouchingToken(sourceFile, position, function (n) { return isPropertyName(n.kind); }); + } + ts.getTouchingPropertyName = getTouchingPropertyName; + function getTouchingToken(sourceFile, position, includeItemAtEndPosition) { + return getTokenAtPositionWorker(sourceFile, position, false, includeItemAtEndPosition); + } + ts.getTouchingToken = getTouchingToken; + function getTokenAtPosition(sourceFile, position) { + return getTokenAtPositionWorker(sourceFile, position, true, undefined); + } + ts.getTokenAtPosition = getTokenAtPosition; + function getTokenAtPositionWorker(sourceFile, position, allowPositionInLeadingTrivia, includeItemAtEndPosition) { + var current = sourceFile; + outer: while (true) { + if (isToken(current)) { + return current; + } + for (var i = 0, n = current.getChildCount(sourceFile); i < n; i++) { + var child = current.getChildAt(i); + var start = allowPositionInLeadingTrivia ? child.getFullStart() : child.getStart(sourceFile); + if (start <= position) { + var end = child.getEnd(); + if (position < end || (position === end && child.kind === 1)) { + current = child; + continue outer; + } + else if (includeItemAtEndPosition && end === position) { + var previousToken = findPrecedingToken(position, sourceFile, child); + if (previousToken && includeItemAtEndPosition(previousToken)) { + return previousToken; + } + } + } + } + return current; + } + } + function findTokenOnLeftOfPosition(file, position) { + var tokenAtPosition = getTokenAtPosition(file, position); + if (isToken(tokenAtPosition) && position > tokenAtPosition.getStart(file) && position < tokenAtPosition.getEnd()) { + return tokenAtPosition; + } + return findPrecedingToken(position, file); + } + ts.findTokenOnLeftOfPosition = findTokenOnLeftOfPosition; + function findNextToken(previousToken, parent) { + return find(parent); + function find(n) { + if (isToken(n) && n.pos === previousToken.end) { + return n; + } + var children = n.getChildren(); + for (var _i = 0, children_1 = children; _i < children_1.length; _i++) { + var child = children_1[_i]; + var shouldDiveInChildNode = (child.pos <= previousToken.pos && child.end > previousToken.end) || + (child.pos === previousToken.end); + if (shouldDiveInChildNode && nodeHasTokens(child)) { + return find(child); + } + } + return undefined; + } + } + ts.findNextToken = findNextToken; + function findPrecedingToken(position, sourceFile, startNode) { + return find(startNode || sourceFile); + function findRightmostToken(n) { + if (isToken(n) || n.kind === 244) { + return n; + } + var children = n.getChildren(); + var candidate = findRightmostChildNodeWithTokens(children, children.length); + return candidate && findRightmostToken(candidate); + } + function find(n) { + if (isToken(n) || n.kind === 244) { + return n; + } + var children = n.getChildren(); + for (var i = 0, len = children.length; i < len; i++) { + var child = children[i]; + if (position < child.end && (nodeHasTokens(child) || child.kind === 244)) { + var start = child.getStart(sourceFile); + var lookInPreviousChild = (start >= position) || + (child.kind === 244 && start === child.end); + if (lookInPreviousChild) { + var candidate = findRightmostChildNodeWithTokens(children, i); + return candidate && findRightmostToken(candidate); + } + else { + return find(child); + } + } + } + ts.Debug.assert(startNode !== undefined || n.kind === 256); + if (children.length) { + var candidate = findRightmostChildNodeWithTokens(children, children.length); + return candidate && findRightmostToken(candidate); + } + } + function findRightmostChildNodeWithTokens(children, exclusiveStartPosition) { + for (var i = exclusiveStartPosition - 1; i >= 0; --i) { + if (nodeHasTokens(children[i])) { + return children[i]; + } + } + } + } + ts.findPrecedingToken = findPrecedingToken; + function isInString(sourceFile, position) { + var token = getTokenAtPosition(sourceFile, position); + return token && (token.kind === 9 || token.kind === 166) && position > token.getStart(sourceFile); + } + ts.isInString = isInString; + function isInComment(sourceFile, position) { + return isInCommentHelper(sourceFile, position, undefined); + } + ts.isInComment = isInComment; + function isInsideJsxElementOrAttribute(sourceFile, position) { + var token = getTokenAtPosition(sourceFile, position); + if (!token) { + return false; + } + if (token.kind === 25 && token.parent.kind === 244) { + return true; + } + if (token.kind === 25 && token.parent.kind === 248) { + return true; + } + if (token && token.kind === 16 && token.parent.kind === 248) { + return true; + } + if (token.kind === 25 && token.parent.kind === 245) { + return true; + } + return false; + } + ts.isInsideJsxElementOrAttribute = isInsideJsxElementOrAttribute; + function isInTemplateString(sourceFile, position) { + var token = getTokenAtPosition(sourceFile, position); + return ts.isTemplateLiteralKind(token.kind) && position > token.getStart(sourceFile); + } + ts.isInTemplateString = isInTemplateString; + function isInCommentHelper(sourceFile, position, predicate) { + var token = getTokenAtPosition(sourceFile, position); + if (token && position <= token.getStart(sourceFile)) { + var commentRanges = ts.getLeadingCommentRanges(sourceFile.text, token.pos); + return predicate ? + ts.forEach(commentRanges, function (c) { return c.pos < position && + (c.kind == 2 ? position <= c.end : position < c.end) && + predicate(c); }) : + ts.forEach(commentRanges, function (c) { return c.pos < position && + (c.kind == 2 ? position <= c.end : position < c.end); }); + } + return false; + } + ts.isInCommentHelper = isInCommentHelper; + function hasDocComment(sourceFile, position) { + var token = getTokenAtPosition(sourceFile, position); + var commentRanges = ts.getLeadingCommentRanges(sourceFile.text, token.pos); + return ts.forEach(commentRanges, jsDocPrefix); + function jsDocPrefix(c) { + var text = sourceFile.text; + return text.length >= c.pos + 3 && text[c.pos] === "/" && text[c.pos + 1] === "*" && text[c.pos + 2] === "*"; + } + } + ts.hasDocComment = hasDocComment; + function getJsDocTagAtPosition(sourceFile, position) { + var node = ts.getTokenAtPosition(sourceFile, position); + if (isToken(node)) { + switch (node.kind) { + case 102: + case 108: + case 74: + node = node.parent === undefined ? undefined : node.parent.parent; + break; + default: + node = node.parent; + break; + } + } + if (node) { + var jsDocComment = node.jsDocComment; + if (jsDocComment) { + for (var _i = 0, _a = jsDocComment.tags; _i < _a.length; _i++) { + var tag = _a[_i]; + if (tag.pos <= position && position <= tag.end) { + return tag; + } + } + } + } + return undefined; + } + ts.getJsDocTagAtPosition = getJsDocTagAtPosition; + function nodeHasTokens(n) { + return n.getWidth() !== 0; + } + function getNodeModifiers(node) { + var flags = ts.getCombinedNodeFlags(node); + var result = []; + if (flags & 8) + result.push(ts.ScriptElementKindModifier.privateMemberModifier); + if (flags & 16) + result.push(ts.ScriptElementKindModifier.protectedMemberModifier); + if (flags & 4) + result.push(ts.ScriptElementKindModifier.publicMemberModifier); + if (flags & 32) + result.push(ts.ScriptElementKindModifier.staticModifier); + if (flags & 128) + result.push(ts.ScriptElementKindModifier.abstractModifier); + if (flags & 1) + result.push(ts.ScriptElementKindModifier.exportedModifier); + if (ts.isInAmbientContext(node)) + result.push(ts.ScriptElementKindModifier.ambientModifier); + return result.length > 0 ? result.join(",") : ts.ScriptElementKindModifier.none; + } + ts.getNodeModifiers = getNodeModifiers; + function getTypeArgumentOrTypeParameterList(node) { + if (node.kind === 155 || node.kind === 174) { + return node.typeArguments; + } + if (ts.isFunctionLike(node) || node.kind === 221 || node.kind === 222) { + return node.typeParameters; + } + return undefined; + } + ts.getTypeArgumentOrTypeParameterList = getTypeArgumentOrTypeParameterList; + function isToken(n) { + return n.kind >= 0 && n.kind <= 138; + } + ts.isToken = isToken; + function isWord(kind) { + return kind === 69 || ts.isKeyword(kind); + } + ts.isWord = isWord; + function isPropertyName(kind) { + return kind === 9 || kind === 8 || isWord(kind); + } + function isComment(kind) { + return kind === 2 || kind === 3; + } + ts.isComment = isComment; + function isStringOrRegularExpressionOrTemplateLiteral(kind) { + if (kind === 9 + || kind === 166 + || kind === 10 + || ts.isTemplateLiteralKind(kind)) { + return true; + } + return false; + } + ts.isStringOrRegularExpressionOrTemplateLiteral = isStringOrRegularExpressionOrTemplateLiteral; + function isPunctuation(kind) { + return 15 <= kind && kind <= 68; + } + ts.isPunctuation = isPunctuation; + function isInsideTemplateLiteral(node, position) { + return ts.isTemplateLiteralKind(node.kind) + && (node.getStart() < position && position < node.getEnd()) || (!!node.isUnterminated && position === node.getEnd()); + } + ts.isInsideTemplateLiteral = isInsideTemplateLiteral; + function isAccessibilityModifier(kind) { + switch (kind) { + case 112: + case 110: + case 111: + return true; + } + return false; + } + ts.isAccessibilityModifier = isAccessibilityModifier; + function compareDataObjects(dst, src) { + 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 isArrayLiteralOrObjectLiteralDestructuringPattern(node) { + if (node.kind === 170 || + node.kind === 171) { + if (node.parent.kind === 187 && + node.parent.left === node && + node.parent.operatorToken.kind === 56) { + return true; + } + if (node.parent.kind === 208 && + node.parent.initializer === node) { + return true; + } + if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 253 ? node.parent.parent : node.parent)) { + return true; + } + } + return false; + } + ts.isArrayLiteralOrObjectLiteralDestructuringPattern = isArrayLiteralOrObjectLiteralDestructuringPattern; +})(ts || (ts = {})); +var ts; +(function (ts) { + function isFirstDeclarationOfSymbolParameter(symbol) { + return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 142; + } + ts.isFirstDeclarationOfSymbolParameter = isFirstDeclarationOfSymbolParameter; + var displayPartWriter = getDisplayPartWriter(); + function getDisplayPartWriter() { + var displayParts; + var lineStart; + var indent; + resetWriter(); + return { + displayParts: function () { return displayParts; }, + writeKeyword: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.keyword); }, + writeOperator: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.operator); }, + writePunctuation: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.punctuation); }, + writeSpace: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.space); }, + writeStringLiteral: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.stringLiteral); }, + writeParameter: function (text) { return writeKind(text, ts.SymbolDisplayPartKind.parameterName); }, + writeSymbol: writeSymbol, + writeLine: writeLine, + increaseIndent: function () { indent++; }, + decreaseIndent: function () { indent--; }, + clear: resetWriter, + trackSymbol: function () { }, + reportInaccessibleThisError: function () { } + }; + function writeIndent() { + if (lineStart) { + var indentString = ts.getIndentString(indent); + if (indentString) { + displayParts.push(displayPart(indentString, ts.SymbolDisplayPartKind.space)); + } + lineStart = false; + } + } + function writeKind(text, kind) { + writeIndent(); + displayParts.push(displayPart(text, kind)); + } + function writeSymbol(text, symbol) { + writeIndent(); + displayParts.push(symbolPart(text, symbol)); + } + function writeLine() { + displayParts.push(lineBreakPart()); + lineStart = true; + } + function resetWriter() { + displayParts = []; + lineStart = true; + indent = 0; + } + } + function symbolPart(text, symbol) { + return displayPart(text, displayPartKind(symbol), symbol); + function displayPartKind(symbol) { + var flags = symbol.flags; + if (flags & 3) { + return isFirstDeclarationOfSymbolParameter(symbol) ? ts.SymbolDisplayPartKind.parameterName : ts.SymbolDisplayPartKind.localName; + } + else if (flags & 4) { + return ts.SymbolDisplayPartKind.propertyName; + } + else if (flags & 32768) { + return ts.SymbolDisplayPartKind.propertyName; + } + else if (flags & 65536) { + return ts.SymbolDisplayPartKind.propertyName; + } + else if (flags & 8) { + return ts.SymbolDisplayPartKind.enumMemberName; + } + else if (flags & 16) { + return ts.SymbolDisplayPartKind.functionName; + } + else if (flags & 32) { + return ts.SymbolDisplayPartKind.className; + } + else if (flags & 64) { + return ts.SymbolDisplayPartKind.interfaceName; + } + else if (flags & 384) { + return ts.SymbolDisplayPartKind.enumName; + } + else if (flags & 1536) { + return ts.SymbolDisplayPartKind.moduleName; + } + else if (flags & 8192) { + return ts.SymbolDisplayPartKind.methodName; + } + else if (flags & 262144) { + return ts.SymbolDisplayPartKind.typeParameterName; + } + else if (flags & 524288) { + return ts.SymbolDisplayPartKind.aliasName; + } + else if (flags & 8388608) { + return ts.SymbolDisplayPartKind.aliasName; + } + return ts.SymbolDisplayPartKind.text; + } + } + ts.symbolPart = symbolPart; + function displayPart(text, kind, symbol) { + return { + text: text, + kind: ts.SymbolDisplayPartKind[kind] + }; + } + ts.displayPart = displayPart; + function spacePart() { + return displayPart(" ", ts.SymbolDisplayPartKind.space); + } + ts.spacePart = spacePart; + function keywordPart(kind) { + return displayPart(ts.tokenToString(kind), ts.SymbolDisplayPartKind.keyword); + } + ts.keywordPart = keywordPart; + function punctuationPart(kind) { + return displayPart(ts.tokenToString(kind), ts.SymbolDisplayPartKind.punctuation); + } + ts.punctuationPart = punctuationPart; + function operatorPart(kind) { + return displayPart(ts.tokenToString(kind), ts.SymbolDisplayPartKind.operator); + } + ts.operatorPart = operatorPart; + function textOrKeywordPart(text) { + var kind = ts.stringToToken(text); + return kind === undefined + ? textPart(text) + : keywordPart(kind); + } + ts.textOrKeywordPart = textOrKeywordPart; + function textPart(text) { + return displayPart(text, ts.SymbolDisplayPartKind.text); + } + ts.textPart = textPart; + var carriageReturnLineFeed = "\r\n"; + function getNewLineOrDefaultFromHost(host) { + return host.getNewLine ? host.getNewLine() : carriageReturnLineFeed; + } + ts.getNewLineOrDefaultFromHost = getNewLineOrDefaultFromHost; + function lineBreakPart() { + return displayPart("\n", ts.SymbolDisplayPartKind.lineBreak); + } + ts.lineBreakPart = lineBreakPart; + function mapToDisplayParts(writeDisplayParts) { + writeDisplayParts(displayPartWriter); + var result = displayPartWriter.displayParts(); + displayPartWriter.clear(); + return result; + } + ts.mapToDisplayParts = mapToDisplayParts; + function typeToDisplayParts(typechecker, type, enclosingDeclaration, flags) { + return mapToDisplayParts(function (writer) { + typechecker.getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags); + }); + } + ts.typeToDisplayParts = typeToDisplayParts; + function symbolToDisplayParts(typeChecker, symbol, enclosingDeclaration, meaning, flags) { + return mapToDisplayParts(function (writer) { + typeChecker.getSymbolDisplayBuilder().buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags); + }); + } + ts.symbolToDisplayParts = symbolToDisplayParts; + function signatureToDisplayParts(typechecker, signature, enclosingDeclaration, flags) { + return mapToDisplayParts(function (writer) { + typechecker.getSymbolDisplayBuilder().buildSignatureDisplay(signature, writer, enclosingDeclaration, flags); + }); + } + ts.signatureToDisplayParts = signatureToDisplayParts; + function getDeclaredName(typeChecker, symbol, location) { + if (isImportOrExportSpecifierName(location)) { + return location.getText(); + } + else if (ts.isStringOrNumericLiteral(location.kind) && + location.parent.kind === 140) { + return location.text; + } + var localExportDefaultSymbol = ts.getLocalSymbolForExportDefault(symbol); + var name = typeChecker.symbolToString(localExportDefaultSymbol || symbol); + return name; + } + ts.getDeclaredName = getDeclaredName; + function isImportOrExportSpecifierName(location) { + return location.parent && + (location.parent.kind === 234 || location.parent.kind === 238) && + location.parent.propertyName === location; + } + ts.isImportOrExportSpecifierName = isImportOrExportSpecifierName; + function stripQuotes(name) { + var length = name.length; + if (length >= 2 && + name.charCodeAt(0) === name.charCodeAt(length - 1) && + (name.charCodeAt(0) === 34 || name.charCodeAt(0) === 39)) { + return name.substring(1, length - 1); + } + ; + return name; + } + ts.stripQuotes = stripQuotes; + function scriptKindIs(fileName, host) { + var scriptKinds = []; + for (var _i = 2; _i < arguments.length; _i++) { + scriptKinds[_i - 2] = arguments[_i]; + } + var scriptKind = getScriptKind(fileName, host); + return ts.forEach(scriptKinds, function (k) { return k === scriptKind; }); + } + ts.scriptKindIs = scriptKindIs; + function getScriptKind(fileName, host) { + var scriptKind; + if (host && host.getScriptKind) { + scriptKind = host.getScriptKind(fileName); + } + if (!scriptKind || scriptKind === 0) { + scriptKind = ts.getScriptKindFromFileName(fileName); + } + return ts.ensureScriptKind(fileName, scriptKind); + } + ts.getScriptKind = getScriptKind; +})(ts || (ts = {})); +var ts; +(function (ts) { + var JsTyping; + (function (JsTyping) { + ; + ; + var safeList; + function discoverTypings(host, fileNames, projectRootPath, safeListPath, packageNameToTypingLocation, typingOptions, compilerOptions) { + var inferredTypings = {}; + if (!typingOptions || !typingOptions.enableAutoDiscovery) { + return { cachedTypingPaths: [], newTypingNames: [], filesToWatch: [] }; + } + fileNames = ts.filter(ts.map(fileNames, ts.normalizePath), function (f) { return ts.scriptKindIs(f, undefined, 1, 2); }); + if (!safeList) { + var result = ts.readConfigFile(safeListPath, function (path) { return host.readFile(path); }); + if (result.config) { + safeList = result.config; + } + else { + safeList = {}; + } + ; + } + var filesToWatch = []; + var searchDirs = []; + var exclude = []; + mergeTypings(typingOptions.include); + exclude = typingOptions.exclude || []; + var possibleSearchDirs = ts.map(fileNames, ts.getDirectoryPath); + if (projectRootPath !== undefined) { + possibleSearchDirs.push(projectRootPath); + } + searchDirs = ts.deduplicate(possibleSearchDirs); + for (var _i = 0, searchDirs_1 = searchDirs; _i < searchDirs_1.length; _i++) { + var searchDir = searchDirs_1[_i]; + var packageJsonPath = ts.combinePaths(searchDir, "package.json"); + getTypingNamesFromJson(packageJsonPath, filesToWatch); + var bowerJsonPath = ts.combinePaths(searchDir, "bower.json"); + getTypingNamesFromJson(bowerJsonPath, filesToWatch); + var nodeModulesPath = ts.combinePaths(searchDir, "node_modules"); + getTypingNamesFromNodeModuleFolder(nodeModulesPath); + } + getTypingNamesFromSourceFileNames(fileNames); + for (var name_37 in packageNameToTypingLocation) { + if (ts.hasProperty(inferredTypings, name_37) && !inferredTypings[name_37]) { + inferredTypings[name_37] = packageNameToTypingLocation[name_37]; + } + } + for (var _a = 0, exclude_1 = exclude; _a < exclude_1.length; _a++) { + var excludeTypingName = exclude_1[_a]; + delete inferredTypings[excludeTypingName]; + } + var newTypingNames = []; + var cachedTypingPaths = []; + for (var typing in inferredTypings) { + if (inferredTypings[typing] !== undefined) { + cachedTypingPaths.push(inferredTypings[typing]); + } + else { + newTypingNames.push(typing); + } + } + return { cachedTypingPaths: cachedTypingPaths, newTypingNames: newTypingNames, filesToWatch: filesToWatch }; + function mergeTypings(typingNames) { + if (!typingNames) { + return; + } + for (var _i = 0, typingNames_1 = typingNames; _i < typingNames_1.length; _i++) { + var typing = typingNames_1[_i]; + if (!ts.hasProperty(inferredTypings, typing)) { + inferredTypings[typing] = undefined; + } + } + } + function getTypingNamesFromJson(jsonPath, filesToWatch) { + var result = ts.readConfigFile(jsonPath, function (path) { return host.readFile(path); }); + if (result.config) { + var jsonConfig = result.config; + filesToWatch.push(jsonPath); + if (jsonConfig.dependencies) { + mergeTypings(ts.getKeys(jsonConfig.dependencies)); + } + if (jsonConfig.devDependencies) { + mergeTypings(ts.getKeys(jsonConfig.devDependencies)); + } + if (jsonConfig.optionalDependencies) { + mergeTypings(ts.getKeys(jsonConfig.optionalDependencies)); + } + if (jsonConfig.peerDependencies) { + mergeTypings(ts.getKeys(jsonConfig.peerDependencies)); + } + } + } + function getTypingNamesFromSourceFileNames(fileNames) { + var jsFileNames = ts.filter(fileNames, ts.hasJavaScriptFileExtension); + var inferredTypingNames = ts.map(jsFileNames, function (f) { return ts.removeFileExtension(ts.getBaseFileName(f.toLowerCase())); }); + var cleanedTypingNames = ts.map(inferredTypingNames, function (f) { return f.replace(/((?:\.|-)min(?=\.|$))|((?:-|\.)\d+)/g, ""); }); + if (safeList === undefined) { + mergeTypings(cleanedTypingNames); + } + else { + mergeTypings(ts.filter(cleanedTypingNames, function (f) { return ts.hasProperty(safeList, f); })); + } + var hasJsxFile = ts.forEach(fileNames, function (f) { return ts.scriptKindIs(f, undefined, 2); }); + if (hasJsxFile) { + mergeTypings(["react"]); + } + } + function getTypingNamesFromNodeModuleFolder(nodeModulesPath) { + if (!host.directoryExists(nodeModulesPath)) { + return; + } + var typingNames = []; + var fileNames = host.readDirectory(nodeModulesPath, "*.json", undefined, 2); + for (var _i = 0, fileNames_1 = fileNames; _i < fileNames_1.length; _i++) { + var fileName = fileNames_1[_i]; + var normalizedFileName = ts.normalizePath(fileName); + if (ts.getBaseFileName(normalizedFileName) !== "package.json") { + continue; + } + var result = ts.readConfigFile(normalizedFileName, function (path) { return host.readFile(path); }); + if (!result.config) { + continue; + } + var packageJson = result.config; + if (packageJson._requiredBy && + ts.filter(packageJson._requiredBy, function (r) { return r[0] === "#" || r === "/"; }).length === 0) { + continue; + } + if (!packageJson.name) { + continue; + } + if (packageJson.typings) { + var absolutePath = ts.getNormalizedAbsolutePath(packageJson.typings, ts.getDirectoryPath(normalizedFileName)); + inferredTypings[packageJson.name] = absolutePath; + } + else { + typingNames.push(packageJson.name); + } + } + mergeTypings(typingNames); + } + } + JsTyping.discoverTypings = discoverTypings; + })(JsTyping = ts.JsTyping || (ts.JsTyping = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var formatting; + (function (formatting) { + var standardScanner = ts.createScanner(2, false, 0); + var jsxScanner = ts.createScanner(2, false, 1); + var scanner; + function getFormattingScanner(sourceFile, startPos, endPos) { + ts.Debug.assert(scanner === undefined); + scanner = sourceFile.languageVariant === 1 ? jsxScanner : standardScanner; + scanner.setText(sourceFile.text); + scanner.setTextPos(startPos); + var wasNewLine = true; + var leadingTrivia; + var trailingTrivia; + var savedPos; + var lastScanAction; + var lastTokenInfo; + return { + advance: advance, + readTokenInfo: readTokenInfo, + isOnToken: isOnToken, + getCurrentLeadingTrivia: function () { return leadingTrivia; }, + lastTrailingTriviaWasNewLine: function () { return wasNewLine; }, + close: function () { + ts.Debug.assert(scanner !== undefined); + lastTokenInfo = undefined; + scanner.setText(undefined); + scanner = undefined; + } + }; + function advance() { + ts.Debug.assert(scanner !== undefined); + lastTokenInfo = undefined; + var isStarted = scanner.getStartPos() !== startPos; + if (isStarted) { + if (trailingTrivia) { + ts.Debug.assert(trailingTrivia.length !== 0); + wasNewLine = ts.lastOrUndefined(trailingTrivia).kind === 4; + } + else { + wasNewLine = false; + } + } + leadingTrivia = undefined; + trailingTrivia = undefined; + if (!isStarted) { + scanner.scan(); + } + var t; + var pos = scanner.getStartPos(); + while (pos < endPos) { + var t_1 = scanner.getToken(); + if (!ts.isTrivia(t_1)) { + break; + } + scanner.scan(); + var item = { + pos: pos, + end: scanner.getStartPos(), + kind: t_1 + }; + pos = scanner.getStartPos(); + if (!leadingTrivia) { + leadingTrivia = []; + } + leadingTrivia.push(item); + } + savedPos = scanner.getStartPos(); + } + function shouldRescanGreaterThanToken(node) { + if (node) { + switch (node.kind) { + case 29: + case 64: + case 65: + case 45: + case 44: + return true; + } + } + return false; + } + function shouldRescanJsxIdentifier(node) { + if (node.parent) { + switch (node.parent.kind) { + case 246: + case 243: + case 245: + case 242: + return node.kind === 69; + } + } + return false; + } + function shouldRescanSlashToken(container) { + return container.kind === 10; + } + function shouldRescanTemplateToken(container) { + return container.kind === 13 || + container.kind === 14; + } + function startsWithSlashToken(t) { + return t === 39 || t === 61; + } + function readTokenInfo(n) { + ts.Debug.assert(scanner !== undefined); + if (!isOnToken()) { + return { + leadingTrivia: leadingTrivia, + trailingTrivia: undefined, + token: undefined + }; + } + var expectedScanAction = shouldRescanGreaterThanToken(n) + ? 1 + : shouldRescanSlashToken(n) + ? 2 + : shouldRescanTemplateToken(n) + ? 3 + : shouldRescanJsxIdentifier(n) + ? 4 + : 0; + if (lastTokenInfo && expectedScanAction === lastScanAction) { + return fixTokenKind(lastTokenInfo, n); + } + if (scanner.getStartPos() !== savedPos) { + ts.Debug.assert(lastTokenInfo !== undefined); + scanner.setTextPos(savedPos); + scanner.scan(); + } + var currentToken = scanner.getToken(); + if (expectedScanAction === 1 && currentToken === 27) { + currentToken = scanner.reScanGreaterToken(); + ts.Debug.assert(n.kind === currentToken); + lastScanAction = 1; + } + else if (expectedScanAction === 2 && startsWithSlashToken(currentToken)) { + currentToken = scanner.reScanSlashToken(); + ts.Debug.assert(n.kind === currentToken); + lastScanAction = 2; + } + else if (expectedScanAction === 3 && currentToken === 16) { + currentToken = scanner.reScanTemplateToken(); + lastScanAction = 3; + } + else if (expectedScanAction === 4 && currentToken === 69) { + currentToken = scanner.scanJsxIdentifier(); + lastScanAction = 4; + } + else { + lastScanAction = 0; + } + var token = { + pos: scanner.getStartPos(), + end: scanner.getTextPos(), + kind: currentToken + }; + if (trailingTrivia) { + trailingTrivia = undefined; + } + while (scanner.getStartPos() < endPos) { + currentToken = scanner.scan(); + if (!ts.isTrivia(currentToken)) { + break; + } + var trivia = { + pos: scanner.getStartPos(), + end: scanner.getTextPos(), + kind: currentToken + }; + if (!trailingTrivia) { + trailingTrivia = []; + } + trailingTrivia.push(trivia); + if (currentToken === 4) { + scanner.scan(); + break; + } + } + lastTokenInfo = { + leadingTrivia: leadingTrivia, + trailingTrivia: trailingTrivia, + token: token + }; + return fixTokenKind(lastTokenInfo, n); + } + function isOnToken() { + ts.Debug.assert(scanner !== undefined); + var current = (lastTokenInfo && lastTokenInfo.token.kind) || scanner.getToken(); + var startPos = (lastTokenInfo && lastTokenInfo.token.pos) || scanner.getStartPos(); + return startPos < endPos && current !== 1 && !ts.isTrivia(current); + } + function fixTokenKind(tokenInfo, container) { + if (ts.isToken(container) && tokenInfo.token.kind !== container.kind) { + tokenInfo.token.kind = container.kind; + } + return tokenInfo; + } + } + formatting.getFormattingScanner = getFormattingScanner; + })(formatting = ts.formatting || (ts.formatting = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var formatting; + (function (formatting) { + var FormattingContext = (function () { + function FormattingContext(sourceFile, formattingRequestKind) { + this.sourceFile = sourceFile; + this.formattingRequestKind = formattingRequestKind; + } + FormattingContext.prototype.updateContext = function (currentRange, currentTokenParent, nextRange, nextTokenParent, commonParent) { + ts.Debug.assert(currentRange !== undefined, "currentTokenSpan is null"); + ts.Debug.assert(currentTokenParent !== undefined, "currentTokenParent is null"); + ts.Debug.assert(nextRange !== undefined, "nextTokenSpan is null"); + ts.Debug.assert(nextTokenParent !== undefined, "nextTokenParent is null"); + ts.Debug.assert(commonParent !== undefined, "commonParent is null"); + this.currentTokenSpan = currentRange; + this.currentTokenParent = currentTokenParent; + this.nextTokenSpan = nextRange; + this.nextTokenParent = nextTokenParent; + this.contextNode = commonParent; + this.contextNodeAllOnSameLine = undefined; + this.nextNodeAllOnSameLine = undefined; + this.tokensAreOnSameLine = undefined; + this.contextNodeBlockIsOnOneLine = undefined; + this.nextNodeBlockIsOnOneLine = undefined; + }; + FormattingContext.prototype.ContextNodeAllOnSameLine = function () { + if (this.contextNodeAllOnSameLine === undefined) { + this.contextNodeAllOnSameLine = this.NodeIsOnOneLine(this.contextNode); + } + return this.contextNodeAllOnSameLine; + }; + FormattingContext.prototype.NextNodeAllOnSameLine = function () { + if (this.nextNodeAllOnSameLine === undefined) { + this.nextNodeAllOnSameLine = this.NodeIsOnOneLine(this.nextTokenParent); + } + return this.nextNodeAllOnSameLine; + }; + FormattingContext.prototype.TokensAreOnSameLine = function () { + if (this.tokensAreOnSameLine === undefined) { + var startLine = this.sourceFile.getLineAndCharacterOfPosition(this.currentTokenSpan.pos).line; + var endLine = this.sourceFile.getLineAndCharacterOfPosition(this.nextTokenSpan.pos).line; + this.tokensAreOnSameLine = (startLine === endLine); + } + return this.tokensAreOnSameLine; + }; + FormattingContext.prototype.ContextNodeBlockIsOnOneLine = function () { + if (this.contextNodeBlockIsOnOneLine === undefined) { + this.contextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.contextNode); + } + return this.contextNodeBlockIsOnOneLine; + }; + FormattingContext.prototype.NextNodeBlockIsOnOneLine = function () { + if (this.nextNodeBlockIsOnOneLine === undefined) { + this.nextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.nextTokenParent); + } + return this.nextNodeBlockIsOnOneLine; + }; + FormattingContext.prototype.NodeIsOnOneLine = function (node) { + var startLine = this.sourceFile.getLineAndCharacterOfPosition(node.getStart(this.sourceFile)).line; + var endLine = this.sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line; + return startLine === endLine; + }; + FormattingContext.prototype.BlockIsOnOneLine = function (node) { + var openBrace = ts.findChildOfKind(node, 15, this.sourceFile); + var closeBrace = ts.findChildOfKind(node, 16, this.sourceFile); + if (openBrace && closeBrace) { + var startLine = this.sourceFile.getLineAndCharacterOfPosition(openBrace.getEnd()).line; + var endLine = this.sourceFile.getLineAndCharacterOfPosition(closeBrace.getStart(this.sourceFile)).line; + return startLine === endLine; + } + return false; + }; + return FormattingContext; + }()); + formatting.FormattingContext = FormattingContext; + })(formatting = ts.formatting || (ts.formatting = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var formatting; + (function (formatting) { + var Rule = (function () { + function Rule(Descriptor, Operation, Flag) { + if (Flag === void 0) { Flag = 0; } + this.Descriptor = Descriptor; + this.Operation = Operation; + this.Flag = Flag; + } + Rule.prototype.toString = function () { + return "[desc=" + this.Descriptor + "," + + "operation=" + this.Operation + "," + + "flag=" + this.Flag + "]"; + }; + return Rule; + }()); + formatting.Rule = Rule; + })(formatting = ts.formatting || (ts.formatting = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var formatting; + (function (formatting) { + var RuleDescriptor = (function () { + function RuleDescriptor(LeftTokenRange, RightTokenRange) { + this.LeftTokenRange = LeftTokenRange; + this.RightTokenRange = RightTokenRange; + } + RuleDescriptor.prototype.toString = function () { + return "[leftRange=" + this.LeftTokenRange + "," + + "rightRange=" + this.RightTokenRange + "]"; + }; + RuleDescriptor.create1 = function (left, right) { + return RuleDescriptor.create4(formatting.Shared.TokenRange.FromToken(left), formatting.Shared.TokenRange.FromToken(right)); + }; + RuleDescriptor.create2 = function (left, right) { + return RuleDescriptor.create4(left, formatting.Shared.TokenRange.FromToken(right)); + }; + RuleDescriptor.create3 = function (left, right) { + return RuleDescriptor.create4(formatting.Shared.TokenRange.FromToken(left), right); + }; + RuleDescriptor.create4 = function (left, right) { + return new RuleDescriptor(left, right); + }; + return RuleDescriptor; + }()); + formatting.RuleDescriptor = RuleDescriptor; + })(formatting = ts.formatting || (ts.formatting = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var formatting; + (function (formatting) { + var RuleOperation = (function () { + function RuleOperation() { + this.Context = null; + this.Action = null; + } + RuleOperation.prototype.toString = function () { + return "[context=" + this.Context + "," + + "action=" + this.Action + "]"; + }; + RuleOperation.create1 = function (action) { + return RuleOperation.create2(formatting.RuleOperationContext.Any, action); + }; + RuleOperation.create2 = function (context, action) { + var result = new RuleOperation(); + result.Context = context; + result.Action = action; + return result; + }; + return RuleOperation; + }()); + formatting.RuleOperation = RuleOperation; + })(formatting = ts.formatting || (ts.formatting = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var formatting; + (function (formatting) { + var RuleOperationContext = (function () { + function RuleOperationContext() { + var funcs = []; + for (var _i = 0; _i < arguments.length; _i++) { + funcs[_i - 0] = arguments[_i]; + } + this.customContextChecks = funcs; + } + RuleOperationContext.prototype.IsAny = function () { + return this === RuleOperationContext.Any; + }; + RuleOperationContext.prototype.InContext = function (context) { + if (this.IsAny()) { + return true; + } + for (var _i = 0, _a = this.customContextChecks; _i < _a.length; _i++) { + var check = _a[_i]; + if (!check(context)) { + return false; + } + } + return true; + }; + RuleOperationContext.Any = new RuleOperationContext(); + return RuleOperationContext; + }()); + formatting.RuleOperationContext = RuleOperationContext; + })(formatting = ts.formatting || (ts.formatting = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var formatting; + (function (formatting) { + var Rules = (function () { + function Rules() { + this.IgnoreBeforeComment = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.Comments), formatting.RuleOperation.create1(1)); + this.IgnoreAfterLineComment = new formatting.Rule(formatting.RuleDescriptor.create3(2, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create1(1)); + this.NoSpaceBeforeSemicolon = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 23), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceBeforeColon = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 54), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNotBinaryOpContext), 8)); + this.NoSpaceBeforeQuestionMark = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 53), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNotBinaryOpContext), 8)); + this.SpaceAfterColon = new formatting.Rule(formatting.RuleDescriptor.create3(54, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNotBinaryOpContext), 2)); + this.SpaceAfterQuestionMarkInConditionalOperator = new formatting.Rule(formatting.RuleDescriptor.create3(53, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsConditionalOperatorContext), 2)); + this.NoSpaceAfterQuestionMark = new formatting.Rule(formatting.RuleDescriptor.create3(53, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.SpaceAfterSemicolon = new formatting.Rule(formatting.RuleDescriptor.create3(23, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.SpaceAfterCloseBrace = new formatting.Rule(formatting.RuleDescriptor.create3(16, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsAfterCodeBlockContext), 2)); + this.SpaceBetweenCloseBraceAndElse = new formatting.Rule(formatting.RuleDescriptor.create1(16, 80), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.SpaceBetweenCloseBraceAndWhile = new formatting.Rule(formatting.RuleDescriptor.create1(16, 104), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.NoSpaceAfterCloseBrace = new formatting.Rule(formatting.RuleDescriptor.create3(16, formatting.Shared.TokenRange.FromTokens([18, 20, 24, 23])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceBeforeDot = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 21), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceAfterDot = new formatting.Rule(formatting.RuleDescriptor.create3(21, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceBeforeOpenBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 19), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceAfterCloseBracket = new formatting.Rule(formatting.RuleDescriptor.create3(20, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNotBeforeBlockInFunctionDeclarationContext), 8)); + this.FunctionOpenBraceLeftTokenRange = formatting.Shared.TokenRange.AnyIncludingMultilineComments; + this.SpaceBeforeOpenBraceInFunction = new formatting.Rule(formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2), 1); + this.TypeScriptOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([69, 3, 73]); + this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock = new formatting.Rule(formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2), 1); + this.ControlOpenBraceLeftTokenRange = formatting.Shared.TokenRange.FromTokens([18, 3, 79, 100, 85, 80]); + this.SpaceBeforeOpenBraceInControl = new formatting.Rule(formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsNotFormatOnEnter, Rules.IsSameLineTokenOrBeforeMultilineBlockContext), 2), 1); + this.SpaceAfterOpenBrace = new formatting.Rule(formatting.RuleDescriptor.create3(15, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 2)); + this.SpaceBeforeCloseBrace = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsSingleLineBlockContext), 2)); + this.NoSpaceBetweenEmptyBraceBrackets = new formatting.Rule(formatting.RuleDescriptor.create1(15, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsObjectContext), 8)); + this.NewLineAfterOpenBraceInBlockContext = new formatting.Rule(formatting.RuleDescriptor.create3(15, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 4)); + this.NewLineBeforeCloseBraceInBlockContext = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.AnyIncludingMultilineComments, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsMultilineBlockContext), 4)); + this.NoSpaceAfterUnaryPrefixOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.UnaryPrefixOperators, formatting.Shared.TokenRange.UnaryPrefixExpressions), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNotBinaryOpContext), 8)); + this.NoSpaceAfterUnaryPreincrementOperator = new formatting.Rule(formatting.RuleDescriptor.create3(41, formatting.Shared.TokenRange.UnaryPreincrementExpressions), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceAfterUnaryPredecrementOperator = new formatting.Rule(formatting.RuleDescriptor.create3(42, formatting.Shared.TokenRange.UnaryPredecrementExpressions), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceBeforeUnaryPostincrementOperator = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.UnaryPostincrementExpressions, 41), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceBeforeUnaryPostdecrementOperator = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.UnaryPostdecrementExpressions, 42), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.SpaceAfterPostincrementWhenFollowedByAdd = new formatting.Rule(formatting.RuleDescriptor.create1(41, 35), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterAddWhenFollowedByUnaryPlus = new formatting.Rule(formatting.RuleDescriptor.create1(35, 35), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterAddWhenFollowedByPreincrement = new formatting.Rule(formatting.RuleDescriptor.create1(35, 41), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterPostdecrementWhenFollowedBySubtract = new formatting.Rule(formatting.RuleDescriptor.create1(42, 36), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterSubtractWhenFollowedByUnaryMinus = new formatting.Rule(formatting.RuleDescriptor.create1(36, 36), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterSubtractWhenFollowedByPredecrement = new formatting.Rule(formatting.RuleDescriptor.create1(36, 42), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.NoSpaceBeforeComma = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 24), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.SpaceAfterCertainKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([102, 98, 92, 78, 94, 101, 119]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.SpaceAfterLetConstInVariableDeclaration = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([108, 74]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsStartOfVariableDeclarationList), 2)); + this.NoSpaceBeforeOpenParenInFuncCall = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsFunctionCallOrNewContext, Rules.IsPreviousTokenNotComma), 8)); + this.SpaceAfterFunctionInFuncDecl = new formatting.Rule(formatting.RuleDescriptor.create3(87, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2)); + this.NoSpaceBeforeOpenParenInFuncDecl = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsFunctionDeclContext), 8)); + this.SpaceAfterVoidOperator = new formatting.Rule(formatting.RuleDescriptor.create3(103, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsVoidOpContext), 2)); + this.NoSpaceBetweenReturnAndSemicolon = new formatting.Rule(formatting.RuleDescriptor.create1(94, 23), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.SpaceBetweenStatements = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([18, 79, 80, 71]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNotForContext), 2)); + this.SpaceAfterTryFinally = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([100, 85]), 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.SpaceAfterGetSetInMember = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([123, 131]), 69), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2)); + this.SpaceBeforeBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryKeywordOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryKeywordOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.NoSpaceAfterConstructor = new formatting.Rule(formatting.RuleDescriptor.create1(121, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceAfterModuleImport = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([125, 129]), 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.SpaceAfterCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([115, 73, 122, 77, 81, 82, 83, 123, 106, 89, 107, 125, 126, 110, 112, 111, 131, 113, 134]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.SpaceBeforeCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([83, 106])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.SpaceAfterModuleName = new formatting.Rule(formatting.RuleDescriptor.create1(9, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsModuleDeclContext), 2)); + this.SpaceBeforeArrow = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 34), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.SpaceAfterArrow = new formatting.Rule(formatting.RuleDescriptor.create3(34, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.NoSpaceAfterEllipsis = new formatting.Rule(formatting.RuleDescriptor.create1(22, 69), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceAfterOptionalParameters = new formatting.Rule(formatting.RuleDescriptor.create3(53, formatting.Shared.TokenRange.FromTokens([18, 24])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNotBinaryOpContext), 8)); + this.NoSpaceBeforeOpenAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.TypeNames, 25), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsTypeArgumentOrParameterOrAssertionContext), 8)); + this.NoSpaceBetweenCloseParenAndAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create1(18, 25), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsTypeArgumentOrParameterOrAssertionContext), 8)); + this.NoSpaceAfterOpenAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create3(25, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsTypeArgumentOrParameterOrAssertionContext), 8)); + this.NoSpaceBeforeCloseAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 27), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsTypeArgumentOrParameterOrAssertionContext), 8)); + this.NoSpaceAfterCloseAngularBracket = new formatting.Rule(formatting.RuleDescriptor.create3(27, formatting.Shared.TokenRange.FromTokens([17, 19, 27, 24])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsTypeArgumentOrParameterOrAssertionContext), 8)); + this.NoSpaceAfterTypeAssertion = new formatting.Rule(formatting.RuleDescriptor.create3(27, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsTypeAssertionContext), 8)); + this.NoSpaceBetweenEmptyInterfaceBraceBrackets = new formatting.Rule(formatting.RuleDescriptor.create1(15, 16), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsObjectTypeContext), 8)); + this.SpaceBeforeAt = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 55), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.NoSpaceAfterAt = new formatting.Rule(formatting.RuleDescriptor.create3(55, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.SpaceAfterDecorator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([115, 69, 82, 77, 73, 113, 112, 110, 111, 123, 131, 19, 37])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsEndOfDecoratorContextOnSameLine), 2)); + this.NoSpaceBetweenFunctionKeywordAndStar = new formatting.Rule(formatting.RuleDescriptor.create1(87, 37), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclarationOrFunctionExpressionContext), 8)); + this.SpaceAfterStarInGeneratorDeclaration = new formatting.Rule(formatting.RuleDescriptor.create3(37, formatting.Shared.TokenRange.FromTokens([69, 17])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclarationOrFunctionExpressionContext), 2)); + this.NoSpaceBetweenYieldKeywordAndStar = new formatting.Rule(formatting.RuleDescriptor.create1(114, 37), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsYieldOrYieldStarWithOperand), 8)); + this.SpaceBetweenYieldOrYieldStarAndOperand = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([114, 37]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsYieldOrYieldStarWithOperand), 2)); + this.SpaceBetweenAsyncAndOpenParen = new formatting.Rule(formatting.RuleDescriptor.create1(118, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsArrowFunctionContext, Rules.IsNonJsxSameLineTokenContext), 2)); + this.SpaceBetweenAsyncAndFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(118, 87), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.NoSpaceBetweenTagAndTemplateString = new formatting.Rule(formatting.RuleDescriptor.create3(69, formatting.Shared.TokenRange.FromTokens([11, 12])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.HighPriorityCommonRules = [ + this.IgnoreBeforeComment, this.IgnoreAfterLineComment, + this.NoSpaceBeforeColon, this.SpaceAfterColon, this.NoSpaceBeforeQuestionMark, this.SpaceAfterQuestionMarkInConditionalOperator, + this.NoSpaceAfterQuestionMark, + this.NoSpaceBeforeDot, this.NoSpaceAfterDot, + this.NoSpaceAfterUnaryPrefixOperator, + this.NoSpaceAfterUnaryPreincrementOperator, this.NoSpaceAfterUnaryPredecrementOperator, + this.NoSpaceBeforeUnaryPostincrementOperator, this.NoSpaceBeforeUnaryPostdecrementOperator, + this.SpaceAfterPostincrementWhenFollowedByAdd, + this.SpaceAfterAddWhenFollowedByUnaryPlus, this.SpaceAfterAddWhenFollowedByPreincrement, + this.SpaceAfterPostdecrementWhenFollowedBySubtract, + this.SpaceAfterSubtractWhenFollowedByUnaryMinus, this.SpaceAfterSubtractWhenFollowedByPredecrement, + this.NoSpaceAfterCloseBrace, + this.SpaceAfterOpenBrace, this.SpaceBeforeCloseBrace, this.NewLineBeforeCloseBraceInBlockContext, + this.SpaceAfterCloseBrace, this.SpaceBetweenCloseBraceAndElse, this.SpaceBetweenCloseBraceAndWhile, this.NoSpaceBetweenEmptyBraceBrackets, + this.NoSpaceBetweenFunctionKeywordAndStar, this.SpaceAfterStarInGeneratorDeclaration, + this.SpaceAfterFunctionInFuncDecl, this.NewLineAfterOpenBraceInBlockContext, this.SpaceAfterGetSetInMember, + this.NoSpaceBetweenYieldKeywordAndStar, this.SpaceBetweenYieldOrYieldStarAndOperand, + this.NoSpaceBetweenReturnAndSemicolon, + this.SpaceAfterCertainKeywords, + this.SpaceAfterLetConstInVariableDeclaration, + this.NoSpaceBeforeOpenParenInFuncCall, + this.SpaceBeforeBinaryKeywordOperator, this.SpaceAfterBinaryKeywordOperator, + this.SpaceAfterVoidOperator, + this.SpaceBetweenAsyncAndOpenParen, this.SpaceBetweenAsyncAndFunctionKeyword, + this.NoSpaceBetweenTagAndTemplateString, + this.NoSpaceAfterConstructor, this.NoSpaceAfterModuleImport, + this.SpaceAfterCertainTypeScriptKeywords, this.SpaceBeforeCertainTypeScriptKeywords, + this.SpaceAfterModuleName, + this.SpaceBeforeArrow, this.SpaceAfterArrow, + this.NoSpaceAfterEllipsis, + this.NoSpaceAfterOptionalParameters, + this.NoSpaceBetweenEmptyInterfaceBraceBrackets, + this.NoSpaceBeforeOpenAngularBracket, + this.NoSpaceBetweenCloseParenAndAngularBracket, + this.NoSpaceAfterOpenAngularBracket, + this.NoSpaceBeforeCloseAngularBracket, + this.NoSpaceAfterCloseAngularBracket, + this.NoSpaceAfterTypeAssertion, + this.SpaceBeforeAt, + this.NoSpaceAfterAt, + this.SpaceAfterDecorator, + ]; + this.LowPriorityCommonRules = [ + this.NoSpaceBeforeSemicolon, + this.SpaceBeforeOpenBraceInControl, this.SpaceBeforeOpenBraceInFunction, this.SpaceBeforeOpenBraceInTypeScriptDeclWithBlock, + this.NoSpaceBeforeComma, + this.NoSpaceBeforeOpenBracket, + this.NoSpaceAfterCloseBracket, + this.SpaceAfterSemicolon, + this.NoSpaceBeforeOpenParenInFuncDecl, + this.SpaceBetweenStatements, this.SpaceAfterTryFinally + ]; + this.SpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsNextTokenNotCloseBracket), 2)); + this.NoSpaceAfterComma = new formatting.Rule(formatting.RuleDescriptor.create3(24, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.SpaceBeforeBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.SpaceAfterBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2)); + this.NoSpaceBeforeBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 8)); + this.NoSpaceAfterBinaryOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 8)); + this.SpaceAfterKeywordInControl = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Keywords, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext), 2)); + this.NoSpaceAfterKeywordInControl = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Keywords, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext), 8)); + this.NewLineBeforeOpenBraceInFunction = new formatting.Rule(formatting.RuleDescriptor.create2(this.FunctionOpenBraceLeftTokenRange, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext, Rules.IsBeforeMultilineBlockContext), 4), 1); + this.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock = new formatting.Rule(formatting.RuleDescriptor.create2(this.TypeScriptOpenBraceLeftTokenRange, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsTypeScriptDeclWithBlockContext, Rules.IsBeforeMultilineBlockContext), 4), 1); + this.NewLineBeforeOpenBraceInControl = new formatting.Rule(formatting.RuleDescriptor.create2(this.ControlOpenBraceLeftTokenRange, 15), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsControlDeclContext, Rules.IsBeforeMultilineBlockContext), 4), 1); + this.SpaceAfterSemicolonInFor = new formatting.Rule(formatting.RuleDescriptor.create3(23, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsForContext), 2)); + this.NoSpaceAfterSemicolonInFor = new formatting.Rule(formatting.RuleDescriptor.create3(23, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsForContext), 8)); + this.SpaceAfterOpenParen = new formatting.Rule(formatting.RuleDescriptor.create3(17, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.SpaceBeforeCloseParen = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 18), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.NoSpaceBetweenParens = new formatting.Rule(formatting.RuleDescriptor.create1(17, 18), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceAfterOpenParen = new formatting.Rule(formatting.RuleDescriptor.create3(17, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceBeforeCloseParen = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 18), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.SpaceAfterOpenBracket = new formatting.Rule(formatting.RuleDescriptor.create3(19, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.SpaceBeforeCloseBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 20), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.NoSpaceBetweenBrackets = new formatting.Rule(formatting.RuleDescriptor.create1(19, 20), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceAfterOpenBracket = new formatting.Rule(formatting.RuleDescriptor.create3(19, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceBeforeCloseBracket = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 20), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.NoSpaceAfterTemplateHeadAndMiddle = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([12, 13]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.SpaceAfterTemplateHeadAndMiddle = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([12, 13]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.NoSpaceBeforeTemplateMiddleAndTail = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([13, 14])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8)); + this.SpaceBeforeTemplateMiddleAndTail = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([13, 14])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2)); + this.SpaceAfterAnonymousFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(87, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2)); + this.NoSpaceAfterAnonymousFunctionKeyword = new formatting.Rule(formatting.RuleDescriptor.create1(87, 17), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 8)); + } + Rules.prototype.getRuleName = function (rule) { + var o = this; + for (var name_38 in o) { + if (o[name_38] === rule) { + return name_38; + } + } + throw new Error("Unknown rule"); + }; + Rules.IsForContext = function (context) { + return context.contextNode.kind === 206; + }; + Rules.IsNotForContext = function (context) { + return !Rules.IsForContext(context); + }; + Rules.IsBinaryOpContext = function (context) { + switch (context.contextNode.kind) { + case 187: + case 188: + case 195: + case 154: + case 162: + case 163: + return true; + case 169: + case 223: + case 229: + case 218: + case 142: + case 255: + case 145: + case 144: + return context.currentTokenSpan.kind === 56 || context.nextTokenSpan.kind === 56; + case 207: + return context.currentTokenSpan.kind === 90 || context.nextTokenSpan.kind === 90; + case 208: + return context.currentTokenSpan.kind === 138 || context.nextTokenSpan.kind === 138; + } + return false; + }; + Rules.IsNotBinaryOpContext = function (context) { + return !Rules.IsBinaryOpContext(context); + }; + Rules.IsConditionalOperatorContext = function (context) { + return context.contextNode.kind === 188; + }; + Rules.IsSameLineTokenOrBeforeMultilineBlockContext = function (context) { + return context.TokensAreOnSameLine() || Rules.IsBeforeMultilineBlockContext(context); + }; + Rules.IsBeforeMultilineBlockContext = function (context) { + return Rules.IsBeforeBlockContext(context) && !(context.NextNodeAllOnSameLine() || context.NextNodeBlockIsOnOneLine()); + }; + Rules.IsMultilineBlockContext = function (context) { + return Rules.IsBlockContext(context) && !(context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); + }; + Rules.IsSingleLineBlockContext = function (context) { + return Rules.IsBlockContext(context) && (context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); + }; + Rules.IsBlockContext = function (context) { + return Rules.NodeIsBlockContext(context.contextNode); + }; + Rules.IsBeforeBlockContext = function (context) { + return Rules.NodeIsBlockContext(context.nextTokenParent); + }; + Rules.NodeIsBlockContext = function (node) { + if (Rules.NodeIsTypeScriptDeclWithBlockContext(node)) { + return true; + } + switch (node.kind) { + case 199: + case 227: + case 171: + case 226: + return true; + } + return false; + }; + Rules.IsFunctionDeclContext = function (context) { + switch (context.contextNode.kind) { + case 220: + case 147: + case 146: + case 149: + case 150: + case 151: + case 179: + case 148: + case 180: + case 222: + return true; + } + return false; + }; + Rules.IsFunctionDeclarationOrFunctionExpressionContext = function (context) { + return context.contextNode.kind === 220 || context.contextNode.kind === 179; + }; + Rules.IsTypeScriptDeclWithBlockContext = function (context) { + return Rules.NodeIsTypeScriptDeclWithBlockContext(context.contextNode); + }; + Rules.NodeIsTypeScriptDeclWithBlockContext = function (node) { + switch (node.kind) { + case 221: + case 192: + case 222: + case 224: + case 159: + case 225: + return true; + } + return false; + }; + Rules.IsAfterCodeBlockContext = function (context) { + switch (context.currentTokenParent.kind) { + case 221: + case 225: + case 224: + case 199: + case 252: + case 226: + case 213: + return true; + } + return false; + }; + Rules.IsControlDeclContext = function (context) { + switch (context.contextNode.kind) { + case 203: + case 213: + case 206: + case 207: + case 208: + case 205: + case 216: + case 204: + case 212: + case 252: + return true; + default: + return false; + } + }; + Rules.IsObjectContext = function (context) { + return context.contextNode.kind === 171; + }; + Rules.IsFunctionCallContext = function (context) { + return context.contextNode.kind === 174; + }; + Rules.IsNewContext = function (context) { + return context.contextNode.kind === 175; + }; + Rules.IsFunctionCallOrNewContext = function (context) { + return Rules.IsFunctionCallContext(context) || Rules.IsNewContext(context); + }; + Rules.IsPreviousTokenNotComma = function (context) { + return context.currentTokenSpan.kind !== 24; + }; + Rules.IsNextTokenNotCloseBracket = function (context) { + return context.nextTokenSpan.kind !== 20; + }; + Rules.IsArrowFunctionContext = function (context) { + return context.contextNode.kind === 180; + }; + Rules.IsNonJsxSameLineTokenContext = function (context) { + return context.TokensAreOnSameLine() && context.contextNode.kind !== 244; + }; + Rules.IsNotBeforeBlockInFunctionDeclarationContext = function (context) { + return !Rules.IsFunctionDeclContext(context) && !Rules.IsBeforeBlockContext(context); + }; + Rules.IsEndOfDecoratorContextOnSameLine = function (context) { + return context.TokensAreOnSameLine() && + context.contextNode.decorators && + Rules.NodeIsInDecoratorContext(context.currentTokenParent) && + !Rules.NodeIsInDecoratorContext(context.nextTokenParent); + }; + Rules.NodeIsInDecoratorContext = function (node) { + while (ts.isExpression(node)) { + node = node.parent; + } + return node.kind === 143; + }; + Rules.IsStartOfVariableDeclarationList = function (context) { + return context.currentTokenParent.kind === 219 && + context.currentTokenParent.getStart(context.sourceFile) === context.currentTokenSpan.pos; + }; + Rules.IsNotFormatOnEnter = function (context) { + return context.formattingRequestKind !== 2; + }; + Rules.IsModuleDeclContext = function (context) { + return context.contextNode.kind === 225; + }; + Rules.IsObjectTypeContext = function (context) { + return context.contextNode.kind === 159; + }; + Rules.IsTypeArgumentOrParameterOrAssertion = function (token, parent) { + if (token.kind !== 25 && token.kind !== 27) { + return false; + } + switch (parent.kind) { + case 155: + case 177: + case 221: + case 192: + case 222: + case 220: + case 179: + case 180: + case 147: + case 146: + case 151: + case 152: + case 174: + case 175: + case 194: + return true; + default: + return false; + } + }; + Rules.IsTypeArgumentOrParameterOrAssertionContext = function (context) { + return Rules.IsTypeArgumentOrParameterOrAssertion(context.currentTokenSpan, context.currentTokenParent) || + Rules.IsTypeArgumentOrParameterOrAssertion(context.nextTokenSpan, context.nextTokenParent); + }; + Rules.IsTypeAssertionContext = function (context) { + return context.contextNode.kind === 177; + }; + Rules.IsVoidOpContext = function (context) { + return context.currentTokenSpan.kind === 103 && context.currentTokenParent.kind === 183; + }; + Rules.IsYieldOrYieldStarWithOperand = function (context) { + return context.contextNode.kind === 190 && context.contextNode.expression !== undefined; + }; + return Rules; + }()); + formatting.Rules = Rules; + })(formatting = ts.formatting || (ts.formatting = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var formatting; + (function (formatting) { + var RulesMap = (function () { + function RulesMap() { + this.map = []; + this.mapRowLength = 0; + } + RulesMap.create = function (rules) { + var result = new RulesMap(); + result.Initialize(rules); + return result; + }; + RulesMap.prototype.Initialize = function (rules) { + this.mapRowLength = 138 + 1; + this.map = new Array(this.mapRowLength * this.mapRowLength); + var rulesBucketConstructionStateList = new Array(this.map.length); + this.FillRules(rules, rulesBucketConstructionStateList); + return this.map; + }; + RulesMap.prototype.FillRules = function (rules, rulesBucketConstructionStateList) { + var _this = this; + rules.forEach(function (rule) { + _this.FillRule(rule, rulesBucketConstructionStateList); + }); + }; + RulesMap.prototype.GetRuleBucketIndex = function (row, column) { + var rulesBucketIndex = (row * this.mapRowLength) + column; + return rulesBucketIndex; + }; + RulesMap.prototype.FillRule = function (rule, rulesBucketConstructionStateList) { + var _this = this; + var specificRule = rule.Descriptor.LeftTokenRange !== formatting.Shared.TokenRange.Any && + rule.Descriptor.RightTokenRange !== formatting.Shared.TokenRange.Any; + rule.Descriptor.LeftTokenRange.GetTokens().forEach(function (left) { + rule.Descriptor.RightTokenRange.GetTokens().forEach(function (right) { + var rulesBucketIndex = _this.GetRuleBucketIndex(left, right); + var rulesBucket = _this.map[rulesBucketIndex]; + if (rulesBucket === undefined) { + rulesBucket = _this.map[rulesBucketIndex] = new RulesBucket(); + } + rulesBucket.AddRule(rule, specificRule, rulesBucketConstructionStateList, rulesBucketIndex); + }); + }); + }; + RulesMap.prototype.GetRule = function (context) { + var bucketIndex = this.GetRuleBucketIndex(context.currentTokenSpan.kind, context.nextTokenSpan.kind); + var bucket = this.map[bucketIndex]; + if (bucket != null) { + for (var _i = 0, _a = bucket.Rules(); _i < _a.length; _i++) { + var rule = _a[_i]; + if (rule.Operation.Context.InContext(context)) { + return rule; + } + } + } + return null; + }; + return RulesMap; + }()); + formatting.RulesMap = RulesMap; + var MaskBitSize = 5; + var Mask = 0x1f; + (function (RulesPosition) { + RulesPosition[RulesPosition["IgnoreRulesSpecific"] = 0] = "IgnoreRulesSpecific"; + RulesPosition[RulesPosition["IgnoreRulesAny"] = MaskBitSize * 1] = "IgnoreRulesAny"; + RulesPosition[RulesPosition["ContextRulesSpecific"] = MaskBitSize * 2] = "ContextRulesSpecific"; + RulesPosition[RulesPosition["ContextRulesAny"] = MaskBitSize * 3] = "ContextRulesAny"; + RulesPosition[RulesPosition["NoContextRulesSpecific"] = MaskBitSize * 4] = "NoContextRulesSpecific"; + RulesPosition[RulesPosition["NoContextRulesAny"] = MaskBitSize * 5] = "NoContextRulesAny"; + })(formatting.RulesPosition || (formatting.RulesPosition = {})); + var RulesPosition = formatting.RulesPosition; + var RulesBucketConstructionState = (function () { + function RulesBucketConstructionState() { + this.rulesInsertionIndexBitmap = 0; + } + RulesBucketConstructionState.prototype.GetInsertionIndex = function (maskPosition) { + var index = 0; + var pos = 0; + var indexBitmap = this.rulesInsertionIndexBitmap; + while (pos <= maskPosition) { + index += (indexBitmap & Mask); + indexBitmap >>= MaskBitSize; + pos += MaskBitSize; + } + return index; + }; + RulesBucketConstructionState.prototype.IncreaseInsertionIndex = function (maskPosition) { + var value = (this.rulesInsertionIndexBitmap >> maskPosition) & Mask; + value++; + ts.Debug.assert((value & Mask) === value, "Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules."); + var temp = this.rulesInsertionIndexBitmap & ~(Mask << maskPosition); + temp |= value << maskPosition; + this.rulesInsertionIndexBitmap = temp; + }; + return RulesBucketConstructionState; + }()); + formatting.RulesBucketConstructionState = RulesBucketConstructionState; + var RulesBucket = (function () { + function RulesBucket() { + this.rules = []; + } + RulesBucket.prototype.Rules = function () { + return this.rules; + }; + RulesBucket.prototype.AddRule = function (rule, specificTokens, constructionState, rulesBucketIndex) { + var position; + if (rule.Operation.Action === 1) { + position = specificTokens ? + RulesPosition.IgnoreRulesSpecific : + RulesPosition.IgnoreRulesAny; + } + else if (!rule.Operation.Context.IsAny()) { + position = specificTokens ? + RulesPosition.ContextRulesSpecific : + RulesPosition.ContextRulesAny; + } + else { + position = specificTokens ? + RulesPosition.NoContextRulesSpecific : + RulesPosition.NoContextRulesAny; + } + var state = constructionState[rulesBucketIndex]; + if (state === undefined) { + state = constructionState[rulesBucketIndex] = new RulesBucketConstructionState(); + } + var index = state.GetInsertionIndex(position); + this.rules.splice(index, 0, rule); + state.IncreaseInsertionIndex(position); + }; + return RulesBucket; + }()); + formatting.RulesBucket = RulesBucket; + })(formatting = ts.formatting || (ts.formatting = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var formatting; + (function (formatting) { + var Shared; + (function (Shared) { + var TokenRangeAccess = (function () { + function TokenRangeAccess(from, to, except) { + this.tokens = []; + for (var token = from; token <= to; token++) { + if (ts.indexOf(except, token) < 0) { + this.tokens.push(token); + } + } + } + TokenRangeAccess.prototype.GetTokens = function () { + return this.tokens; + }; + TokenRangeAccess.prototype.Contains = function (token) { + return this.tokens.indexOf(token) >= 0; + }; + return TokenRangeAccess; + }()); + Shared.TokenRangeAccess = TokenRangeAccess; + var TokenValuesAccess = (function () { + function TokenValuesAccess(tks) { + this.tokens = tks && tks.length ? tks : []; + } + TokenValuesAccess.prototype.GetTokens = function () { + return this.tokens; + }; + TokenValuesAccess.prototype.Contains = function (token) { + return this.tokens.indexOf(token) >= 0; + }; + return TokenValuesAccess; + }()); + Shared.TokenValuesAccess = TokenValuesAccess; + var TokenSingleValueAccess = (function () { + function TokenSingleValueAccess(token) { + this.token = token; + } + TokenSingleValueAccess.prototype.GetTokens = function () { + return [this.token]; + }; + TokenSingleValueAccess.prototype.Contains = function (tokenValue) { + return tokenValue === this.token; + }; + return TokenSingleValueAccess; + }()); + Shared.TokenSingleValueAccess = TokenSingleValueAccess; + var TokenAllAccess = (function () { + function TokenAllAccess() { + } + TokenAllAccess.prototype.GetTokens = function () { + var result = []; + for (var token = 0; token <= 138; token++) { + result.push(token); + } + return result; + }; + TokenAllAccess.prototype.Contains = function (tokenValue) { + return true; + }; + TokenAllAccess.prototype.toString = function () { + return "[allTokens]"; + }; + return TokenAllAccess; + }()); + Shared.TokenAllAccess = TokenAllAccess; + var TokenRange = (function () { + function TokenRange(tokenAccess) { + this.tokenAccess = tokenAccess; + } + TokenRange.FromToken = function (token) { + return new TokenRange(new TokenSingleValueAccess(token)); + }; + TokenRange.FromTokens = function (tokens) { + return new TokenRange(new TokenValuesAccess(tokens)); + }; + TokenRange.FromRange = function (f, to, except) { + if (except === void 0) { except = []; } + return new TokenRange(new TokenRangeAccess(f, to, except)); + }; + TokenRange.AllTokens = function () { + return new TokenRange(new TokenAllAccess()); + }; + TokenRange.prototype.GetTokens = function () { + return this.tokenAccess.GetTokens(); + }; + TokenRange.prototype.Contains = function (token) { + return this.tokenAccess.Contains(token); + }; + TokenRange.prototype.toString = function () { + return this.tokenAccess.toString(); + }; + TokenRange.Any = TokenRange.AllTokens(); + TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([3])); + TokenRange.Keywords = TokenRange.FromRange(70, 138); + TokenRange.BinaryOperators = TokenRange.FromRange(25, 68); + TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([90, 91, 138, 116, 124]); + TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([41, 42, 50, 49]); + TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([8, 69, 17, 19, 15, 97, 92]); + TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([69, 17, 97, 92]); + TokenRange.UnaryPostincrementExpressions = TokenRange.FromTokens([69, 18, 20, 92]); + TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([69, 17, 97, 92]); + TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([69, 18, 20, 92]); + TokenRange.Comments = TokenRange.FromTokens([2, 3]); + TokenRange.TypeNames = TokenRange.FromTokens([69, 130, 132, 120, 133, 103, 117]); + return TokenRange; + }()); + Shared.TokenRange = TokenRange; + })(Shared = formatting.Shared || (formatting.Shared = {})); + })(formatting = ts.formatting || (ts.formatting = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var formatting; + (function (formatting) { + var RulesProvider = (function () { + function RulesProvider() { + this.globalRules = new formatting.Rules(); + } + RulesProvider.prototype.getRuleName = function (rule) { + return this.globalRules.getRuleName(rule); + }; + RulesProvider.prototype.getRuleByName = function (name) { + return this.globalRules[name]; + }; + RulesProvider.prototype.getRulesMap = function () { + return this.rulesMap; + }; + RulesProvider.prototype.ensureUpToDate = function (options) { + if (this.options == null || !ts.compareDataObjects(this.options, options)) { + var activeRules = this.createActiveRules(options); + var rulesMap = formatting.RulesMap.create(activeRules); + this.activeRules = activeRules; + this.rulesMap = rulesMap; + this.options = ts.clone(options); + } + }; + RulesProvider.prototype.createActiveRules = function (options) { + var rules = this.globalRules.HighPriorityCommonRules.slice(0); + if (options.InsertSpaceAfterCommaDelimiter) { + rules.push(this.globalRules.SpaceAfterComma); + } + else { + rules.push(this.globalRules.NoSpaceAfterComma); + } + if (options.InsertSpaceAfterFunctionKeywordForAnonymousFunctions) { + rules.push(this.globalRules.SpaceAfterAnonymousFunctionKeyword); + } + else { + rules.push(this.globalRules.NoSpaceAfterAnonymousFunctionKeyword); + } + if (options.InsertSpaceAfterKeywordsInControlFlowStatements) { + rules.push(this.globalRules.SpaceAfterKeywordInControl); + } + else { + rules.push(this.globalRules.NoSpaceAfterKeywordInControl); + } + if (options.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis) { + rules.push(this.globalRules.SpaceAfterOpenParen); + rules.push(this.globalRules.SpaceBeforeCloseParen); + rules.push(this.globalRules.NoSpaceBetweenParens); + } + else { + rules.push(this.globalRules.NoSpaceAfterOpenParen); + rules.push(this.globalRules.NoSpaceBeforeCloseParen); + rules.push(this.globalRules.NoSpaceBetweenParens); + } + if (options.InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets) { + rules.push(this.globalRules.SpaceAfterOpenBracket); + rules.push(this.globalRules.SpaceBeforeCloseBracket); + rules.push(this.globalRules.NoSpaceBetweenBrackets); + } + else { + rules.push(this.globalRules.NoSpaceAfterOpenBracket); + rules.push(this.globalRules.NoSpaceBeforeCloseBracket); + rules.push(this.globalRules.NoSpaceBetweenBrackets); + } + if (options.InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces) { + rules.push(this.globalRules.SpaceAfterTemplateHeadAndMiddle); + rules.push(this.globalRules.SpaceBeforeTemplateMiddleAndTail); + } + else { + rules.push(this.globalRules.NoSpaceAfterTemplateHeadAndMiddle); + rules.push(this.globalRules.NoSpaceBeforeTemplateMiddleAndTail); + } + if (options.InsertSpaceAfterSemicolonInForStatements) { + rules.push(this.globalRules.SpaceAfterSemicolonInFor); + } + else { + rules.push(this.globalRules.NoSpaceAfterSemicolonInFor); + } + if (options.InsertSpaceBeforeAndAfterBinaryOperators) { + rules.push(this.globalRules.SpaceBeforeBinaryOperator); + rules.push(this.globalRules.SpaceAfterBinaryOperator); + } + else { + rules.push(this.globalRules.NoSpaceBeforeBinaryOperator); + rules.push(this.globalRules.NoSpaceAfterBinaryOperator); + } + if (options.PlaceOpenBraceOnNewLineForControlBlocks) { + rules.push(this.globalRules.NewLineBeforeOpenBraceInControl); + } + if (options.PlaceOpenBraceOnNewLineForFunctions) { + rules.push(this.globalRules.NewLineBeforeOpenBraceInFunction); + rules.push(this.globalRules.NewLineBeforeOpenBraceInTypeScriptDeclWithBlock); + } + rules = rules.concat(this.globalRules.LowPriorityCommonRules); + return rules; + }; + return RulesProvider; + }()); + formatting.RulesProvider = RulesProvider; + })(formatting = ts.formatting || (ts.formatting = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var formatting; + (function (formatting) { + function formatOnEnter(position, sourceFile, rulesProvider, options) { + var line = sourceFile.getLineAndCharacterOfPosition(position).line; + if (line === 0) { + return []; + } + var endOfFormatSpan = ts.getEndLinePosition(line, sourceFile); + while (ts.isWhiteSpace(sourceFile.text.charCodeAt(endOfFormatSpan)) && !ts.isLineBreak(sourceFile.text.charCodeAt(endOfFormatSpan))) { + endOfFormatSpan--; + } + var span = { + pos: ts.getStartPositionOfLine(line - 1, sourceFile), + end: endOfFormatSpan + 1 + }; + return formatSpan(span, sourceFile, options, rulesProvider, 2); + } + formatting.formatOnEnter = formatOnEnter; + function formatOnSemicolon(position, sourceFile, rulesProvider, options) { + return formatOutermostParent(position, 23, sourceFile, options, rulesProvider, 3); + } + formatting.formatOnSemicolon = formatOnSemicolon; + function formatOnClosingCurly(position, sourceFile, rulesProvider, options) { + return formatOutermostParent(position, 16, sourceFile, options, rulesProvider, 4); + } + formatting.formatOnClosingCurly = formatOnClosingCurly; + function formatDocument(sourceFile, rulesProvider, options) { + var span = { + pos: 0, + end: sourceFile.text.length + }; + return formatSpan(span, sourceFile, options, rulesProvider, 0); + } + formatting.formatDocument = formatDocument; + function formatSelection(start, end, sourceFile, rulesProvider, options) { + var span = { + pos: ts.getLineStartPositionForPosition(start, sourceFile), + end: end + }; + return formatSpan(span, sourceFile, options, rulesProvider, 1); + } + formatting.formatSelection = formatSelection; + function formatOutermostParent(position, expectedLastToken, sourceFile, options, rulesProvider, requestKind) { + var parent = findOutermostParent(position, expectedLastToken, sourceFile); + if (!parent) { + return []; + } + var span = { + pos: ts.getLineStartPositionForPosition(parent.getStart(sourceFile), sourceFile), + end: parent.end + }; + return formatSpan(span, sourceFile, options, rulesProvider, requestKind); + } + function findOutermostParent(position, expectedTokenKind, sourceFile) { + var precedingToken = ts.findPrecedingToken(position, sourceFile); + if (!precedingToken || + precedingToken.kind !== expectedTokenKind || + position !== precedingToken.getEnd()) { + return undefined; + } + var current = precedingToken; + while (current && + current.parent && + current.parent.end === precedingToken.end && + !isListElement(current.parent, current)) { + current = current.parent; + } + return current; + } + function isListElement(parent, node) { + switch (parent.kind) { + case 221: + case 222: + return ts.rangeContainsRange(parent.members, node); + case 225: + var body = parent.body; + return body && body.kind === 199 && ts.rangeContainsRange(body.statements, node); + case 256: + case 199: + case 226: + return ts.rangeContainsRange(parent.statements, node); + case 252: + return ts.rangeContainsRange(parent.block.statements, node); + } + return false; + } + function findEnclosingNode(range, sourceFile) { + return find(sourceFile); + function find(n) { + var candidate = ts.forEachChild(n, function (c) { return ts.startEndContainsRange(c.getStart(sourceFile), c.end, range) && c; }); + if (candidate) { + var result = find(candidate); + if (result) { + return result; + } + } + return n; + } + } + function prepareRangeContainsErrorFunction(errors, originalRange) { + if (!errors.length) { + return rangeHasNoErrors; + } + var sorted = errors + .filter(function (d) { return ts.rangeOverlapsWithStartEnd(originalRange, d.start, d.start + d.length); }) + .sort(function (e1, e2) { return e1.start - e2.start; }); + if (!sorted.length) { + return rangeHasNoErrors; + } + var index = 0; + return function (r) { + while (true) { + if (index >= sorted.length) { + return false; + } + var error = sorted[index]; + if (r.end <= error.start) { + return false; + } + if (ts.startEndOverlapsWithStartEnd(r.pos, r.end, error.start, error.start + error.length)) { + return true; + } + index++; + } + }; + function rangeHasNoErrors(r) { + return false; + } + } + function getScanStartPosition(enclosingNode, originalRange, sourceFile) { + var start = enclosingNode.getStart(sourceFile); + if (start === originalRange.pos && enclosingNode.end === originalRange.end) { + return start; + } + var precedingToken = ts.findPrecedingToken(originalRange.pos, sourceFile); + if (!precedingToken) { + return enclosingNode.pos; + } + if (precedingToken.end >= originalRange.pos) { + return enclosingNode.pos; + } + return precedingToken.end; + } + function getOwnOrInheritedDelta(n, options, sourceFile) { + var previousLine = -1; + var child; + while (n) { + var line = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)).line; + if (previousLine !== -1 && line !== previousLine) { + break; + } + if (formatting.SmartIndenter.shouldIndentChildNode(n, child)) { + return options.IndentSize; + } + previousLine = line; + child = n; + n = n.parent; + } + return 0; + } + function formatSpan(originalRange, sourceFile, options, rulesProvider, requestKind) { + var rangeContainsError = prepareRangeContainsErrorFunction(sourceFile.parseDiagnostics, originalRange); + var formattingContext = new formatting.FormattingContext(sourceFile, requestKind); + var enclosingNode = findEnclosingNode(originalRange, sourceFile); + var formattingScanner = formatting.getFormattingScanner(sourceFile, getScanStartPosition(enclosingNode, originalRange, sourceFile), originalRange.end); + var initialIndentation = formatting.SmartIndenter.getIndentationForNode(enclosingNode, originalRange, sourceFile, options); + var previousRangeHasError; + var previousRange; + var previousParent; + var previousRangeStartLine; + var lastIndentedLine; + var indentationOnLastIndentedLine; + var edits = []; + formattingScanner.advance(); + if (formattingScanner.isOnToken()) { + var startLine = sourceFile.getLineAndCharacterOfPosition(enclosingNode.getStart(sourceFile)).line; + var undecoratedStartLine = startLine; + if (enclosingNode.decorators) { + undecoratedStartLine = sourceFile.getLineAndCharacterOfPosition(ts.getNonDecoratorTokenPosOfNode(enclosingNode, sourceFile)).line; + } + var delta = getOwnOrInheritedDelta(enclosingNode, options, sourceFile); + processNode(enclosingNode, enclosingNode, startLine, undecoratedStartLine, initialIndentation, delta); + } + if (!formattingScanner.isOnToken()) { + var leadingTrivia = formattingScanner.getCurrentLeadingTrivia(); + if (leadingTrivia) { + processTrivia(leadingTrivia, enclosingNode, enclosingNode, undefined); + trimTrailingWhitespacesForRemainingRange(); + } + } + formattingScanner.close(); + return edits; + function tryComputeIndentationForListItem(startPos, endPos, parentStartLine, range, inheritedIndentation) { + if (ts.rangeOverlapsWithStartEnd(range, startPos, endPos) || + ts.rangeContainsStartEnd(range, startPos, endPos)) { + if (inheritedIndentation !== -1) { + return inheritedIndentation; + } + } + else { + var startLine = sourceFile.getLineAndCharacterOfPosition(startPos).line; + var startLinePosition = ts.getLineStartPositionForPosition(startPos, sourceFile); + var column = formatting.SmartIndenter.findFirstNonWhitespaceColumn(startLinePosition, startPos, sourceFile, options); + if (startLine !== parentStartLine || startPos === column) { + return column; + } + } + return -1; + } + function computeIndentation(node, startLine, inheritedIndentation, parent, parentDynamicIndentation, effectiveParentStartLine) { + var indentation = inheritedIndentation; + var delta = formatting.SmartIndenter.shouldIndentChildNode(node) ? options.IndentSize : 0; + if (effectiveParentStartLine === startLine) { + indentation = startLine === lastIndentedLine + ? indentationOnLastIndentedLine + : parentDynamicIndentation.getIndentation(); + delta = Math.min(options.IndentSize, parentDynamicIndentation.getDelta(node) + delta); + } + else if (indentation === -1) { + if (formatting.SmartIndenter.childStartsOnTheSameLineWithElseInIfStatement(parent, node, startLine, sourceFile)) { + indentation = parentDynamicIndentation.getIndentation(); + } + else { + indentation = parentDynamicIndentation.getIndentation() + parentDynamicIndentation.getDelta(node); + } + } + return { + indentation: indentation, + delta: delta + }; + } + function getFirstNonDecoratorTokenOfNode(node) { + if (node.modifiers && node.modifiers.length) { + return node.modifiers[0].kind; + } + switch (node.kind) { + case 221: return 73; + case 222: return 107; + case 220: return 87; + case 224: return 224; + case 149: return 123; + case 150: return 131; + case 147: + if (node.asteriskToken) { + return 37; + } + case 145: + case 142: + return node.name.kind; + } + } + function getDynamicIndentation(node, nodeStartLine, indentation, delta) { + return { + getIndentationForComment: function (kind, tokenIndentation, container) { + switch (kind) { + case 16: + case 20: + case 18: + return indentation + getEffectiveDelta(delta, container); + } + return tokenIndentation !== -1 ? tokenIndentation : indentation; + }, + getIndentationForToken: function (line, kind, container) { + if (nodeStartLine !== line && node.decorators) { + if (kind === getFirstNonDecoratorTokenOfNode(node)) { + return indentation; + } + } + switch (kind) { + case 15: + case 16: + case 19: + case 20: + case 17: + case 18: + case 80: + case 104: + case 55: + return indentation; + default: + return nodeStartLine !== line ? indentation + getEffectiveDelta(delta, container) : indentation; + } + }, + getIndentation: function () { return indentation; }, + getDelta: function (child) { return getEffectiveDelta(delta, child); }, + recomputeIndentation: function (lineAdded) { + if (node.parent && formatting.SmartIndenter.shouldIndentChildNode(node.parent, node)) { + if (lineAdded) { + indentation += options.IndentSize; + } + else { + indentation -= options.IndentSize; + } + if (formatting.SmartIndenter.shouldIndentChildNode(node)) { + delta = options.IndentSize; + } + else { + delta = 0; + } + } + } + }; + function getEffectiveDelta(delta, child) { + return formatting.SmartIndenter.nodeWillIndentChild(node, child, true) ? delta : 0; + } + } + function processNode(node, contextNode, nodeStartLine, undecoratedNodeStartLine, indentation, delta) { + if (!ts.rangeOverlapsWithStartEnd(originalRange, node.getStart(sourceFile), node.getEnd())) { + return; + } + var nodeDynamicIndentation = getDynamicIndentation(node, nodeStartLine, indentation, delta); + var childContextNode = contextNode; + ts.forEachChild(node, function (child) { + processChildNode(child, -1, node, nodeDynamicIndentation, nodeStartLine, undecoratedNodeStartLine, false); + }, function (nodes) { + processChildNodes(nodes, node, nodeStartLine, nodeDynamicIndentation); + }); + while (formattingScanner.isOnToken()) { + var tokenInfo = formattingScanner.readTokenInfo(node); + if (tokenInfo.token.end > node.end) { + break; + } + consumeTokenAndAdvanceScanner(tokenInfo, node, nodeDynamicIndentation); + } + function processChildNode(child, inheritedIndentation, parent, parentDynamicIndentation, parentStartLine, undecoratedParentStartLine, isListItem, isFirstListItem) { + var childStartPos = child.getStart(sourceFile); + var childStartLine = sourceFile.getLineAndCharacterOfPosition(childStartPos).line; + var undecoratedChildStartLine = childStartLine; + if (child.decorators) { + undecoratedChildStartLine = sourceFile.getLineAndCharacterOfPosition(ts.getNonDecoratorTokenPosOfNode(child, sourceFile)).line; + } + var childIndentationAmount = -1; + if (isListItem) { + childIndentationAmount = tryComputeIndentationForListItem(childStartPos, child.end, parentStartLine, originalRange, inheritedIndentation); + if (childIndentationAmount !== -1) { + inheritedIndentation = childIndentationAmount; + } + } + if (!ts.rangeOverlapsWithStartEnd(originalRange, child.pos, child.end)) { + return inheritedIndentation; + } + if (child.getFullWidth() === 0) { + return inheritedIndentation; + } + while (formattingScanner.isOnToken()) { + var tokenInfo = formattingScanner.readTokenInfo(node); + if (tokenInfo.token.end > childStartPos) { + break; + } + consumeTokenAndAdvanceScanner(tokenInfo, node, parentDynamicIndentation); + } + if (!formattingScanner.isOnToken()) { + return inheritedIndentation; + } + if (ts.isToken(child)) { + var tokenInfo = formattingScanner.readTokenInfo(child); + ts.Debug.assert(tokenInfo.token.end === child.end); + consumeTokenAndAdvanceScanner(tokenInfo, node, parentDynamicIndentation, child); + return inheritedIndentation; + } + var effectiveParentStartLine = child.kind === 143 ? childStartLine : undecoratedParentStartLine; + var childIndentation = computeIndentation(child, childStartLine, childIndentationAmount, node, parentDynamicIndentation, effectiveParentStartLine); + processNode(child, childContextNode, childStartLine, undecoratedChildStartLine, childIndentation.indentation, childIndentation.delta); + childContextNode = node; + if (isFirstListItem && parent.kind === 170 && inheritedIndentation === -1) { + inheritedIndentation = childIndentation.indentation; + } + return inheritedIndentation; + } + function processChildNodes(nodes, parent, parentStartLine, parentDynamicIndentation) { + var listStartToken = getOpenTokenForList(parent, nodes); + var listEndToken = getCloseTokenForOpenToken(listStartToken); + var listDynamicIndentation = parentDynamicIndentation; + var startLine = parentStartLine; + if (listStartToken !== 0) { + while (formattingScanner.isOnToken()) { + var tokenInfo = formattingScanner.readTokenInfo(parent); + if (tokenInfo.token.end > nodes.pos) { + break; + } + else if (tokenInfo.token.kind === listStartToken) { + startLine = sourceFile.getLineAndCharacterOfPosition(tokenInfo.token.pos).line; + var indentation_1 = computeIndentation(tokenInfo.token, startLine, -1, parent, parentDynamicIndentation, parentStartLine); + listDynamicIndentation = getDynamicIndentation(parent, parentStartLine, indentation_1.indentation, indentation_1.delta); + consumeTokenAndAdvanceScanner(tokenInfo, parent, listDynamicIndentation); + } + else { + consumeTokenAndAdvanceScanner(tokenInfo, parent, parentDynamicIndentation); + } + } + } + var inheritedIndentation = -1; + for (var i = 0; i < nodes.length; i++) { + var child = nodes[i]; + inheritedIndentation = processChildNode(child, inheritedIndentation, node, listDynamicIndentation, startLine, startLine, true, i === 0); + } + if (listEndToken !== 0) { + if (formattingScanner.isOnToken()) { + var tokenInfo = formattingScanner.readTokenInfo(parent); + if (tokenInfo.token.kind === listEndToken && ts.rangeContainsRange(parent, tokenInfo.token)) { + consumeTokenAndAdvanceScanner(tokenInfo, parent, listDynamicIndentation); + } + } + } + } + function consumeTokenAndAdvanceScanner(currentTokenInfo, parent, dynamicIndentation, container) { + ts.Debug.assert(ts.rangeContainsRange(parent, currentTokenInfo.token)); + var lastTriviaWasNewLine = formattingScanner.lastTrailingTriviaWasNewLine(); + var indentToken = false; + if (currentTokenInfo.leadingTrivia) { + processTrivia(currentTokenInfo.leadingTrivia, parent, childContextNode, dynamicIndentation); + } + var lineAdded; + var isTokenInRange = ts.rangeContainsRange(originalRange, currentTokenInfo.token); + var tokenStart = sourceFile.getLineAndCharacterOfPosition(currentTokenInfo.token.pos); + if (isTokenInRange) { + var rangeHasError = rangeContainsError(currentTokenInfo.token); + var savePreviousRange = previousRange; + lineAdded = processRange(currentTokenInfo.token, tokenStart, parent, childContextNode, dynamicIndentation); + if (rangeHasError) { + indentToken = false; + } + else { + if (lineAdded !== undefined) { + indentToken = lineAdded; + } + else { + var prevEndLine = savePreviousRange && sourceFile.getLineAndCharacterOfPosition(savePreviousRange.end).line; + indentToken = lastTriviaWasNewLine && tokenStart.line !== prevEndLine; + } + } + } + if (currentTokenInfo.trailingTrivia) { + processTrivia(currentTokenInfo.trailingTrivia, parent, childContextNode, dynamicIndentation); + } + if (indentToken) { + var tokenIndentation = (isTokenInRange && !rangeContainsError(currentTokenInfo.token)) ? + dynamicIndentation.getIndentationForToken(tokenStart.line, currentTokenInfo.token.kind, container) : + -1; + var indentNextTokenOrTrivia = true; + if (currentTokenInfo.leadingTrivia) { + var commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind, tokenIndentation, container); + for (var _i = 0, _a = currentTokenInfo.leadingTrivia; _i < _a.length; _i++) { + var triviaItem = _a[_i]; + var triviaInRange = ts.rangeContainsRange(originalRange, triviaItem); + switch (triviaItem.kind) { + case 3: + if (triviaInRange) { + indentMultilineComment(triviaItem, commentIndentation, !indentNextTokenOrTrivia); + } + indentNextTokenOrTrivia = false; + break; + case 2: + if (indentNextTokenOrTrivia && triviaInRange) { + insertIndentation(triviaItem.pos, commentIndentation, false); + } + indentNextTokenOrTrivia = false; + break; + case 4: + indentNextTokenOrTrivia = true; + break; + } + } + } + if (tokenIndentation !== -1 && indentNextTokenOrTrivia) { + insertIndentation(currentTokenInfo.token.pos, tokenIndentation, lineAdded); + lastIndentedLine = tokenStart.line; + indentationOnLastIndentedLine = tokenIndentation; + } + } + formattingScanner.advance(); + childContextNode = parent; + } + } + function processTrivia(trivia, parent, contextNode, dynamicIndentation) { + for (var _i = 0, trivia_1 = trivia; _i < trivia_1.length; _i++) { + var triviaItem = trivia_1[_i]; + if (ts.isComment(triviaItem.kind) && ts.rangeContainsRange(originalRange, triviaItem)) { + var triviaItemStart = sourceFile.getLineAndCharacterOfPosition(triviaItem.pos); + processRange(triviaItem, triviaItemStart, parent, contextNode, dynamicIndentation); + } + } + } + function processRange(range, rangeStart, parent, contextNode, dynamicIndentation) { + var rangeHasError = rangeContainsError(range); + var lineAdded; + if (!rangeHasError && !previousRangeHasError) { + if (!previousRange) { + var originalStart = sourceFile.getLineAndCharacterOfPosition(originalRange.pos); + trimTrailingWhitespacesForLines(originalStart.line, rangeStart.line); + } + else { + lineAdded = + processPair(range, rangeStart.line, parent, previousRange, previousRangeStartLine, previousParent, contextNode, dynamicIndentation); + } + } + previousRange = range; + previousParent = parent; + previousRangeStartLine = rangeStart.line; + previousRangeHasError = rangeHasError; + return lineAdded; + } + function processPair(currentItem, currentStartLine, currentParent, previousItem, previousStartLine, previousParent, contextNode, dynamicIndentation) { + formattingContext.updateContext(previousItem, previousParent, currentItem, currentParent, contextNode); + var rule = rulesProvider.getRulesMap().GetRule(formattingContext); + var trimTrailingWhitespaces; + var lineAdded; + if (rule) { + applyRuleEdits(rule, previousItem, previousStartLine, currentItem, currentStartLine); + if (rule.Operation.Action & (2 | 8) && currentStartLine !== previousStartLine) { + lineAdded = false; + if (currentParent.getStart(sourceFile) === currentItem.pos) { + dynamicIndentation.recomputeIndentation(false); + } + } + else if (rule.Operation.Action & 4 && currentStartLine === previousStartLine) { + lineAdded = true; + if (currentParent.getStart(sourceFile) === currentItem.pos) { + dynamicIndentation.recomputeIndentation(true); + } + } + trimTrailingWhitespaces = !(rule.Operation.Action & 8) && rule.Flag !== 1; + } + else { + trimTrailingWhitespaces = true; + } + if (currentStartLine !== previousStartLine && trimTrailingWhitespaces) { + trimTrailingWhitespacesForLines(previousStartLine, currentStartLine, previousItem); + } + return lineAdded; + } + function insertIndentation(pos, indentation, lineAdded) { + var indentationString = getIndentationString(indentation, options); + if (lineAdded) { + recordReplace(pos, 0, indentationString); + } + else { + var tokenStart = sourceFile.getLineAndCharacterOfPosition(pos); + var startLinePosition = ts.getStartPositionOfLine(tokenStart.line, sourceFile); + if (indentation !== tokenStart.character || indentationIsDifferent(indentationString, startLinePosition)) { + recordReplace(startLinePosition, tokenStart.character, indentationString); + } + } + } + function indentationIsDifferent(indentationString, startLinePosition) { + return indentationString !== sourceFile.text.substr(startLinePosition, indentationString.length); + } + function indentMultilineComment(commentRange, indentation, firstLineIsIndented) { + var startLine = sourceFile.getLineAndCharacterOfPosition(commentRange.pos).line; + var endLine = sourceFile.getLineAndCharacterOfPosition(commentRange.end).line; + var parts; + if (startLine === endLine) { + if (!firstLineIsIndented) { + insertIndentation(commentRange.pos, indentation, false); + } + return; + } + else { + parts = []; + var startPos = commentRange.pos; + for (var line = startLine; line < endLine; ++line) { + var endOfLine = ts.getEndLinePosition(line, sourceFile); + parts.push({ pos: startPos, end: endOfLine }); + startPos = ts.getStartPositionOfLine(line + 1, sourceFile); + } + parts.push({ pos: startPos, end: commentRange.end }); + } + var startLinePos = ts.getStartPositionOfLine(startLine, sourceFile); + var nonWhitespaceColumnInFirstPart = formatting.SmartIndenter.findFirstNonWhitespaceCharacterAndColumn(startLinePos, parts[0].pos, sourceFile, options); + if (indentation === nonWhitespaceColumnInFirstPart.column) { + return; + } + var startIndex = 0; + if (firstLineIsIndented) { + startIndex = 1; + startLine++; + } + var delta = indentation - nonWhitespaceColumnInFirstPart.column; + for (var i = startIndex, len = parts.length; i < len; ++i, ++startLine) { + var startLinePos_1 = ts.getStartPositionOfLine(startLine, sourceFile); + var nonWhitespaceCharacterAndColumn = i === 0 + ? nonWhitespaceColumnInFirstPart + : formatting.SmartIndenter.findFirstNonWhitespaceCharacterAndColumn(parts[i].pos, parts[i].end, sourceFile, options); + var newIndentation = nonWhitespaceCharacterAndColumn.column + delta; + if (newIndentation > 0) { + var indentationString = getIndentationString(newIndentation, options); + recordReplace(startLinePos_1, nonWhitespaceCharacterAndColumn.character, indentationString); + } + else { + recordDelete(startLinePos_1, nonWhitespaceCharacterAndColumn.character); + } + } + } + function trimTrailingWhitespacesForLines(line1, line2, range) { + for (var line = line1; line < line2; ++line) { + var lineStartPosition = ts.getStartPositionOfLine(line, sourceFile); + var lineEndPosition = ts.getEndLinePosition(line, sourceFile); + if (range && (ts.isComment(range.kind) || ts.isStringOrRegularExpressionOrTemplateLiteral(range.kind)) && range.pos <= lineEndPosition && range.end > lineEndPosition) { + continue; + } + var whitespaceStart = getTrailingWhitespaceStartPosition(lineStartPosition, lineEndPosition); + if (whitespaceStart !== -1) { + ts.Debug.assert(whitespaceStart === lineStartPosition || !ts.isWhiteSpace(sourceFile.text.charCodeAt(whitespaceStart - 1))); + recordDelete(whitespaceStart, lineEndPosition + 1 - whitespaceStart); + } + } + } + function getTrailingWhitespaceStartPosition(start, end) { + var pos = end; + while (pos >= start && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + pos--; + } + if (pos !== end) { + return pos + 1; + } + return -1; + } + function trimTrailingWhitespacesForRemainingRange() { + var startPosition = previousRange ? previousRange.end : originalRange.pos; + var startLine = sourceFile.getLineAndCharacterOfPosition(startPosition).line; + var endLine = sourceFile.getLineAndCharacterOfPosition(originalRange.end).line; + trimTrailingWhitespacesForLines(startLine, endLine + 1, previousRange); + } + function newTextChange(start, len, newText) { + return { span: ts.createTextSpan(start, len), newText: newText }; + } + function recordDelete(start, len) { + if (len) { + edits.push(newTextChange(start, len, "")); + } + } + function recordReplace(start, len, newText) { + if (len || newText) { + edits.push(newTextChange(start, len, newText)); + } + } + function applyRuleEdits(rule, previousRange, previousStartLine, currentRange, currentStartLine) { + var between; + switch (rule.Operation.Action) { + case 1: + return; + case 8: + if (previousRange.end !== currentRange.pos) { + recordDelete(previousRange.end, currentRange.pos - previousRange.end); + } + break; + case 4: + if (rule.Flag !== 1 && previousStartLine !== currentStartLine) { + return; + } + var lineDelta = currentStartLine - previousStartLine; + if (lineDelta !== 1) { + recordReplace(previousRange.end, currentRange.pos - previousRange.end, options.NewLineCharacter); + } + break; + case 2: + if (rule.Flag !== 1 && previousStartLine !== currentStartLine) { + return; + } + var posDelta = currentRange.pos - previousRange.end; + if (posDelta !== 1 || sourceFile.text.charCodeAt(previousRange.end) !== 32) { + recordReplace(previousRange.end, currentRange.pos - previousRange.end, " "); + } + break; + } + } + } + function isSomeBlock(kind) { + switch (kind) { + case 199: + case 226: + return true; + } + return false; + } + function getOpenTokenForList(node, list) { + switch (node.kind) { + case 148: + case 220: + case 179: + case 147: + case 146: + case 180: + if (node.typeParameters === list) { + return 25; + } + else if (node.parameters === list) { + return 17; + } + break; + case 174: + case 175: + if (node.typeArguments === list) { + return 25; + } + else if (node.arguments === list) { + return 17; + } + break; + case 155: + if (node.typeArguments === list) { + return 25; + } + } + return 0; + } + function getCloseTokenForOpenToken(kind) { + switch (kind) { + case 17: + return 18; + case 25: + return 27; + } + return 0; + } + var internedSizes; + var internedTabsIndentation; + var internedSpacesIndentation; + function getIndentationString(indentation, options) { + var resetInternedStrings = !internedSizes || (internedSizes.tabSize !== options.TabSize || internedSizes.indentSize !== options.IndentSize); + if (resetInternedStrings) { + internedSizes = { tabSize: options.TabSize, indentSize: options.IndentSize }; + internedTabsIndentation = internedSpacesIndentation = undefined; + } + if (!options.ConvertTabsToSpaces) { + var tabs = Math.floor(indentation / options.TabSize); + var spaces = indentation - tabs * options.TabSize; + var tabString = void 0; + if (!internedTabsIndentation) { + internedTabsIndentation = []; + } + if (internedTabsIndentation[tabs] === undefined) { + internedTabsIndentation[tabs] = tabString = repeat('\t', tabs); + } + else { + tabString = internedTabsIndentation[tabs]; + } + return spaces ? tabString + repeat(" ", spaces) : tabString; + } + else { + var spacesString = void 0; + var quotient = Math.floor(indentation / options.IndentSize); + var remainder = indentation % options.IndentSize; + if (!internedSpacesIndentation) { + internedSpacesIndentation = []; + } + if (internedSpacesIndentation[quotient] === undefined) { + spacesString = repeat(" ", options.IndentSize * quotient); + internedSpacesIndentation[quotient] = spacesString; + } + else { + spacesString = internedSpacesIndentation[quotient]; + } + return remainder ? spacesString + repeat(" ", remainder) : spacesString; + } + function repeat(value, count) { + var s = ""; + for (var i = 0; i < count; ++i) { + s += value; + } + return s; + } + } + formatting.getIndentationString = getIndentationString; + })(formatting = ts.formatting || (ts.formatting = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var formatting; + (function (formatting) { + var SmartIndenter; + (function (SmartIndenter) { + function getIndentation(position, sourceFile, options) { + if (position > sourceFile.text.length) { + return 0; + } + if (options.IndentStyle === ts.IndentStyle.None) { + return 0; + } + var precedingToken = ts.findPrecedingToken(position, sourceFile); + if (!precedingToken) { + return 0; + } + var precedingTokenIsLiteral = ts.isStringOrRegularExpressionOrTemplateLiteral(precedingToken.kind); + if (precedingTokenIsLiteral && precedingToken.getStart(sourceFile) <= position && precedingToken.end > position) { + return 0; + } + var lineAtPosition = sourceFile.getLineAndCharacterOfPosition(position).line; + if (options.IndentStyle === ts.IndentStyle.Block) { + var current_1 = position; + while (current_1 > 0) { + var char = sourceFile.text.charCodeAt(current_1); + if (!ts.isWhiteSpace(char) && !ts.isLineBreak(char)) { + break; + } + current_1--; + } + var lineStart = ts.getLineStartPositionForPosition(current_1, sourceFile); + return SmartIndenter.findFirstNonWhitespaceColumn(lineStart, current_1, sourceFile, options); + } + if (precedingToken.kind === 24 && precedingToken.parent.kind !== 187) { + var actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options); + if (actualIndentation !== -1) { + return actualIndentation; + } + } + var previous; + var current = precedingToken; + var currentStart; + var indentationDelta; + while (current) { + if (ts.positionBelongsToNode(current, position, sourceFile) && shouldIndentChildNode(current, previous)) { + currentStart = getStartLineAndCharacterForNode(current, sourceFile); + if (nextTokenIsCurlyBraceOnSameLineAsCursor(precedingToken, current, lineAtPosition, sourceFile)) { + indentationDelta = 0; + } + else { + indentationDelta = lineAtPosition !== currentStart.line ? options.IndentSize : 0; + } + break; + } + var actualIndentation = getActualIndentationForListItem(current, sourceFile, options); + if (actualIndentation !== -1) { + return actualIndentation; + } + actualIndentation = getLineIndentationWhenExpressionIsInMultiLine(current, sourceFile, options); + if (actualIndentation !== -1) { + return actualIndentation + options.IndentSize; + } + previous = current; + current = current.parent; + } + if (!current) { + return 0; + } + return getIndentationForNodeWorker(current, currentStart, undefined, indentationDelta, sourceFile, options); + } + SmartIndenter.getIndentation = getIndentation; + function getIndentationForNode(n, ignoreActualIndentationRange, sourceFile, options) { + var start = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); + return getIndentationForNodeWorker(n, start, ignoreActualIndentationRange, 0, sourceFile, options); + } + SmartIndenter.getIndentationForNode = getIndentationForNode; + function getIndentationForNodeWorker(current, currentStart, ignoreActualIndentationRange, indentationDelta, sourceFile, options) { + var parent = current.parent; + var parentStart; + while (parent) { + var useActualIndentation = true; + if (ignoreActualIndentationRange) { + var start = current.getStart(sourceFile); + useActualIndentation = start < ignoreActualIndentationRange.pos || start > ignoreActualIndentationRange.end; + } + if (useActualIndentation) { + var actualIndentation = getActualIndentationForListItem(current, sourceFile, options); + if (actualIndentation !== -1) { + return actualIndentation + indentationDelta; + } + } + parentStart = getParentStart(parent, current, sourceFile); + var parentAndChildShareLine = parentStart.line === currentStart.line || + childStartsOnTheSameLineWithElseInIfStatement(parent, current, currentStart.line, sourceFile); + if (useActualIndentation) { + var actualIndentation = getActualIndentationForNode(current, parent, currentStart, parentAndChildShareLine, sourceFile, options); + if (actualIndentation !== -1) { + return actualIndentation + indentationDelta; + } + actualIndentation = getLineIndentationWhenExpressionIsInMultiLine(current, sourceFile, options); + if (actualIndentation !== -1) { + return actualIndentation + indentationDelta; + } + } + if (shouldIndentChildNode(parent, current) && !parentAndChildShareLine) { + indentationDelta += options.IndentSize; + } + current = parent; + currentStart = parentStart; + parent = current.parent; + } + return indentationDelta; + } + function getParentStart(parent, child, sourceFile) { + var containingList = getContainingList(child, sourceFile); + if (containingList) { + return sourceFile.getLineAndCharacterOfPosition(containingList.pos); + } + return sourceFile.getLineAndCharacterOfPosition(parent.getStart(sourceFile)); + } + function getActualIndentationForListItemBeforeComma(commaToken, sourceFile, options) { + var commaItemInfo = ts.findListItemInfo(commaToken); + if (commaItemInfo && commaItemInfo.listItemIndex > 0) { + return deriveActualIndentationFromList(commaItemInfo.list.getChildren(), commaItemInfo.listItemIndex - 1, sourceFile, options); + } + else { + return -1; + } + } + function getActualIndentationForNode(current, parent, currentLineAndChar, parentAndChildShareLine, sourceFile, options) { + var useActualIndentation = (ts.isDeclaration(current) || ts.isStatement(current)) && + (parent.kind === 256 || !parentAndChildShareLine); + if (!useActualIndentation) { + return -1; + } + return findColumnForFirstNonWhitespaceCharacterInLine(currentLineAndChar, sourceFile, options); + } + function nextTokenIsCurlyBraceOnSameLineAsCursor(precedingToken, current, lineAtPosition, sourceFile) { + var nextToken = ts.findNextToken(precedingToken, current); + if (!nextToken) { + return false; + } + if (nextToken.kind === 15) { + return true; + } + else if (nextToken.kind === 16) { + var nextTokenStartLine = getStartLineAndCharacterForNode(nextToken, sourceFile).line; + return lineAtPosition === nextTokenStartLine; + } + return false; + } + function getStartLineAndCharacterForNode(n, sourceFile) { + return sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); + } + function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) { + if (parent.kind === 203 && parent.elseStatement === child) { + var elseKeyword = ts.findChildOfKind(parent, 80, sourceFile); + ts.Debug.assert(elseKeyword !== undefined); + var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line; + return elseKeywordStartLine === childStartLine; + } + return false; + } + SmartIndenter.childStartsOnTheSameLineWithElseInIfStatement = childStartsOnTheSameLineWithElseInIfStatement; + function getContainingList(node, sourceFile) { + if (node.parent) { + switch (node.parent.kind) { + case 155: + if (node.parent.typeArguments && + ts.rangeContainsStartEnd(node.parent.typeArguments, node.getStart(sourceFile), node.getEnd())) { + return node.parent.typeArguments; + } + break; + case 171: + return node.parent.properties; + case 170: + return node.parent.elements; + case 220: + case 179: + case 180: + case 147: + case 146: + case 151: + case 152: { + var start = node.getStart(sourceFile); + if (node.parent.typeParameters && + ts.rangeContainsStartEnd(node.parent.typeParameters, start, node.getEnd())) { + return node.parent.typeParameters; + } + if (ts.rangeContainsStartEnd(node.parent.parameters, start, node.getEnd())) { + return node.parent.parameters; + } + break; + } + case 175: + case 174: { + var start = node.getStart(sourceFile); + if (node.parent.typeArguments && + ts.rangeContainsStartEnd(node.parent.typeArguments, start, node.getEnd())) { + return node.parent.typeArguments; + } + if (node.parent.arguments && + ts.rangeContainsStartEnd(node.parent.arguments, start, node.getEnd())) { + return node.parent.arguments; + } + break; + } + } + } + return undefined; + } + function getActualIndentationForListItem(node, sourceFile, options) { + var containingList = getContainingList(node, sourceFile); + return containingList ? getActualIndentationFromList(containingList) : -1; + function getActualIndentationFromList(list) { + var index = ts.indexOf(list, node); + return index !== -1 ? deriveActualIndentationFromList(list, index, sourceFile, options) : -1; + } + } + function getLineIndentationWhenExpressionIsInMultiLine(node, sourceFile, options) { + if (node.kind === 18) { + return -1; + } + if (node.parent && (node.parent.kind === 174 || + node.parent.kind === 175) && + node.parent.expression !== node) { + var fullCallOrNewExpression = node.parent.expression; + var startingExpression = getStartingExpression(fullCallOrNewExpression); + if (fullCallOrNewExpression === startingExpression) { + return -1; + } + var fullCallOrNewExpressionEnd = sourceFile.getLineAndCharacterOfPosition(fullCallOrNewExpression.end); + var startingExpressionEnd = sourceFile.getLineAndCharacterOfPosition(startingExpression.end); + if (fullCallOrNewExpressionEnd.line === startingExpressionEnd.line) { + return -1; + } + return findColumnForFirstNonWhitespaceCharacterInLine(fullCallOrNewExpressionEnd, sourceFile, options); + } + return -1; + function getStartingExpression(node) { + while (true) { + switch (node.kind) { + case 174: + case 175: + case 172: + case 173: + node = node.expression; + break; + default: + return node; + } + } + } + } + function deriveActualIndentationFromList(list, index, sourceFile, options) { + ts.Debug.assert(index >= 0 && index < list.length); + var node = list[index]; + var lineAndCharacter = getStartLineAndCharacterForNode(node, sourceFile); + for (var i = index - 1; i >= 0; --i) { + if (list[i].kind === 24) { + continue; + } + var prevEndLine = sourceFile.getLineAndCharacterOfPosition(list[i].end).line; + if (prevEndLine !== lineAndCharacter.line) { + return findColumnForFirstNonWhitespaceCharacterInLine(lineAndCharacter, sourceFile, options); + } + lineAndCharacter = getStartLineAndCharacterForNode(list[i], sourceFile); + } + return -1; + } + function findColumnForFirstNonWhitespaceCharacterInLine(lineAndCharacter, sourceFile, options) { + var lineStart = sourceFile.getPositionOfLineAndCharacter(lineAndCharacter.line, 0); + return findFirstNonWhitespaceColumn(lineStart, lineStart + lineAndCharacter.character, sourceFile, options); + } + function findFirstNonWhitespaceCharacterAndColumn(startPos, endPos, sourceFile, options) { + var character = 0; + var column = 0; + for (var pos = startPos; pos < endPos; ++pos) { + var ch = sourceFile.text.charCodeAt(pos); + if (!ts.isWhiteSpace(ch)) { + break; + } + if (ch === 9) { + column += options.TabSize + (column % options.TabSize); + } + else { + column++; + } + character++; + } + return { column: column, character: character }; + } + SmartIndenter.findFirstNonWhitespaceCharacterAndColumn = findFirstNonWhitespaceCharacterAndColumn; + function findFirstNonWhitespaceColumn(startPos, endPos, sourceFile, options) { + return findFirstNonWhitespaceCharacterAndColumn(startPos, endPos, sourceFile, options).column; + } + SmartIndenter.findFirstNonWhitespaceColumn = findFirstNonWhitespaceColumn; + function nodeContentIsAlwaysIndented(kind) { + switch (kind) { + case 202: + case 221: + case 192: + case 222: + case 224: + case 223: + case 170: + case 199: + case 226: + case 171: + case 159: + case 161: + case 227: + case 250: + case 249: + case 178: + case 172: + case 174: + case 175: + case 200: + case 218: + case 235: + case 211: + case 188: + case 168: + case 167: + case 243: + case 242: + case 248: + case 146: + case 151: + case 152: + case 142: + case 156: + case 157: + case 164: + case 176: + case 184: + case 233: + return true; + } + return false; + } + function nodeWillIndentChild(parent, child, indentByDefault) { + var childKind = child ? child.kind : 0; + switch (parent.kind) { + case 204: + case 205: + case 207: + case 208: + case 206: + case 203: + case 220: + case 179: + case 147: + case 180: + case 148: + case 149: + case 150: + return childKind !== 199; + case 241: + return childKind !== 245; + } + return indentByDefault; + } + SmartIndenter.nodeWillIndentChild = nodeWillIndentChild; + function shouldIndentChildNode(parent, child) { + return nodeContentIsAlwaysIndented(parent.kind) || nodeWillIndentChild(parent, child, false); + } + SmartIndenter.shouldIndentChildNode = shouldIndentChildNode; + })(SmartIndenter = formatting.SmartIndenter || (formatting.SmartIndenter = {})); + })(formatting = ts.formatting || (ts.formatting = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + ts.servicesVersion = "0.5"; + var ScriptSnapshot; + (function (ScriptSnapshot) { + var StringScriptSnapshot = (function () { + function StringScriptSnapshot(text) { + this.text = text; + } + StringScriptSnapshot.prototype.getText = function (start, end) { + return this.text.substring(start, end); + }; + StringScriptSnapshot.prototype.getLength = function () { + return this.text.length; + }; + StringScriptSnapshot.prototype.getChangeRange = function (oldSnapshot) { + return undefined; + }; + return StringScriptSnapshot; + }()); + function fromString(text) { + return new StringScriptSnapshot(text); + } + ScriptSnapshot.fromString = fromString; + })(ScriptSnapshot = ts.ScriptSnapshot || (ts.ScriptSnapshot = {})); + var scanner = ts.createScanner(2, true); + var emptyArray = []; + var jsDocTagNames = [ + "augments", + "author", + "argument", + "borrows", + "class", + "constant", + "constructor", + "constructs", + "default", + "deprecated", + "description", + "event", + "example", + "extends", + "field", + "fileOverview", + "function", + "ignore", + "inner", + "lends", + "link", + "memberOf", + "name", + "namespace", + "param", + "private", + "property", + "public", + "requires", + "returns", + "see", + "since", + "static", + "throws", + "type", + "version" + ]; + var jsDocCompletionEntries; + function createNode(kind, pos, end, flags, parent) { + var node = new NodeObject(kind, pos, end); + node.flags = flags; + node.parent = parent; + return node; + } + var NodeObject = (function () { + function NodeObject(kind, pos, end) { + this.kind = kind; + this.pos = pos; + this.end = end; + this.flags = 0; + this.parent = undefined; + } + NodeObject.prototype.getSourceFile = function () { + return ts.getSourceFileOfNode(this); + }; + NodeObject.prototype.getStart = function (sourceFile) { + return ts.getTokenPosOfNode(this, sourceFile); + }; + NodeObject.prototype.getFullStart = function () { + return this.pos; + }; + NodeObject.prototype.getEnd = function () { + return this.end; + }; + NodeObject.prototype.getWidth = function (sourceFile) { + return this.getEnd() - this.getStart(sourceFile); + }; + NodeObject.prototype.getFullWidth = function () { + return this.end - this.pos; + }; + NodeObject.prototype.getLeadingTriviaWidth = function (sourceFile) { + return this.getStart(sourceFile) - this.pos; + }; + NodeObject.prototype.getFullText = function (sourceFile) { + return (sourceFile || this.getSourceFile()).text.substring(this.pos, this.end); + }; + NodeObject.prototype.getText = function (sourceFile) { + return (sourceFile || this.getSourceFile()).text.substring(this.getStart(), this.getEnd()); + }; + NodeObject.prototype.addSyntheticNodes = function (nodes, pos, end) { + scanner.setTextPos(pos); + while (pos < end) { + var token = scanner.scan(); + var textPos = scanner.getTextPos(); + nodes.push(createNode(token, pos, textPos, 0, this)); + pos = textPos; + } + return pos; + }; + NodeObject.prototype.createSyntaxList = function (nodes) { + var list = createNode(279, nodes.pos, nodes.end, 0, this); + list._children = []; + var pos = nodes.pos; + for (var _i = 0, nodes_7 = nodes; _i < nodes_7.length; _i++) { + var node = nodes_7[_i]; + if (pos < node.pos) { + pos = this.addSyntheticNodes(list._children, pos, node.pos); + } + list._children.push(node); + pos = node.end; + } + if (pos < nodes.end) { + this.addSyntheticNodes(list._children, pos, nodes.end); + } + return list; + }; + NodeObject.prototype.createChildren = function (sourceFile) { + var _this = this; + var children; + if (this.kind >= 139) { + scanner.setText((sourceFile || this.getSourceFile()).text); + children = []; + var pos_3 = this.pos; + var processNode = function (node) { + if (pos_3 < node.pos) { + pos_3 = _this.addSyntheticNodes(children, pos_3, node.pos); + } + children.push(node); + pos_3 = node.end; + }; + var processNodes = function (nodes) { + if (pos_3 < nodes.pos) { + pos_3 = _this.addSyntheticNodes(children, pos_3, nodes.pos); + } + children.push(_this.createSyntaxList(nodes)); + pos_3 = nodes.end; + }; + ts.forEachChild(this, processNode, processNodes); + if (pos_3 < this.end) { + this.addSyntheticNodes(children, pos_3, this.end); + } + scanner.setText(undefined); + } + this._children = children || emptyArray; + }; + NodeObject.prototype.getChildCount = function (sourceFile) { + if (!this._children) + this.createChildren(sourceFile); + return this._children.length; + }; + NodeObject.prototype.getChildAt = function (index, sourceFile) { + if (!this._children) + this.createChildren(sourceFile); + return this._children[index]; + }; + NodeObject.prototype.getChildren = function (sourceFile) { + if (!this._children) + this.createChildren(sourceFile); + return this._children; + }; + NodeObject.prototype.getFirstToken = function (sourceFile) { + var children = this.getChildren(sourceFile); + if (!children.length) { + return undefined; + } + var child = children[0]; + return child.kind < 139 ? child : child.getFirstToken(sourceFile); + }; + NodeObject.prototype.getLastToken = function (sourceFile) { + var children = this.getChildren(sourceFile); + var child = ts.lastOrUndefined(children); + if (!child) { + return undefined; + } + return child.kind < 139 ? child : child.getLastToken(sourceFile); + }; + return NodeObject; + }()); + var SymbolObject = (function () { + function SymbolObject(flags, name) { + this.flags = flags; + this.name = name; + } + SymbolObject.prototype.getFlags = function () { + return this.flags; + }; + SymbolObject.prototype.getName = function () { + return this.name; + }; + SymbolObject.prototype.getDeclarations = function () { + return this.declarations; + }; + SymbolObject.prototype.getDocumentationComment = function () { + if (this.documentationComment === undefined) { + this.documentationComment = getJsDocCommentsFromDeclarations(this.declarations, this.name, !(this.flags & 4)); + } + return this.documentationComment; + }; + return SymbolObject; + }()); + function getJsDocCommentsFromDeclarations(declarations, name, canUseParsedParamTagComments) { + var documentationComment = []; + var docComments = getJsDocCommentsSeparatedByNewLines(); + ts.forEach(docComments, function (docComment) { + if (documentationComment.length) { + documentationComment.push(ts.lineBreakPart()); + } + documentationComment.push(docComment); + }); + return documentationComment; + function getJsDocCommentsSeparatedByNewLines() { + var paramTag = "@param"; + var jsDocCommentParts = []; + ts.forEach(declarations, function (declaration, indexOfDeclaration) { + if (ts.indexOf(declarations, declaration) === indexOfDeclaration) { + var sourceFileOfDeclaration_1 = ts.getSourceFileOfNode(declaration); + if (canUseParsedParamTagComments && declaration.kind === 142) { + ts.forEach(getJsDocCommentTextRange(declaration.parent, sourceFileOfDeclaration_1), function (jsDocCommentTextRange) { + var cleanedParamJsDocComment = getCleanedParamJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration_1); + if (cleanedParamJsDocComment) { + ts.addRange(jsDocCommentParts, cleanedParamJsDocComment); + } + }); + } + if (declaration.kind === 225 && declaration.body.kind === 225) { + return; + } + while (declaration.kind === 225 && declaration.parent.kind === 225) { + declaration = declaration.parent; + } + ts.forEach(getJsDocCommentTextRange(declaration.kind === 218 ? declaration.parent.parent : declaration, sourceFileOfDeclaration_1), function (jsDocCommentTextRange) { + var cleanedJsDocComment = getCleanedJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration_1); + if (cleanedJsDocComment) { + ts.addRange(jsDocCommentParts, cleanedJsDocComment); + } + }); + } + }); + return jsDocCommentParts; + function getJsDocCommentTextRange(node, sourceFile) { + return ts.map(ts.getJsDocComments(node, sourceFile), function (jsDocComment) { + return { + pos: jsDocComment.pos + "/*".length, + end: jsDocComment.end - "*/".length + }; + }); + } + function consumeWhiteSpacesOnTheLine(pos, end, sourceFile, maxSpacesToRemove) { + if (maxSpacesToRemove !== undefined) { + end = Math.min(end, pos + maxSpacesToRemove); + } + for (; pos < end; pos++) { + var ch = sourceFile.text.charCodeAt(pos); + if (!ts.isWhiteSpace(ch) || ts.isLineBreak(ch)) { + return pos; + } + } + return end; + } + function consumeLineBreaks(pos, end, sourceFile) { + while (pos < end && ts.isLineBreak(sourceFile.text.charCodeAt(pos))) { + pos++; + } + return pos; + } + function isName(pos, end, sourceFile, name) { + return pos + name.length < end && + sourceFile.text.substr(pos, name.length) === name && + (ts.isWhiteSpace(sourceFile.text.charCodeAt(pos + name.length)) || + ts.isLineBreak(sourceFile.text.charCodeAt(pos + name.length))); + } + function isParamTag(pos, end, sourceFile) { + return isName(pos, end, sourceFile, paramTag); + } + function pushDocCommentLineText(docComments, text, blankLineCount) { + while (blankLineCount) { + blankLineCount--; + docComments.push(ts.textPart("")); + } + docComments.push(ts.textPart(text)); + } + function getCleanedJsDocComment(pos, end, sourceFile) { + var spacesToRemoveAfterAsterisk; + var docComments = []; + var blankLineCount = 0; + var isInParamTag = false; + while (pos < end) { + var docCommentTextOfLine = ""; + pos = consumeWhiteSpacesOnTheLine(pos, end, sourceFile); + if (pos < end && sourceFile.text.charCodeAt(pos) === 42) { + var lineStartPos = pos + 1; + pos = consumeWhiteSpacesOnTheLine(pos + 1, end, sourceFile, spacesToRemoveAfterAsterisk); + if (spacesToRemoveAfterAsterisk === undefined && pos < end && !ts.isLineBreak(sourceFile.text.charCodeAt(pos))) { + spacesToRemoveAfterAsterisk = pos - lineStartPos; + } + } + else if (spacesToRemoveAfterAsterisk === undefined) { + spacesToRemoveAfterAsterisk = 0; + } + while (pos < end && !ts.isLineBreak(sourceFile.text.charCodeAt(pos))) { + var ch = sourceFile.text.charAt(pos); + if (ch === "@") { + if (isParamTag(pos, end, sourceFile)) { + isInParamTag = true; + pos += paramTag.length; + continue; + } + else { + isInParamTag = false; + } + } + if (!isInParamTag) { + docCommentTextOfLine += ch; + } + pos++; + } + pos = consumeLineBreaks(pos, end, sourceFile); + if (docCommentTextOfLine) { + pushDocCommentLineText(docComments, docCommentTextOfLine, blankLineCount); + blankLineCount = 0; + } + else if (!isInParamTag && docComments.length) { + blankLineCount++; + } + } + return docComments; + } + function getCleanedParamJsDocComment(pos, end, sourceFile) { + var paramHelpStringMargin; + var paramDocComments = []; + while (pos < end) { + if (isParamTag(pos, end, sourceFile)) { + var blankLineCount = 0; + var recordedParamTag = false; + pos = consumeWhiteSpaces(pos + paramTag.length); + if (pos >= end) { + break; + } + if (sourceFile.text.charCodeAt(pos) === 123) { + pos++; + for (var curlies = 1; pos < end; pos++) { + var charCode = sourceFile.text.charCodeAt(pos); + if (charCode === 123) { + curlies++; + continue; + } + if (charCode === 125) { + curlies--; + if (curlies === 0) { + pos++; + break; + } + else { + continue; + } + } + if (charCode === 64) { + break; + } + } + pos = consumeWhiteSpaces(pos); + if (pos >= end) { + break; + } + } + if (isName(pos, end, sourceFile, name)) { + pos = consumeWhiteSpaces(pos + name.length); + if (pos >= end) { + break; + } + var paramHelpString = ""; + var firstLineParamHelpStringPos = pos; + while (pos < end) { + var ch = sourceFile.text.charCodeAt(pos); + if (ts.isLineBreak(ch)) { + if (paramHelpString) { + pushDocCommentLineText(paramDocComments, paramHelpString, blankLineCount); + paramHelpString = ""; + blankLineCount = 0; + recordedParamTag = true; + } + else if (recordedParamTag) { + blankLineCount++; + } + setPosForParamHelpStringOnNextLine(firstLineParamHelpStringPos); + continue; + } + if (ch === 64) { + break; + } + paramHelpString += sourceFile.text.charAt(pos); + pos++; + } + if (paramHelpString) { + pushDocCommentLineText(paramDocComments, paramHelpString, blankLineCount); + } + paramHelpStringMargin = undefined; + } + if (sourceFile.text.charCodeAt(pos) === 64) { + continue; + } + } + pos++; + } + return paramDocComments; + function consumeWhiteSpaces(pos) { + while (pos < end && ts.isWhiteSpace(sourceFile.text.charCodeAt(pos))) { + pos++; + } + return pos; + } + function setPosForParamHelpStringOnNextLine(firstLineParamHelpStringPos) { + pos = consumeLineBreaks(pos, end, sourceFile); + if (pos >= end) { + return; + } + if (paramHelpStringMargin === undefined) { + paramHelpStringMargin = sourceFile.getLineAndCharacterOfPosition(firstLineParamHelpStringPos).character; + } + var startOfLinePos = pos; + pos = consumeWhiteSpacesOnTheLine(pos, end, sourceFile, paramHelpStringMargin); + if (pos >= end) { + return; + } + var consumedSpaces = pos - startOfLinePos; + if (consumedSpaces < paramHelpStringMargin) { + var ch = sourceFile.text.charCodeAt(pos); + if (ch === 42) { + pos = consumeWhiteSpacesOnTheLine(pos + 1, end, sourceFile, paramHelpStringMargin - consumedSpaces - 1); + } + } + } + } + } + } + var TypeObject = (function () { + function TypeObject(checker, flags) { + this.checker = checker; + this.flags = flags; + } + TypeObject.prototype.getFlags = function () { + return this.flags; + }; + TypeObject.prototype.getSymbol = function () { + return this.symbol; + }; + TypeObject.prototype.getProperties = function () { + return this.checker.getPropertiesOfType(this); + }; + TypeObject.prototype.getProperty = function (propertyName) { + return this.checker.getPropertyOfType(this, propertyName); + }; + TypeObject.prototype.getApparentProperties = function () { + return this.checker.getAugmentedPropertiesOfType(this); + }; + TypeObject.prototype.getCallSignatures = function () { + return this.checker.getSignaturesOfType(this, 0); + }; + TypeObject.prototype.getConstructSignatures = function () { + return this.checker.getSignaturesOfType(this, 1); + }; + TypeObject.prototype.getStringIndexType = function () { + return this.checker.getIndexTypeOfType(this, 0); + }; + TypeObject.prototype.getNumberIndexType = function () { + return this.checker.getIndexTypeOfType(this, 1); + }; + TypeObject.prototype.getBaseTypes = function () { + return this.flags & (1024 | 2048) + ? this.checker.getBaseTypes(this) + : undefined; + }; + TypeObject.prototype.getNonNullableType = function () { + return this.checker.getNonNullableType(this); + }; + return TypeObject; + }()); + var SignatureObject = (function () { + function SignatureObject(checker) { + this.checker = checker; + } + SignatureObject.prototype.getDeclaration = function () { + return this.declaration; + }; + SignatureObject.prototype.getTypeParameters = function () { + return this.typeParameters; + }; + SignatureObject.prototype.getParameters = function () { + return this.parameters; + }; + SignatureObject.prototype.getReturnType = function () { + return this.checker.getReturnTypeOfSignature(this); + }; + SignatureObject.prototype.getDocumentationComment = function () { + if (this.documentationComment === undefined) { + this.documentationComment = this.declaration ? getJsDocCommentsFromDeclarations([this.declaration], undefined, false) : []; + } + return this.documentationComment; + }; + return SignatureObject; + }()); + var SourceFileObject = (function (_super) { + __extends(SourceFileObject, _super); + function SourceFileObject(kind, pos, end) { + _super.call(this, kind, pos, end); + } + SourceFileObject.prototype.update = function (newText, textChangeRange) { + return ts.updateSourceFile(this, newText, textChangeRange); + }; + SourceFileObject.prototype.getLineAndCharacterOfPosition = function (position) { + return ts.getLineAndCharacterOfPosition(this, position); + }; + SourceFileObject.prototype.getLineStarts = function () { + return ts.getLineStarts(this); + }; + SourceFileObject.prototype.getPositionOfLineAndCharacter = function (line, character) { + return ts.getPositionOfLineAndCharacter(this, line, character); + }; + SourceFileObject.prototype.getNamedDeclarations = function () { + if (!this.namedDeclarations) { + this.namedDeclarations = this.computeNamedDeclarations(); + } + return this.namedDeclarations; + }; + SourceFileObject.prototype.computeNamedDeclarations = function () { + var result = {}; + ts.forEachChild(this, visit); + return result; + function addDeclaration(declaration) { + var name = getDeclarationName(declaration); + if (name) { + var declarations = getDeclarations(name); + declarations.push(declaration); + } + } + function getDeclarations(name) { + return ts.getProperty(result, name) || (result[name] = []); + } + function getDeclarationName(declaration) { + if (declaration.name) { + var result_2 = getTextOfIdentifierOrLiteral(declaration.name); + if (result_2 !== undefined) { + return result_2; + } + if (declaration.name.kind === 140) { + var expr = declaration.name.expression; + if (expr.kind === 172) { + return expr.name.text; + } + return getTextOfIdentifierOrLiteral(expr); + } + } + return undefined; + } + function getTextOfIdentifierOrLiteral(node) { + if (node) { + if (node.kind === 69 || + node.kind === 9 || + node.kind === 8) { + return node.text; + } + } + return undefined; + } + function visit(node) { + switch (node.kind) { + case 220: + case 179: + case 147: + case 146: + var functionDeclaration = node; + var declarationName = getDeclarationName(functionDeclaration); + if (declarationName) { + var declarations = getDeclarations(declarationName); + var lastDeclaration = ts.lastOrUndefined(declarations); + if (lastDeclaration && functionDeclaration.parent === lastDeclaration.parent && functionDeclaration.symbol === lastDeclaration.symbol) { + if (functionDeclaration.body && !lastDeclaration.body) { + declarations[declarations.length - 1] = functionDeclaration; + } + } + else { + declarations.push(functionDeclaration); + } + ts.forEachChild(node, visit); + } + break; + case 221: + case 192: + case 222: + case 223: + case 224: + case 225: + case 229: + case 238: + case 234: + case 229: + case 231: + case 232: + case 149: + case 150: + case 159: + addDeclaration(node); + ts.forEachChild(node, visit); + break; + case 142: + if (!(node.flags & 92)) { + break; + } + case 218: + case 169: { + var decl = node; + if (ts.isBindingPattern(decl.name)) { + ts.forEachChild(decl.name, visit); + break; + } + if (decl.initializer) + visit(decl.initializer); + } + case 255: + case 145: + case 144: + addDeclaration(node); + break; + case 236: + if (node.exportClause) { + ts.forEach(node.exportClause.elements, visit); + } + break; + case 230: + var importClause = node.importClause; + if (importClause) { + if (importClause.name) { + addDeclaration(importClause); + } + if (importClause.namedBindings) { + if (importClause.namedBindings.kind === 232) { + addDeclaration(importClause.namedBindings); + } + else { + ts.forEach(importClause.namedBindings.elements, visit); + } + } + } + break; + default: + ts.forEachChild(node, visit); + } + } + }; + return SourceFileObject; + }(NodeObject)); + var TextChange = (function () { + function TextChange() { + } + return TextChange; + }()); + ts.TextChange = TextChange; + var HighlightSpanKind; + (function (HighlightSpanKind) { + HighlightSpanKind.none = "none"; + HighlightSpanKind.definition = "definition"; + HighlightSpanKind.reference = "reference"; + HighlightSpanKind.writtenReference = "writtenReference"; + })(HighlightSpanKind = ts.HighlightSpanKind || (ts.HighlightSpanKind = {})); + (function (IndentStyle) { + IndentStyle[IndentStyle["None"] = 0] = "None"; + IndentStyle[IndentStyle["Block"] = 1] = "Block"; + IndentStyle[IndentStyle["Smart"] = 2] = "Smart"; + })(ts.IndentStyle || (ts.IndentStyle = {})); + var IndentStyle = ts.IndentStyle; + (function (SymbolDisplayPartKind) { + SymbolDisplayPartKind[SymbolDisplayPartKind["aliasName"] = 0] = "aliasName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["className"] = 1] = "className"; + SymbolDisplayPartKind[SymbolDisplayPartKind["enumName"] = 2] = "enumName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["fieldName"] = 3] = "fieldName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["interfaceName"] = 4] = "interfaceName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["keyword"] = 5] = "keyword"; + SymbolDisplayPartKind[SymbolDisplayPartKind["lineBreak"] = 6] = "lineBreak"; + SymbolDisplayPartKind[SymbolDisplayPartKind["numericLiteral"] = 7] = "numericLiteral"; + SymbolDisplayPartKind[SymbolDisplayPartKind["stringLiteral"] = 8] = "stringLiteral"; + SymbolDisplayPartKind[SymbolDisplayPartKind["localName"] = 9] = "localName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["methodName"] = 10] = "methodName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["moduleName"] = 11] = "moduleName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["operator"] = 12] = "operator"; + SymbolDisplayPartKind[SymbolDisplayPartKind["parameterName"] = 13] = "parameterName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["propertyName"] = 14] = "propertyName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["punctuation"] = 15] = "punctuation"; + SymbolDisplayPartKind[SymbolDisplayPartKind["space"] = 16] = "space"; + SymbolDisplayPartKind[SymbolDisplayPartKind["text"] = 17] = "text"; + SymbolDisplayPartKind[SymbolDisplayPartKind["typeParameterName"] = 18] = "typeParameterName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["enumMemberName"] = 19] = "enumMemberName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["functionName"] = 20] = "functionName"; + SymbolDisplayPartKind[SymbolDisplayPartKind["regularExpressionLiteral"] = 21] = "regularExpressionLiteral"; + })(ts.SymbolDisplayPartKind || (ts.SymbolDisplayPartKind = {})); + var SymbolDisplayPartKind = ts.SymbolDisplayPartKind; + (function (TokenClass) { + TokenClass[TokenClass["Punctuation"] = 0] = "Punctuation"; + TokenClass[TokenClass["Keyword"] = 1] = "Keyword"; + TokenClass[TokenClass["Operator"] = 2] = "Operator"; + TokenClass[TokenClass["Comment"] = 3] = "Comment"; + TokenClass[TokenClass["Whitespace"] = 4] = "Whitespace"; + TokenClass[TokenClass["Identifier"] = 5] = "Identifier"; + TokenClass[TokenClass["NumberLiteral"] = 6] = "NumberLiteral"; + TokenClass[TokenClass["StringLiteral"] = 7] = "StringLiteral"; + TokenClass[TokenClass["RegExpLiteral"] = 8] = "RegExpLiteral"; + })(ts.TokenClass || (ts.TokenClass = {})); + var TokenClass = ts.TokenClass; + var ScriptElementKind; + (function (ScriptElementKind) { + ScriptElementKind.unknown = ""; + ScriptElementKind.warning = "warning"; + ScriptElementKind.keyword = "keyword"; + ScriptElementKind.scriptElement = "script"; + ScriptElementKind.moduleElement = "module"; + ScriptElementKind.classElement = "class"; + ScriptElementKind.localClassElement = "local class"; + ScriptElementKind.interfaceElement = "interface"; + ScriptElementKind.typeElement = "type"; + ScriptElementKind.enumElement = "enum"; + ScriptElementKind.variableElement = "var"; + ScriptElementKind.localVariableElement = "local var"; + ScriptElementKind.functionElement = "function"; + ScriptElementKind.localFunctionElement = "local function"; + ScriptElementKind.memberFunctionElement = "method"; + ScriptElementKind.memberGetAccessorElement = "getter"; + ScriptElementKind.memberSetAccessorElement = "setter"; + ScriptElementKind.memberVariableElement = "property"; + ScriptElementKind.constructorImplementationElement = "constructor"; + ScriptElementKind.callSignatureElement = "call"; + ScriptElementKind.indexSignatureElement = "index"; + ScriptElementKind.constructSignatureElement = "construct"; + ScriptElementKind.parameterElement = "parameter"; + ScriptElementKind.typeParameterElement = "type parameter"; + ScriptElementKind.primitiveType = "primitive type"; + ScriptElementKind.label = "label"; + ScriptElementKind.alias = "alias"; + ScriptElementKind.constElement = "const"; + ScriptElementKind.letElement = "let"; + })(ScriptElementKind = ts.ScriptElementKind || (ts.ScriptElementKind = {})); + var ScriptElementKindModifier; + (function (ScriptElementKindModifier) { + ScriptElementKindModifier.none = ""; + ScriptElementKindModifier.publicMemberModifier = "public"; + ScriptElementKindModifier.privateMemberModifier = "private"; + ScriptElementKindModifier.protectedMemberModifier = "protected"; + ScriptElementKindModifier.exportedModifier = "export"; + ScriptElementKindModifier.ambientModifier = "declare"; + ScriptElementKindModifier.staticModifier = "static"; + ScriptElementKindModifier.abstractModifier = "abstract"; + })(ScriptElementKindModifier = ts.ScriptElementKindModifier || (ts.ScriptElementKindModifier = {})); + var ClassificationTypeNames = (function () { + function ClassificationTypeNames() { + } + ClassificationTypeNames.comment = "comment"; + ClassificationTypeNames.identifier = "identifier"; + ClassificationTypeNames.keyword = "keyword"; + ClassificationTypeNames.numericLiteral = "number"; + ClassificationTypeNames.operator = "operator"; + ClassificationTypeNames.stringLiteral = "string"; + ClassificationTypeNames.whiteSpace = "whitespace"; + ClassificationTypeNames.text = "text"; + ClassificationTypeNames.punctuation = "punctuation"; + ClassificationTypeNames.className = "class name"; + ClassificationTypeNames.enumName = "enum name"; + ClassificationTypeNames.interfaceName = "interface name"; + ClassificationTypeNames.moduleName = "module name"; + ClassificationTypeNames.typeParameterName = "type parameter name"; + ClassificationTypeNames.typeAliasName = "type alias name"; + ClassificationTypeNames.parameterName = "parameter name"; + ClassificationTypeNames.docCommentTagName = "doc comment tag name"; + ClassificationTypeNames.jsxOpenTagName = "jsx open tag name"; + ClassificationTypeNames.jsxCloseTagName = "jsx close tag name"; + ClassificationTypeNames.jsxSelfClosingTagName = "jsx self closing tag name"; + ClassificationTypeNames.jsxAttribute = "jsx attribute"; + ClassificationTypeNames.jsxText = "jsx text"; + ClassificationTypeNames.jsxAttributeStringLiteralValue = "jsx attribute string literal value"; + return ClassificationTypeNames; + }()); + ts.ClassificationTypeNames = ClassificationTypeNames; + function displayPartsToString(displayParts) { + if (displayParts) { + return ts.map(displayParts, function (displayPart) { return displayPart.text; }).join(""); + } + return ""; + } + ts.displayPartsToString = displayPartsToString; + function isLocalVariableOrFunction(symbol) { + if (symbol.parent) { + return false; + } + return ts.forEach(symbol.declarations, function (declaration) { + if (declaration.kind === 179) { + return true; + } + if (declaration.kind !== 218 && declaration.kind !== 220) { + return false; + } + for (var parent_15 = declaration.parent; !ts.isFunctionBlock(parent_15); parent_15 = parent_15.parent) { + if (parent_15.kind === 256 || parent_15.kind === 226) { + return false; + } + } + return true; + }); + } + function getDefaultCompilerOptions() { + return { + target: 1, + jsx: 1 + }; + } + ts.getDefaultCompilerOptions = getDefaultCompilerOptions; + var HostCache = (function () { + function HostCache(host, getCanonicalFileName) { + this.host = host; + this.getCanonicalFileName = getCanonicalFileName; + this.currentDirectory = host.getCurrentDirectory(); + this.fileNameToEntry = ts.createFileMap(); + var rootFileNames = host.getScriptFileNames(); + for (var _i = 0, rootFileNames_1 = rootFileNames; _i < rootFileNames_1.length; _i++) { + var fileName = rootFileNames_1[_i]; + this.createEntry(fileName, ts.toPath(fileName, this.currentDirectory, getCanonicalFileName)); + } + this._compilationSettings = host.getCompilationSettings() || getDefaultCompilerOptions(); + } + HostCache.prototype.compilationSettings = function () { + return this._compilationSettings; + }; + HostCache.prototype.createEntry = function (fileName, path) { + var entry; + var scriptSnapshot = this.host.getScriptSnapshot(fileName); + if (scriptSnapshot) { + entry = { + hostFileName: fileName, + version: this.host.getScriptVersion(fileName), + scriptSnapshot: scriptSnapshot, + scriptKind: ts.getScriptKind(fileName, this.host) + }; + } + this.fileNameToEntry.set(path, entry); + return entry; + }; + HostCache.prototype.getEntry = function (path) { + return this.fileNameToEntry.get(path); + }; + HostCache.prototype.contains = function (path) { + return this.fileNameToEntry.contains(path); + }; + HostCache.prototype.getOrCreateEntry = function (fileName) { + var path = ts.toPath(fileName, this.currentDirectory, this.getCanonicalFileName); + return this.getOrCreateEntryByPath(fileName, path); + }; + HostCache.prototype.getOrCreateEntryByPath = function (fileName, path) { + return this.contains(path) + ? this.getEntry(path) + : this.createEntry(fileName, path); + }; + HostCache.prototype.getRootFileNames = function () { + var fileNames = []; + this.fileNameToEntry.forEachValue(function (path, value) { + if (value) { + fileNames.push(value.hostFileName); + } + }); + return fileNames; + }; + HostCache.prototype.getVersion = function (path) { + var file = this.getEntry(path); + return file && file.version; + }; + HostCache.prototype.getScriptSnapshot = function (path) { + var file = this.getEntry(path); + return file && file.scriptSnapshot; + }; + return HostCache; + }()); + var SyntaxTreeCache = (function () { + function SyntaxTreeCache(host) { + this.host = host; + } + SyntaxTreeCache.prototype.getCurrentSourceFile = function (fileName) { + var scriptSnapshot = this.host.getScriptSnapshot(fileName); + if (!scriptSnapshot) { + throw new Error("Could not find file: '" + fileName + "'."); + } + var scriptKind = ts.getScriptKind(fileName, this.host); + var version = this.host.getScriptVersion(fileName); + var sourceFile; + if (this.currentFileName !== fileName) { + sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, 2, version, true, scriptKind); + } + else if (this.currentFileVersion !== version) { + var editRange = scriptSnapshot.getChangeRange(this.currentFileScriptSnapshot); + sourceFile = updateLanguageServiceSourceFile(this.currentSourceFile, scriptSnapshot, version, editRange); + } + if (sourceFile) { + this.currentFileVersion = version; + this.currentFileName = fileName; + this.currentFileScriptSnapshot = scriptSnapshot; + this.currentSourceFile = sourceFile; + } + return this.currentSourceFile; + }; + return SyntaxTreeCache; + }()); + function setSourceFileFields(sourceFile, scriptSnapshot, version) { + sourceFile.version = version; + sourceFile.scriptSnapshot = scriptSnapshot; + } + function transpileModule(input, transpileOptions) { + var options = transpileOptions.compilerOptions ? ts.clone(transpileOptions.compilerOptions) : getDefaultCompilerOptions(); + options.isolatedModules = true; + options.suppressOutputPathCheck = true; + options.allowNonTsExtensions = true; + options.noLib = true; + options.noResolve = true; + var inputFileName = transpileOptions.fileName || (options.jsx ? "module.tsx" : "module.ts"); + var sourceFile = ts.createSourceFile(inputFileName, input, options.target); + if (transpileOptions.moduleName) { + sourceFile.moduleName = transpileOptions.moduleName; + } + sourceFile.renamedDependencies = transpileOptions.renamedDependencies; + var newLine = ts.getNewLineCharacter(options); + var outputText; + var sourceMapText; + var compilerHost = { + getSourceFile: function (fileName, target) { return fileName === ts.normalizePath(inputFileName) ? sourceFile : undefined; }, + writeFile: function (name, text, writeByteOrderMark) { + if (ts.fileExtensionIs(name, ".map")) { + ts.Debug.assert(sourceMapText === undefined, "Unexpected multiple source map outputs for the file '" + name + "'"); + sourceMapText = text; + } + else { + ts.Debug.assert(outputText === undefined, "Unexpected multiple outputs for the file: '" + name + "'"); + outputText = text; + } + }, + getDefaultLibFileName: function () { return "lib.d.ts"; }, + useCaseSensitiveFileNames: function () { return false; }, + getCanonicalFileName: function (fileName) { return fileName; }, + getCurrentDirectory: function () { return ""; }, + getNewLine: function () { return newLine; }, + fileExists: function (fileName) { return fileName === inputFileName; }, + readFile: function (fileName) { return ""; }, + directoryExists: function (directoryExists) { return true; } + }; + var program = ts.createProgram([inputFileName], options, compilerHost); + var diagnostics; + if (transpileOptions.reportDiagnostics) { + diagnostics = []; + ts.addRange(diagnostics, program.getSyntacticDiagnostics(sourceFile)); + ts.addRange(diagnostics, program.getOptionsDiagnostics()); + } + program.emit(); + ts.Debug.assert(outputText !== undefined, "Output generation failed"); + return { outputText: outputText, diagnostics: diagnostics, sourceMapText: sourceMapText }; + } + ts.transpileModule = transpileModule; + function transpile(input, compilerOptions, fileName, diagnostics, moduleName) { + var output = transpileModule(input, { compilerOptions: compilerOptions, fileName: fileName, reportDiagnostics: !!diagnostics, moduleName: moduleName }); + ts.addRange(diagnostics, output.diagnostics); + return output.outputText; + } + ts.transpile = transpile; + function createLanguageServiceSourceFile(fileName, scriptSnapshot, scriptTarget, version, setNodeParents, scriptKind) { + var text = scriptSnapshot.getText(0, scriptSnapshot.getLength()); + var sourceFile = ts.createSourceFile(fileName, text, scriptTarget, setNodeParents, scriptKind); + setSourceFileFields(sourceFile, scriptSnapshot, version); + return sourceFile; + } + ts.createLanguageServiceSourceFile = createLanguageServiceSourceFile; + ts.disableIncrementalParsing = false; + function updateLanguageServiceSourceFile(sourceFile, scriptSnapshot, version, textChangeRange, aggressiveChecks) { + if (textChangeRange) { + if (version !== sourceFile.version) { + if (!ts.disableIncrementalParsing) { + var newText = void 0; + var prefix = textChangeRange.span.start !== 0 + ? sourceFile.text.substr(0, textChangeRange.span.start) + : ""; + var suffix = ts.textSpanEnd(textChangeRange.span) !== sourceFile.text.length + ? sourceFile.text.substr(ts.textSpanEnd(textChangeRange.span)) + : ""; + if (textChangeRange.newLength === 0) { + newText = prefix && suffix ? prefix + suffix : prefix || suffix; + } + else { + var changedText = scriptSnapshot.getText(textChangeRange.span.start, textChangeRange.span.start + textChangeRange.newLength); + newText = prefix && suffix + ? prefix + changedText + suffix + : prefix + ? (prefix + changedText) + : (changedText + suffix); + } + var newSourceFile = ts.updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks); + setSourceFileFields(newSourceFile, scriptSnapshot, version); + newSourceFile.nameTable = undefined; + if (sourceFile !== newSourceFile && sourceFile.scriptSnapshot) { + if (sourceFile.scriptSnapshot.dispose) { + sourceFile.scriptSnapshot.dispose(); + } + sourceFile.scriptSnapshot = undefined; + } + return newSourceFile; + } + } + } + return createLanguageServiceSourceFile(sourceFile.fileName, scriptSnapshot, sourceFile.languageVersion, version, true, sourceFile.scriptKind); + } + ts.updateLanguageServiceSourceFile = updateLanguageServiceSourceFile; + function createDocumentRegistry(useCaseSensitiveFileNames, currentDirectory) { + if (currentDirectory === void 0) { currentDirectory = ""; } + var buckets = {}; + var getCanonicalFileName = ts.createGetCanonicalFileName(!!useCaseSensitiveFileNames); + function getKeyForCompilationSettings(settings) { + return ("_" + settings.target + "|" + settings.module + "|" + settings.noResolve + "|" + settings.jsx + "|" + settings.allowJs + "|" + settings.baseUrl + "|" + settings.typesRoot + "|" + settings.typesSearchPaths + "|" + JSON.stringify(settings.rootDirs) + "|" + JSON.stringify(settings.paths)); + } + function getBucketForCompilationSettings(key, createIfMissing) { + var bucket = ts.lookUp(buckets, key); + if (!bucket && createIfMissing) { + buckets[key] = bucket = ts.createFileMap(); + } + return bucket; + } + function reportStats() { + var bucketInfoArray = Object.keys(buckets).filter(function (name) { return name && name.charAt(0) === "_"; }).map(function (name) { + var entries = ts.lookUp(buckets, name); + var sourceFiles = []; + entries.forEachValue(function (key, entry) { + sourceFiles.push({ + name: key, + refCount: entry.languageServiceRefCount, + references: entry.owners.slice(0) + }); + }); + sourceFiles.sort(function (x, y) { return y.refCount - x.refCount; }); + return { + bucket: name, + sourceFiles: sourceFiles + }; + }); + return JSON.stringify(bucketInfoArray, undefined, 2); + } + function acquireDocument(fileName, compilationSettings, scriptSnapshot, version, scriptKind) { + var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); + var key = getKeyForCompilationSettings(compilationSettings); + return acquireDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind); + } + function acquireDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind) { + return acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, true, scriptKind); + } + function updateDocument(fileName, compilationSettings, scriptSnapshot, version, scriptKind) { + var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); + var key = getKeyForCompilationSettings(compilationSettings); + return updateDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind); + } + function updateDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind) { + return acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, false, scriptKind); + } + function acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, acquiring, scriptKind) { + var bucket = getBucketForCompilationSettings(key, true); + var entry = bucket.get(path); + if (!entry) { + ts.Debug.assert(acquiring, "How could we be trying to update a document that the registry doesn't have?"); + var sourceFile = createLanguageServiceSourceFile(fileName, scriptSnapshot, compilationSettings.target, version, false, scriptKind); + entry = { + sourceFile: sourceFile, + languageServiceRefCount: 0, + owners: [] + }; + bucket.set(path, entry); + } + else { + if (entry.sourceFile.version !== version) { + entry.sourceFile = updateLanguageServiceSourceFile(entry.sourceFile, scriptSnapshot, version, scriptSnapshot.getChangeRange(entry.sourceFile.scriptSnapshot)); + } + } + if (acquiring) { + entry.languageServiceRefCount++; + } + return entry.sourceFile; + } + function releaseDocument(fileName, compilationSettings) { + var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); + var key = getKeyForCompilationSettings(compilationSettings); + return releaseDocumentWithKey(path, key); + } + function releaseDocumentWithKey(path, key) { + var bucket = getBucketForCompilationSettings(key, false); + ts.Debug.assert(bucket !== undefined); + var entry = bucket.get(path); + entry.languageServiceRefCount--; + ts.Debug.assert(entry.languageServiceRefCount >= 0); + if (entry.languageServiceRefCount === 0) { + bucket.remove(path); + } + } + return { + acquireDocument: acquireDocument, + acquireDocumentWithKey: acquireDocumentWithKey, + updateDocument: updateDocument, + updateDocumentWithKey: updateDocumentWithKey, + releaseDocument: releaseDocument, + releaseDocumentWithKey: releaseDocumentWithKey, + reportStats: reportStats, + getKeyForCompilationSettings: getKeyForCompilationSettings + }; + } + ts.createDocumentRegistry = createDocumentRegistry; + function preProcessFile(sourceText, readImportFiles, detectJavaScriptImports) { + if (readImportFiles === void 0) { readImportFiles = true; } + if (detectJavaScriptImports === void 0) { detectJavaScriptImports = false; } + var referencedFiles = []; + var typeReferenceDirectives = []; + var importedFiles = []; + var ambientExternalModules; + var isNoDefaultLib = false; + var braceNesting = 0; + var externalModule = false; + function nextToken() { + var token = scanner.scan(); + if (token === 15) { + braceNesting++; + } + else if (token === 16) { + braceNesting--; + } + return token; + } + function processTripleSlashDirectives() { + var commentRanges = ts.getLeadingCommentRanges(sourceText, 0); + ts.forEach(commentRanges, function (commentRange) { + var comment = sourceText.substring(commentRange.pos, commentRange.end); + var referencePathMatchResult = ts.getFileReferenceFromReferencePath(comment, commentRange); + if (referencePathMatchResult) { + isNoDefaultLib = referencePathMatchResult.isNoDefaultLib; + var fileReference = referencePathMatchResult.fileReference; + if (fileReference) { + var collection = referencePathMatchResult.isTypeReferenceDirective + ? typeReferenceDirectives + : referencedFiles; + collection.push(fileReference); + } + } + }); + } + function getFileReference() { + var file = scanner.getTokenValue(); + var pos = scanner.getTokenPos(); + return { + fileName: file, + pos: pos, + end: pos + file.length + }; + } + function recordAmbientExternalModule() { + if (!ambientExternalModules) { + ambientExternalModules = []; + } + ambientExternalModules.push({ ref: getFileReference(), depth: braceNesting }); + } + function recordModuleName() { + importedFiles.push(getFileReference()); + markAsExternalModuleIfTopLevel(); + } + function markAsExternalModuleIfTopLevel() { + if (braceNesting === 0) { + externalModule = true; + } + } + function tryConsumeDeclare() { + var token = scanner.getToken(); + if (token === 122) { + token = nextToken(); + if (token === 125) { + token = nextToken(); + if (token === 9) { + recordAmbientExternalModule(); + } + } + return true; + } + return false; + } + function tryConsumeImport() { + var token = scanner.getToken(); + if (token === 89) { + token = nextToken(); + if (token === 9) { + recordModuleName(); + return true; + } + else { + if (token === 69 || ts.isKeyword(token)) { + token = nextToken(); + if (token === 136) { + token = nextToken(); + if (token === 9) { + recordModuleName(); + return true; + } + } + else if (token === 56) { + if (tryConsumeRequireCall(true)) { + return true; + } + } + else if (token === 24) { + token = nextToken(); + } + else { + return true; + } + } + if (token === 15) { + token = nextToken(); + while (token !== 16 && token !== 1) { + token = nextToken(); + } + if (token === 16) { + token = nextToken(); + if (token === 136) { + token = nextToken(); + if (token === 9) { + recordModuleName(); + } + } + } + } + else if (token === 37) { + token = nextToken(); + if (token === 116) { + token = nextToken(); + if (token === 69 || ts.isKeyword(token)) { + token = nextToken(); + if (token === 136) { + token = nextToken(); + if (token === 9) { + recordModuleName(); + } + } + } + } + } + } + return true; + } + return false; + } + function tryConsumeExport() { + var token = scanner.getToken(); + if (token === 82) { + markAsExternalModuleIfTopLevel(); + token = nextToken(); + if (token === 15) { + token = nextToken(); + while (token !== 16 && token !== 1) { + token = nextToken(); + } + if (token === 16) { + token = nextToken(); + if (token === 136) { + token = nextToken(); + if (token === 9) { + recordModuleName(); + } + } + } + } + else if (token === 37) { + token = nextToken(); + if (token === 136) { + token = nextToken(); + if (token === 9) { + recordModuleName(); + } + } + } + else if (token === 89) { + token = nextToken(); + if (token === 69 || ts.isKeyword(token)) { + token = nextToken(); + if (token === 56) { + if (tryConsumeRequireCall(true)) { + return true; + } + } + } + } + return true; + } + return false; + } + function tryConsumeRequireCall(skipCurrentToken) { + var token = skipCurrentToken ? nextToken() : scanner.getToken(); + if (token === 129) { + token = nextToken(); + if (token === 17) { + token = nextToken(); + if (token === 9) { + recordModuleName(); + } + } + return true; + } + return false; + } + function tryConsumeDefine() { + var token = scanner.getToken(); + if (token === 69 && scanner.getTokenValue() === "define") { + token = nextToken(); + if (token !== 17) { + return true; + } + token = nextToken(); + if (token === 9) { + token = nextToken(); + if (token === 24) { + token = nextToken(); + } + else { + return true; + } + } + if (token !== 19) { + return true; + } + token = nextToken(); + var i = 0; + while (token !== 20 && token !== 1) { + if (token === 9) { + recordModuleName(); + i++; + } + token = nextToken(); + } + return true; + } + return false; + } + function processImports() { + scanner.setText(sourceText); + nextToken(); + while (true) { + if (scanner.getToken() === 1) { + break; + } + if (tryConsumeDeclare() || + tryConsumeImport() || + tryConsumeExport() || + (detectJavaScriptImports && (tryConsumeRequireCall(false) || tryConsumeDefine()))) { + continue; + } + else { + nextToken(); + } + } + scanner.setText(undefined); + } + if (readImportFiles) { + processImports(); + } + processTripleSlashDirectives(); + if (externalModule) { + if (ambientExternalModules) { + for (var _i = 0, ambientExternalModules_1 = ambientExternalModules; _i < ambientExternalModules_1.length; _i++) { + var decl = ambientExternalModules_1[_i]; + importedFiles.push(decl.ref); + } + } + return { referencedFiles: referencedFiles, typeReferenceDirectives: typeReferenceDirectives, importedFiles: importedFiles, isLibFile: isNoDefaultLib, ambientExternalModules: undefined }; + } + else { + var ambientModuleNames = void 0; + if (ambientExternalModules) { + for (var _a = 0, ambientExternalModules_2 = ambientExternalModules; _a < ambientExternalModules_2.length; _a++) { + var decl = ambientExternalModules_2[_a]; + if (decl.depth === 0) { + if (!ambientModuleNames) { + ambientModuleNames = []; + } + ambientModuleNames.push(decl.ref.fileName); + } + else { + importedFiles.push(decl.ref); + } + } + } + return { referencedFiles: referencedFiles, typeReferenceDirectives: typeReferenceDirectives, importedFiles: importedFiles, isLibFile: isNoDefaultLib, ambientExternalModules: ambientModuleNames }; + } + } + ts.preProcessFile = preProcessFile; + function getTargetLabel(referenceNode, labelName) { + while (referenceNode) { + if (referenceNode.kind === 214 && referenceNode.label.text === labelName) { + return referenceNode.label; + } + referenceNode = referenceNode.parent; + } + return undefined; + } + function isJumpStatementTarget(node) { + return node.kind === 69 && + (node.parent.kind === 210 || node.parent.kind === 209) && + node.parent.label === node; + } + function isLabelOfLabeledStatement(node) { + return node.kind === 69 && + node.parent.kind === 214 && + node.parent.label === node; + } + function isLabeledBy(node, labelName) { + for (var owner = node.parent; owner.kind === 214; owner = owner.parent) { + if (owner.label.text === labelName) { + return true; + } + } + return false; + } + function isLabelName(node) { + return isLabelOfLabeledStatement(node) || isJumpStatementTarget(node); + } + function isRightSideOfQualifiedName(node) { + return node.parent.kind === 139 && node.parent.right === node; + } + function isRightSideOfPropertyAccess(node) { + return node && node.parent && node.parent.kind === 172 && node.parent.name === node; + } + function isCallExpressionTarget(node) { + if (isRightSideOfPropertyAccess(node)) { + node = node.parent; + } + return node && node.parent && node.parent.kind === 174 && node.parent.expression === node; + } + function isNewExpressionTarget(node) { + if (isRightSideOfPropertyAccess(node)) { + node = node.parent; + } + return node && node.parent && node.parent.kind === 175 && node.parent.expression === node; + } + function isNameOfModuleDeclaration(node) { + return node.parent.kind === 225 && node.parent.name === node; + } + function isNameOfFunctionDeclaration(node) { + return node.kind === 69 && + ts.isFunctionLike(node.parent) && node.parent.name === node; + } + function isObjectLiteralPropertyDeclaration(node) { + switch (node.kind) { + case 253: + case 254: + case 147: + case 149: + case 150: + return true; + } + return false; + } + function getContainingObjectLiteralElement(node) { + switch (node.kind) { + case 9: + case 8: + if (node.parent.kind === 140) { + return isObjectLiteralPropertyDeclaration(node.parent.parent) ? node.parent.parent : undefined; + } + case 69: + return isObjectLiteralPropertyDeclaration(node.parent) && node.parent.name === node ? node.parent : undefined; + } + return undefined; + } + function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) { + if (node.kind === 9 || node.kind === 8) { + switch (node.parent.kind) { + case 145: + case 144: + case 253: + case 255: + case 147: + case 146: + case 149: + case 150: + case 225: + return node.parent.name === node; + case 173: + return node.parent.argumentExpression === node; + case 140: + return true; + } + } + return false; + } + function isNameOfExternalModuleImportOrDeclaration(node) { + if (node.kind === 9) { + return isNameOfModuleDeclaration(node) || + (ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node); + } + return false; + } + function isInsideComment(sourceFile, token, position) { + return position <= token.getStart(sourceFile) && + (isInsideCommentRange(ts.getTrailingCommentRanges(sourceFile.text, token.getFullStart())) || + isInsideCommentRange(ts.getLeadingCommentRanges(sourceFile.text, token.getFullStart()))); + function isInsideCommentRange(comments) { + return ts.forEach(comments, function (comment) { + if (comment.pos < position && position < comment.end) { + return true; + } + else if (position === comment.end) { + var text = sourceFile.text; + var width = comment.end - comment.pos; + if (width <= 2 || text.charCodeAt(comment.pos + 1) === 47) { + return true; + } + else { + return !(text.charCodeAt(comment.end - 1) === 47 && + text.charCodeAt(comment.end - 2) === 42); + } + } + return false; + }); + } + } + var keywordCompletions = []; + for (var i = 70; i <= 138; i++) { + keywordCompletions.push({ + name: ts.tokenToString(i), + kind: ScriptElementKind.keyword, + kindModifiers: ScriptElementKindModifier.none, + sortText: "0" + }); + } + function getContainerNode(node) { + while (true) { + node = node.parent; + if (!node) { + return undefined; + } + switch (node.kind) { + case 256: + case 147: + case 146: + case 220: + case 179: + case 149: + case 150: + case 221: + case 222: + case 224: + case 225: + return node; + } + } + } + ts.getContainerNode = getContainerNode; + function getNodeKind(node) { + switch (node.kind) { + case 225: return ScriptElementKind.moduleElement; + case 221: + case 192: + return ScriptElementKind.classElement; + case 222: return ScriptElementKind.interfaceElement; + case 223: return ScriptElementKind.typeElement; + case 224: return ScriptElementKind.enumElement; + case 218: + return ts.isConst(node) + ? ScriptElementKind.constElement + : ts.isLet(node) + ? ScriptElementKind.letElement + : ScriptElementKind.variableElement; + case 220: + case 179: + return ScriptElementKind.functionElement; + case 149: return ScriptElementKind.memberGetAccessorElement; + case 150: return ScriptElementKind.memberSetAccessorElement; + case 147: + case 146: + return ScriptElementKind.memberFunctionElement; + case 145: + case 144: + return ScriptElementKind.memberVariableElement; + case 153: return ScriptElementKind.indexSignatureElement; + case 152: return ScriptElementKind.constructSignatureElement; + case 151: return ScriptElementKind.callSignatureElement; + case 148: return ScriptElementKind.constructorImplementationElement; + case 141: return ScriptElementKind.typeParameterElement; + case 255: return ScriptElementKind.variableElement; + case 142: return (node.flags & 92) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement; + case 229: + case 234: + case 231: + case 238: + case 232: + return ScriptElementKind.alias; + } + return ScriptElementKind.unknown; + } + ts.getNodeKind = getNodeKind; + var CancellationTokenObject = (function () { + function CancellationTokenObject(cancellationToken) { + this.cancellationToken = cancellationToken; + } + CancellationTokenObject.prototype.isCancellationRequested = function () { + return this.cancellationToken && this.cancellationToken.isCancellationRequested(); + }; + CancellationTokenObject.prototype.throwIfCancellationRequested = function () { + if (this.isCancellationRequested()) { + throw new ts.OperationCanceledException(); + } + }; + return CancellationTokenObject; + }()); + function createLanguageService(host, documentRegistry) { + if (documentRegistry === void 0) { documentRegistry = createDocumentRegistry(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames(), host.getCurrentDirectory()); } + var syntaxTreeCache = new SyntaxTreeCache(host); + var ruleProvider; + var program; + var lastProjectVersion; + var useCaseSensitivefileNames = false; + var cancellationToken = new CancellationTokenObject(host.getCancellationToken && host.getCancellationToken()); + var currentDirectory = host.getCurrentDirectory(); + if (!ts.localizedDiagnosticMessages && host.getLocalizedDiagnosticMessages) { + ts.localizedDiagnosticMessages = host.getLocalizedDiagnosticMessages(); + } + function log(message) { + if (host.log) { + host.log(message); + } + } + var getCanonicalFileName = ts.createGetCanonicalFileName(useCaseSensitivefileNames); + function getValidSourceFile(fileName) { + var sourceFile = program.getSourceFile(fileName); + if (!sourceFile) { + throw new Error("Could not find file: '" + fileName + "'."); + } + return sourceFile; + } + function getRuleProvider(options) { + if (!ruleProvider) { + ruleProvider = new ts.formatting.RulesProvider(); + } + ruleProvider.ensureUpToDate(options); + return ruleProvider; + } + function synchronizeHostData() { + if (host.getProjectVersion) { + var hostProjectVersion = host.getProjectVersion(); + if (hostProjectVersion) { + if (lastProjectVersion === hostProjectVersion) { + return; + } + lastProjectVersion = hostProjectVersion; + } + } + var hostCache = new HostCache(host, getCanonicalFileName); + if (programUpToDate()) { + return; + } + var oldSettings = program && program.getCompilerOptions(); + var newSettings = hostCache.compilationSettings(); + var changesInCompilationSettingsAffectSyntax = oldSettings && + (oldSettings.target !== newSettings.target || + oldSettings.module !== newSettings.module || + oldSettings.noResolve !== newSettings.noResolve || + oldSettings.jsx !== newSettings.jsx || + oldSettings.allowJs !== newSettings.allowJs); + var compilerHost = { + getSourceFile: getOrCreateSourceFile, + getSourceFileByPath: getOrCreateSourceFileByPath, + getCancellationToken: function () { return cancellationToken; }, + getCanonicalFileName: getCanonicalFileName, + useCaseSensitiveFileNames: function () { return useCaseSensitivefileNames; }, + getNewLine: function () { return ts.getNewLineOrDefaultFromHost(host); }, + getDefaultLibFileName: function (options) { return host.getDefaultLibFileName(options); }, + writeFile: function (fileName, data, writeByteOrderMark) { }, + getCurrentDirectory: function () { return currentDirectory; }, + fileExists: function (fileName) { + ts.Debug.assert(!host.resolveModuleNames || !host.resolveTypeReferenceDirectives); + return hostCache.getOrCreateEntry(fileName) !== undefined; + }, + readFile: function (fileName) { + var entry = hostCache.getOrCreateEntry(fileName); + return entry && entry.scriptSnapshot.getText(0, entry.scriptSnapshot.getLength()); + }, + directoryExists: function (directoryName) { + ts.Debug.assert(!host.resolveModuleNames || !host.resolveTypeReferenceDirectives); + return ts.directoryProbablyExists(directoryName, host); + } + }; + if (host.trace) { + compilerHost.trace = function (message) { return host.trace(message); }; + } + if (host.resolveModuleNames) { + compilerHost.resolveModuleNames = function (moduleNames, containingFile) { return host.resolveModuleNames(moduleNames, containingFile); }; + } + if (host.resolveTypeReferenceDirectives) { + compilerHost.resolveTypeReferenceDirectives = function (typeReferenceDirectiveNames, containingFile) { + return host.resolveTypeReferenceDirectives(typeReferenceDirectiveNames, containingFile); + }; + } + var documentRegistryBucketKey = documentRegistry.getKeyForCompilationSettings(newSettings); + var newProgram = ts.createProgram(hostCache.getRootFileNames(), newSettings, compilerHost, program); + if (program) { + var oldSourceFiles = program.getSourceFiles(); + var oldSettingsKey = documentRegistry.getKeyForCompilationSettings(oldSettings); + for (var _i = 0, oldSourceFiles_1 = oldSourceFiles; _i < oldSourceFiles_1.length; _i++) { + var oldSourceFile = oldSourceFiles_1[_i]; + if (!newProgram.getSourceFile(oldSourceFile.fileName) || changesInCompilationSettingsAffectSyntax) { + documentRegistry.releaseDocumentWithKey(oldSourceFile.path, oldSettingsKey); + } + } + } + hostCache = undefined; + program = newProgram; + program.getTypeChecker(); + return; + function getOrCreateSourceFile(fileName) { + return getOrCreateSourceFileByPath(fileName, ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + } + function getOrCreateSourceFileByPath(fileName, path) { + ts.Debug.assert(hostCache !== undefined); + var hostFileInformation = hostCache.getOrCreateEntryByPath(fileName, path); + if (!hostFileInformation) { + return undefined; + } + if (!changesInCompilationSettingsAffectSyntax) { + var oldSourceFile = program && program.getSourceFileByPath(path); + if (oldSourceFile) { + ts.Debug.assert(hostFileInformation.scriptKind === oldSourceFile.scriptKind, "Registered script kind (" + oldSourceFile.scriptKind + ") should match new script kind (" + hostFileInformation.scriptKind + ") for file: " + path); + return documentRegistry.updateDocumentWithKey(fileName, path, newSettings, documentRegistryBucketKey, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); + } + } + return documentRegistry.acquireDocumentWithKey(fileName, path, newSettings, documentRegistryBucketKey, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); + } + function sourceFileUpToDate(sourceFile) { + if (!sourceFile) { + return false; + } + var path = sourceFile.path || ts.toPath(sourceFile.fileName, currentDirectory, getCanonicalFileName); + return sourceFile.version === hostCache.getVersion(path); + } + function programUpToDate() { + if (!program) { + return false; + } + var rootFileNames = hostCache.getRootFileNames(); + if (program.getSourceFiles().length !== rootFileNames.length) { + return false; + } + for (var _i = 0, rootFileNames_2 = rootFileNames; _i < rootFileNames_2.length; _i++) { + var fileName = rootFileNames_2[_i]; + if (!sourceFileUpToDate(program.getSourceFile(fileName))) { + return false; + } + } + return ts.compareDataObjects(program.getCompilerOptions(), hostCache.compilationSettings()); + } + } + function getProgram() { + synchronizeHostData(); + return program; + } + function cleanupSemanticCache() { + } + function dispose() { + if (program) { + ts.forEach(program.getSourceFiles(), function (f) { + return documentRegistry.releaseDocument(f.fileName, program.getCompilerOptions()); + }); + } + } + function getSyntacticDiagnostics(fileName) { + synchronizeHostData(); + return program.getSyntacticDiagnostics(getValidSourceFile(fileName), cancellationToken); + } + function getSemanticDiagnostics(fileName) { + synchronizeHostData(); + var targetSourceFile = getValidSourceFile(fileName); + var semanticDiagnostics = program.getSemanticDiagnostics(targetSourceFile, cancellationToken); + if (!program.getCompilerOptions().declaration) { + return semanticDiagnostics; + } + var declarationDiagnostics = program.getDeclarationDiagnostics(targetSourceFile, cancellationToken); + return ts.concatenate(semanticDiagnostics, declarationDiagnostics); + } + function getCompilerOptionsDiagnostics() { + synchronizeHostData(); + return program.getOptionsDiagnostics(cancellationToken).concat(program.getGlobalDiagnostics(cancellationToken)); + } + function getCompletionEntryDisplayNameForSymbol(symbol, target, performCharacterChecks, location) { + var displayName = ts.getDeclaredName(program.getTypeChecker(), symbol, location); + if (displayName) { + var firstCharCode = displayName.charCodeAt(0); + if ((symbol.flags & 1536) && (firstCharCode === 39 || firstCharCode === 34)) { + return undefined; + } + } + return getCompletionEntryDisplayName(displayName, target, performCharacterChecks); + } + function getCompletionEntryDisplayName(name, target, performCharacterChecks) { + if (!name) { + return undefined; + } + name = ts.stripQuotes(name); + if (!name) { + return undefined; + } + if (performCharacterChecks) { + if (!ts.isIdentifier(name, target)) { + return undefined; + } + } + return name; + } + function getCompletionData(fileName, position) { + var typeChecker = program.getTypeChecker(); + var sourceFile = getValidSourceFile(fileName); + var isJavaScriptFile = ts.isSourceFileJavaScript(sourceFile); + var isJsDocTagName = false; + var start = new Date().getTime(); + var currentToken = ts.getTokenAtPosition(sourceFile, position); + log("getCompletionData: Get current token: " + (new Date().getTime() - start)); + start = new Date().getTime(); + var insideComment = isInsideComment(sourceFile, currentToken, position); + log("getCompletionData: Is inside comment: " + (new Date().getTime() - start)); + if (insideComment) { + if (ts.hasDocComment(sourceFile, position) && sourceFile.text.charCodeAt(position - 1) === 64) { + isJsDocTagName = true; + } + var insideJsDocTagExpression = false; + var tag = ts.getJsDocTagAtPosition(sourceFile, position); + if (tag) { + if (tag.tagName.pos <= position && position <= tag.tagName.end) { + isJsDocTagName = true; + } + switch (tag.kind) { + case 277: + case 275: + case 276: + var tagWithExpression = tag; + if (tagWithExpression.typeExpression) { + insideJsDocTagExpression = tagWithExpression.typeExpression.pos < position && position < tagWithExpression.typeExpression.end; + } + break; + } + } + if (isJsDocTagName) { + return { symbols: undefined, isMemberCompletion: false, isNewIdentifierLocation: false, location: undefined, isRightOfDot: false, isJsDocTagName: isJsDocTagName }; + } + if (!insideJsDocTagExpression) { + log("Returning an empty list because completion was inside a regular comment or plain text part of a JsDoc comment."); + return undefined; + } + } + start = new Date().getTime(); + var previousToken = ts.findPrecedingToken(position, sourceFile); + log("getCompletionData: Get previous token 1: " + (new Date().getTime() - start)); + var contextToken = previousToken; + if (contextToken && position <= contextToken.end && ts.isWord(contextToken.kind)) { + var start_6 = new Date().getTime(); + contextToken = ts.findPrecedingToken(contextToken.getFullStart(), sourceFile); + log("getCompletionData: Get previous token 2: " + (new Date().getTime() - start_6)); + } + var node = currentToken; + var isRightOfDot = false; + var isRightOfOpenTag = false; + var isStartingCloseTag = false; + var location = ts.getTouchingPropertyName(sourceFile, position); + if (contextToken) { + if (isCompletionListBlocker(contextToken)) { + log("Returning an empty list because completion was requested in an invalid position."); + return undefined; + } + var parent_16 = contextToken.parent, kind = contextToken.kind; + if (kind === 21) { + if (parent_16.kind === 172) { + node = contextToken.parent.expression; + isRightOfDot = true; + } + else if (parent_16.kind === 139) { + node = contextToken.parent.left; + isRightOfDot = true; + } + else { + return undefined; + } + } + else if (sourceFile.languageVariant === 1) { + if (kind === 25) { + isRightOfOpenTag = true; + location = contextToken; + } + else if (kind === 39 && contextToken.parent.kind === 245) { + isStartingCloseTag = true; + location = contextToken; + } + } + } + var semanticStart = new Date().getTime(); + var isMemberCompletion; + var isNewIdentifierLocation; + var symbols = []; + if (isRightOfDot) { + getTypeScriptMemberSymbols(); + } + else if (isRightOfOpenTag) { + var tagSymbols = typeChecker.getJsxIntrinsicTagNames(); + if (tryGetGlobalSymbols()) { + symbols = tagSymbols.concat(symbols.filter(function (s) { return !!(s.flags & (107455 | 8388608)); })); + } + else { + symbols = tagSymbols; + } + isMemberCompletion = true; + isNewIdentifierLocation = false; + } + else if (isStartingCloseTag) { + var tagName = contextToken.parent.parent.openingElement.tagName; + var tagSymbol = typeChecker.getSymbolAtLocation(tagName); + if (!typeChecker.isUnknownSymbol(tagSymbol)) { + symbols = [tagSymbol]; + } + isMemberCompletion = true; + isNewIdentifierLocation = false; + } + else { + if (!tryGetGlobalSymbols()) { + return undefined; + } + } + log("getCompletionData: Semantic work: " + (new Date().getTime() - semanticStart)); + return { symbols: symbols, isMemberCompletion: isMemberCompletion, isNewIdentifierLocation: isNewIdentifierLocation, location: location, isRightOfDot: (isRightOfDot || isRightOfOpenTag), isJsDocTagName: isJsDocTagName }; + function getTypeScriptMemberSymbols() { + isMemberCompletion = true; + isNewIdentifierLocation = false; + if (node.kind === 69 || node.kind === 139 || node.kind === 172) { + var symbol = typeChecker.getSymbolAtLocation(node); + if (symbol && symbol.flags & 8388608) { + symbol = typeChecker.getAliasedSymbol(symbol); + } + if (symbol && symbol.flags & 1952) { + var exportedSymbols = typeChecker.getExportsOfModule(symbol); + ts.forEach(exportedSymbols, function (symbol) { + if (typeChecker.isValidPropertyAccess((node.parent), symbol.name)) { + symbols.push(symbol); + } + }); + } + } + var type = typeChecker.getTypeAtLocation(node); + addTypeProperties(type); + } + function addTypeProperties(type) { + if (type) { + for (var _i = 0, _a = type.getApparentProperties(); _i < _a.length; _i++) { + var symbol = _a[_i]; + if (typeChecker.isValidPropertyAccess((node.parent), symbol.name)) { + symbols.push(symbol); + } + } + if (isJavaScriptFile && type.flags & 16384) { + var unionType = type; + for (var _b = 0, _c = unionType.types; _b < _c.length; _b++) { + var elementType = _c[_b]; + addTypeProperties(elementType); + } + } + } + } + function tryGetGlobalSymbols() { + var objectLikeContainer; + var namedImportsOrExports; + var jsxContainer; + if (objectLikeContainer = tryGetObjectLikeCompletionContainer(contextToken)) { + return tryGetObjectLikeCompletionSymbols(objectLikeContainer); + } + if (namedImportsOrExports = tryGetNamedImportsOrExportsForCompletion(contextToken)) { + return tryGetImportOrExportClauseCompletionSymbols(namedImportsOrExports); + } + if (jsxContainer = tryGetContainingJsxElement(contextToken)) { + var attrsType = void 0; + if ((jsxContainer.kind === 242) || (jsxContainer.kind === 243)) { + attrsType = typeChecker.getJsxElementAttributesType(jsxContainer); + if (attrsType) { + symbols = filterJsxAttributes(typeChecker.getPropertiesOfType(attrsType), jsxContainer.attributes); + isMemberCompletion = true; + isNewIdentifierLocation = false; + return true; + } + } + } + isMemberCompletion = false; + isNewIdentifierLocation = isNewIdentifierDefinitionLocation(contextToken); + if (previousToken !== contextToken) { + ts.Debug.assert(!!previousToken, "Expected 'contextToken' to be defined when different from 'previousToken'."); + } + var adjustedPosition = previousToken !== contextToken ? + previousToken.getStart() : + position; + var scopeNode = getScopeNode(contextToken, adjustedPosition, sourceFile) || sourceFile; + var symbolMeanings = 793056 | 107455 | 1536 | 8388608; + symbols = typeChecker.getSymbolsInScope(scopeNode, symbolMeanings); + return true; + } + function getScopeNode(initialToken, position, sourceFile) { + var scope = initialToken; + while (scope && !ts.positionBelongsToNode(scope, position, sourceFile)) { + scope = scope.parent; + } + return scope; + } + function isCompletionListBlocker(contextToken) { + var start = new Date().getTime(); + var result = isInStringOrRegularExpressionOrTemplateLiteral(contextToken) || + isSolelyIdentifierDefinitionLocation(contextToken) || + isDotOfNumericLiteral(contextToken) || + isInJsxText(contextToken); + log("getCompletionsAtPosition: isCompletionListBlocker: " + (new Date().getTime() - start)); + return result; + } + function isInJsxText(contextToken) { + if (contextToken.kind === 244) { + return true; + } + if (contextToken.kind === 27 && contextToken.parent) { + if (contextToken.parent.kind === 243) { + return true; + } + if (contextToken.parent.kind === 245 || contextToken.parent.kind === 242) { + return contextToken.parent.parent && contextToken.parent.parent.kind === 241; + } + } + return false; + } + function isNewIdentifierDefinitionLocation(previousToken) { + if (previousToken) { + var containingNodeKind = previousToken.parent.kind; + switch (previousToken.kind) { + case 24: + return containingNodeKind === 174 + || containingNodeKind === 148 + || containingNodeKind === 175 + || containingNodeKind === 170 + || containingNodeKind === 187 + || containingNodeKind === 156; + case 17: + return containingNodeKind === 174 + || containingNodeKind === 148 + || containingNodeKind === 175 + || containingNodeKind === 178 + || containingNodeKind === 164; + case 19: + return containingNodeKind === 170 + || containingNodeKind === 153 + || containingNodeKind === 140; + case 125: + case 126: + return true; + case 21: + return containingNodeKind === 225; + case 15: + return containingNodeKind === 221; + case 56: + return containingNodeKind === 218 + || containingNodeKind === 187; + case 12: + return containingNodeKind === 189; + case 13: + return containingNodeKind === 197; + case 112: + case 110: + case 111: + return containingNodeKind === 145; + } + switch (previousToken.getText()) { + case "public": + case "protected": + case "private": + return true; + } + } + return false; + } + function isInStringOrRegularExpressionOrTemplateLiteral(contextToken) { + if (contextToken.kind === 9 + || contextToken.kind === 166 + || contextToken.kind === 10 + || ts.isTemplateLiteralKind(contextToken.kind)) { + var start_7 = contextToken.getStart(); + var end = contextToken.getEnd(); + if (start_7 < position && position < end) { + return true; + } + if (position === end) { + return !!contextToken.isUnterminated + || contextToken.kind === 10; + } + } + return false; + } + function tryGetObjectLikeCompletionSymbols(objectLikeContainer) { + isMemberCompletion = true; + var typeForObject; + var existingMembers; + if (objectLikeContainer.kind === 171) { + isNewIdentifierLocation = true; + typeForObject = typeChecker.getContextualType(objectLikeContainer); + existingMembers = objectLikeContainer.properties; + } + else if (objectLikeContainer.kind === 167) { + isNewIdentifierLocation = false; + var rootDeclaration = ts.getRootDeclaration(objectLikeContainer.parent); + if (ts.isVariableLike(rootDeclaration)) { + var canGetType = !!(rootDeclaration.initializer || rootDeclaration.type); + if (!canGetType && rootDeclaration.kind === 142) { + if (ts.isExpression(rootDeclaration.parent)) { + canGetType = !!typeChecker.getContextualType(rootDeclaration.parent); + } + else if (rootDeclaration.parent.kind === 147 || rootDeclaration.parent.kind === 150) { + canGetType = ts.isExpression(rootDeclaration.parent.parent) && !!typeChecker.getContextualType(rootDeclaration.parent.parent); + } + } + if (canGetType) { + typeForObject = typeChecker.getTypeAtLocation(objectLikeContainer); + existingMembers = objectLikeContainer.elements; + } + } + else { + ts.Debug.fail("Root declaration is not variable-like."); + } + } + else { + ts.Debug.fail("Expected object literal or binding pattern, got " + objectLikeContainer.kind); + } + if (!typeForObject) { + return false; + } + var typeMembers = typeChecker.getPropertiesOfType(typeForObject); + if (typeMembers && typeMembers.length > 0) { + symbols = filterObjectMembersList(typeMembers, existingMembers); + } + return true; + } + function tryGetImportOrExportClauseCompletionSymbols(namedImportsOrExports) { + var declarationKind = namedImportsOrExports.kind === 233 ? + 230 : + 236; + var importOrExportDeclaration = ts.getAncestor(namedImportsOrExports, declarationKind); + var moduleSpecifier = importOrExportDeclaration.moduleSpecifier; + if (!moduleSpecifier) { + return false; + } + isMemberCompletion = true; + isNewIdentifierLocation = false; + var exports; + var moduleSpecifierSymbol = typeChecker.getSymbolAtLocation(importOrExportDeclaration.moduleSpecifier); + if (moduleSpecifierSymbol) { + exports = typeChecker.getExportsOfModule(moduleSpecifierSymbol); + } + symbols = exports ? filterNamedImportOrExportCompletionItems(exports, namedImportsOrExports.elements) : emptyArray; + return true; + } + function tryGetObjectLikeCompletionContainer(contextToken) { + if (contextToken) { + switch (contextToken.kind) { + case 15: + case 24: + var parent_17 = contextToken.parent; + if (parent_17 && (parent_17.kind === 171 || parent_17.kind === 167)) { + return parent_17; + } + break; + } + } + return undefined; + } + function tryGetNamedImportsOrExportsForCompletion(contextToken) { + if (contextToken) { + switch (contextToken.kind) { + case 15: + case 24: + switch (contextToken.parent.kind) { + case 233: + case 237: + return contextToken.parent; + } + } + } + return undefined; + } + function tryGetContainingJsxElement(contextToken) { + if (contextToken) { + var parent_18 = contextToken.parent; + switch (contextToken.kind) { + case 26: + case 39: + case 69: + case 246: + case 247: + if (parent_18 && (parent_18.kind === 242 || parent_18.kind === 243)) { + return parent_18; + } + else if (parent_18.kind === 246) { + return parent_18.parent; + } + break; + case 9: + if (parent_18 && ((parent_18.kind === 246) || (parent_18.kind === 247))) { + return parent_18.parent; + } + break; + case 16: + if (parent_18 && + parent_18.kind === 248 && + parent_18.parent && + (parent_18.parent.kind === 246)) { + return parent_18.parent.parent; + } + if (parent_18 && parent_18.kind === 247) { + return parent_18.parent; + } + break; + } + } + return undefined; + } + function isFunction(kind) { + switch (kind) { + case 179: + case 180: + case 220: + case 147: + case 146: + case 149: + case 150: + case 151: + case 152: + case 153: + return true; + } + return false; + } + function isSolelyIdentifierDefinitionLocation(contextToken) { + var containingNodeKind = contextToken.parent.kind; + switch (contextToken.kind) { + case 24: + return containingNodeKind === 218 || + containingNodeKind === 219 || + containingNodeKind === 200 || + containingNodeKind === 224 || + isFunction(containingNodeKind) || + containingNodeKind === 221 || + containingNodeKind === 192 || + containingNodeKind === 222 || + containingNodeKind === 168 || + containingNodeKind === 223; + case 21: + return containingNodeKind === 168; + case 54: + return containingNodeKind === 169; + case 19: + return containingNodeKind === 168; + case 17: + return containingNodeKind === 252 || + isFunction(containingNodeKind); + case 15: + return containingNodeKind === 224 || + containingNodeKind === 222 || + containingNodeKind === 159; + case 23: + return containingNodeKind === 144 && + contextToken.parent && contextToken.parent.parent && + (contextToken.parent.parent.kind === 222 || + contextToken.parent.parent.kind === 159); + case 25: + return containingNodeKind === 221 || + containingNodeKind === 192 || + containingNodeKind === 222 || + containingNodeKind === 223 || + isFunction(containingNodeKind); + case 113: + return containingNodeKind === 145; + case 22: + return containingNodeKind === 142 || + (contextToken.parent && contextToken.parent.parent && + contextToken.parent.parent.kind === 168); + case 112: + case 110: + case 111: + return containingNodeKind === 142; + case 116: + return containingNodeKind === 234 || + containingNodeKind === 238 || + containingNodeKind === 232; + case 73: + case 81: + case 107: + case 87: + case 102: + case 123: + case 131: + case 89: + case 108: + case 74: + case 114: + case 134: + return true; + } + switch (contextToken.getText()) { + case "abstract": + case "async": + case "class": + case "const": + case "declare": + case "enum": + case "function": + case "interface": + case "let": + case "private": + case "protected": + case "public": + case "static": + case "var": + case "yield": + return true; + } + return false; + } + function isDotOfNumericLiteral(contextToken) { + if (contextToken.kind === 8) { + var text = contextToken.getFullText(); + return text.charAt(text.length - 1) === "."; + } + return false; + } + function filterNamedImportOrExportCompletionItems(exportsOfModule, namedImportsOrExports) { + var existingImportsOrExports = {}; + for (var _i = 0, namedImportsOrExports_1 = namedImportsOrExports; _i < namedImportsOrExports_1.length; _i++) { + var element = namedImportsOrExports_1[_i]; + if (element.getStart() <= position && position <= element.getEnd()) { + continue; + } + var name_39 = element.propertyName || element.name; + existingImportsOrExports[name_39.text] = true; + } + if (ts.isEmpty(existingImportsOrExports)) { + return ts.filter(exportsOfModule, function (e) { return e.name !== "default"; }); + } + return ts.filter(exportsOfModule, function (e) { return e.name !== "default" && !ts.lookUp(existingImportsOrExports, e.name); }); + } + function filterObjectMembersList(contextualMemberSymbols, existingMembers) { + if (!existingMembers || existingMembers.length === 0) { + return contextualMemberSymbols; + } + var existingMemberNames = {}; + for (var _i = 0, existingMembers_1 = existingMembers; _i < existingMembers_1.length; _i++) { + var m = existingMembers_1[_i]; + if (m.kind !== 253 && + m.kind !== 254 && + m.kind !== 169 && + m.kind !== 147) { + continue; + } + if (m.getStart() <= position && position <= m.getEnd()) { + continue; + } + var existingName = void 0; + if (m.kind === 169 && m.propertyName) { + if (m.propertyName.kind === 69) { + existingName = m.propertyName.text; + } + } + else { + existingName = m.name.text; + } + existingMemberNames[existingName] = true; + } + return ts.filter(contextualMemberSymbols, function (m) { return !ts.lookUp(existingMemberNames, m.name); }); + } + function filterJsxAttributes(symbols, attributes) { + var seenNames = {}; + for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) { + var attr = attributes_1[_i]; + if (attr.getStart() <= position && position <= attr.getEnd()) { + continue; + } + if (attr.kind === 246) { + seenNames[attr.name.text] = true; + } + } + return ts.filter(symbols, function (a) { return !ts.lookUp(seenNames, a.name); }); + } + } + function getCompletionsAtPosition(fileName, position) { + synchronizeHostData(); + var completionData = getCompletionData(fileName, position); + if (!completionData) { + return undefined; + } + var symbols = completionData.symbols, isMemberCompletion = completionData.isMemberCompletion, isNewIdentifierLocation = completionData.isNewIdentifierLocation, location = completionData.location, isJsDocTagName = completionData.isJsDocTagName; + if (isJsDocTagName) { + return { isMemberCompletion: false, isNewIdentifierLocation: false, entries: getAllJsDocCompletionEntries() }; + } + var sourceFile = getValidSourceFile(fileName); + var entries = []; + if (ts.isSourceFileJavaScript(sourceFile)) { + var uniqueNames = getCompletionEntriesFromSymbols(symbols, entries); + ts.addRange(entries, getJavaScriptCompletionEntries(sourceFile, location.pos, uniqueNames)); + } + else { + if (!symbols || symbols.length === 0) { + if (sourceFile.languageVariant === 1 && + location.parent && location.parent.kind === 245) { + var tagName = location.parent.parent.openingElement.tagName; + entries.push({ + name: tagName.text, + kind: undefined, + kindModifiers: undefined, + sortText: "0" + }); + } + else { + return undefined; + } + } + getCompletionEntriesFromSymbols(symbols, entries); + } + if (!isMemberCompletion && !isJsDocTagName) { + ts.addRange(entries, keywordCompletions); + } + return { isMemberCompletion: isMemberCompletion, isNewIdentifierLocation: isNewIdentifierLocation, entries: entries }; + function getJavaScriptCompletionEntries(sourceFile, position, uniqueNames) { + var entries = []; + var target = program.getCompilerOptions().target; + var nameTable = getNameTable(sourceFile); + for (var name_40 in nameTable) { + if (nameTable[name_40] === position) { + continue; + } + if (!uniqueNames[name_40]) { + uniqueNames[name_40] = name_40; + var displayName = getCompletionEntryDisplayName(name_40, target, true); + if (displayName) { + var entry = { + name: displayName, + kind: ScriptElementKind.warning, + kindModifiers: "", + sortText: "1" + }; + entries.push(entry); + } + } + } + return entries; + } + function getAllJsDocCompletionEntries() { + return jsDocCompletionEntries || (jsDocCompletionEntries = ts.map(jsDocTagNames, function (tagName) { + return { + name: tagName, + kind: ScriptElementKind.keyword, + kindModifiers: "", + sortText: "0" + }; + })); + } + function createCompletionEntry(symbol, location) { + var displayName = getCompletionEntryDisplayNameForSymbol(symbol, program.getCompilerOptions().target, true, location); + if (!displayName) { + return undefined; + } + return { + name: displayName, + kind: getSymbolKind(symbol, location), + kindModifiers: getSymbolModifiers(symbol), + sortText: "0" + }; + } + function getCompletionEntriesFromSymbols(symbols, entries) { + var start = new Date().getTime(); + var uniqueNames = {}; + if (symbols) { + for (var _i = 0, symbols_4 = symbols; _i < symbols_4.length; _i++) { + var symbol = symbols_4[_i]; + var entry = createCompletionEntry(symbol, location); + if (entry) { + var id = ts.escapeIdentifier(entry.name); + if (!ts.lookUp(uniqueNames, id)) { + entries.push(entry); + uniqueNames[id] = id; + } + } + } + } + log("getCompletionsAtPosition: getCompletionEntriesFromSymbols: " + (new Date().getTime() - start)); + return uniqueNames; + } + } + function getCompletionEntryDetails(fileName, position, entryName) { + synchronizeHostData(); + var completionData = getCompletionData(fileName, position); + if (completionData) { + var symbols = completionData.symbols, location_2 = completionData.location; + var target_2 = program.getCompilerOptions().target; + var symbol = ts.forEach(symbols, function (s) { return getCompletionEntryDisplayNameForSymbol(s, target_2, false, location_2) === entryName ? s : undefined; }); + if (symbol) { + var _a = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, getValidSourceFile(fileName), location_2, location_2, 7), displayParts = _a.displayParts, documentation = _a.documentation, symbolKind = _a.symbolKind; + return { + name: entryName, + kindModifiers: getSymbolModifiers(symbol), + kind: symbolKind, + displayParts: displayParts, + documentation: documentation + }; + } + } + var keywordCompletion = ts.forEach(keywordCompletions, function (c) { return c.name === entryName; }); + if (keywordCompletion) { + return { + name: entryName, + kind: ScriptElementKind.keyword, + kindModifiers: ScriptElementKindModifier.none, + displayParts: [ts.displayPart(entryName, SymbolDisplayPartKind.keyword)], + documentation: undefined + }; + } + return undefined; + } + function getSymbolKind(symbol, location) { + var flags = symbol.getFlags(); + if (flags & 32) + return ts.getDeclarationOfKind(symbol, 192) ? + ScriptElementKind.localClassElement : ScriptElementKind.classElement; + if (flags & 384) + return ScriptElementKind.enumElement; + if (flags & 524288) + return ScriptElementKind.typeElement; + if (flags & 64) + return ScriptElementKind.interfaceElement; + if (flags & 262144) + return ScriptElementKind.typeParameterElement; + var result = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, flags, location); + if (result === ScriptElementKind.unknown) { + if (flags & 262144) + return ScriptElementKind.typeParameterElement; + if (flags & 8) + return ScriptElementKind.variableElement; + if (flags & 8388608) + return ScriptElementKind.alias; + if (flags & 1536) + return ScriptElementKind.moduleElement; + } + return result; + } + function getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, flags, location) { + var typeChecker = program.getTypeChecker(); + if (typeChecker.isUndefinedSymbol(symbol)) { + return ScriptElementKind.variableElement; + } + if (typeChecker.isArgumentsSymbol(symbol)) { + return ScriptElementKind.localVariableElement; + } + if (location.kind === 97 && ts.isExpression(location)) { + return ScriptElementKind.parameterElement; + } + if (flags & 3) { + if (ts.isFirstDeclarationOfSymbolParameter(symbol)) { + return ScriptElementKind.parameterElement; + } + else if (symbol.valueDeclaration && ts.isConst(symbol.valueDeclaration)) { + return ScriptElementKind.constElement; + } + else if (ts.forEach(symbol.declarations, ts.isLet)) { + return ScriptElementKind.letElement; + } + return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localVariableElement : ScriptElementKind.variableElement; + } + if (flags & 16) + return isLocalVariableOrFunction(symbol) ? ScriptElementKind.localFunctionElement : ScriptElementKind.functionElement; + if (flags & 32768) + return ScriptElementKind.memberGetAccessorElement; + if (flags & 65536) + return ScriptElementKind.memberSetAccessorElement; + if (flags & 8192) + return ScriptElementKind.memberFunctionElement; + if (flags & 16384) + return ScriptElementKind.constructorImplementationElement; + if (flags & 4) { + if (flags & 268435456) { + var unionPropertyKind = ts.forEach(typeChecker.getRootSymbols(symbol), function (rootSymbol) { + var rootSymbolFlags = rootSymbol.getFlags(); + if (rootSymbolFlags & (98308 | 3)) { + return ScriptElementKind.memberVariableElement; + } + ts.Debug.assert(!!(rootSymbolFlags & 8192)); + }); + if (!unionPropertyKind) { + var typeOfUnionProperty = typeChecker.getTypeOfSymbolAtLocation(symbol, location); + if (typeOfUnionProperty.getCallSignatures().length) { + return ScriptElementKind.memberFunctionElement; + } + return ScriptElementKind.memberVariableElement; + } + return unionPropertyKind; + } + return ScriptElementKind.memberVariableElement; + } + return ScriptElementKind.unknown; + } + function getSymbolModifiers(symbol) { + return symbol && symbol.declarations && symbol.declarations.length > 0 + ? ts.getNodeModifiers(symbol.declarations[0]) + : ScriptElementKindModifier.none; + } + function getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, sourceFile, enclosingDeclaration, location, semanticMeaning) { + if (semanticMeaning === void 0) { semanticMeaning = getMeaningFromLocation(location); } + var typeChecker = program.getTypeChecker(); + var displayParts = []; + var documentation; + var symbolFlags = symbol.flags; + var symbolKind = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(symbol, symbolFlags, location); + var hasAddedSymbolInfo; + var isThisExpression = location.kind === 97 && ts.isExpression(location); + var type; + if (symbolKind !== ScriptElementKind.unknown || symbolFlags & 32 || symbolFlags & 8388608) { + if (symbolKind === ScriptElementKind.memberGetAccessorElement || symbolKind === ScriptElementKind.memberSetAccessorElement) { + symbolKind = ScriptElementKind.memberVariableElement; + } + var signature = void 0; + type = isThisExpression ? typeChecker.getTypeAtLocation(location) : typeChecker.getTypeOfSymbolAtLocation(symbol, location); + if (type) { + if (location.parent && location.parent.kind === 172) { + var right = location.parent.name; + if (right === location || (right && right.getFullWidth() === 0)) { + location = location.parent; + } + } + var callExpression = void 0; + if (location.kind === 174 || location.kind === 175) { + callExpression = location; + } + else if (isCallExpressionTarget(location) || isNewExpressionTarget(location)) { + callExpression = location.parent; + } + if (callExpression) { + var candidateSignatures = []; + signature = typeChecker.getResolvedSignature(callExpression, candidateSignatures); + if (!signature && candidateSignatures.length) { + signature = candidateSignatures[0]; + } + var useConstructSignatures = callExpression.kind === 175 || callExpression.expression.kind === 95; + var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures(); + if (!ts.contains(allSignatures, signature.target) && !ts.contains(allSignatures, signature)) { + signature = allSignatures.length ? allSignatures[0] : undefined; + } + if (signature) { + if (useConstructSignatures && (symbolFlags & 32)) { + symbolKind = ScriptElementKind.constructorImplementationElement; + addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); + } + else if (symbolFlags & 8388608) { + symbolKind = ScriptElementKind.alias; + pushTypePart(symbolKind); + displayParts.push(ts.spacePart()); + if (useConstructSignatures) { + displayParts.push(ts.keywordPart(92)); + displayParts.push(ts.spacePart()); + } + addFullSymbolName(symbol); + } + else { + addPrefixForAnyFunctionOrVar(symbol, symbolKind); + } + switch (symbolKind) { + case ScriptElementKind.memberVariableElement: + case ScriptElementKind.variableElement: + case ScriptElementKind.constElement: + case ScriptElementKind.letElement: + case ScriptElementKind.parameterElement: + case ScriptElementKind.localVariableElement: + displayParts.push(ts.punctuationPart(54)); + displayParts.push(ts.spacePart()); + if (useConstructSignatures) { + displayParts.push(ts.keywordPart(92)); + displayParts.push(ts.spacePart()); + } + if (!(type.flags & 65536) && type.symbol) { + ts.addRange(displayParts, ts.symbolToDisplayParts(typeChecker, type.symbol, enclosingDeclaration, undefined, 1)); + } + addSignatureDisplayParts(signature, allSignatures, 8); + break; + default: + addSignatureDisplayParts(signature, allSignatures); + } + hasAddedSymbolInfo = true; + } + } + else if ((isNameOfFunctionDeclaration(location) && !(symbol.flags & 98304)) || + (location.kind === 121 && location.parent.kind === 148)) { + var functionDeclaration = location.parent; + var allSignatures = functionDeclaration.kind === 148 ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures(); + if (!typeChecker.isImplementationOfOverload(functionDeclaration)) { + signature = typeChecker.getSignatureFromDeclaration(functionDeclaration); + } + else { + signature = allSignatures[0]; + } + if (functionDeclaration.kind === 148) { + symbolKind = ScriptElementKind.constructorImplementationElement; + addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); + } + else { + addPrefixForAnyFunctionOrVar(functionDeclaration.kind === 151 && + !(type.symbol.flags & 2048 || type.symbol.flags & 4096) ? type.symbol : symbol, symbolKind); + } + addSignatureDisplayParts(signature, allSignatures); + hasAddedSymbolInfo = true; + } + } + } + if (symbolFlags & 32 && !hasAddedSymbolInfo && !isThisExpression) { + if (ts.getDeclarationOfKind(symbol, 192)) { + pushTypePart(ScriptElementKind.localClassElement); + } + else { + displayParts.push(ts.keywordPart(73)); + } + displayParts.push(ts.spacePart()); + addFullSymbolName(symbol); + writeTypeParametersOfSymbol(symbol, sourceFile); + } + if ((symbolFlags & 64) && (semanticMeaning & 2)) { + addNewLineIfDisplayPartsExist(); + displayParts.push(ts.keywordPart(107)); + displayParts.push(ts.spacePart()); + addFullSymbolName(symbol); + writeTypeParametersOfSymbol(symbol, sourceFile); + } + if (symbolFlags & 524288) { + addNewLineIfDisplayPartsExist(); + displayParts.push(ts.keywordPart(134)); + displayParts.push(ts.spacePart()); + addFullSymbolName(symbol); + writeTypeParametersOfSymbol(symbol, sourceFile); + displayParts.push(ts.spacePart()); + displayParts.push(ts.operatorPart(56)); + displayParts.push(ts.spacePart()); + ts.addRange(displayParts, ts.typeToDisplayParts(typeChecker, typeChecker.getDeclaredTypeOfSymbol(symbol), enclosingDeclaration)); + } + if (symbolFlags & 384) { + addNewLineIfDisplayPartsExist(); + if (ts.forEach(symbol.declarations, ts.isConstEnumDeclaration)) { + displayParts.push(ts.keywordPart(74)); + displayParts.push(ts.spacePart()); + } + displayParts.push(ts.keywordPart(81)); + displayParts.push(ts.spacePart()); + addFullSymbolName(symbol); + } + if (symbolFlags & 1536) { + addNewLineIfDisplayPartsExist(); + var declaration = ts.getDeclarationOfKind(symbol, 225); + var isNamespace = declaration && declaration.name && declaration.name.kind === 69; + displayParts.push(ts.keywordPart(isNamespace ? 126 : 125)); + displayParts.push(ts.spacePart()); + addFullSymbolName(symbol); + } + if ((symbolFlags & 262144) && (semanticMeaning & 2)) { + addNewLineIfDisplayPartsExist(); + displayParts.push(ts.punctuationPart(17)); + displayParts.push(ts.textPart("type parameter")); + displayParts.push(ts.punctuationPart(18)); + displayParts.push(ts.spacePart()); + addFullSymbolName(symbol); + displayParts.push(ts.spacePart()); + displayParts.push(ts.keywordPart(90)); + displayParts.push(ts.spacePart()); + if (symbol.parent) { + addFullSymbolName(symbol.parent, enclosingDeclaration); + writeTypeParametersOfSymbol(symbol.parent, enclosingDeclaration); + } + else { + var declaration = ts.getDeclarationOfKind(symbol, 141); + ts.Debug.assert(declaration !== undefined); + declaration = declaration.parent; + if (declaration) { + if (ts.isFunctionLikeKind(declaration.kind)) { + var signature = typeChecker.getSignatureFromDeclaration(declaration); + if (declaration.kind === 152) { + displayParts.push(ts.keywordPart(92)); + displayParts.push(ts.spacePart()); + } + else if (declaration.kind !== 151 && declaration.name) { + addFullSymbolName(declaration.symbol); + } + ts.addRange(displayParts, ts.signatureToDisplayParts(typeChecker, signature, sourceFile, 32)); + } + else { + displayParts.push(ts.keywordPart(134)); + displayParts.push(ts.spacePart()); + addFullSymbolName(declaration.symbol); + writeTypeParametersOfSymbol(declaration.symbol, sourceFile); + } + } + } + } + if (symbolFlags & 8) { + addPrefixForAnyFunctionOrVar(symbol, "enum member"); + var declaration = symbol.declarations[0]; + if (declaration.kind === 255) { + var constantValue = typeChecker.getConstantValue(declaration); + if (constantValue !== undefined) { + displayParts.push(ts.spacePart()); + displayParts.push(ts.operatorPart(56)); + displayParts.push(ts.spacePart()); + displayParts.push(ts.displayPart(constantValue.toString(), SymbolDisplayPartKind.numericLiteral)); + } + } + } + if (symbolFlags & 8388608) { + addNewLineIfDisplayPartsExist(); + displayParts.push(ts.keywordPart(89)); + displayParts.push(ts.spacePart()); + addFullSymbolName(symbol); + ts.forEach(symbol.declarations, function (declaration) { + if (declaration.kind === 229) { + var importEqualsDeclaration = declaration; + if (ts.isExternalModuleImportEqualsDeclaration(importEqualsDeclaration)) { + displayParts.push(ts.spacePart()); + displayParts.push(ts.operatorPart(56)); + displayParts.push(ts.spacePart()); + displayParts.push(ts.keywordPart(129)); + displayParts.push(ts.punctuationPart(17)); + displayParts.push(ts.displayPart(ts.getTextOfNode(ts.getExternalModuleImportEqualsDeclarationExpression(importEqualsDeclaration)), SymbolDisplayPartKind.stringLiteral)); + displayParts.push(ts.punctuationPart(18)); + } + else { + var internalAliasSymbol = typeChecker.getSymbolAtLocation(importEqualsDeclaration.moduleReference); + if (internalAliasSymbol) { + displayParts.push(ts.spacePart()); + displayParts.push(ts.operatorPart(56)); + displayParts.push(ts.spacePart()); + addFullSymbolName(internalAliasSymbol, enclosingDeclaration); + } + } + return true; + } + }); + } + if (!hasAddedSymbolInfo) { + if (symbolKind !== ScriptElementKind.unknown) { + if (type) { + if (isThisExpression) { + addNewLineIfDisplayPartsExist(); + displayParts.push(ts.keywordPart(97)); + } + else { + addPrefixForAnyFunctionOrVar(symbol, symbolKind); + } + if (symbolKind === ScriptElementKind.memberVariableElement || + symbolFlags & 3 || + symbolKind === ScriptElementKind.localVariableElement || + isThisExpression) { + displayParts.push(ts.punctuationPart(54)); + displayParts.push(ts.spacePart()); + if (type.symbol && type.symbol.flags & 262144) { + var typeParameterParts = ts.mapToDisplayParts(function (writer) { + typeChecker.getSymbolDisplayBuilder().buildTypeParameterDisplay(type, writer, enclosingDeclaration); + }); + ts.addRange(displayParts, typeParameterParts); + } + else { + ts.addRange(displayParts, ts.typeToDisplayParts(typeChecker, type, enclosingDeclaration)); + } + } + else if (symbolFlags & 16 || + symbolFlags & 8192 || + symbolFlags & 16384 || + symbolFlags & 131072 || + symbolFlags & 98304 || + symbolKind === ScriptElementKind.memberFunctionElement) { + var allSignatures = type.getNonNullableType().getCallSignatures(); + addSignatureDisplayParts(allSignatures[0], allSignatures); + } + } + } + else { + symbolKind = getSymbolKind(symbol, location); + } + } + if (!documentation) { + documentation = symbol.getDocumentationComment(); + } + return { displayParts: displayParts, documentation: documentation, symbolKind: symbolKind }; + function addNewLineIfDisplayPartsExist() { + if (displayParts.length) { + displayParts.push(ts.lineBreakPart()); + } + } + function addFullSymbolName(symbol, enclosingDeclaration) { + var fullSymbolDisplayParts = ts.symbolToDisplayParts(typeChecker, symbol, enclosingDeclaration || sourceFile, undefined, 1 | 2); + ts.addRange(displayParts, fullSymbolDisplayParts); + } + function addPrefixForAnyFunctionOrVar(symbol, symbolKind) { + addNewLineIfDisplayPartsExist(); + if (symbolKind) { + pushTypePart(symbolKind); + displayParts.push(ts.spacePart()); + addFullSymbolName(symbol); + } + } + function pushTypePart(symbolKind) { + switch (symbolKind) { + case ScriptElementKind.variableElement: + case ScriptElementKind.functionElement: + case ScriptElementKind.letElement: + case ScriptElementKind.constElement: + case ScriptElementKind.constructorImplementationElement: + displayParts.push(ts.textOrKeywordPart(symbolKind)); + return; + default: + displayParts.push(ts.punctuationPart(17)); + displayParts.push(ts.textOrKeywordPart(symbolKind)); + displayParts.push(ts.punctuationPart(18)); + return; + } + } + function addSignatureDisplayParts(signature, allSignatures, flags) { + ts.addRange(displayParts, ts.signatureToDisplayParts(typeChecker, signature, enclosingDeclaration, flags | 32)); + if (allSignatures.length > 1) { + displayParts.push(ts.spacePart()); + displayParts.push(ts.punctuationPart(17)); + displayParts.push(ts.operatorPart(35)); + displayParts.push(ts.displayPart((allSignatures.length - 1).toString(), SymbolDisplayPartKind.numericLiteral)); + displayParts.push(ts.spacePart()); + displayParts.push(ts.textPart(allSignatures.length === 2 ? "overload" : "overloads")); + displayParts.push(ts.punctuationPart(18)); + } + documentation = signature.getDocumentationComment(); + } + function writeTypeParametersOfSymbol(symbol, enclosingDeclaration) { + var typeParameterParts = ts.mapToDisplayParts(function (writer) { + typeChecker.getSymbolDisplayBuilder().buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaration); + }); + ts.addRange(displayParts, typeParameterParts); + } + } + function getQuickInfoAtPosition(fileName, position) { + synchronizeHostData(); + var sourceFile = getValidSourceFile(fileName); + var node = ts.getTouchingPropertyName(sourceFile, position); + if (node === sourceFile) { + return undefined; + } + if (isLabelName(node)) { + return undefined; + } + var typeChecker = program.getTypeChecker(); + var symbol = typeChecker.getSymbolAtLocation(node); + if (!symbol || typeChecker.isUnknownSymbol(symbol)) { + switch (node.kind) { + case 69: + case 172: + case 139: + case 97: + case 165: + case 95: + var type = typeChecker.getTypeAtLocation(node); + if (type) { + return { + kind: ScriptElementKind.unknown, + kindModifiers: ScriptElementKindModifier.none, + textSpan: ts.createTextSpan(node.getStart(), node.getWidth()), + displayParts: ts.typeToDisplayParts(typeChecker, type, getContainerNode(node)), + documentation: type.symbol ? type.symbol.getDocumentationComment() : undefined + }; + } + } + return undefined; + } + var displayPartsDocumentationsAndKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, sourceFile, getContainerNode(node), node); + return { + kind: displayPartsDocumentationsAndKind.symbolKind, + kindModifiers: getSymbolModifiers(symbol), + textSpan: ts.createTextSpan(node.getStart(), node.getWidth()), + displayParts: displayPartsDocumentationsAndKind.displayParts, + documentation: displayPartsDocumentationsAndKind.documentation + }; + } + function createDefinitionInfo(node, symbolKind, symbolName, containerName) { + return { + fileName: node.getSourceFile().fileName, + textSpan: ts.createTextSpanFromBounds(node.getStart(), node.getEnd()), + kind: symbolKind, + name: symbolName, + containerKind: undefined, + containerName: containerName + }; + } + function getDefinitionFromSymbol(symbol, node) { + var typeChecker = program.getTypeChecker(); + var result = []; + var declarations = symbol.getDeclarations(); + var symbolName = typeChecker.symbolToString(symbol); + var symbolKind = getSymbolKind(symbol, node); + var containerSymbol = symbol.parent; + var containerName = containerSymbol ? typeChecker.symbolToString(containerSymbol, node) : ""; + if (!tryAddConstructSignature(symbol, node, symbolKind, symbolName, containerName, result) && + !tryAddCallSignature(symbol, node, symbolKind, symbolName, containerName, result)) { + ts.forEach(declarations, function (declaration) { + result.push(createDefinitionInfo(declaration, symbolKind, symbolName, containerName)); + }); + } + return result; + function tryAddConstructSignature(symbol, location, symbolKind, symbolName, containerName, result) { + if (isNewExpressionTarget(location) || location.kind === 121) { + if (symbol.flags & 32) { + for (var _i = 0, _a = symbol.getDeclarations(); _i < _a.length; _i++) { + var declaration = _a[_i]; + if (ts.isClassLike(declaration)) { + return tryAddSignature(declaration.members, true, symbolKind, symbolName, containerName, result); + } + } + ts.Debug.fail("Expected declaration to have at least one class-like declaration"); + } + } + return false; + } + function tryAddCallSignature(symbol, location, symbolKind, symbolName, containerName, result) { + if (isCallExpressionTarget(location) || isNewExpressionTarget(location) || isNameOfFunctionDeclaration(location)) { + return tryAddSignature(symbol.declarations, false, symbolKind, symbolName, containerName, result); + } + return false; + } + function tryAddSignature(signatureDeclarations, selectConstructors, symbolKind, symbolName, containerName, result) { + var declarations = []; + var definition; + ts.forEach(signatureDeclarations, function (d) { + if ((selectConstructors && d.kind === 148) || + (!selectConstructors && (d.kind === 220 || d.kind === 147 || d.kind === 146))) { + declarations.push(d); + if (d.body) + definition = d; + } + }); + if (definition) { + result.push(createDefinitionInfo(definition, symbolKind, symbolName, containerName)); + return true; + } + else if (declarations.length) { + result.push(createDefinitionInfo(ts.lastOrUndefined(declarations), symbolKind, symbolName, containerName)); + return true; + } + return false; + } + } + function findReferenceInPosition(refs, pos) { + for (var _i = 0, refs_1 = refs; _i < refs_1.length; _i++) { + var ref = refs_1[_i]; + if (ref.pos <= pos && pos < ref.end) { + return ref; + } + } + return undefined; + } + function getDefinitionInfoForFileReference(name, targetFileName) { + return { + fileName: targetFileName, + textSpan: ts.createTextSpanFromBounds(0, 0), + kind: ScriptElementKind.scriptElement, + name: name, + containerName: undefined, + containerKind: undefined + }; + } + function getDefinitionAtPosition(fileName, position) { + synchronizeHostData(); + var sourceFile = getValidSourceFile(fileName); + var comment = findReferenceInPosition(sourceFile.referencedFiles, position); + if (comment) { + var referenceFile = ts.tryResolveScriptReference(program, sourceFile, comment); + if (referenceFile) { + return [getDefinitionInfoForFileReference(comment.fileName, referenceFile.fileName)]; + } + return undefined; + } + var typeReferenceDirective = findReferenceInPosition(sourceFile.typeReferenceDirectives, position); + if (typeReferenceDirective) { + var referenceFile = ts.lookUp(program.getResolvedTypeReferenceDirectives(), typeReferenceDirective.fileName); + if (referenceFile && referenceFile.resolvedFileName) { + return [getDefinitionInfoForFileReference(typeReferenceDirective.fileName, referenceFile.resolvedFileName)]; + } + return undefined; + } + var node = ts.getTouchingPropertyName(sourceFile, position); + if (node === sourceFile) { + return undefined; + } + if (isJumpStatementTarget(node)) { + var labelName = node.text; + var label = getTargetLabel(node.parent, node.text); + return label ? [createDefinitionInfo(label, ScriptElementKind.label, labelName, undefined)] : undefined; + } + var typeChecker = program.getTypeChecker(); + var symbol = typeChecker.getSymbolAtLocation(node); + if (!symbol) { + return undefined; + } + if (symbol.flags & 8388608) { + var declaration = symbol.declarations[0]; + if (node.kind === 69 && + (node.parent === declaration || + (declaration.kind === 234 && declaration.parent && declaration.parent.kind === 233))) { + symbol = typeChecker.getAliasedSymbol(symbol); + } + } + if (node.parent.kind === 254) { + var shorthandSymbol = typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration); + if (!shorthandSymbol) { + return []; + } + var shorthandDeclarations = shorthandSymbol.getDeclarations(); + var shorthandSymbolKind_1 = getSymbolKind(shorthandSymbol, node); + var shorthandSymbolName_1 = typeChecker.symbolToString(shorthandSymbol); + var shorthandContainerName_1 = typeChecker.symbolToString(symbol.parent, node); + return ts.map(shorthandDeclarations, function (declaration) { return createDefinitionInfo(declaration, shorthandSymbolKind_1, shorthandSymbolName_1, shorthandContainerName_1); }); + } + return getDefinitionFromSymbol(symbol, node); + } + function getTypeDefinitionAtPosition(fileName, position) { + synchronizeHostData(); + var sourceFile = getValidSourceFile(fileName); + var node = ts.getTouchingPropertyName(sourceFile, position); + if (node === sourceFile) { + return undefined; + } + var typeChecker = program.getTypeChecker(); + var symbol = typeChecker.getSymbolAtLocation(node); + if (!symbol) { + return undefined; + } + var type = typeChecker.getTypeOfSymbolAtLocation(symbol, node); + if (!type) { + return undefined; + } + if (type.flags & 16384) { + var result_3 = []; + ts.forEach(type.types, function (t) { + if (t.symbol) { + ts.addRange(result_3, getDefinitionFromSymbol(t.symbol, node)); + } + }); + return result_3; + } + if (!type.symbol) { + return undefined; + } + return getDefinitionFromSymbol(type.symbol, node); + } + function getOccurrencesAtPosition(fileName, position) { + var results = getOccurrencesAtPositionCore(fileName, position); + if (results) { + var sourceFile_2 = getCanonicalFileName(ts.normalizeSlashes(fileName)); + results = ts.filter(results, function (r) { return getCanonicalFileName(ts.normalizeSlashes(r.fileName)) === sourceFile_2; }); + } + return results; + } + function getDocumentHighlights(fileName, position, filesToSearch) { + synchronizeHostData(); + filesToSearch = ts.map(filesToSearch, ts.normalizeSlashes); + var sourceFilesToSearch = ts.filter(program.getSourceFiles(), function (f) { return ts.contains(filesToSearch, f.fileName); }); + var sourceFile = getValidSourceFile(fileName); + var node = ts.getTouchingWord(sourceFile, position); + if (!node) { + return undefined; + } + return getSemanticDocumentHighlights(node) || getSyntacticDocumentHighlights(node); + function getHighlightSpanForNode(node) { + var start = node.getStart(); + var end = node.getEnd(); + return { + fileName: sourceFile.fileName, + textSpan: ts.createTextSpanFromBounds(start, end), + kind: HighlightSpanKind.none + }; + } + function getSemanticDocumentHighlights(node) { + if (node.kind === 69 || + node.kind === 97 || + node.kind === 165 || + node.kind === 95 || + node.kind === 9 || + isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + var referencedSymbols = getReferencedSymbolsForNode(node, sourceFilesToSearch, false, false); + return convertReferencedSymbols(referencedSymbols); + } + return undefined; + function convertReferencedSymbols(referencedSymbols) { + if (!referencedSymbols) { + return undefined; + } + var fileNameToDocumentHighlights = {}; + var result = []; + for (var _i = 0, referencedSymbols_1 = referencedSymbols; _i < referencedSymbols_1.length; _i++) { + var referencedSymbol = referencedSymbols_1[_i]; + for (var _a = 0, _b = referencedSymbol.references; _a < _b.length; _a++) { + var referenceEntry = _b[_a]; + var fileName_1 = referenceEntry.fileName; + var documentHighlights = ts.getProperty(fileNameToDocumentHighlights, fileName_1); + if (!documentHighlights) { + documentHighlights = { fileName: fileName_1, highlightSpans: [] }; + fileNameToDocumentHighlights[fileName_1] = documentHighlights; + result.push(documentHighlights); + } + documentHighlights.highlightSpans.push({ + textSpan: referenceEntry.textSpan, + kind: referenceEntry.isWriteAccess ? HighlightSpanKind.writtenReference : HighlightSpanKind.reference + }); + } + } + return result; + } + } + function getSyntacticDocumentHighlights(node) { + var fileName = sourceFile.fileName; + var highlightSpans = getHighlightSpans(node); + if (!highlightSpans || highlightSpans.length === 0) { + return undefined; + } + return [{ fileName: fileName, highlightSpans: highlightSpans }]; + function hasKind(node, kind) { + return node !== undefined && node.kind === kind; + } + function parent(node) { + return node && node.parent; + } + function getHighlightSpans(node) { + if (node) { + switch (node.kind) { + case 88: + case 80: + if (hasKind(node.parent, 203)) { + return getIfElseOccurrences(node.parent); + } + break; + case 94: + if (hasKind(node.parent, 211)) { + return getReturnOccurrences(node.parent); + } + break; + case 98: + if (hasKind(node.parent, 215)) { + return getThrowOccurrences(node.parent); + } + break; + case 72: + if (hasKind(parent(parent(node)), 216)) { + return getTryCatchFinallyOccurrences(node.parent.parent); + } + break; + case 100: + case 85: + if (hasKind(parent(node), 216)) { + return getTryCatchFinallyOccurrences(node.parent); + } + break; + case 96: + if (hasKind(node.parent, 213)) { + return getSwitchCaseDefaultOccurrences(node.parent); + } + break; + case 71: + case 77: + if (hasKind(parent(parent(parent(node))), 213)) { + return getSwitchCaseDefaultOccurrences(node.parent.parent.parent); + } + break; + case 70: + case 75: + if (hasKind(node.parent, 210) || hasKind(node.parent, 209)) { + return getBreakOrContinueStatementOccurrences(node.parent); + } + break; + case 86: + if (hasKind(node.parent, 206) || + hasKind(node.parent, 207) || + hasKind(node.parent, 208)) { + return getLoopBreakContinueOccurrences(node.parent); + } + break; + case 104: + case 79: + if (hasKind(node.parent, 205) || hasKind(node.parent, 204)) { + return getLoopBreakContinueOccurrences(node.parent); + } + break; + case 121: + if (hasKind(node.parent, 148)) { + return getConstructorOccurrences(node.parent); + } + break; + case 123: + case 131: + if (hasKind(node.parent, 149) || hasKind(node.parent, 150)) { + return getGetAndSetOccurrences(node.parent); + } + break; + default: + if (ts.isModifierKind(node.kind) && node.parent && + (ts.isDeclaration(node.parent) || node.parent.kind === 200)) { + return getModifierOccurrences(node.kind, node.parent); + } + } + } + return undefined; + } + function aggregateOwnedThrowStatements(node) { + var statementAccumulator = []; + aggregate(node); + return statementAccumulator; + function aggregate(node) { + if (node.kind === 215) { + statementAccumulator.push(node); + } + else if (node.kind === 216) { + var tryStatement = node; + if (tryStatement.catchClause) { + aggregate(tryStatement.catchClause); + } + else { + aggregate(tryStatement.tryBlock); + } + if (tryStatement.finallyBlock) { + aggregate(tryStatement.finallyBlock); + } + } + else if (!ts.isFunctionLike(node)) { + ts.forEachChild(node, aggregate); + } + } + } + function getThrowStatementOwner(throwStatement) { + var child = throwStatement; + while (child.parent) { + var parent_19 = child.parent; + if (ts.isFunctionBlock(parent_19) || parent_19.kind === 256) { + return parent_19; + } + if (parent_19.kind === 216) { + var tryStatement = parent_19; + if (tryStatement.tryBlock === child && tryStatement.catchClause) { + return child; + } + } + child = parent_19; + } + return undefined; + } + function aggregateAllBreakAndContinueStatements(node) { + var statementAccumulator = []; + aggregate(node); + return statementAccumulator; + function aggregate(node) { + if (node.kind === 210 || node.kind === 209) { + statementAccumulator.push(node); + } + else if (!ts.isFunctionLike(node)) { + ts.forEachChild(node, aggregate); + } + } + } + function ownsBreakOrContinueStatement(owner, statement) { + var actualOwner = getBreakOrContinueOwner(statement); + return actualOwner && actualOwner === owner; + } + function getBreakOrContinueOwner(statement) { + for (var node_1 = statement.parent; node_1; node_1 = node_1.parent) { + switch (node_1.kind) { + case 213: + if (statement.kind === 209) { + continue; + } + case 206: + case 207: + case 208: + case 205: + case 204: + if (!statement.label || isLabeledBy(node_1, statement.label.text)) { + return node_1; + } + break; + default: + if (ts.isFunctionLike(node_1)) { + return undefined; + } + break; + } + } + return undefined; + } + function getModifierOccurrences(modifier, declaration) { + var container = declaration.parent; + if (ts.isAccessibilityModifier(modifier)) { + if (!(container.kind === 221 || + container.kind === 192 || + (declaration.kind === 142 && hasKind(container, 148)))) { + return undefined; + } + } + else if (modifier === 113) { + if (!(container.kind === 221 || container.kind === 192)) { + return undefined; + } + } + else if (modifier === 82 || modifier === 122) { + if (!(container.kind === 226 || container.kind === 256)) { + return undefined; + } + } + else if (modifier === 115) { + if (!(container.kind === 221 || declaration.kind === 221)) { + return undefined; + } + } + else { + return undefined; + } + var keywords = []; + var modifierFlag = getFlagFromModifier(modifier); + var nodes; + switch (container.kind) { + case 226: + case 256: + if (modifierFlag & 128) { + nodes = declaration.members.concat(declaration); + } + else { + nodes = container.statements; + } + break; + case 148: + nodes = container.parameters.concat(container.parent.members); + break; + case 221: + case 192: + nodes = container.members; + if (modifierFlag & 28) { + var constructor = ts.forEach(container.members, function (member) { + return member.kind === 148 && member; + }); + if (constructor) { + nodes = nodes.concat(constructor.parameters); + } + } + else if (modifierFlag & 128) { + nodes = nodes.concat(container); + } + break; + default: + ts.Debug.fail("Invalid container kind."); + } + ts.forEach(nodes, function (node) { + if (node.modifiers && node.flags & modifierFlag) { + ts.forEach(node.modifiers, function (child) { return pushKeywordIf(keywords, child, modifier); }); + } + }); + return ts.map(keywords, getHighlightSpanForNode); + function getFlagFromModifier(modifier) { + switch (modifier) { + case 112: + return 4; + case 110: + return 8; + case 111: + return 16; + case 113: + return 32; + case 82: + return 1; + case 122: + return 2; + case 115: + return 128; + default: + ts.Debug.fail(); + } + } + } + function pushKeywordIf(keywordList, token) { + var expected = []; + for (var _i = 2; _i < arguments.length; _i++) { + expected[_i - 2] = arguments[_i]; + } + if (token && ts.contains(expected, token.kind)) { + keywordList.push(token); + return true; + } + return false; + } + function getGetAndSetOccurrences(accessorDeclaration) { + var keywords = []; + tryPushAccessorKeyword(accessorDeclaration.symbol, 149); + tryPushAccessorKeyword(accessorDeclaration.symbol, 150); + return ts.map(keywords, getHighlightSpanForNode); + function tryPushAccessorKeyword(accessorSymbol, accessorKind) { + var accessor = ts.getDeclarationOfKind(accessorSymbol, accessorKind); + if (accessor) { + ts.forEach(accessor.getChildren(), function (child) { return pushKeywordIf(keywords, child, 123, 131); }); + } + } + } + function getConstructorOccurrences(constructorDeclaration) { + var declarations = constructorDeclaration.symbol.getDeclarations(); + var keywords = []; + ts.forEach(declarations, function (declaration) { + ts.forEach(declaration.getChildren(), function (token) { + return pushKeywordIf(keywords, token, 121); + }); + }); + return ts.map(keywords, getHighlightSpanForNode); + } + function getLoopBreakContinueOccurrences(loopNode) { + var keywords = []; + if (pushKeywordIf(keywords, loopNode.getFirstToken(), 86, 104, 79)) { + if (loopNode.kind === 204) { + var loopTokens = loopNode.getChildren(); + for (var i = loopTokens.length - 1; i >= 0; i--) { + if (pushKeywordIf(keywords, loopTokens[i], 104)) { + break; + } + } + } + } + var breaksAndContinues = aggregateAllBreakAndContinueStatements(loopNode.statement); + ts.forEach(breaksAndContinues, function (statement) { + if (ownsBreakOrContinueStatement(loopNode, statement)) { + pushKeywordIf(keywords, statement.getFirstToken(), 70, 75); + } + }); + return ts.map(keywords, getHighlightSpanForNode); + } + function getBreakOrContinueStatementOccurrences(breakOrContinueStatement) { + var owner = getBreakOrContinueOwner(breakOrContinueStatement); + if (owner) { + switch (owner.kind) { + case 206: + case 207: + case 208: + case 204: + case 205: + return getLoopBreakContinueOccurrences(owner); + case 213: + return getSwitchCaseDefaultOccurrences(owner); + } + } + return undefined; + } + function getSwitchCaseDefaultOccurrences(switchStatement) { + var keywords = []; + pushKeywordIf(keywords, switchStatement.getFirstToken(), 96); + ts.forEach(switchStatement.caseBlock.clauses, function (clause) { + pushKeywordIf(keywords, clause.getFirstToken(), 71, 77); + var breaksAndContinues = aggregateAllBreakAndContinueStatements(clause); + ts.forEach(breaksAndContinues, function (statement) { + if (ownsBreakOrContinueStatement(switchStatement, statement)) { + pushKeywordIf(keywords, statement.getFirstToken(), 70); + } + }); + }); + return ts.map(keywords, getHighlightSpanForNode); + } + function getTryCatchFinallyOccurrences(tryStatement) { + var keywords = []; + pushKeywordIf(keywords, tryStatement.getFirstToken(), 100); + if (tryStatement.catchClause) { + pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 72); + } + if (tryStatement.finallyBlock) { + var finallyKeyword = ts.findChildOfKind(tryStatement, 85, sourceFile); + pushKeywordIf(keywords, finallyKeyword, 85); + } + return ts.map(keywords, getHighlightSpanForNode); + } + function getThrowOccurrences(throwStatement) { + var owner = getThrowStatementOwner(throwStatement); + if (!owner) { + return undefined; + } + var keywords = []; + ts.forEach(aggregateOwnedThrowStatements(owner), function (throwStatement) { + pushKeywordIf(keywords, throwStatement.getFirstToken(), 98); + }); + if (ts.isFunctionBlock(owner)) { + ts.forEachReturnStatement(owner, function (returnStatement) { + pushKeywordIf(keywords, returnStatement.getFirstToken(), 94); + }); + } + return ts.map(keywords, getHighlightSpanForNode); + } + function getReturnOccurrences(returnStatement) { + var func = ts.getContainingFunction(returnStatement); + if (!(func && hasKind(func.body, 199))) { + return undefined; + } + var keywords = []; + ts.forEachReturnStatement(func.body, function (returnStatement) { + pushKeywordIf(keywords, returnStatement.getFirstToken(), 94); + }); + ts.forEach(aggregateOwnedThrowStatements(func.body), function (throwStatement) { + pushKeywordIf(keywords, throwStatement.getFirstToken(), 98); + }); + return ts.map(keywords, getHighlightSpanForNode); + } + function getIfElseOccurrences(ifStatement) { + var keywords = []; + while (hasKind(ifStatement.parent, 203) && ifStatement.parent.elseStatement === ifStatement) { + ifStatement = ifStatement.parent; + } + while (ifStatement) { + var children = ifStatement.getChildren(); + pushKeywordIf(keywords, children[0], 88); + for (var i = children.length - 1; i >= 0; i--) { + if (pushKeywordIf(keywords, children[i], 80)) { + break; + } + } + if (!hasKind(ifStatement.elseStatement, 203)) { + break; + } + ifStatement = ifStatement.elseStatement; + } + var result = []; + for (var i = 0; i < keywords.length; i++) { + if (keywords[i].kind === 80 && i < keywords.length - 1) { + var elseKeyword = keywords[i]; + var ifKeyword = keywords[i + 1]; + var shouldCombindElseAndIf = true; + for (var j = ifKeyword.getStart() - 1; j >= elseKeyword.end; j--) { + if (!ts.isWhiteSpace(sourceFile.text.charCodeAt(j))) { + shouldCombindElseAndIf = false; + break; + } + } + if (shouldCombindElseAndIf) { + result.push({ + fileName: fileName, + textSpan: ts.createTextSpanFromBounds(elseKeyword.getStart(), ifKeyword.end), + kind: HighlightSpanKind.reference + }); + i++; + continue; + } + } + result.push(getHighlightSpanForNode(keywords[i])); + } + return result; + } + } + } + function getOccurrencesAtPositionCore(fileName, position) { + synchronizeHostData(); + return convertDocumentHighlights(getDocumentHighlights(fileName, position, [fileName])); + function convertDocumentHighlights(documentHighlights) { + if (!documentHighlights) { + return undefined; + } + var result = []; + for (var _i = 0, documentHighlights_1 = documentHighlights; _i < documentHighlights_1.length; _i++) { + var entry = documentHighlights_1[_i]; + for (var _a = 0, _b = entry.highlightSpans; _a < _b.length; _a++) { + var highlightSpan = _b[_a]; + result.push({ + fileName: entry.fileName, + textSpan: highlightSpan.textSpan, + isWriteAccess: highlightSpan.kind === HighlightSpanKind.writtenReference + }); + } + } + return result; + } + } + function convertReferences(referenceSymbols) { + if (!referenceSymbols) { + return undefined; + } + var referenceEntries = []; + for (var _i = 0, referenceSymbols_1 = referenceSymbols; _i < referenceSymbols_1.length; _i++) { + var referenceSymbol = referenceSymbols_1[_i]; + ts.addRange(referenceEntries, referenceSymbol.references); + } + return referenceEntries; + } + function findRenameLocations(fileName, position, findInStrings, findInComments) { + var referencedSymbols = findReferencedSymbols(fileName, position, findInStrings, findInComments); + return convertReferences(referencedSymbols); + } + function getReferencesAtPosition(fileName, position) { + var referencedSymbols = findReferencedSymbols(fileName, position, false, false); + return convertReferences(referencedSymbols); + } + function findReferences(fileName, position) { + var referencedSymbols = findReferencedSymbols(fileName, position, false, false); + return ts.filter(referencedSymbols, function (rs) { return !!rs.definition; }); + } + function findReferencedSymbols(fileName, position, findInStrings, findInComments) { + synchronizeHostData(); + var sourceFile = getValidSourceFile(fileName); + var node = ts.getTouchingPropertyName(sourceFile, position); + if (node === sourceFile) { + return undefined; + } + if (node.kind !== 69 && + node.kind !== 9 && + !isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + return undefined; + } + ts.Debug.assert(node.kind === 69 || node.kind === 8 || node.kind === 9); + return getReferencedSymbolsForNode(node, program.getSourceFiles(), findInStrings, findInComments); + } + function getReferencedSymbolsForNode(node, sourceFiles, findInStrings, findInComments) { + var typeChecker = program.getTypeChecker(); + if (isLabelName(node)) { + if (isJumpStatementTarget(node)) { + var labelDefinition = getTargetLabel(node.parent, node.text); + return labelDefinition ? getLabelReferencesInNode(labelDefinition.parent, labelDefinition) : undefined; + } + else { + return getLabelReferencesInNode(node.parent, node); + } + } + if (node.kind === 97 || node.kind === 165) { + return getReferencesForThisKeyword(node, sourceFiles); + } + if (node.kind === 95) { + return getReferencesForSuperKeyword(node); + } + var symbol = typeChecker.getSymbolAtLocation(node); + if (!symbol && node.kind === 9) { + return getReferencesForStringLiteral(node, sourceFiles); + } + if (!symbol) { + return undefined; + } + var declarations = symbol.declarations; + if (!declarations || !declarations.length) { + return undefined; + } + var result; + var searchMeaning = getIntersectingMeaningFromDeclarations(getMeaningFromLocation(node), declarations); + var declaredName = ts.stripQuotes(ts.getDeclaredName(typeChecker, symbol, node)); + var scope = getSymbolScope(symbol); + var symbolToIndex = []; + if (scope) { + result = []; + getReferencesInNode(scope, symbol, declaredName, node, searchMeaning, findInStrings, findInComments, result, symbolToIndex); + } + else { + var internedName = getInternedName(symbol, node, declarations); + for (var _i = 0, sourceFiles_4 = sourceFiles; _i < sourceFiles_4.length; _i++) { + var sourceFile = sourceFiles_4[_i]; + cancellationToken.throwIfCancellationRequested(); + var nameTable = getNameTable(sourceFile); + if (ts.lookUp(nameTable, internedName) !== undefined) { + result = result || []; + getReferencesInNode(sourceFile, symbol, declaredName, node, searchMeaning, findInStrings, findInComments, result, symbolToIndex); + } + } + } + return result; + function getDefinition(symbol) { + var info = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, node.getSourceFile(), getContainerNode(node), node); + var name = ts.map(info.displayParts, function (p) { return p.text; }).join(""); + var declarations = symbol.declarations; + if (!declarations || declarations.length === 0) { + return undefined; + } + return { + containerKind: "", + containerName: "", + name: name, + kind: info.symbolKind, + fileName: declarations[0].getSourceFile().fileName, + textSpan: ts.createTextSpan(declarations[0].getStart(), 0) + }; + } + function getAliasSymbolForPropertyNameSymbol(symbol, location) { + if (symbol.flags & 8388608) { + var defaultImport = ts.getDeclarationOfKind(symbol, 231); + if (defaultImport) { + return typeChecker.getAliasedSymbol(symbol); + } + var importOrExportSpecifier = ts.forEach(symbol.declarations, function (declaration) { return (declaration.kind === 234 || + declaration.kind === 238) ? declaration : undefined; }); + if (importOrExportSpecifier && + (!importOrExportSpecifier.propertyName || + importOrExportSpecifier.propertyName === location)) { + return importOrExportSpecifier.kind === 234 ? + typeChecker.getAliasedSymbol(symbol) : + typeChecker.getExportSpecifierLocalTargetSymbol(importOrExportSpecifier); + } + } + return undefined; + } + function getPropertySymbolOfDestructuringAssignment(location) { + return ts.isArrayLiteralOrObjectLiteralDestructuringPattern(location.parent.parent) && + typeChecker.getPropertySymbolOfDestructuringAssignment(location); + } + function isObjectBindingPatternElementWithoutPropertyName(symbol) { + var bindingElement = ts.getDeclarationOfKind(symbol, 169); + return bindingElement && + bindingElement.parent.kind === 167 && + !bindingElement.propertyName; + } + function getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol) { + if (isObjectBindingPatternElementWithoutPropertyName(symbol)) { + var bindingElement = ts.getDeclarationOfKind(symbol, 169); + var typeOfPattern = typeChecker.getTypeAtLocation(bindingElement.parent); + return typeOfPattern && typeChecker.getPropertyOfType(typeOfPattern, bindingElement.name.text); + } + return undefined; + } + function getInternedName(symbol, location, declarations) { + if (ts.isImportOrExportSpecifierName(location)) { + return location.getText(); + } + var localExportDefaultSymbol = ts.getLocalSymbolForExportDefault(symbol); + symbol = localExportDefaultSymbol || symbol; + return ts.stripQuotes(symbol.name); + } + function getSymbolScope(symbol) { + var valueDeclaration = symbol.valueDeclaration; + if (valueDeclaration && (valueDeclaration.kind === 179 || valueDeclaration.kind === 192)) { + return valueDeclaration; + } + if (symbol.flags & (4 | 8192)) { + var privateDeclaration = ts.forEach(symbol.getDeclarations(), function (d) { return (d.flags & 8) ? d : undefined; }); + if (privateDeclaration) { + return ts.getAncestor(privateDeclaration, 221); + } + } + if (symbol.flags & 8388608) { + return undefined; + } + if (isObjectBindingPatternElementWithoutPropertyName(symbol)) { + return undefined; + } + if (symbol.parent || (symbol.flags & 268435456)) { + return undefined; + } + var scope; + var declarations = symbol.getDeclarations(); + if (declarations) { + for (var _i = 0, declarations_9 = declarations; _i < declarations_9.length; _i++) { + var declaration = declarations_9[_i]; + var container = getContainerNode(declaration); + if (!container) { + return undefined; + } + if (scope && scope !== container) { + return undefined; + } + if (container.kind === 256 && !ts.isExternalModule(container)) { + return undefined; + } + scope = container; + } + } + return scope; + } + function getPossibleSymbolReferencePositions(sourceFile, symbolName, start, end) { + var positions = []; + if (!symbolName || !symbolName.length) { + return positions; + } + var text = sourceFile.text; + var sourceLength = text.length; + var symbolNameLength = symbolName.length; + var position = text.indexOf(symbolName, start); + while (position >= 0) { + cancellationToken.throwIfCancellationRequested(); + if (position > end) + break; + var endPosition = position + symbolNameLength; + if ((position === 0 || !ts.isIdentifierPart(text.charCodeAt(position - 1), 2)) && + (endPosition === sourceLength || !ts.isIdentifierPart(text.charCodeAt(endPosition), 2))) { + positions.push(position); + } + position = text.indexOf(symbolName, position + symbolNameLength + 1); + } + return positions; + } + function getLabelReferencesInNode(container, targetLabel) { + var references = []; + var sourceFile = container.getSourceFile(); + var labelName = targetLabel.text; + var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, labelName, container.getStart(), container.getEnd()); + ts.forEach(possiblePositions, function (position) { + cancellationToken.throwIfCancellationRequested(); + var node = ts.getTouchingWord(sourceFile, position); + if (!node || node.getWidth() !== labelName.length) { + return; + } + if (node === targetLabel || + (isJumpStatementTarget(node) && getTargetLabel(node, labelName) === targetLabel)) { + references.push(getReferenceEntryFromNode(node)); + } + }); + var definition = { + containerKind: "", + containerName: "", + fileName: targetLabel.getSourceFile().fileName, + kind: ScriptElementKind.label, + name: labelName, + textSpan: ts.createTextSpanFromBounds(targetLabel.getStart(), targetLabel.getEnd()) + }; + return [{ definition: definition, references: references }]; + } + function isValidReferencePosition(node, searchSymbolName) { + if (node) { + switch (node.kind) { + case 69: + return node.getWidth() === searchSymbolName.length; + case 9: + if (isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || + isNameOfExternalModuleImportOrDeclaration(node)) { + return node.getWidth() === searchSymbolName.length + 2; + } + break; + case 8: + if (isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + return node.getWidth() === searchSymbolName.length; + } + break; + } + } + return false; + } + function getReferencesInNode(container, searchSymbol, searchText, searchLocation, searchMeaning, findInStrings, findInComments, result, symbolToIndex) { + var sourceFile = container.getSourceFile(); + var tripleSlashDirectivePrefixRegex = /^\/\/\/\s*= 0) { + var referencedSymbol = getReferencedSymbol(shorthandValueSymbol); + referencedSymbol.references.push(getReferenceEntryFromNode(referenceSymbolDeclaration.name)); + } + } + }); + } + return; + function getReferencedSymbol(symbol) { + var symbolId = ts.getSymbolId(symbol); + var index = symbolToIndex[symbolId]; + if (index === undefined) { + index = result.length; + symbolToIndex[symbolId] = index; + result.push({ + definition: getDefinition(symbol), + references: [] + }); + } + return result[index]; + } + function isInNonReferenceComment(sourceFile, position) { + return ts.isInCommentHelper(sourceFile, position, isNonReferenceComment); + function isNonReferenceComment(c) { + var commentText = sourceFile.text.substring(c.pos, c.end); + return !tripleSlashDirectivePrefixRegex.test(commentText); + } + } + } + function getReferencesForSuperKeyword(superKeyword) { + var searchSpaceNode = ts.getSuperContainer(superKeyword, false); + if (!searchSpaceNode) { + return undefined; + } + var staticFlag = 32; + switch (searchSpaceNode.kind) { + case 145: + case 144: + case 147: + case 146: + case 148: + case 149: + case 150: + staticFlag &= searchSpaceNode.flags; + searchSpaceNode = searchSpaceNode.parent; + break; + default: + return undefined; + } + var references = []; + var sourceFile = searchSpaceNode.getSourceFile(); + var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "super", searchSpaceNode.getStart(), searchSpaceNode.getEnd()); + ts.forEach(possiblePositions, function (position) { + cancellationToken.throwIfCancellationRequested(); + var node = ts.getTouchingWord(sourceFile, position); + if (!node || node.kind !== 95) { + return; + } + var container = ts.getSuperContainer(node, false); + if (container && (32 & container.flags) === staticFlag && container.parent.symbol === searchSpaceNode.symbol) { + references.push(getReferenceEntryFromNode(node)); + } + }); + var definition = getDefinition(searchSpaceNode.symbol); + return [{ definition: definition, references: references }]; + } + function getReferencesForThisKeyword(thisOrSuperKeyword, sourceFiles) { + var searchSpaceNode = ts.getThisContainer(thisOrSuperKeyword, false); + var staticFlag = 32; + switch (searchSpaceNode.kind) { + case 147: + case 146: + if (ts.isObjectLiteralMethod(searchSpaceNode)) { + break; + } + case 145: + case 144: + case 148: + case 149: + case 150: + staticFlag &= searchSpaceNode.flags; + searchSpaceNode = searchSpaceNode.parent; + break; + case 256: + if (ts.isExternalModule(searchSpaceNode)) { + return undefined; + } + case 220: + case 179: + break; + default: + return undefined; + } + var references = []; + var possiblePositions; + if (searchSpaceNode.kind === 256) { + ts.forEach(sourceFiles, function (sourceFile) { + possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "this", sourceFile.getStart(), sourceFile.getEnd()); + getThisReferencesInFile(sourceFile, sourceFile, possiblePositions, references); + }); + } + else { + var sourceFile = searchSpaceNode.getSourceFile(); + possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "this", searchSpaceNode.getStart(), searchSpaceNode.getEnd()); + getThisReferencesInFile(sourceFile, searchSpaceNode, possiblePositions, references); + } + return [{ + definition: { + containerKind: "", + containerName: "", + fileName: node.getSourceFile().fileName, + kind: ScriptElementKind.variableElement, + name: "this", + textSpan: ts.createTextSpanFromBounds(node.getStart(), node.getEnd()) + }, + references: references + }]; + function getThisReferencesInFile(sourceFile, searchSpaceNode, possiblePositions, result) { + ts.forEach(possiblePositions, function (position) { + cancellationToken.throwIfCancellationRequested(); + var node = ts.getTouchingWord(sourceFile, position); + if (!node || (node.kind !== 97 && node.kind !== 165)) { + return; + } + var container = ts.getThisContainer(node, false); + switch (searchSpaceNode.kind) { + case 179: + case 220: + if (searchSpaceNode.symbol === container.symbol) { + result.push(getReferenceEntryFromNode(node)); + } + break; + case 147: + case 146: + if (ts.isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol) { + result.push(getReferenceEntryFromNode(node)); + } + break; + case 192: + case 221: + if (container.parent && searchSpaceNode.symbol === container.parent.symbol && (container.flags & 32) === staticFlag) { + result.push(getReferenceEntryFromNode(node)); + } + break; + case 256: + if (container.kind === 256 && !ts.isExternalModule(container)) { + result.push(getReferenceEntryFromNode(node)); + } + break; + } + }); + } + } + function getReferencesForStringLiteral(node, sourceFiles) { + var typeChecker = program.getTypeChecker(); + var type = getStringLiteralTypeForNode(node, typeChecker); + if (!type) { + return undefined; + } + var references = []; + for (var _i = 0, sourceFiles_5 = sourceFiles; _i < sourceFiles_5.length; _i++) { + var sourceFile = sourceFiles_5[_i]; + var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, type.text, sourceFile.getStart(), sourceFile.getEnd()); + getReferencesForStringLiteralInFile(sourceFile, type, possiblePositions, references); + } + return [{ + definition: { + containerKind: "", + containerName: "", + fileName: node.getSourceFile().fileName, + kind: ScriptElementKind.variableElement, + name: type.text, + textSpan: ts.createTextSpanFromBounds(node.getStart(), node.getEnd()) + }, + references: references + }]; + function getReferencesForStringLiteralInFile(sourceFile, searchType, possiblePositions, references) { + for (var _i = 0, possiblePositions_1 = possiblePositions; _i < possiblePositions_1.length; _i++) { + var position = possiblePositions_1[_i]; + cancellationToken.throwIfCancellationRequested(); + var node_2 = ts.getTouchingWord(sourceFile, position); + if (!node_2 || node_2.kind !== 9) { + return; + } + var type_1 = getStringLiteralTypeForNode(node_2, typeChecker); + if (type_1 === searchType) { + references.push(getReferenceEntryFromNode(node_2)); + } + } + } + } + function populateSearchSymbolSet(symbol, location) { + var result = [symbol]; + var containingObjectLiteralElement = getContainingObjectLiteralElement(location); + if (containingObjectLiteralElement && containingObjectLiteralElement.kind !== 254) { + var propertySymbol = getPropertySymbolOfDestructuringAssignment(location); + if (propertySymbol) { + result.push(propertySymbol); + } + } + var aliasSymbol = getAliasSymbolForPropertyNameSymbol(symbol, location); + if (aliasSymbol) { + result = result.concat(populateSearchSymbolSet(aliasSymbol, location)); + } + if (containingObjectLiteralElement) { + ts.forEach(getPropertySymbolsFromContextualType(containingObjectLiteralElement), function (contextualSymbol) { + ts.addRange(result, typeChecker.getRootSymbols(contextualSymbol)); + }); + var shorthandValueSymbol = typeChecker.getShorthandAssignmentValueSymbol(location.parent); + if (shorthandValueSymbol) { + result.push(shorthandValueSymbol); + } + } + if (symbol.valueDeclaration && symbol.valueDeclaration.kind === 142 && + ts.isParameterPropertyDeclaration(symbol.valueDeclaration)) { + result = result.concat(typeChecker.getSymbolsOfParameterPropertyDeclaration(symbol.valueDeclaration, symbol.name)); + } + var bindingElementPropertySymbol = getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol); + if (bindingElementPropertySymbol) { + result.push(bindingElementPropertySymbol); + } + ts.forEach(typeChecker.getRootSymbols(symbol), function (rootSymbol) { + if (rootSymbol !== symbol) { + result.push(rootSymbol); + } + if (rootSymbol.parent && rootSymbol.parent.flags & (32 | 64)) { + getPropertySymbolsFromBaseTypes(rootSymbol.parent, rootSymbol.getName(), result, {}); + } + }); + return result; + } + function getPropertySymbolsFromBaseTypes(symbol, propertyName, result, previousIterationSymbolsCache) { + if (!symbol) { + return; + } + if (ts.hasProperty(previousIterationSymbolsCache, symbol.name)) { + return; + } + if (symbol.flags & (32 | 64)) { + ts.forEach(symbol.getDeclarations(), function (declaration) { + if (ts.isClassLike(declaration)) { + getPropertySymbolFromTypeReference(ts.getClassExtendsHeritageClauseElement(declaration)); + ts.forEach(ts.getClassImplementsHeritageClauseElements(declaration), getPropertySymbolFromTypeReference); + } + else if (declaration.kind === 222) { + ts.forEach(ts.getInterfaceBaseTypeNodes(declaration), getPropertySymbolFromTypeReference); + } + }); + } + return; + function getPropertySymbolFromTypeReference(typeReference) { + if (typeReference) { + var type = typeChecker.getTypeAtLocation(typeReference); + if (type) { + var propertySymbol = typeChecker.getPropertyOfType(type, propertyName); + if (propertySymbol) { + result.push.apply(result, typeChecker.getRootSymbols(propertySymbol)); + } + previousIterationSymbolsCache[symbol.name] = symbol; + getPropertySymbolsFromBaseTypes(type.symbol, propertyName, result, previousIterationSymbolsCache); + } + } + } + } + function getRelatedSymbol(searchSymbols, referenceSymbol, referenceLocation) { + if (searchSymbols.indexOf(referenceSymbol) >= 0) { + return referenceSymbol; + } + var aliasSymbol = getAliasSymbolForPropertyNameSymbol(referenceSymbol, referenceLocation); + if (aliasSymbol) { + return getRelatedSymbol(searchSymbols, aliasSymbol, referenceLocation); + } + var containingObjectLiteralElement = getContainingObjectLiteralElement(referenceLocation); + if (containingObjectLiteralElement) { + var contextualSymbol = ts.forEach(getPropertySymbolsFromContextualType(containingObjectLiteralElement), function (contextualSymbol) { + return ts.forEach(typeChecker.getRootSymbols(contextualSymbol), function (s) { return searchSymbols.indexOf(s) >= 0 ? s : undefined; }); + }); + if (contextualSymbol) { + return contextualSymbol; + } + var propertySymbol = getPropertySymbolOfDestructuringAssignment(referenceLocation); + if (propertySymbol && searchSymbols.indexOf(propertySymbol) >= 0) { + return propertySymbol; + } + } + var bindingElementPropertySymbol = getPropertySymbolOfObjectBindingPatternWithoutPropertyName(referenceSymbol); + if (bindingElementPropertySymbol && searchSymbols.indexOf(bindingElementPropertySymbol) >= 0) { + return bindingElementPropertySymbol; + } + return ts.forEach(typeChecker.getRootSymbols(referenceSymbol), function (rootSymbol) { + if (searchSymbols.indexOf(rootSymbol) >= 0) { + return rootSymbol; + } + if (rootSymbol.parent && rootSymbol.parent.flags & (32 | 64)) { + var result_4 = []; + getPropertySymbolsFromBaseTypes(rootSymbol.parent, rootSymbol.getName(), result_4, {}); + return ts.forEach(result_4, function (s) { return searchSymbols.indexOf(s) >= 0 ? s : undefined; }); + } + return undefined; + }); + } + function getNameFromObjectLiteralElement(node) { + if (node.name.kind === 140) { + var nameExpression = node.name.expression; + if (ts.isStringOrNumericLiteral(nameExpression.kind)) { + return nameExpression.text; + } + return undefined; + } + return node.name.text; + } + function getPropertySymbolsFromContextualType(node) { + var objectLiteral = node.parent; + var contextualType = typeChecker.getContextualType(objectLiteral); + var name = getNameFromObjectLiteralElement(node); + if (name && contextualType) { + var result_5 = []; + var symbol_1 = contextualType.getProperty(name); + if (symbol_1) { + result_5.push(symbol_1); + } + if (contextualType.flags & 16384) { + ts.forEach(contextualType.types, function (t) { + var symbol = t.getProperty(name); + if (symbol) { + result_5.push(symbol); + } + }); + } + return result_5; + } + return undefined; + } + function getIntersectingMeaningFromDeclarations(meaning, declarations) { + if (declarations) { + var lastIterationMeaning = void 0; + do { + lastIterationMeaning = meaning; + for (var _i = 0, declarations_10 = declarations; _i < declarations_10.length; _i++) { + var declaration = declarations_10[_i]; + var declarationMeaning = getMeaningFromDeclaration(declaration); + if (declarationMeaning & meaning) { + meaning |= declarationMeaning; + } + } + } while (meaning !== lastIterationMeaning); + } + return meaning; + } + } + function getReferenceEntryFromNode(node) { + var start = node.getStart(); + var end = node.getEnd(); + if (node.kind === 9) { + start += 1; + end -= 1; + } + return { + fileName: node.getSourceFile().fileName, + textSpan: ts.createTextSpanFromBounds(start, end), + isWriteAccess: isWriteAccess(node) + }; + } + function isWriteAccess(node) { + if (node.kind === 69 && ts.isDeclarationName(node)) { + return true; + } + var parent = node.parent; + if (parent) { + if (parent.kind === 186 || parent.kind === 185) { + return true; + } + else if (parent.kind === 187 && parent.left === node) { + var operator = parent.operatorToken.kind; + return 56 <= operator && operator <= 68; + } + } + return false; + } + function getNavigateToItems(searchValue, maxResultCount) { + synchronizeHostData(); + return ts.NavigateTo.getNavigateToItems(program, cancellationToken, searchValue, maxResultCount); + } + function getEmitOutput(fileName) { + synchronizeHostData(); + var sourceFile = getValidSourceFile(fileName); + var outputFiles = []; + function writeFile(fileName, data, writeByteOrderMark) { + outputFiles.push({ + name: fileName, + writeByteOrderMark: writeByteOrderMark, + text: data + }); + } + var emitOutput = program.emit(sourceFile, writeFile, cancellationToken); + return { + outputFiles: outputFiles, + emitSkipped: emitOutput.emitSkipped + }; + } + function getMeaningFromDeclaration(node) { + switch (node.kind) { + case 142: + case 218: + case 169: + case 145: + case 144: + case 253: + case 254: + case 255: + case 147: + case 146: + case 148: + case 149: + case 150: + case 220: + case 179: + case 180: + case 252: + return 1; + case 141: + case 222: + case 223: + case 159: + return 2; + case 221: + case 224: + return 1 | 2; + case 225: + if (ts.isAmbientModule(node)) { + return 4 | 1; + } + else if (ts.getModuleInstanceState(node) === 1) { + return 4 | 1; + } + else { + return 4; + } + case 233: + case 234: + case 229: + case 230: + case 235: + case 236: + return 1 | 2 | 4; + case 256: + return 4 | 1; + } + return 1 | 2 | 4; + } + function isTypeReference(node) { + if (ts.isRightSideOfQualifiedNameOrPropertyAccess(node)) { + node = node.parent; + } + return node.parent.kind === 155 || + (node.parent.kind === 194 && !ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent)) || + (node.kind === 97 && !ts.isExpression(node)) || + node.kind === 165; + } + function isNamespaceReference(node) { + return isQualifiedNameNamespaceReference(node) || isPropertyAccessNamespaceReference(node); + } + function isPropertyAccessNamespaceReference(node) { + var root = node; + var isLastClause = true; + if (root.parent.kind === 172) { + while (root.parent && root.parent.kind === 172) { + root = root.parent; + } + isLastClause = root.name === node; + } + if (!isLastClause && root.parent.kind === 194 && root.parent.parent.kind === 251) { + var decl = root.parent.parent.parent; + return (decl.kind === 221 && root.parent.parent.token === 106) || + (decl.kind === 222 && root.parent.parent.token === 83); + } + return false; + } + function isQualifiedNameNamespaceReference(node) { + var root = node; + var isLastClause = true; + if (root.parent.kind === 139) { + while (root.parent && root.parent.kind === 139) { + root = root.parent; + } + isLastClause = root.right === node; + } + return root.parent.kind === 155 && !isLastClause; + } + function isInRightSideOfImport(node) { + while (node.parent.kind === 139) { + node = node.parent; + } + return ts.isInternalModuleImportEqualsDeclaration(node.parent) && node.parent.moduleReference === node; + } + function getMeaningFromRightHandSideOfImportEquals(node) { + ts.Debug.assert(node.kind === 69); + if (node.parent.kind === 139 && + node.parent.right === node && + node.parent.parent.kind === 229) { + return 1 | 2 | 4; + } + return 4; + } + function getMeaningFromLocation(node) { + if (node.parent.kind === 235) { + return 1 | 2 | 4; + } + else if (isInRightSideOfImport(node)) { + return getMeaningFromRightHandSideOfImportEquals(node); + } + else if (ts.isDeclarationName(node)) { + return getMeaningFromDeclaration(node.parent); + } + else if (isTypeReference(node)) { + return 2; + } + else if (isNamespaceReference(node)) { + return 4; + } + else { + return 1; + } + } + function getSignatureHelpItems(fileName, position) { + synchronizeHostData(); + var sourceFile = getValidSourceFile(fileName); + return ts.SignatureHelp.getSignatureHelpItems(program, sourceFile, position, cancellationToken); + } + function getNonBoundSourceFile(fileName) { + return syntaxTreeCache.getCurrentSourceFile(fileName); + } + function getNameOrDottedNameSpan(fileName, startPos, endPos) { + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + var node = ts.getTouchingPropertyName(sourceFile, startPos); + if (node === sourceFile) { + return; + } + switch (node.kind) { + case 172: + case 139: + case 9: + case 166: + case 84: + case 99: + case 93: + case 95: + case 97: + case 165: + case 69: + break; + default: + return; + } + var nodeForStartPos = node; + while (true) { + if (isRightSideOfPropertyAccess(nodeForStartPos) || isRightSideOfQualifiedName(nodeForStartPos)) { + nodeForStartPos = nodeForStartPos.parent; + } + else if (isNameOfModuleDeclaration(nodeForStartPos)) { + if (nodeForStartPos.parent.parent.kind === 225 && + nodeForStartPos.parent.parent.body === nodeForStartPos.parent) { + nodeForStartPos = nodeForStartPos.parent.parent.name; + } + else { + break; + } + } + else { + break; + } + } + return ts.createTextSpanFromBounds(nodeForStartPos.getStart(), node.getEnd()); + } + function getBreakpointStatementAtPosition(fileName, position) { + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + return ts.BreakpointResolver.spanInSourceFileAtLocation(sourceFile, position); + } + function getNavigationBarItems(fileName) { + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + return ts.NavigationBar.getNavigationBarItems(sourceFile, host.getCompilationSettings()); + } + function getSemanticClassifications(fileName, span) { + return convertClassifications(getEncodedSemanticClassifications(fileName, span)); + } + function checkForClassificationCancellation(kind) { + switch (kind) { + case 225: + case 221: + case 222: + case 220: + cancellationToken.throwIfCancellationRequested(); + } + } + function getEncodedSemanticClassifications(fileName, span) { + synchronizeHostData(); + var sourceFile = getValidSourceFile(fileName); + var typeChecker = program.getTypeChecker(); + var result = []; + var classifiableNames = program.getClassifiableNames(); + processNode(sourceFile); + return { spans: result, endOfLineState: 0 }; + function pushClassification(start, length, type) { + result.push(start); + result.push(length); + result.push(type); + } + function classifySymbol(symbol, meaningAtPosition) { + var flags = symbol.getFlags(); + if ((flags & 788448) === 0) { + return; + } + if (flags & 32) { + return 11; + } + else if (flags & 384) { + return 12; + } + else if (flags & 524288) { + return 16; + } + else if (meaningAtPosition & 2) { + if (flags & 64) { + return 13; + } + else if (flags & 262144) { + return 15; + } + } + else if (flags & 1536) { + if (meaningAtPosition & 4 || + (meaningAtPosition & 1 && hasValueSideModule(symbol))) { + return 14; + } + } + return undefined; + function hasValueSideModule(symbol) { + return ts.forEach(symbol.declarations, function (declaration) { + return declaration.kind === 225 && + ts.getModuleInstanceState(declaration) === 1; + }); + } + } + function processNode(node) { + if (node && ts.textSpanIntersectsWith(span, node.getFullStart(), node.getFullWidth())) { + var kind = node.kind; + checkForClassificationCancellation(kind); + if (kind === 69 && !ts.nodeIsMissing(node)) { + var identifier = node; + if (classifiableNames[identifier.text]) { + var symbol = typeChecker.getSymbolAtLocation(node); + if (symbol) { + var type = classifySymbol(symbol, getMeaningFromLocation(node)); + if (type) { + pushClassification(node.getStart(), node.getWidth(), type); + } + } + } + } + ts.forEachChild(node, processNode); + } + } + } + function getClassificationTypeName(type) { + switch (type) { + case 1: return ClassificationTypeNames.comment; + case 2: return ClassificationTypeNames.identifier; + case 3: return ClassificationTypeNames.keyword; + case 4: return ClassificationTypeNames.numericLiteral; + case 5: return ClassificationTypeNames.operator; + case 6: return ClassificationTypeNames.stringLiteral; + case 8: return ClassificationTypeNames.whiteSpace; + case 9: return ClassificationTypeNames.text; + case 10: return ClassificationTypeNames.punctuation; + case 11: return ClassificationTypeNames.className; + case 12: return ClassificationTypeNames.enumName; + case 13: return ClassificationTypeNames.interfaceName; + case 14: return ClassificationTypeNames.moduleName; + case 15: return ClassificationTypeNames.typeParameterName; + case 16: return ClassificationTypeNames.typeAliasName; + case 17: return ClassificationTypeNames.parameterName; + case 18: return ClassificationTypeNames.docCommentTagName; + case 19: return ClassificationTypeNames.jsxOpenTagName; + case 20: return ClassificationTypeNames.jsxCloseTagName; + case 21: return ClassificationTypeNames.jsxSelfClosingTagName; + case 22: return ClassificationTypeNames.jsxAttribute; + case 23: return ClassificationTypeNames.jsxText; + case 24: return ClassificationTypeNames.jsxAttributeStringLiteralValue; + } + } + function convertClassifications(classifications) { + ts.Debug.assert(classifications.spans.length % 3 === 0); + var dense = classifications.spans; + var result = []; + for (var i = 0, n = dense.length; i < n; i += 3) { + result.push({ + textSpan: ts.createTextSpan(dense[i], dense[i + 1]), + classificationType: getClassificationTypeName(dense[i + 2]) + }); + } + return result; + } + function getSyntacticClassifications(fileName, span) { + return convertClassifications(getEncodedSyntacticClassifications(fileName, span)); + } + function getEncodedSyntacticClassifications(fileName, span) { + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + var spanStart = span.start; + var spanLength = span.length; + var triviaScanner = ts.createScanner(2, false, sourceFile.languageVariant, sourceFile.text); + var mergeConflictScanner = ts.createScanner(2, false, sourceFile.languageVariant, sourceFile.text); + var result = []; + processElement(sourceFile); + return { spans: result, endOfLineState: 0 }; + function pushClassification(start, length, type) { + result.push(start); + result.push(length); + result.push(type); + } + function classifyLeadingTriviaAndGetTokenStart(token) { + triviaScanner.setTextPos(token.pos); + while (true) { + var start = triviaScanner.getTextPos(); + if (!ts.couldStartTrivia(sourceFile.text, start)) { + return start; + } + var kind = triviaScanner.scan(); + var end = triviaScanner.getTextPos(); + var width = end - start; + if (!ts.isTrivia(kind)) { + return start; + } + if (kind === 4 || kind === 5) { + continue; + } + if (ts.isComment(kind)) { + classifyComment(token, kind, start, width); + triviaScanner.setTextPos(end); + continue; + } + if (kind === 7) { + var text = sourceFile.text; + var ch = text.charCodeAt(start); + if (ch === 60 || ch === 62) { + pushClassification(start, width, 1); + continue; + } + ts.Debug.assert(ch === 61); + classifyDisabledMergeCode(text, start, end); + } + } + } + function classifyComment(token, kind, start, width) { + if (kind === 3) { + var docCommentAndDiagnostics = ts.parseIsolatedJSDocComment(sourceFile.text, start, width); + if (docCommentAndDiagnostics && docCommentAndDiagnostics.jsDocComment) { + docCommentAndDiagnostics.jsDocComment.parent = token; + classifyJSDocComment(docCommentAndDiagnostics.jsDocComment); + return; + } + } + pushCommentRange(start, width); + } + function pushCommentRange(start, width) { + pushClassification(start, width, 1); + } + function classifyJSDocComment(docComment) { + var pos = docComment.pos; + for (var _i = 0, _a = docComment.tags; _i < _a.length; _i++) { + var tag = _a[_i]; + if (tag.pos !== pos) { + pushCommentRange(pos, tag.pos - pos); + } + pushClassification(tag.atToken.pos, tag.atToken.end - tag.atToken.pos, 10); + pushClassification(tag.tagName.pos, tag.tagName.end - tag.tagName.pos, 18); + pos = tag.tagName.end; + switch (tag.kind) { + case 275: + processJSDocParameterTag(tag); + break; + case 278: + processJSDocTemplateTag(tag); + break; + case 277: + processElement(tag.typeExpression); + break; + case 276: + processElement(tag.typeExpression); + break; + } + pos = tag.end; + } + if (pos !== docComment.end) { + pushCommentRange(pos, docComment.end - pos); + } + return; + function processJSDocParameterTag(tag) { + if (tag.preParameterName) { + pushCommentRange(pos, tag.preParameterName.pos - pos); + pushClassification(tag.preParameterName.pos, tag.preParameterName.end - tag.preParameterName.pos, 17); + pos = tag.preParameterName.end; + } + if (tag.typeExpression) { + pushCommentRange(pos, tag.typeExpression.pos - pos); + processElement(tag.typeExpression); + pos = tag.typeExpression.end; + } + if (tag.postParameterName) { + pushCommentRange(pos, tag.postParameterName.pos - pos); + pushClassification(tag.postParameterName.pos, tag.postParameterName.end - tag.postParameterName.pos, 17); + pos = tag.postParameterName.end; + } + } + } + function processJSDocTemplateTag(tag) { + for (var _i = 0, _a = tag.getChildren(); _i < _a.length; _i++) { + var child = _a[_i]; + processElement(child); + } + } + function classifyDisabledMergeCode(text, start, end) { + var i; + for (i = start; i < end; i++) { + if (ts.isLineBreak(text.charCodeAt(i))) { + break; + } + } + pushClassification(start, i - start, 1); + mergeConflictScanner.setTextPos(i); + while (mergeConflictScanner.getTextPos() < end) { + classifyDisabledCodeToken(); + } + } + function classifyDisabledCodeToken() { + var start = mergeConflictScanner.getTextPos(); + var tokenKind = mergeConflictScanner.scan(); + var end = mergeConflictScanner.getTextPos(); + var type = classifyTokenType(tokenKind); + if (type) { + pushClassification(start, end - start, type); + } + } + function tryClassifyNode(node) { + if (ts.nodeIsMissing(node)) { + return true; + } + var classifiedElementName = tryClassifyJsxElementName(node); + if (!ts.isToken(node) && node.kind !== 244 && classifiedElementName === undefined) { + return false; + } + var tokenStart = node.kind === 244 ? node.pos : classifyLeadingTriviaAndGetTokenStart(node); + var tokenWidth = node.end - tokenStart; + ts.Debug.assert(tokenWidth >= 0); + if (tokenWidth > 0) { + var type = classifiedElementName || classifyTokenType(node.kind, node); + if (type) { + pushClassification(tokenStart, tokenWidth, type); + } + } + return true; + } + function tryClassifyJsxElementName(token) { + switch (token.parent && token.parent.kind) { + case 243: + if (token.parent.tagName === token) { + return 19; + } + break; + case 245: + if (token.parent.tagName === token) { + return 20; + } + break; + case 242: + if (token.parent.tagName === token) { + return 21; + } + break; + case 246: + if (token.parent.name === token) { + return 22; + } + break; + } + return undefined; + } + function classifyTokenType(tokenKind, token) { + if (ts.isKeyword(tokenKind)) { + return 3; + } + if (tokenKind === 25 || tokenKind === 27) { + if (token && ts.getTypeArgumentOrTypeParameterList(token.parent)) { + return 10; + } + } + if (ts.isPunctuation(tokenKind)) { + if (token) { + if (tokenKind === 56) { + if (token.parent.kind === 218 || + token.parent.kind === 145 || + token.parent.kind === 142 || + token.parent.kind === 246) { + return 5; + } + } + if (token.parent.kind === 187 || + token.parent.kind === 185 || + token.parent.kind === 186 || + token.parent.kind === 188) { + return 5; + } + } + return 10; + } + else if (tokenKind === 8) { + return 4; + } + else if (tokenKind === 9 || tokenKind === 166) { + return token.parent.kind === 246 ? 24 : 6; + } + else if (tokenKind === 10) { + return 6; + } + else if (ts.isTemplateLiteralKind(tokenKind)) { + return 6; + } + else if (tokenKind === 244) { + return 23; + } + else if (tokenKind === 69) { + if (token) { + switch (token.parent.kind) { + case 221: + if (token.parent.name === token) { + return 11; + } + return; + case 141: + if (token.parent.name === token) { + return 15; + } + return; + case 222: + if (token.parent.name === token) { + return 13; + } + return; + case 224: + if (token.parent.name === token) { + return 12; + } + return; + case 225: + if (token.parent.name === token) { + return 14; + } + return; + case 142: + if (token.parent.name === token) { + return 17; + } + return; + } + } + return 2; + } + } + function processElement(element) { + if (!element) { + return; + } + if (ts.decodedTextSpanIntersectsWith(spanStart, spanLength, element.pos, element.getFullWidth())) { + checkForClassificationCancellation(element.kind); + var children = element.getChildren(sourceFile); + for (var i = 0, n = children.length; i < n; i++) { + var child = children[i]; + if (!tryClassifyNode(child)) { + processElement(child); + } + } + } + } + } + function getOutliningSpans(fileName) { + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + return ts.OutliningElementsCollector.collectElements(sourceFile); + } + function getBraceMatchingAtPosition(fileName, position) { + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + var result = []; + var token = ts.getTouchingToken(sourceFile, position); + if (token.getStart(sourceFile) === position) { + var matchKind = getMatchingTokenKind(token); + if (matchKind) { + var parentElement = token.parent; + var childNodes = parentElement.getChildren(sourceFile); + for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) { + var current = childNodes_1[_i]; + if (current.kind === matchKind) { + var range1 = ts.createTextSpan(token.getStart(sourceFile), token.getWidth(sourceFile)); + var range2 = ts.createTextSpan(current.getStart(sourceFile), current.getWidth(sourceFile)); + if (range1.start < range2.start) { + result.push(range1, range2); + } + else { + result.push(range2, range1); + } + break; + } + } + } + } + return result; + function getMatchingTokenKind(token) { + switch (token.kind) { + case 15: return 16; + case 17: return 18; + case 19: return 20; + case 25: return 27; + case 16: return 15; + case 18: return 17; + case 20: return 19; + case 27: return 25; + } + return undefined; + } + } + function getIndentationAtPosition(fileName, position, editorOptions) { + var start = new Date().getTime(); + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + log("getIndentationAtPosition: getCurrentSourceFile: " + (new Date().getTime() - start)); + start = new Date().getTime(); + var result = ts.formatting.SmartIndenter.getIndentation(position, sourceFile, editorOptions); + log("getIndentationAtPosition: computeIndentation : " + (new Date().getTime() - start)); + return result; + } + function getFormattingEditsForRange(fileName, start, end, options) { + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + return ts.formatting.formatSelection(start, end, sourceFile, getRuleProvider(options), options); + } + function getFormattingEditsForDocument(fileName, options) { + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + return ts.formatting.formatDocument(sourceFile, getRuleProvider(options), options); + } + function getFormattingEditsAfterKeystroke(fileName, position, key, options) { + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + if (key === "}") { + return ts.formatting.formatOnClosingCurly(position, sourceFile, getRuleProvider(options), options); + } + else if (key === ";") { + return ts.formatting.formatOnSemicolon(position, sourceFile, getRuleProvider(options), options); + } + else if (key === "\n") { + return ts.formatting.formatOnEnter(position, sourceFile, getRuleProvider(options), options); + } + return []; + } + function getDocCommentTemplateAtPosition(fileName, position) { + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + if (ts.isInString(sourceFile, position) || ts.isInComment(sourceFile, position) || ts.hasDocComment(sourceFile, position)) { + return undefined; + } + var tokenAtPos = ts.getTokenAtPosition(sourceFile, position); + var tokenStart = tokenAtPos.getStart(); + if (!tokenAtPos || tokenStart < position) { + return undefined; + } + var commentOwner; + findOwner: for (commentOwner = tokenAtPos; commentOwner; commentOwner = commentOwner.parent) { + switch (commentOwner.kind) { + case 220: + case 147: + case 148: + case 221: + case 200: + break findOwner; + case 256: + return undefined; + case 225: + if (commentOwner.parent.kind === 225) { + return undefined; + } + break findOwner; + } + } + if (!commentOwner || commentOwner.getStart() < position) { + return undefined; + } + var parameters = getParametersForJsDocOwningNode(commentOwner); + var posLineAndChar = sourceFile.getLineAndCharacterOfPosition(position); + var lineStart = sourceFile.getLineStarts()[posLineAndChar.line]; + var indentationStr = sourceFile.text.substr(lineStart, posLineAndChar.character); + var newLine = ts.getNewLineOrDefaultFromHost(host); + var docParams = ""; + for (var i = 0, numParams = parameters.length; i < numParams; i++) { + var currentName = parameters[i].name; + var paramName = currentName.kind === 69 ? + currentName.text : + "param" + i; + docParams += indentationStr + " * @param " + paramName + newLine; + } + var preamble = "/**" + newLine + + indentationStr + " * "; + var result = preamble + newLine + + docParams + + indentationStr + " */" + + (tokenStart === position ? newLine + indentationStr : ""); + return { newText: result, caretOffset: preamble.length }; + } + function isValidBraceCompletionAtPostion(fileName, position, openingBrace) { + if (openingBrace === 60) { + return false; + } + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + if (ts.isInString(sourceFile, position) || ts.isInComment(sourceFile, position)) { + return false; + } + if (ts.isInsideJsxElementOrAttribute(sourceFile, position)) { + return openingBrace === 123; + } + if (ts.isInTemplateString(sourceFile, position)) { + return false; + } + return true; + } + function getParametersForJsDocOwningNode(commentOwner) { + if (ts.isFunctionLike(commentOwner)) { + return commentOwner.parameters; + } + if (commentOwner.kind === 200) { + var varStatement = commentOwner; + var varDeclarations = varStatement.declarationList.declarations; + if (varDeclarations.length === 1 && varDeclarations[0].initializer) { + return getParametersFromRightHandSideOfAssignment(varDeclarations[0].initializer); + } + } + return emptyArray; + } + function getParametersFromRightHandSideOfAssignment(rightHandSide) { + while (rightHandSide.kind === 178) { + rightHandSide = rightHandSide.expression; + } + switch (rightHandSide.kind) { + case 179: + case 180: + return rightHandSide.parameters; + case 192: + for (var _i = 0, _a = rightHandSide.members; _i < _a.length; _i++) { + var member = _a[_i]; + if (member.kind === 148) { + return member.parameters; + } + } + break; + } + return emptyArray; + } + function getTodoComments(fileName, descriptors) { + synchronizeHostData(); + var sourceFile = getValidSourceFile(fileName); + cancellationToken.throwIfCancellationRequested(); + var fileContents = sourceFile.text; + var result = []; + if (descriptors.length > 0) { + var regExp = getTodoCommentsRegExp(); + var matchArray = void 0; + while (matchArray = regExp.exec(fileContents)) { + cancellationToken.throwIfCancellationRequested(); + var firstDescriptorCaptureIndex = 3; + ts.Debug.assert(matchArray.length === descriptors.length + firstDescriptorCaptureIndex); + var preamble = matchArray[1]; + var matchPosition = matchArray.index + preamble.length; + var token = ts.getTokenAtPosition(sourceFile, matchPosition); + if (!isInsideComment(sourceFile, token, matchPosition)) { + continue; + } + var descriptor = undefined; + for (var i = 0, n = descriptors.length; i < n; i++) { + if (matchArray[i + firstDescriptorCaptureIndex]) { + descriptor = descriptors[i]; + } + } + ts.Debug.assert(descriptor !== undefined); + if (isLetterOrDigit(fileContents.charCodeAt(matchPosition + descriptor.text.length))) { + continue; + } + var message = matchArray[2]; + result.push({ + descriptor: descriptor, + message: message, + position: matchPosition + }); + } + } + return result; + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + function getTodoCommentsRegExp() { + var singleLineCommentStart = /(?:\/\/+\s*)/.source; + var multiLineCommentStart = /(?:\/\*+\s*)/.source; + var anyNumberOfSpacesAndAsterisksAtStartOfLine = /(?:^(?:\s|\*)*)/.source; + var preamble = "(" + anyNumberOfSpacesAndAsterisksAtStartOfLine + "|" + singleLineCommentStart + "|" + multiLineCommentStart + ")"; + var literals = "(?:" + ts.map(descriptors, function (d) { return "(" + escapeRegExp(d.text) + ")"; }).join("|") + ")"; + var endOfLineOrEndOfComment = /(?:$|\*\/)/.source; + var messageRemainder = /(?:.*?)/.source; + var messagePortion = "(" + literals + messageRemainder + ")"; + var regExpString = preamble + messagePortion + endOfLineOrEndOfComment; + return new RegExp(regExpString, "gim"); + } + function isLetterOrDigit(char) { + return (char >= 97 && char <= 122) || + (char >= 65 && char <= 90) || + (char >= 48 && char <= 57); + } + } + function getStringLiteralTypeForNode(node, typeChecker) { + var searchNode = node.parent.kind === 166 ? node.parent : node; + var type = typeChecker.getTypeAtLocation(searchNode); + if (type && type.flags & 256) { + return type; + } + return undefined; + } + function getRenameInfo(fileName, position) { + synchronizeHostData(); + var sourceFile = getValidSourceFile(fileName); + var typeChecker = program.getTypeChecker(); + var defaultLibFileName = host.getDefaultLibFileName(host.getCompilationSettings()); + var canonicalDefaultLibName = getCanonicalFileName(ts.normalizePath(defaultLibFileName)); + var node = ts.getTouchingWord(sourceFile, position); + if (node) { + if (node.kind === 69 || + node.kind === 9 || + isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + var symbol = typeChecker.getSymbolAtLocation(node); + if (symbol) { + var declarations = symbol.getDeclarations(); + if (declarations && declarations.length > 0) { + if (ts.forEach(declarations, isDefinedInLibraryFile)) { + return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library)); + } + var displayName = ts.stripQuotes(ts.getDeclaredName(typeChecker, symbol, node)); + var kind = getSymbolKind(symbol, node); + if (kind) { + return { + canRename: true, + kind: kind, + displayName: displayName, + localizedErrorMessage: undefined, + fullDisplayName: typeChecker.getFullyQualifiedName(symbol), + kindModifiers: getSymbolModifiers(symbol), + triggerSpan: createTriggerSpanForNode(node, sourceFile) + }; + } + } + } + else if (node.kind === 9) { + var type = getStringLiteralTypeForNode(node, typeChecker); + if (type) { + if (isDefinedInLibraryFile(node)) { + return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library)); + } + else { + var displayName = ts.stripQuotes(type.text); + return { + canRename: true, + kind: ScriptElementKind.variableElement, + displayName: displayName, + localizedErrorMessage: undefined, + fullDisplayName: displayName, + kindModifiers: ScriptElementKindModifier.none, + triggerSpan: createTriggerSpanForNode(node, sourceFile) + }; + } + } + } + } + } + return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_this_element)); + function getRenameInfoError(localizedErrorMessage) { + return { + canRename: false, + localizedErrorMessage: localizedErrorMessage, + displayName: undefined, + fullDisplayName: undefined, + kind: undefined, + kindModifiers: undefined, + triggerSpan: undefined + }; + } + function isDefinedInLibraryFile(declaration) { + if (defaultLibFileName) { + var sourceFile_3 = declaration.getSourceFile(); + var canonicalName = getCanonicalFileName(ts.normalizePath(sourceFile_3.fileName)); + if (canonicalName === canonicalDefaultLibName) { + return true; + } + } + return false; + } + function createTriggerSpanForNode(node, sourceFile) { + var start = node.getStart(sourceFile); + var width = node.getWidth(sourceFile); + if (node.kind === 9) { + start += 1; + width -= 2; + } + return ts.createTextSpan(start, width); + } + } + return { + dispose: dispose, + cleanupSemanticCache: cleanupSemanticCache, + getSyntacticDiagnostics: getSyntacticDiagnostics, + getSemanticDiagnostics: getSemanticDiagnostics, + getCompilerOptionsDiagnostics: getCompilerOptionsDiagnostics, + getSyntacticClassifications: getSyntacticClassifications, + getSemanticClassifications: getSemanticClassifications, + getEncodedSyntacticClassifications: getEncodedSyntacticClassifications, + getEncodedSemanticClassifications: getEncodedSemanticClassifications, + getCompletionsAtPosition: getCompletionsAtPosition, + getCompletionEntryDetails: getCompletionEntryDetails, + getSignatureHelpItems: getSignatureHelpItems, + getQuickInfoAtPosition: getQuickInfoAtPosition, + getDefinitionAtPosition: getDefinitionAtPosition, + getTypeDefinitionAtPosition: getTypeDefinitionAtPosition, + getReferencesAtPosition: getReferencesAtPosition, + findReferences: findReferences, + getOccurrencesAtPosition: getOccurrencesAtPosition, + getDocumentHighlights: getDocumentHighlights, + getNameOrDottedNameSpan: getNameOrDottedNameSpan, + getBreakpointStatementAtPosition: getBreakpointStatementAtPosition, + getNavigateToItems: getNavigateToItems, + getRenameInfo: getRenameInfo, + findRenameLocations: findRenameLocations, + getNavigationBarItems: getNavigationBarItems, + getOutliningSpans: getOutliningSpans, + getTodoComments: getTodoComments, + getBraceMatchingAtPosition: getBraceMatchingAtPosition, + getIndentationAtPosition: getIndentationAtPosition, + getFormattingEditsForRange: getFormattingEditsForRange, + getFormattingEditsForDocument: getFormattingEditsForDocument, + getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, + getDocCommentTemplateAtPosition: getDocCommentTemplateAtPosition, + isValidBraceCompletionAtPostion: isValidBraceCompletionAtPostion, + getEmitOutput: getEmitOutput, + getNonBoundSourceFile: getNonBoundSourceFile, + getProgram: getProgram + }; + } + ts.createLanguageService = createLanguageService; + function getNameTable(sourceFile) { + if (!sourceFile.nameTable) { + initializeNameTable(sourceFile); + } + return sourceFile.nameTable; + } + ts.getNameTable = getNameTable; + function initializeNameTable(sourceFile) { + var nameTable = {}; + walk(sourceFile); + sourceFile.nameTable = nameTable; + function walk(node) { + switch (node.kind) { + case 69: + nameTable[node.text] = nameTable[node.text] === undefined ? node.pos : -1; + break; + case 9: + case 8: + if (ts.isDeclarationName(node) || + node.parent.kind === 240 || + isArgumentOfElementAccessExpression(node) || + ts.isLiteralComputedPropertyDeclarationName(node)) { + nameTable[node.text] = nameTable[node.text] === undefined ? node.pos : -1; + } + break; + default: + ts.forEachChild(node, walk); + } + } + } + function isArgumentOfElementAccessExpression(node) { + return node && + node.parent && + node.parent.kind === 173 && + node.parent.argumentExpression === node; + } + function createClassifier() { + var scanner = ts.createScanner(2, false); + var noRegexTable = []; + noRegexTable[69] = true; + noRegexTable[9] = true; + noRegexTable[8] = true; + noRegexTable[10] = true; + noRegexTable[97] = true; + noRegexTable[41] = true; + noRegexTable[42] = true; + noRegexTable[18] = true; + noRegexTable[20] = true; + noRegexTable[16] = true; + noRegexTable[99] = true; + noRegexTable[84] = true; + var templateStack = []; + function canFollow(keyword1, keyword2) { + if (ts.isAccessibilityModifier(keyword1)) { + if (keyword2 === 123 || + keyword2 === 131 || + keyword2 === 121 || + keyword2 === 113) { + return true; + } + return false; + } + return true; + } + function convertClassifications(classifications, text) { + var entries = []; + var dense = classifications.spans; + var lastEnd = 0; + for (var i = 0, n = dense.length; i < n; i += 3) { + var start = dense[i]; + var length_3 = dense[i + 1]; + var type = dense[i + 2]; + if (lastEnd >= 0) { + var whitespaceLength_1 = start - lastEnd; + if (whitespaceLength_1 > 0) { + entries.push({ length: whitespaceLength_1, classification: TokenClass.Whitespace }); + } + } + entries.push({ length: length_3, classification: convertClassification(type) }); + lastEnd = start + length_3; + } + var whitespaceLength = text.length - lastEnd; + if (whitespaceLength > 0) { + entries.push({ length: whitespaceLength, classification: TokenClass.Whitespace }); + } + return { entries: entries, finalLexState: classifications.endOfLineState }; + } + function convertClassification(type) { + switch (type) { + case 1: return TokenClass.Comment; + case 3: return TokenClass.Keyword; + case 4: return TokenClass.NumberLiteral; + case 5: return TokenClass.Operator; + case 6: return TokenClass.StringLiteral; + case 8: return TokenClass.Whitespace; + case 10: return TokenClass.Punctuation; + case 2: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 9: + case 17: + default: + return TokenClass.Identifier; + } + } + function getClassificationsForLine(text, lexState, syntacticClassifierAbsent) { + return convertClassifications(getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent), text); + } + function getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent) { + var offset = 0; + var token = 0; + var lastNonTriviaToken = 0; + while (templateStack.length > 0) { + templateStack.pop(); + } + switch (lexState) { + case 3: + text = "\"\\\n" + text; + offset = 3; + break; + case 2: + text = "'\\\n" + text; + offset = 3; + break; + case 1: + text = "/*\n" + text; + offset = 3; + break; + case 4: + text = "`\n" + text; + offset = 2; + break; + case 5: + text = "}\n" + text; + offset = 2; + case 6: + templateStack.push(12); + break; + } + scanner.setText(text); + var result = { + endOfLineState: 0, + spans: [] + }; + var angleBracketStack = 0; + do { + token = scanner.scan(); + if (!ts.isTrivia(token)) { + if ((token === 39 || token === 61) && !noRegexTable[lastNonTriviaToken]) { + if (scanner.reScanSlashToken() === 10) { + token = 10; + } + } + else if (lastNonTriviaToken === 21 && isKeyword(token)) { + token = 69; + } + else if (isKeyword(lastNonTriviaToken) && isKeyword(token) && !canFollow(lastNonTriviaToken, token)) { + token = 69; + } + else if (lastNonTriviaToken === 69 && + token === 25) { + angleBracketStack++; + } + else if (token === 27 && angleBracketStack > 0) { + angleBracketStack--; + } + else if (token === 117 || + token === 132 || + token === 130 || + token === 120 || + token === 133) { + if (angleBracketStack > 0 && !syntacticClassifierAbsent) { + token = 69; + } + } + else if (token === 12) { + templateStack.push(token); + } + else if (token === 15) { + if (templateStack.length > 0) { + templateStack.push(token); + } + } + else if (token === 16) { + if (templateStack.length > 0) { + var lastTemplateStackToken = ts.lastOrUndefined(templateStack); + if (lastTemplateStackToken === 12) { + token = scanner.reScanTemplateToken(); + if (token === 14) { + templateStack.pop(); + } + else { + ts.Debug.assert(token === 13, "Should have been a template middle. Was " + token); + } + } + else { + ts.Debug.assert(lastTemplateStackToken === 15, "Should have been an open brace. Was: " + token); + templateStack.pop(); + } + } + } + lastNonTriviaToken = token; + } + processToken(); + } while (token !== 1); + return result; + function processToken() { + var start = scanner.getTokenPos(); + var end = scanner.getTextPos(); + addResult(start, end, classFromKind(token)); + if (end >= text.length) { + if (token === 9 || token === 166) { + var tokenText = scanner.getTokenText(); + if (scanner.isUnterminated()) { + var lastCharIndex = tokenText.length - 1; + var numBackslashes = 0; + while (tokenText.charCodeAt(lastCharIndex - numBackslashes) === 92) { + numBackslashes++; + } + if (numBackslashes & 1) { + var quoteChar = tokenText.charCodeAt(0); + result.endOfLineState = quoteChar === 34 + ? 3 + : 2; + } + } + } + else if (token === 3) { + if (scanner.isUnterminated()) { + result.endOfLineState = 1; + } + } + else if (ts.isTemplateLiteralKind(token)) { + if (scanner.isUnterminated()) { + if (token === 14) { + result.endOfLineState = 5; + } + else if (token === 11) { + result.endOfLineState = 4; + } + else { + ts.Debug.fail("Only 'NoSubstitutionTemplateLiteral's and 'TemplateTail's can be unterminated; got SyntaxKind #" + token); + } + } + } + else if (templateStack.length > 0 && ts.lastOrUndefined(templateStack) === 12) { + result.endOfLineState = 6; + } + } + } + function addResult(start, end, classification) { + if (classification === 8) { + return; + } + if (start === 0 && offset > 0) { + start += offset; + } + start -= offset; + end -= offset; + var length = end - start; + if (length > 0) { + result.spans.push(start); + result.spans.push(length); + result.spans.push(classification); + } + } + } + function isBinaryExpressionOperatorToken(token) { + switch (token) { + case 37: + case 39: + case 40: + case 35: + case 36: + case 43: + case 44: + case 45: + case 25: + case 27: + case 28: + case 29: + case 91: + case 90: + case 116: + case 30: + case 31: + case 32: + case 33: + case 46: + case 48: + case 47: + case 51: + case 52: + case 67: + case 66: + case 68: + case 63: + case 64: + case 65: + case 57: + case 58: + case 59: + case 61: + case 62: + case 56: + case 24: + return true; + default: + return false; + } + } + function isPrefixUnaryExpressionOperatorToken(token) { + switch (token) { + case 35: + case 36: + case 50: + case 49: + case 41: + case 42: + return true; + default: + return false; + } + } + function isKeyword(token) { + return token >= 70 && token <= 138; + } + function classFromKind(token) { + if (isKeyword(token)) { + return 3; + } + else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) { + return 5; + } + else if (token >= 15 && token <= 68) { + return 10; + } + switch (token) { + case 8: + return 4; + case 9: + case 166: + return 6; + case 10: + return 7; + case 7: + case 3: + case 2: + return 1; + case 5: + case 4: + return 8; + case 69: + default: + if (ts.isTemplateLiteralKind(token)) { + return 6; + } + return 2; + } + } + return { + getClassificationsForLine: getClassificationsForLine, + getEncodedLexicalClassifications: getEncodedLexicalClassifications + }; + } + ts.createClassifier = createClassifier; + function getDefaultLibFilePath(options) { + if (typeof __dirname !== "undefined") { + return __dirname + ts.directorySeparator + ts.getDefaultLibFileName(options); + } + throw new Error("getDefaultLibFilePath is only supported when consumed as a node module. "); + } + ts.getDefaultLibFilePath = getDefaultLibFilePath; + function initializeServices() { + ts.objectAllocator = { + getNodeConstructor: function () { return NodeObject; }, + getSourceFileConstructor: function () { return SourceFileObject; }, + getSymbolConstructor: function () { return SymbolObject; }, + getTypeConstructor: function () { return TypeObject; }, + getSignatureConstructor: function () { return SignatureObject; } + }; + } + initializeServices(); +})(ts || (ts = {})); +var ts; +(function (ts) { + var server; + (function (server) { + var spaceCache = []; + function generateSpaces(n) { + if (!spaceCache[n]) { + var strBuilder = ""; + for (var i = 0; i < n; i++) { + strBuilder += " "; + } + spaceCache[n] = strBuilder; + } + return spaceCache[n]; + } + server.generateSpaces = generateSpaces; + function generateIndentString(n, editorOptions) { + if (editorOptions.ConvertTabsToSpaces) { + return generateSpaces(n); + } + else { + var result = ""; + for (var i = 0; i < Math.floor(n / editorOptions.TabSize); i++) { + result += "\t"; + } + for (var i = 0; i < n % editorOptions.TabSize; i++) { + result += " "; + } + return result; + } + } + server.generateIndentString = generateIndentString; + function compareNumber(a, b) { + if (a < b) { + return -1; + } + else if (a === b) { + return 0; + } + else + return 1; + } + function compareFileStart(a, b) { + if (a.file < b.file) { + return -1; + } + else if (a.file == b.file) { + var n = compareNumber(a.start.line, b.start.line); + if (n === 0) { + return compareNumber(a.start.offset, b.start.offset); + } + else + return n; + } + else { + return 1; + } + } + function formatDiag(fileName, project, diag) { + return { + start: project.compilerService.host.positionToLineOffset(fileName, diag.start), + end: project.compilerService.host.positionToLineOffset(fileName, diag.start + diag.length), + text: ts.flattenDiagnosticMessageText(diag.messageText, "\n") + }; + } + function formatConfigFileDiag(diag) { + return { + start: undefined, + end: undefined, + text: ts.flattenDiagnosticMessageText(diag.messageText, "\n") + }; + } + function allEditsBeforePos(edits, pos) { + for (var i = 0, len = edits.length; i < len; i++) { + if (ts.textSpanEnd(edits[i].span) >= pos) { + return false; + } + } + return true; + } + var CommandNames; + (function (CommandNames) { + CommandNames.Brace = "brace"; + CommandNames.Change = "change"; + CommandNames.Close = "close"; + CommandNames.Completions = "completions"; + CommandNames.CompletionDetails = "completionEntryDetails"; + CommandNames.Configure = "configure"; + CommandNames.Definition = "definition"; + CommandNames.Exit = "exit"; + CommandNames.Format = "format"; + CommandNames.Formatonkey = "formatonkey"; + CommandNames.Geterr = "geterr"; + CommandNames.GeterrForProject = "geterrForProject"; + CommandNames.NavBar = "navbar"; + CommandNames.Navto = "navto"; + CommandNames.Occurrences = "occurrences"; + CommandNames.DocumentHighlights = "documentHighlights"; + CommandNames.Open = "open"; + CommandNames.Quickinfo = "quickinfo"; + CommandNames.References = "references"; + CommandNames.Reload = "reload"; + CommandNames.Rename = "rename"; + CommandNames.Saveto = "saveto"; + CommandNames.SignatureHelp = "signatureHelp"; + CommandNames.TypeDefinition = "typeDefinition"; + CommandNames.ProjectInfo = "projectInfo"; + CommandNames.ReloadProjects = "reloadProjects"; + CommandNames.Unknown = "unknown"; + })(CommandNames = server.CommandNames || (server.CommandNames = {})); + var Errors; + (function (Errors) { + Errors.NoProject = new Error("No Project."); + })(Errors || (Errors = {})); + var Session = (function () { + function Session(host, byteLength, hrtime, logger) { + var _this = this; + this.host = host; + this.byteLength = byteLength; + this.hrtime = hrtime; + this.logger = logger; + this.changeSeq = 0; + this.handlers = (_a = {}, + _a[CommandNames.Exit] = function () { + _this.exit(); + return { responseRequired: false }; + }, + _a[CommandNames.Definition] = function (request) { + var defArgs = request.arguments; + return { response: _this.getDefinition(defArgs.line, defArgs.offset, defArgs.file), responseRequired: true }; + }, + _a[CommandNames.TypeDefinition] = function (request) { + var defArgs = request.arguments; + return { response: _this.getTypeDefinition(defArgs.line, defArgs.offset, defArgs.file), responseRequired: true }; + }, + _a[CommandNames.References] = function (request) { + var defArgs = request.arguments; + return { response: _this.getReferences(defArgs.line, defArgs.offset, defArgs.file), responseRequired: true }; + }, + _a[CommandNames.Rename] = function (request) { + var renameArgs = request.arguments; + return { response: _this.getRenameLocations(renameArgs.line, renameArgs.offset, renameArgs.file, renameArgs.findInComments, renameArgs.findInStrings), responseRequired: true }; + }, + _a[CommandNames.Open] = function (request) { + var openArgs = request.arguments; + var scriptKind; + switch (openArgs.scriptKindName) { + case "TS": + scriptKind = 3; + break; + case "JS": + scriptKind = 1; + break; + case "TSX": + scriptKind = 4; + break; + case "JSX": + scriptKind = 2; + break; + } + _this.openClientFile(openArgs.file, openArgs.fileContent, scriptKind); + return { responseRequired: false }; + }, + _a[CommandNames.Quickinfo] = function (request) { + var quickinfoArgs = request.arguments; + return { response: _this.getQuickInfo(quickinfoArgs.line, quickinfoArgs.offset, quickinfoArgs.file), responseRequired: true }; + }, + _a[CommandNames.Format] = function (request) { + var formatArgs = request.arguments; + return { response: _this.getFormattingEditsForRange(formatArgs.line, formatArgs.offset, formatArgs.endLine, formatArgs.endOffset, formatArgs.file), responseRequired: true }; + }, + _a[CommandNames.Formatonkey] = function (request) { + var formatOnKeyArgs = request.arguments; + return { response: _this.getFormattingEditsAfterKeystroke(formatOnKeyArgs.line, formatOnKeyArgs.offset, formatOnKeyArgs.key, formatOnKeyArgs.file), responseRequired: true }; + }, + _a[CommandNames.Completions] = function (request) { + var completionsArgs = request.arguments; + return { response: _this.getCompletions(completionsArgs.line, completionsArgs.offset, completionsArgs.prefix, completionsArgs.file), responseRequired: true }; + }, + _a[CommandNames.CompletionDetails] = function (request) { + var completionDetailsArgs = request.arguments; + return { + response: _this.getCompletionEntryDetails(completionDetailsArgs.line, completionDetailsArgs.offset, completionDetailsArgs.entryNames, completionDetailsArgs.file), responseRequired: true + }; + }, + _a[CommandNames.SignatureHelp] = function (request) { + var signatureHelpArgs = request.arguments; + return { response: _this.getSignatureHelpItems(signatureHelpArgs.line, signatureHelpArgs.offset, signatureHelpArgs.file), responseRequired: true }; + }, + _a[CommandNames.Geterr] = function (request) { + var geterrArgs = request.arguments; + return { response: _this.getDiagnostics(geterrArgs.delay, geterrArgs.files), responseRequired: false }; + }, + _a[CommandNames.GeterrForProject] = function (request) { + var _a = request.arguments, file = _a.file, delay = _a.delay; + return { response: _this.getDiagnosticsForProject(delay, file), responseRequired: false }; + }, + _a[CommandNames.Change] = function (request) { + var changeArgs = request.arguments; + _this.change(changeArgs.line, changeArgs.offset, changeArgs.endLine, changeArgs.endOffset, changeArgs.insertString, changeArgs.file); + return { responseRequired: false }; + }, + _a[CommandNames.Configure] = function (request) { + var configureArgs = request.arguments; + _this.projectService.setHostConfiguration(configureArgs); + _this.output(undefined, CommandNames.Configure, request.seq); + return { responseRequired: false }; + }, + _a[CommandNames.Reload] = function (request) { + var reloadArgs = request.arguments; + _this.reload(reloadArgs.file, reloadArgs.tmpfile, request.seq); + return { response: { reloadFinished: true }, responseRequired: true }; + }, + _a[CommandNames.Saveto] = function (request) { + var savetoArgs = request.arguments; + _this.saveToTmp(savetoArgs.file, savetoArgs.tmpfile); + return { responseRequired: false }; + }, + _a[CommandNames.Close] = function (request) { + var closeArgs = request.arguments; + _this.closeClientFile(closeArgs.file); + return { responseRequired: false }; + }, + _a[CommandNames.Navto] = function (request) { + var navtoArgs = request.arguments; + return { response: _this.getNavigateToItems(navtoArgs.searchValue, navtoArgs.file, navtoArgs.maxResultCount), responseRequired: true }; + }, + _a[CommandNames.Brace] = function (request) { + var braceArguments = request.arguments; + return { response: _this.getBraceMatching(braceArguments.line, braceArguments.offset, braceArguments.file), responseRequired: true }; + }, + _a[CommandNames.NavBar] = function (request) { + var navBarArgs = request.arguments; + return { response: _this.getNavigationBarItems(navBarArgs.file), responseRequired: true }; + }, + _a[CommandNames.Occurrences] = function (request) { + var _a = request.arguments, line = _a.line, offset = _a.offset, fileName = _a.file; + return { response: _this.getOccurrences(line, offset, fileName), responseRequired: true }; + }, + _a[CommandNames.DocumentHighlights] = function (request) { + var _a = request.arguments, line = _a.line, offset = _a.offset, fileName = _a.file, filesToSearch = _a.filesToSearch; + return { response: _this.getDocumentHighlights(line, offset, fileName, filesToSearch), responseRequired: true }; + }, + _a[CommandNames.ProjectInfo] = function (request) { + var _a = request.arguments, file = _a.file, needFileNameList = _a.needFileNameList; + return { response: _this.getProjectInfo(file, needFileNameList), responseRequired: true }; + }, + _a[CommandNames.ReloadProjects] = function (request) { + _this.reloadProjects(); + return { responseRequired: false }; + }, + _a + ); + this.projectService = + new server.ProjectService(host, logger, function (eventName, project, fileName) { + _this.handleEvent(eventName, project, fileName); + }); + var _a; + } + Session.prototype.handleEvent = function (eventName, project, fileName) { + var _this = this; + if (eventName == "context") { + this.projectService.log("got context event, updating diagnostics for" + fileName, "Info"); + this.updateErrorCheck([{ fileName: fileName, project: project }], this.changeSeq, function (n) { return n === _this.changeSeq; }, 100); + } + }; + Session.prototype.logError = function (err, cmd) { + var typedErr = err; + var msg = "Exception on executing command " + cmd; + if (typedErr.message) { + msg += ":\n" + typedErr.message; + if (typedErr.stack) { + msg += "\n" + typedErr.stack; + } + } + this.projectService.log(msg); + }; + Session.prototype.sendLineToClient = function (line) { + this.host.write(line + this.host.newLine); + }; + Session.prototype.send = function (msg) { + var json = JSON.stringify(msg); + if (this.logger.isVerbose()) { + this.logger.info(msg.type + ": " + json); + } + this.sendLineToClient("Content-Length: " + (1 + this.byteLength(json, "utf8")) + + "\r\n\r\n" + json); + }; + Session.prototype.configFileDiagnosticEvent = function (triggerFile, configFile, diagnostics) { + var bakedDiags = ts.map(diagnostics, formatConfigFileDiag); + var ev = { + seq: 0, + type: "event", + event: "configFileDiag", + body: { + triggerFile: triggerFile, + configFile: configFile, + diagnostics: bakedDiags + } + }; + this.send(ev); + }; + Session.prototype.event = function (info, eventName) { + var ev = { + seq: 0, + type: "event", + event: eventName, + body: info + }; + this.send(ev); + }; + Session.prototype.response = function (info, cmdName, reqSeq, errorMsg) { + if (reqSeq === void 0) { reqSeq = 0; } + var res = { + seq: 0, + type: "response", + command: cmdName, + request_seq: reqSeq, + success: !errorMsg + }; + if (!errorMsg) { + res.body = info; + } + else { + res.message = errorMsg; + } + this.send(res); + }; + Session.prototype.output = function (body, commandName, requestSequence, errorMessage) { + if (requestSequence === void 0) { requestSequence = 0; } + this.response(body, commandName, requestSequence, errorMessage); + }; + Session.prototype.semanticCheck = function (file, project) { + try { + var diags = project.compilerService.languageService.getSemanticDiagnostics(file); + if (diags) { + var bakedDiags = diags.map(function (diag) { return formatDiag(file, project, diag); }); + this.event({ file: file, diagnostics: bakedDiags }, "semanticDiag"); + } + } + catch (err) { + this.logError(err, "semantic check"); + } + }; + Session.prototype.syntacticCheck = function (file, project) { + try { + var diags = project.compilerService.languageService.getSyntacticDiagnostics(file); + if (diags) { + var bakedDiags = diags.map(function (diag) { return formatDiag(file, project, diag); }); + this.event({ file: file, diagnostics: bakedDiags }, "syntaxDiag"); + } + } + catch (err) { + this.logError(err, "syntactic check"); + } + }; + Session.prototype.reloadProjects = function () { + this.projectService.reloadProjects(); + }; + Session.prototype.updateProjectStructure = function (seq, matchSeq, ms) { + var _this = this; + if (ms === void 0) { ms = 1500; } + setTimeout(function () { + if (matchSeq(seq)) { + _this.projectService.updateProjectStructure(); + } + }, ms); + }; + Session.prototype.updateErrorCheck = function (checkList, seq, matchSeq, ms, followMs, requireOpen) { + var _this = this; + if (ms === void 0) { ms = 1500; } + if (followMs === void 0) { followMs = 200; } + if (requireOpen === void 0) { requireOpen = true; } + if (followMs > ms) { + followMs = ms; + } + if (this.errorTimer) { + clearTimeout(this.errorTimer); + } + if (this.immediateId) { + clearImmediate(this.immediateId); + this.immediateId = undefined; + } + var index = 0; + var checkOne = function () { + if (matchSeq(seq)) { + var checkSpec_1 = checkList[index]; + index++; + if (checkSpec_1.project.getSourceFileFromName(checkSpec_1.fileName, requireOpen)) { + _this.syntacticCheck(checkSpec_1.fileName, checkSpec_1.project); + _this.immediateId = setImmediate(function () { + _this.semanticCheck(checkSpec_1.fileName, checkSpec_1.project); + _this.immediateId = undefined; + if (checkList.length > index) { + _this.errorTimer = setTimeout(checkOne, followMs); + } + else { + _this.errorTimer = undefined; + } + }); + } + } + }; + if ((checkList.length > index) && (matchSeq(seq))) { + this.errorTimer = setTimeout(checkOne, ms); + } + }; + Session.prototype.getDefinition = function (line, offset, fileName) { + var file = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + var compilerService = project.compilerService; + var position = compilerService.host.lineOffsetToPosition(file, line, offset); + var definitions = compilerService.languageService.getDefinitionAtPosition(file, position); + if (!definitions) { + return undefined; + } + return definitions.map(function (def) { return ({ + file: def.fileName, + start: compilerService.host.positionToLineOffset(def.fileName, def.textSpan.start), + end: compilerService.host.positionToLineOffset(def.fileName, ts.textSpanEnd(def.textSpan)) + }); }); + }; + Session.prototype.getTypeDefinition = function (line, offset, fileName) { + var file = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + var compilerService = project.compilerService; + var position = compilerService.host.lineOffsetToPosition(file, line, offset); + var definitions = compilerService.languageService.getTypeDefinitionAtPosition(file, position); + if (!definitions) { + return undefined; + } + return definitions.map(function (def) { return ({ + file: def.fileName, + start: compilerService.host.positionToLineOffset(def.fileName, def.textSpan.start), + end: compilerService.host.positionToLineOffset(def.fileName, ts.textSpanEnd(def.textSpan)) + }); }); + }; + Session.prototype.getOccurrences = function (line, offset, fileName) { + fileName = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(fileName); + if (!project) { + throw Errors.NoProject; + } + var compilerService = project.compilerService; + var position = compilerService.host.lineOffsetToPosition(fileName, line, offset); + var occurrences = compilerService.languageService.getOccurrencesAtPosition(fileName, position); + if (!occurrences) { + return undefined; + } + return occurrences.map(function (occurrence) { + var fileName = occurrence.fileName, isWriteAccess = occurrence.isWriteAccess, textSpan = occurrence.textSpan; + var start = compilerService.host.positionToLineOffset(fileName, textSpan.start); + var end = compilerService.host.positionToLineOffset(fileName, ts.textSpanEnd(textSpan)); + return { + start: start, + end: end, + file: fileName, + isWriteAccess: isWriteAccess + }; + }); + }; + Session.prototype.getDocumentHighlights = function (line, offset, fileName, filesToSearch) { + fileName = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(fileName); + if (!project) { + throw Errors.NoProject; + } + var compilerService = project.compilerService; + var position = compilerService.host.lineOffsetToPosition(fileName, line, offset); + var documentHighlights = compilerService.languageService.getDocumentHighlights(fileName, position, filesToSearch); + if (!documentHighlights) { + return undefined; + } + return documentHighlights.map(convertToDocumentHighlightsItem); + function convertToDocumentHighlightsItem(documentHighlights) { + var fileName = documentHighlights.fileName, highlightSpans = documentHighlights.highlightSpans; + return { + file: fileName, + highlightSpans: highlightSpans.map(convertHighlightSpan) + }; + function convertHighlightSpan(highlightSpan) { + var textSpan = highlightSpan.textSpan, kind = highlightSpan.kind; + var start = compilerService.host.positionToLineOffset(fileName, textSpan.start); + var end = compilerService.host.positionToLineOffset(fileName, ts.textSpanEnd(textSpan)); + return { start: start, end: end, kind: kind }; + } + } + }; + Session.prototype.getProjectInfo = function (fileName, needFileNameList) { + fileName = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(fileName); + var projectInfo = { + configFileName: project.projectFilename + }; + if (needFileNameList) { + projectInfo.fileNames = project.getFileNames(); + } + return projectInfo; + }; + Session.prototype.getRenameLocations = function (line, offset, fileName, findInComments, findInStrings) { + var file = ts.normalizePath(fileName); + var info = this.projectService.getScriptInfo(file); + var projects = this.projectService.findReferencingProjects(info); + if (!projects.length) { + throw Errors.NoProject; + } + var defaultProject = projects[0]; + var defaultProjectCompilerService = defaultProject.compilerService; + var position = defaultProjectCompilerService.host.lineOffsetToPosition(file, line, offset); + var renameInfo = defaultProjectCompilerService.languageService.getRenameInfo(file, position); + if (!renameInfo) { + return undefined; + } + if (!renameInfo.canRename) { + return { + info: renameInfo, + locs: [] + }; + } + var fileSpans = server.combineProjectOutput(projects, function (project) { + var compilerService = project.compilerService; + var renameLocations = compilerService.languageService.findRenameLocations(file, position, findInStrings, findInComments); + if (!renameLocations) { + return []; + } + return renameLocations.map(function (location) { return ({ + file: location.fileName, + start: compilerService.host.positionToLineOffset(location.fileName, location.textSpan.start), + end: compilerService.host.positionToLineOffset(location.fileName, ts.textSpanEnd(location.textSpan)) + }); }); + }, compareRenameLocation, function (a, b) { return a.file === b.file && a.start.line === b.start.line && a.start.offset === b.start.offset; }); + var locs = fileSpans.reduce(function (accum, cur) { + var curFileAccum; + if (accum.length > 0) { + curFileAccum = accum[accum.length - 1]; + if (curFileAccum.file !== cur.file) { + curFileAccum = undefined; + } + } + if (!curFileAccum) { + curFileAccum = { file: cur.file, locs: [] }; + accum.push(curFileAccum); + } + curFileAccum.locs.push({ start: cur.start, end: cur.end }); + return accum; + }, []); + return { info: renameInfo, locs: locs }; + function compareRenameLocation(a, b) { + if (a.file < b.file) { + return -1; + } + else if (a.file > b.file) { + return 1; + } + else { + if (a.start.line < b.start.line) { + return 1; + } + else if (a.start.line > b.start.line) { + return -1; + } + else { + return b.start.offset - a.start.offset; + } + } + } + }; + Session.prototype.getReferences = function (line, offset, fileName) { + var file = ts.normalizePath(fileName); + var info = this.projectService.getScriptInfo(file); + var projects = this.projectService.findReferencingProjects(info); + if (!projects.length) { + throw Errors.NoProject; + } + var defaultProject = projects[0]; + var position = defaultProject.compilerService.host.lineOffsetToPosition(file, line, offset); + var nameInfo = defaultProject.compilerService.languageService.getQuickInfoAtPosition(file, position); + if (!nameInfo) { + return undefined; + } + var displayString = ts.displayPartsToString(nameInfo.displayParts); + var nameSpan = nameInfo.textSpan; + var nameColStart = defaultProject.compilerService.host.positionToLineOffset(file, nameSpan.start).offset; + var nameText = defaultProject.compilerService.host.getScriptSnapshot(file).getText(nameSpan.start, ts.textSpanEnd(nameSpan)); + var refs = server.combineProjectOutput(projects, function (project) { + var compilerService = project.compilerService; + var references = compilerService.languageService.getReferencesAtPosition(file, position); + if (!references) { + return []; + } + return references.map(function (ref) { + var start = compilerService.host.positionToLineOffset(ref.fileName, ref.textSpan.start); + var refLineSpan = compilerService.host.lineToTextSpan(ref.fileName, start.line - 1); + var snap = compilerService.host.getScriptSnapshot(ref.fileName); + var lineText = snap.getText(refLineSpan.start, ts.textSpanEnd(refLineSpan)).replace(/\r|\n/g, ""); + return { + file: ref.fileName, + start: start, + lineText: lineText, + end: compilerService.host.positionToLineOffset(ref.fileName, ts.textSpanEnd(ref.textSpan)), + isWriteAccess: ref.isWriteAccess + }; + }); + }, compareFileStart, areReferencesResponseItemsForTheSameLocation); + return { + refs: refs, + symbolName: nameText, + symbolStartOffset: nameColStart, + symbolDisplayString: displayString + }; + function areReferencesResponseItemsForTheSameLocation(a, b) { + if (a && b) { + return a.file === b.file && + a.start === b.start && + a.end === b.end; + } + return false; + } + }; + Session.prototype.openClientFile = function (fileName, fileContent, scriptKind) { + var file = ts.normalizePath(fileName); + var _a = this.projectService.openClientFile(file, fileContent, scriptKind), configFileName = _a.configFileName, configFileErrors = _a.configFileErrors; + if (configFileErrors) { + this.configFileDiagnosticEvent(fileName, configFileName, configFileErrors); + } + }; + Session.prototype.getQuickInfo = function (line, offset, fileName) { + var file = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + var compilerService = project.compilerService; + var position = compilerService.host.lineOffsetToPosition(file, line, offset); + var quickInfo = compilerService.languageService.getQuickInfoAtPosition(file, position); + if (!quickInfo) { + return undefined; + } + var displayString = ts.displayPartsToString(quickInfo.displayParts); + var docString = ts.displayPartsToString(quickInfo.documentation); + return { + kind: quickInfo.kind, + kindModifiers: quickInfo.kindModifiers, + start: compilerService.host.positionToLineOffset(file, quickInfo.textSpan.start), + end: compilerService.host.positionToLineOffset(file, ts.textSpanEnd(quickInfo.textSpan)), + displayString: displayString, + documentation: docString + }; + }; + Session.prototype.getFormattingEditsForRange = function (line, offset, endLine, endOffset, fileName) { + var file = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + var compilerService = project.compilerService; + var startPosition = compilerService.host.lineOffsetToPosition(file, line, offset); + var endPosition = compilerService.host.lineOffsetToPosition(file, endLine, endOffset); + var edits = compilerService.languageService.getFormattingEditsForRange(file, startPosition, endPosition, this.projectService.getFormatCodeOptions(file)); + if (!edits) { + return undefined; + } + return edits.map(function (edit) { + return { + start: compilerService.host.positionToLineOffset(file, edit.span.start), + end: compilerService.host.positionToLineOffset(file, ts.textSpanEnd(edit.span)), + newText: edit.newText ? edit.newText : "" + }; + }); + }; + Session.prototype.getFormattingEditsAfterKeystroke = function (line, offset, key, fileName) { + var file = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + var compilerService = project.compilerService; + var position = compilerService.host.lineOffsetToPosition(file, line, offset); + var formatOptions = this.projectService.getFormatCodeOptions(file); + var edits = compilerService.languageService.getFormattingEditsAfterKeystroke(file, position, key, formatOptions); + if ((key == "\n") && ((!edits) || (edits.length === 0) || allEditsBeforePos(edits, position))) { + var scriptInfo = compilerService.host.getScriptInfo(file); + if (scriptInfo) { + var lineInfo = scriptInfo.getLineInfo(line); + if (lineInfo && (lineInfo.leaf) && (lineInfo.leaf.text)) { + var lineText = lineInfo.leaf.text; + if (lineText.search("\\S") < 0) { + var editorOptions = { + IndentSize: formatOptions.IndentSize, + TabSize: formatOptions.TabSize, + NewLineCharacter: formatOptions.NewLineCharacter, + ConvertTabsToSpaces: formatOptions.ConvertTabsToSpaces, + IndentStyle: ts.IndentStyle.Smart + }; + var preferredIndent = compilerService.languageService.getIndentationAtPosition(file, position, editorOptions); + var hasIndent = 0; + var i = void 0, len = void 0; + for (i = 0, len = lineText.length; i < len; i++) { + if (lineText.charAt(i) == " ") { + hasIndent++; + } + else if (lineText.charAt(i) == "\t") { + hasIndent += editorOptions.TabSize; + } + else { + break; + } + } + if (preferredIndent !== hasIndent) { + var firstNoWhiteSpacePosition = lineInfo.offset + i; + edits.push({ + span: ts.createTextSpanFromBounds(lineInfo.offset, firstNoWhiteSpacePosition), + newText: generateIndentString(preferredIndent, editorOptions) + }); + } + } + } + } + } + if (!edits) { + return undefined; + } + return edits.map(function (edit) { + return { + start: compilerService.host.positionToLineOffset(file, edit.span.start), + end: compilerService.host.positionToLineOffset(file, ts.textSpanEnd(edit.span)), + newText: edit.newText ? edit.newText : "" + }; + }); + }; + Session.prototype.getCompletions = function (line, offset, prefix, fileName) { + if (!prefix) { + prefix = ""; + } + var file = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + var compilerService = project.compilerService; + var position = compilerService.host.lineOffsetToPosition(file, line, offset); + var completions = compilerService.languageService.getCompletionsAtPosition(file, position); + if (!completions) { + return undefined; + } + return completions.entries.reduce(function (result, entry) { + if (completions.isMemberCompletion || (entry.name.toLowerCase().indexOf(prefix.toLowerCase()) === 0)) { + result.push(entry); + } + return result; + }, []).sort(function (a, b) { return a.name.localeCompare(b.name); }); + }; + Session.prototype.getCompletionEntryDetails = function (line, offset, entryNames, fileName) { + var file = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + var compilerService = project.compilerService; + var position = compilerService.host.lineOffsetToPosition(file, line, offset); + return entryNames.reduce(function (accum, entryName) { + var details = compilerService.languageService.getCompletionEntryDetails(file, position, entryName); + if (details) { + accum.push(details); + } + return accum; + }, []); + }; + Session.prototype.getSignatureHelpItems = function (line, offset, fileName) { + var file = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + var compilerService = project.compilerService; + var position = compilerService.host.lineOffsetToPosition(file, line, offset); + var helpItems = compilerService.languageService.getSignatureHelpItems(file, position); + if (!helpItems) { + return undefined; + } + var span = helpItems.applicableSpan; + var result = { + items: helpItems.items, + applicableSpan: { + start: compilerService.host.positionToLineOffset(file, span.start), + end: compilerService.host.positionToLineOffset(file, span.start + span.length) + }, + selectedItemIndex: helpItems.selectedItemIndex, + argumentIndex: helpItems.argumentIndex, + argumentCount: helpItems.argumentCount + }; + return result; + }; + Session.prototype.getDiagnostics = function (delay, fileNames) { + var _this = this; + var checkList = fileNames.reduce(function (accum, fileName) { + fileName = ts.normalizePath(fileName); + var project = _this.projectService.getProjectForFile(fileName); + if (project) { + accum.push({ fileName: fileName, project: project }); + } + return accum; + }, []); + if (checkList.length > 0) { + this.updateErrorCheck(checkList, this.changeSeq, function (n) { return n === _this.changeSeq; }, delay); + } + }; + Session.prototype.change = function (line, offset, endLine, endOffset, insertString, fileName) { + var _this = this; + var file = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(file); + if (project) { + var compilerService = project.compilerService; + var start = compilerService.host.lineOffsetToPosition(file, line, offset); + var end = compilerService.host.lineOffsetToPosition(file, endLine, endOffset); + if (start >= 0) { + compilerService.host.editScript(file, start, end, insertString); + this.changeSeq++; + } + this.updateProjectStructure(this.changeSeq, function (n) { return n === _this.changeSeq; }); + } + }; + Session.prototype.reload = function (fileName, tempFileName, reqSeq) { + var _this = this; + if (reqSeq === void 0) { reqSeq = 0; } + var file = ts.normalizePath(fileName); + var tmpfile = ts.normalizePath(tempFileName); + var project = this.projectService.getProjectForFile(file); + if (project) { + this.changeSeq++; + project.compilerService.host.reloadScript(file, tmpfile, function () { + _this.output(undefined, CommandNames.Reload, reqSeq); + }); + } + }; + Session.prototype.saveToTmp = function (fileName, tempFileName) { + var file = ts.normalizePath(fileName); + var tmpfile = ts.normalizePath(tempFileName); + var project = this.projectService.getProjectForFile(file); + if (project) { + project.compilerService.host.saveTo(file, tmpfile); + } + }; + Session.prototype.closeClientFile = function (fileName) { + if (!fileName) { + return; + } + var file = ts.normalizePath(fileName); + this.projectService.closeClientFile(file); + }; + Session.prototype.decorateNavigationBarItem = function (project, fileName, items) { + var _this = this; + if (!items) { + return undefined; + } + var compilerService = project.compilerService; + return items.map(function (item) { return ({ + text: item.text, + kind: item.kind, + kindModifiers: item.kindModifiers, + spans: item.spans.map(function (span) { return ({ + start: compilerService.host.positionToLineOffset(fileName, span.start), + end: compilerService.host.positionToLineOffset(fileName, ts.textSpanEnd(span)) + }); }), + childItems: _this.decorateNavigationBarItem(project, fileName, item.childItems) + }); }); + }; + Session.prototype.getNavigationBarItems = function (fileName) { + var file = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + var compilerService = project.compilerService; + var items = compilerService.languageService.getNavigationBarItems(file); + if (!items) { + return undefined; + } + return this.decorateNavigationBarItem(project, fileName, items); + }; + Session.prototype.getNavigateToItems = function (searchValue, fileName, maxResultCount) { + var file = ts.normalizePath(fileName); + var info = this.projectService.getScriptInfo(file); + var projects = this.projectService.findReferencingProjects(info); + var defaultProject = projects[0]; + if (!defaultProject) { + throw Errors.NoProject; + } + var allNavToItems = server.combineProjectOutput(projects, function (project) { + var compilerService = project.compilerService; + var navItems = compilerService.languageService.getNavigateToItems(searchValue, maxResultCount); + if (!navItems) { + return []; + } + return navItems.map(function (navItem) { + var start = compilerService.host.positionToLineOffset(navItem.fileName, navItem.textSpan.start); + var end = compilerService.host.positionToLineOffset(navItem.fileName, ts.textSpanEnd(navItem.textSpan)); + var bakedItem = { + name: navItem.name, + kind: navItem.kind, + file: navItem.fileName, + start: start, + end: end + }; + if (navItem.kindModifiers && (navItem.kindModifiers !== "")) { + bakedItem.kindModifiers = navItem.kindModifiers; + } + if (navItem.matchKind !== "none") { + bakedItem.matchKind = navItem.matchKind; + } + if (navItem.containerName && (navItem.containerName.length > 0)) { + bakedItem.containerName = navItem.containerName; + } + if (navItem.containerKind && (navItem.containerKind.length > 0)) { + bakedItem.containerKind = navItem.containerKind; + } + return bakedItem; + }); + }, undefined, areNavToItemsForTheSameLocation); + return allNavToItems; + function areNavToItemsForTheSameLocation(a, b) { + if (a && b) { + return a.file === b.file && + a.start === b.start && + a.end === b.end; + } + return false; + } + }; + Session.prototype.getBraceMatching = function (line, offset, fileName) { + var file = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + var compilerService = project.compilerService; + var position = compilerService.host.lineOffsetToPosition(file, line, offset); + var spans = compilerService.languageService.getBraceMatchingAtPosition(file, position); + if (!spans) { + return undefined; + } + return spans.map(function (span) { return ({ + start: compilerService.host.positionToLineOffset(file, span.start), + end: compilerService.host.positionToLineOffset(file, span.start + span.length) + }); }); + }; + Session.prototype.getDiagnosticsForProject = function (delay, fileName) { + var _this = this; + var fileNames = this.getProjectInfo(fileName, true).fileNames; + var fileNamesInProject = fileNames.filter(function (value, index, array) { return value.indexOf("lib.d.ts") < 0; }); + var highPriorityFiles = []; + var mediumPriorityFiles = []; + var lowPriorityFiles = []; + var veryLowPriorityFiles = []; + var normalizedFileName = ts.normalizePath(fileName); + var project = this.projectService.getProjectForFile(normalizedFileName); + for (var _i = 0, fileNamesInProject_1 = fileNamesInProject; _i < fileNamesInProject_1.length; _i++) { + var fileNameInProject = fileNamesInProject_1[_i]; + if (this.getCanonicalFileName(fileNameInProject) == this.getCanonicalFileName(fileName)) + highPriorityFiles.push(fileNameInProject); + else { + var info = this.projectService.getScriptInfo(fileNameInProject); + if (!info.isOpen) { + if (fileNameInProject.indexOf(".d.ts") > 0) + veryLowPriorityFiles.push(fileNameInProject); + else + lowPriorityFiles.push(fileNameInProject); + } + else + mediumPriorityFiles.push(fileNameInProject); + } + } + fileNamesInProject = highPriorityFiles.concat(mediumPriorityFiles).concat(lowPriorityFiles).concat(veryLowPriorityFiles); + if (fileNamesInProject.length > 0) { + var checkList = fileNamesInProject.map(function (fileName) { + var normalizedFileName = ts.normalizePath(fileName); + return { fileName: normalizedFileName, project: project }; + }); + this.updateErrorCheck(checkList, this.changeSeq, function (n) { return n == _this.changeSeq; }, delay, 200, false); + } + }; + Session.prototype.getCanonicalFileName = function (fileName) { + var name = this.host.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); + return ts.normalizePath(name); + }; + Session.prototype.exit = function () { + }; + Session.prototype.addProtocolHandler = function (command, handler) { + if (this.handlers[command]) { + throw new Error("Protocol handler already exists for command \"" + command + "\""); + } + this.handlers[command] = handler; + }; + Session.prototype.executeCommand = function (request) { + var handler = this.handlers[request.command]; + if (handler) { + return handler(request); + } + else { + this.projectService.log("Unrecognized JSON command: " + JSON.stringify(request)); + this.output(undefined, CommandNames.Unknown, request.seq, "Unrecognized JSON command: " + request.command); + return { responseRequired: false }; + } + }; + Session.prototype.onMessage = function (message) { + var start; + if (this.logger.isVerbose()) { + this.logger.info("request: " + message); + start = this.hrtime(); + } + var request; + try { + request = JSON.parse(message); + var _a = this.executeCommand(request), response = _a.response, responseRequired = _a.responseRequired; + if (this.logger.isVerbose()) { + var elapsed = this.hrtime(start); + var seconds = elapsed[0]; + var nanoseconds = elapsed[1]; + var elapsedMs = ((1e9 * seconds) + nanoseconds) / 1000000.0; + var leader = "Elapsed time (in milliseconds)"; + if (!responseRequired) { + leader = "Async elapsed time (in milliseconds)"; + } + this.logger.msg(leader + ": " + elapsedMs.toFixed(4).toString(), "Perf"); + } + if (response) { + this.output(response, request.command, request.seq); + } + else if (responseRequired) { + this.output(undefined, request.command, request.seq, "No content available."); + } + } + catch (err) { + if (err instanceof ts.OperationCanceledException) { + } + this.logError(err, message); + this.output(undefined, request ? request.command : CommandNames.Unknown, request ? request.seq : 0, "Error processing request. " + err.message); + } + }; + return Session; + }()); + server.Session = Session; + })(server = ts.server || (ts.server = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var server; + (function (server) { + var lineCollectionCapacity = 4; + function mergeFormatOptions(formatCodeOptions, formatOptions) { + var hasOwnProperty = Object.prototype.hasOwnProperty; + Object.keys(formatOptions).forEach(function (key) { + var codeKey = key.charAt(0).toUpperCase() + key.substring(1); + if (hasOwnProperty.call(formatCodeOptions, codeKey)) { + formatCodeOptions[codeKey] = formatOptions[key]; + } + }); + } + var ScriptInfo = (function () { + function ScriptInfo(host, fileName, content, isOpen) { + if (isOpen === void 0) { isOpen = false; } + this.host = host; + this.fileName = fileName; + this.content = content; + this.isOpen = isOpen; + this.children = []; + this.formatCodeOptions = ts.clone(CompilerService.getDefaultFormatCodeOptions(this.host)); + this.path = ts.toPath(fileName, host.getCurrentDirectory(), ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames)); + this.svc = ScriptVersionCache.fromString(host, content); + } + ScriptInfo.prototype.setFormatOptions = function (formatOptions) { + if (formatOptions) { + mergeFormatOptions(this.formatCodeOptions, formatOptions); + } + }; + ScriptInfo.prototype.close = function () { + this.isOpen = false; + }; + ScriptInfo.prototype.addChild = function (childInfo) { + this.children.push(childInfo); + }; + ScriptInfo.prototype.snap = function () { + return this.svc.getSnapshot(); + }; + ScriptInfo.prototype.getText = function () { + var snap = this.snap(); + return snap.getText(0, snap.getLength()); + }; + ScriptInfo.prototype.getLineInfo = function (line) { + var snap = this.snap(); + return snap.index.lineNumberToInfo(line); + }; + ScriptInfo.prototype.editContent = function (start, end, newText) { + this.svc.edit(start, end - start, newText); + }; + ScriptInfo.prototype.getTextChangeRangeBetweenVersions = function (startVersion, endVersion) { + return this.svc.getTextChangesBetweenVersions(startVersion, endVersion); + }; + ScriptInfo.prototype.getChangeRange = function (oldSnapshot) { + return this.snap().getChangeRange(oldSnapshot); + }; + return ScriptInfo; + }()); + server.ScriptInfo = ScriptInfo; + var LSHost = (function () { + function LSHost(host, project) { + var _this = this; + this.host = host; + this.project = project; + this.roots = []; + this.getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames); + this.resolvedModuleNames = ts.createFileMap(); + this.resolvedTypeReferenceDirectives = ts.createFileMap(); + this.filenameToScript = ts.createFileMap(); + this.moduleResolutionHost = { + fileExists: function (fileName) { return _this.fileExists(fileName); }, + readFile: function (fileName) { return _this.host.readFile(fileName); }, + directoryExists: function (directoryName) { return _this.host.directoryExists(directoryName); } + }; + } + LSHost.prototype.resolveNamesWithLocalCache = function (names, containingFile, cache, loader, getResult) { + var path = ts.toPath(containingFile, this.host.getCurrentDirectory(), this.getCanonicalFileName); + var currentResolutionsInFile = cache.get(path); + var newResolutions = {}; + var resolvedModules = []; + var compilerOptions = this.getCompilationSettings(); + for (var _i = 0, names_2 = names; _i < names_2.length; _i++) { + var name_41 = names_2[_i]; + var resolution = ts.lookUp(newResolutions, name_41); + if (!resolution) { + var existingResolution = currentResolutionsInFile && ts.lookUp(currentResolutionsInFile, name_41); + if (moduleResolutionIsValid(existingResolution)) { + resolution = existingResolution; + } + else { + resolution = loader(name_41, containingFile, compilerOptions, this.moduleResolutionHost); + resolution.lastCheckTime = Date.now(); + newResolutions[name_41] = resolution; + } + } + ts.Debug.assert(resolution !== undefined); + resolvedModules.push(getResult(resolution)); + } + cache.set(path, newResolutions); + return resolvedModules; + function moduleResolutionIsValid(resolution) { + if (!resolution) { + return false; + } + if (getResult(resolution)) { + return true; + } + return resolution.failedLookupLocations.length === 0; + } + }; + LSHost.prototype.resolveTypeReferenceDirectives = function (typeDirectiveNames, containingFile) { + return this.resolveNamesWithLocalCache(typeDirectiveNames, containingFile, this.resolvedTypeReferenceDirectives, ts.resolveTypeReferenceDirective, function (m) { return m.resolvedTypeReferenceDirective; }); + }; + LSHost.prototype.resolveModuleNames = function (moduleNames, containingFile) { + return this.resolveNamesWithLocalCache(moduleNames, containingFile, this.resolvedModuleNames, ts.resolveModuleName, function (m) { return m.resolvedModule; }); + }; + LSHost.prototype.getDefaultLibFileName = function () { + var nodeModuleBinDir = ts.getDirectoryPath(ts.normalizePath(this.host.getExecutingFilePath())); + return ts.combinePaths(nodeModuleBinDir, ts.getDefaultLibFileName(this.compilationSettings)); + }; + LSHost.prototype.getScriptSnapshot = function (filename) { + var scriptInfo = this.getScriptInfo(filename); + if (scriptInfo) { + return scriptInfo.snap(); + } + }; + LSHost.prototype.setCompilationSettings = function (opt) { + this.compilationSettings = opt; + this.resolvedModuleNames.clear(); + this.resolvedTypeReferenceDirectives.clear(); + }; + LSHost.prototype.lineAffectsRefs = function (filename, line) { + var info = this.getScriptInfo(filename); + var lineInfo = info.getLineInfo(line); + if (lineInfo && lineInfo.text) { + var regex = /reference|import|\/\*|\*\//; + return regex.test(lineInfo.text); + } + }; + LSHost.prototype.getCompilationSettings = function () { + return this.compilationSettings; + }; + LSHost.prototype.getScriptFileNames = function () { + return this.roots.map(function (root) { return root.fileName; }); + }; + LSHost.prototype.getScriptKind = function (fileName) { + var info = this.getScriptInfo(fileName); + if (!info) { + return undefined; + } + if (!info.scriptKind) { + info.scriptKind = ts.getScriptKindFromFileName(fileName); + } + return info.scriptKind; + }; + LSHost.prototype.getScriptVersion = function (filename) { + return this.getScriptInfo(filename).svc.latestVersion().toString(); + }; + LSHost.prototype.getCurrentDirectory = function () { + return ""; + }; + LSHost.prototype.getScriptIsOpen = function (filename) { + return this.getScriptInfo(filename).isOpen; + }; + LSHost.prototype.removeReferencedFile = function (info) { + if (!info.isOpen) { + this.filenameToScript.remove(info.path); + this.resolvedModuleNames.remove(info.path); + this.resolvedTypeReferenceDirectives.remove(info.path); + } + }; + LSHost.prototype.getScriptInfo = function (filename) { + var path = ts.toPath(filename, this.host.getCurrentDirectory(), this.getCanonicalFileName); + var scriptInfo = this.filenameToScript.get(path); + if (!scriptInfo) { + scriptInfo = this.project.openReferencedFile(filename); + if (scriptInfo) { + this.filenameToScript.set(path, scriptInfo); + } + } + return scriptInfo; + }; + LSHost.prototype.addRoot = function (info) { + if (!this.filenameToScript.contains(info.path)) { + this.filenameToScript.set(info.path, info); + this.roots.push(info); + } + }; + LSHost.prototype.removeRoot = function (info) { + if (!this.filenameToScript.contains(info.path)) { + this.filenameToScript.remove(info.path); + this.roots = copyListRemovingItem(info, this.roots); + this.resolvedModuleNames.remove(info.path); + this.resolvedTypeReferenceDirectives.remove(info.path); + } + }; + LSHost.prototype.saveTo = function (filename, tmpfilename) { + var script = this.getScriptInfo(filename); + if (script) { + var snap = script.snap(); + this.host.writeFile(tmpfilename, snap.getText(0, snap.getLength())); + } + }; + LSHost.prototype.reloadScript = function (filename, tmpfilename, cb) { + var script = this.getScriptInfo(filename); + if (script) { + script.svc.reloadFromFile(tmpfilename, cb); + } + }; + LSHost.prototype.editScript = function (filename, start, end, newText) { + var script = this.getScriptInfo(filename); + if (script) { + script.editContent(start, end, newText); + return; + } + throw new Error("No script with name '" + filename + "'"); + }; + LSHost.prototype.resolvePath = function (path) { + var result = this.host.resolvePath(path); + return result; + }; + LSHost.prototype.fileExists = function (path) { + var result = this.host.fileExists(path); + return result; + }; + LSHost.prototype.directoryExists = function (path) { + return this.host.directoryExists(path); + }; + LSHost.prototype.lineToTextSpan = function (filename, line) { + var path = ts.toPath(filename, this.host.getCurrentDirectory(), this.getCanonicalFileName); + var script = this.filenameToScript.get(path); + var index = script.snap().index; + var lineInfo = index.lineNumberToInfo(line + 1); + var len; + if (lineInfo.leaf) { + len = lineInfo.leaf.text.length; + } + else { + var nextLineInfo = index.lineNumberToInfo(line + 2); + len = nextLineInfo.offset - lineInfo.offset; + } + return ts.createTextSpan(lineInfo.offset, len); + }; + LSHost.prototype.lineOffsetToPosition = function (filename, line, offset) { + var path = ts.toPath(filename, this.host.getCurrentDirectory(), this.getCanonicalFileName); + var script = this.filenameToScript.get(path); + var index = script.snap().index; + var lineInfo = index.lineNumberToInfo(line); + return (lineInfo.offset + offset - 1); + }; + LSHost.prototype.positionToLineOffset = function (filename, position) { + var path = ts.toPath(filename, this.host.getCurrentDirectory(), this.getCanonicalFileName); + var script = this.filenameToScript.get(path); + var index = script.snap().index; + var lineOffset = index.charOffsetToLineNumberAndPos(position); + return { line: lineOffset.line, offset: lineOffset.offset + 1 }; + }; + return LSHost; + }()); + server.LSHost = LSHost; + var Project = (function () { + function Project(projectService, projectOptions) { + this.projectService = projectService; + this.projectOptions = projectOptions; + this.directoriesWatchedForTsconfig = []; + this.filenameToSourceFile = {}; + this.updateGraphSeq = 0; + this.openRefCount = 0; + if (projectOptions && projectOptions.files) { + projectOptions.compilerOptions.allowNonTsExtensions = true; + } + this.compilerService = new CompilerService(this, projectOptions && projectOptions.compilerOptions); + } + Project.prototype.addOpenRef = function () { + this.openRefCount++; + }; + Project.prototype.deleteOpenRef = function () { + this.openRefCount--; + return this.openRefCount; + }; + Project.prototype.openReferencedFile = function (filename) { + return this.projectService.openFile(filename, false); + }; + Project.prototype.getRootFiles = function () { + return this.compilerService.host.roots.map(function (info) { return info.fileName; }); + }; + Project.prototype.getFileNames = function () { + var sourceFiles = this.program.getSourceFiles(); + return sourceFiles.map(function (sourceFile) { return sourceFile.fileName; }); + }; + Project.prototype.getSourceFile = function (info) { + return this.filenameToSourceFile[info.fileName]; + }; + Project.prototype.getSourceFileFromName = function (filename, requireOpen) { + var info = this.projectService.getScriptInfo(filename); + if (info) { + if ((!requireOpen) || info.isOpen) { + return this.getSourceFile(info); + } + } + }; + Project.prototype.isRoot = function (info) { + return this.compilerService.host.roots.some(function (root) { return root === info; }); + }; + Project.prototype.removeReferencedFile = function (info) { + this.compilerService.host.removeReferencedFile(info); + this.updateGraph(); + }; + Project.prototype.updateFileMap = function () { + this.filenameToSourceFile = {}; + var sourceFiles = this.program.getSourceFiles(); + for (var i = 0, len = sourceFiles.length; i < len; i++) { + var normFilename = ts.normalizePath(sourceFiles[i].fileName); + this.filenameToSourceFile[normFilename] = sourceFiles[i]; + } + }; + Project.prototype.finishGraph = function () { + this.updateGraph(); + this.compilerService.languageService.getNavigateToItems(".*"); + }; + Project.prototype.updateGraph = function () { + this.program = this.compilerService.languageService.getProgram(); + this.updateFileMap(); + }; + Project.prototype.isConfiguredProject = function () { + return this.projectFilename; + }; + Project.prototype.addRoot = function (info) { + this.compilerService.host.addRoot(info); + }; + Project.prototype.removeRoot = function (info) { + this.compilerService.host.removeRoot(info); + }; + Project.prototype.filesToString = function () { + var strBuilder = ""; + ts.forEachValue(this.filenameToSourceFile, function (sourceFile) { strBuilder += sourceFile.fileName + "\n"; }); + return strBuilder; + }; + Project.prototype.setProjectOptions = function (projectOptions) { + this.projectOptions = projectOptions; + if (projectOptions.compilerOptions) { + projectOptions.compilerOptions.allowNonTsExtensions = true; + this.compilerService.setCompilerOptions(projectOptions.compilerOptions); + } + }; + return Project; + }()); + server.Project = Project; + function copyListRemovingItem(item, list) { + var copiedList = []; + for (var i = 0, len = list.length; i < len; i++) { + if (list[i] != item) { + copiedList.push(list[i]); + } + } + return copiedList; + } + function combineProjectOutput(projects, action, comparer, areEqual) { + var result = projects.reduce(function (previous, current) { return ts.concatenate(previous, action(current)); }, []).sort(comparer); + return projects.length > 1 ? ts.deduplicate(result, areEqual) : result; + } + server.combineProjectOutput = combineProjectOutput; + var ProjectService = (function () { + function ProjectService(host, psLogger, eventHandler) { + this.host = host; + this.psLogger = psLogger; + this.eventHandler = eventHandler; + this.filenameToScriptInfo = {}; + this.openFileRoots = []; + this.inferredProjects = []; + this.configuredProjects = []; + this.openFilesReferenced = []; + this.openFileRootsConfigured = []; + this.directoryWatchersForTsconfig = {}; + this.directoryWatchersRefCount = {}; + this.timerForDetectingProjectFileListChanges = {}; + this.addDefaultHostConfiguration(); + } + ProjectService.prototype.addDefaultHostConfiguration = function () { + this.hostConfiguration = { + formatCodeOptions: ts.clone(CompilerService.getDefaultFormatCodeOptions(this.host)), + hostInfo: "Unknown host" + }; + }; + ProjectService.prototype.getFormatCodeOptions = function (file) { + if (file) { + var info = this.filenameToScriptInfo[file]; + if (info) { + return info.formatCodeOptions; + } + } + return this.hostConfiguration.formatCodeOptions; + }; + ProjectService.prototype.watchedFileChanged = function (fileName) { + var info = this.filenameToScriptInfo[fileName]; + if (!info) { + this.psLogger.info("Error: got watch notification for unknown file: " + fileName); + } + if (!this.host.fileExists(fileName)) { + this.fileDeletedInFilesystem(info); + } + else { + if (info && (!info.isOpen)) { + info.svc.reloadFromFile(info.fileName); + } + } + }; + ProjectService.prototype.directoryWatchedForSourceFilesChanged = function (project, fileName) { + if (fileName && !ts.isSupportedSourceFileName(fileName, project.projectOptions ? project.projectOptions.compilerOptions : undefined)) { + return; + } + this.log("Detected source file changes: " + fileName); + this.startTimerForDetectingProjectFileListChanges(project); + }; + ProjectService.prototype.startTimerForDetectingProjectFileListChanges = function (project) { + var _this = this; + if (this.timerForDetectingProjectFileListChanges[project.projectFilename]) { + this.host.clearTimeout(this.timerForDetectingProjectFileListChanges[project.projectFilename]); + } + this.timerForDetectingProjectFileListChanges[project.projectFilename] = this.host.setTimeout(function () { return _this.handleProjectFileListChanges(project); }, 250); + }; + ProjectService.prototype.handleProjectFileListChanges = function (project) { + var _this = this; + var projectOptions = this.configFileToProjectOptions(project.projectFilename).projectOptions; + var newRootFiles = projectOptions.files.map((function (f) { return _this.getCanonicalFileName(f); })); + var currentRootFiles = project.getRootFiles().map((function (f) { return _this.getCanonicalFileName(f); })); + if (!ts.arrayIsEqualTo(currentRootFiles && currentRootFiles.sort(), newRootFiles && newRootFiles.sort())) { + this.updateConfiguredProject(project); + this.updateProjectStructure(); + } + }; + ProjectService.prototype.directoryWatchedForTsconfigChanged = function (fileName) { + var _this = this; + if (ts.getBaseFileName(fileName) != "tsconfig.json") { + this.log(fileName + " is not tsconfig.json"); + return; + } + this.log("Detected newly added tsconfig file: " + fileName); + var projectOptions = this.configFileToProjectOptions(fileName).projectOptions; + var rootFilesInTsconfig = projectOptions.files.map(function (f) { return _this.getCanonicalFileName(f); }); + var openFileRoots = this.openFileRoots.map(function (s) { return _this.getCanonicalFileName(s.fileName); }); + for (var _i = 0, openFileRoots_1 = openFileRoots; _i < openFileRoots_1.length; _i++) { + var openFileRoot = openFileRoots_1[_i]; + if (rootFilesInTsconfig.indexOf(openFileRoot) >= 0) { + this.reloadProjects(); + return; + } + } + }; + ProjectService.prototype.getCanonicalFileName = function (fileName) { + var name = this.host.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); + return ts.normalizePath(name); + }; + ProjectService.prototype.watchedProjectConfigFileChanged = function (project) { + this.log("Config file changed: " + project.projectFilename); + this.updateConfiguredProject(project); + this.updateProjectStructure(); + }; + ProjectService.prototype.log = function (msg, type) { + if (type === void 0) { type = "Err"; } + this.psLogger.msg(msg, type); + }; + ProjectService.prototype.setHostConfiguration = function (args) { + if (args.file) { + var info = this.filenameToScriptInfo[args.file]; + if (info) { + info.setFormatOptions(args.formatOptions); + this.log("Host configuration update for file " + args.file, "Info"); + } + } + else { + if (args.hostInfo !== undefined) { + this.hostConfiguration.hostInfo = args.hostInfo; + this.log("Host information " + args.hostInfo, "Info"); + } + if (args.formatOptions) { + mergeFormatOptions(this.hostConfiguration.formatCodeOptions, args.formatOptions); + this.log("Format host information updated", "Info"); + } + } + }; + ProjectService.prototype.closeLog = function () { + this.psLogger.close(); + }; + ProjectService.prototype.createInferredProject = function (root) { + var _this = this; + var project = new Project(this); + project.addRoot(root); + var currentPath = ts.getDirectoryPath(root.fileName); + var parentPath = ts.getDirectoryPath(currentPath); + while (currentPath != parentPath) { + if (!project.projectService.directoryWatchersForTsconfig[currentPath]) { + this.log("Add watcher for: " + currentPath); + project.projectService.directoryWatchersForTsconfig[currentPath] = + this.host.watchDirectory(currentPath, function (fileName) { return _this.directoryWatchedForTsconfigChanged(fileName); }); + project.projectService.directoryWatchersRefCount[currentPath] = 1; + } + else { + project.projectService.directoryWatchersRefCount[currentPath] += 1; + } + project.directoriesWatchedForTsconfig.push(currentPath); + currentPath = parentPath; + parentPath = ts.getDirectoryPath(parentPath); + } + project.finishGraph(); + this.inferredProjects.push(project); + return project; + }; + ProjectService.prototype.fileDeletedInFilesystem = function (info) { + this.psLogger.info(info.fileName + " deleted"); + if (info.fileWatcher) { + info.fileWatcher.close(); + info.fileWatcher = undefined; + } + if (!info.isOpen) { + this.filenameToScriptInfo[info.fileName] = undefined; + var referencingProjects = this.findReferencingProjects(info); + if (info.defaultProject) { + info.defaultProject.removeRoot(info); + } + for (var i = 0, len = referencingProjects.length; i < len; i++) { + referencingProjects[i].removeReferencedFile(info); + } + for (var j = 0, flen = this.openFileRoots.length; j < flen; j++) { + var openFile = this.openFileRoots[j]; + if (this.eventHandler) { + this.eventHandler("context", openFile.defaultProject, openFile.fileName); + } + } + for (var j = 0, flen = this.openFilesReferenced.length; j < flen; j++) { + var openFile = this.openFilesReferenced[j]; + if (this.eventHandler) { + this.eventHandler("context", openFile.defaultProject, openFile.fileName); + } + } + } + this.printProjects(); + }; + ProjectService.prototype.updateConfiguredProjectList = function () { + var configuredProjects = []; + for (var i = 0, len = this.configuredProjects.length; i < len; i++) { + if (this.configuredProjects[i].openRefCount > 0) { + configuredProjects.push(this.configuredProjects[i]); + } + } + this.configuredProjects = configuredProjects; + }; + ProjectService.prototype.removeProject = function (project) { + this.log("remove project: " + project.getRootFiles().toString()); + if (project.isConfiguredProject()) { + project.projectFileWatcher.close(); + project.directoryWatcher.close(); + this.configuredProjects = copyListRemovingItem(project, this.configuredProjects); + } + else { + for (var _i = 0, _a = project.directoriesWatchedForTsconfig; _i < _a.length; _i++) { + var directory = _a[_i]; + project.projectService.directoryWatchersRefCount[directory]--; + if (!project.projectService.directoryWatchersRefCount[directory]) { + this.log("Close directory watcher for: " + directory); + project.projectService.directoryWatchersForTsconfig[directory].close(); + delete project.projectService.directoryWatchersForTsconfig[directory]; + } + } + this.inferredProjects = copyListRemovingItem(project, this.inferredProjects); + } + var fileNames = project.getFileNames(); + for (var _b = 0, fileNames_2 = fileNames; _b < fileNames_2.length; _b++) { + var fileName = fileNames_2[_b]; + var info = this.getScriptInfo(fileName); + if (info.defaultProject == project) { + info.defaultProject = undefined; + } + } + }; + ProjectService.prototype.setConfiguredProjectRoot = function (info) { + for (var i = 0, len = this.configuredProjects.length; i < len; i++) { + var configuredProject = this.configuredProjects[i]; + if (configuredProject.isRoot(info)) { + info.defaultProject = configuredProject; + configuredProject.addOpenRef(); + return true; + } + } + return false; + }; + ProjectService.prototype.addOpenFile = function (info) { + if (this.setConfiguredProjectRoot(info)) { + this.openFileRootsConfigured.push(info); + } + else { + this.findReferencingProjects(info); + if (info.defaultProject) { + this.openFilesReferenced.push(info); + } + else { + info.defaultProject = this.createInferredProject(info); + var openFileRoots = []; + for (var i = 0, len = this.openFileRoots.length; i < len; i++) { + var r = this.openFileRoots[i]; + if (info.defaultProject.getSourceFile(r)) { + this.removeProject(r.defaultProject); + this.openFilesReferenced.push(r); + r.defaultProject = info.defaultProject; + } + else { + openFileRoots.push(r); + } + } + this.openFileRoots = openFileRoots; + this.openFileRoots.push(info); + } + } + this.updateConfiguredProjectList(); + }; + ProjectService.prototype.closeOpenFile = function (info) { + info.svc.reloadFromFile(info.fileName); + var openFileRoots = []; + var removedProject; + for (var i = 0, len = this.openFileRoots.length; i < len; i++) { + if (info === this.openFileRoots[i]) { + removedProject = info.defaultProject; + } + else { + openFileRoots.push(this.openFileRoots[i]); + } + } + this.openFileRoots = openFileRoots; + if (!removedProject) { + var openFileRootsConfigured = []; + for (var i = 0, len = this.openFileRootsConfigured.length; i < len; i++) { + if (info === this.openFileRootsConfigured[i]) { + if (info.defaultProject.deleteOpenRef() === 0) { + removedProject = info.defaultProject; + } + } + else { + openFileRootsConfigured.push(this.openFileRootsConfigured[i]); + } + } + this.openFileRootsConfigured = openFileRootsConfigured; + } + if (removedProject) { + this.removeProject(removedProject); + var openFilesReferenced = []; + var orphanFiles = []; + for (var i = 0, len = this.openFilesReferenced.length; i < len; i++) { + var f = this.openFilesReferenced[i]; + if (f.defaultProject === removedProject || !f.defaultProject) { + f.defaultProject = undefined; + orphanFiles.push(f); + } + else { + openFilesReferenced.push(f); + } + } + this.openFilesReferenced = openFilesReferenced; + for (var i = 0, len = orphanFiles.length; i < len; i++) { + this.addOpenFile(orphanFiles[i]); + } + } + else { + this.openFilesReferenced = copyListRemovingItem(info, this.openFilesReferenced); + } + info.close(); + }; + ProjectService.prototype.findReferencingProjects = function (info, excludedProject) { + var referencingProjects = []; + info.defaultProject = undefined; + for (var i = 0, len = this.inferredProjects.length; i < len; i++) { + var inferredProject = this.inferredProjects[i]; + inferredProject.updateGraph(); + if (inferredProject !== excludedProject) { + if (inferredProject.getSourceFile(info)) { + info.defaultProject = inferredProject; + referencingProjects.push(inferredProject); + } + } + } + for (var i = 0, len = this.configuredProjects.length; i < len; i++) { + var configuredProject = this.configuredProjects[i]; + configuredProject.updateGraph(); + if (configuredProject.getSourceFile(info)) { + info.defaultProject = configuredProject; + referencingProjects.push(configuredProject); + } + } + return referencingProjects; + }; + ProjectService.prototype.reloadProjects = function () { + this.log("reload projects."); + for (var _i = 0, _a = this.openFileRoots; _i < _a.length; _i++) { + var info = _a[_i]; + this.openOrUpdateConfiguredProjectForFile(info.fileName); + } + this.updateProjectStructure(); + }; + ProjectService.prototype.updateProjectStructure = function () { + this.log("updating project structure from ...", "Info"); + this.printProjects(); + var unattachedOpenFiles = []; + var openFileRootsConfigured = []; + for (var _i = 0, _a = this.openFileRootsConfigured; _i < _a.length; _i++) { + var info = _a[_i]; + var project = info.defaultProject; + if (!project || !(project.getSourceFile(info))) { + info.defaultProject = undefined; + unattachedOpenFiles.push(info); + } + else { + openFileRootsConfigured.push(info); + } + } + this.openFileRootsConfigured = openFileRootsConfigured; + var openFilesReferenced = []; + for (var i = 0, len = this.openFilesReferenced.length; i < len; i++) { + var referencedFile = this.openFilesReferenced[i]; + referencedFile.defaultProject.updateGraph(); + var sourceFile = referencedFile.defaultProject.getSourceFile(referencedFile); + if (sourceFile) { + openFilesReferenced.push(referencedFile); + } + else { + unattachedOpenFiles.push(referencedFile); + } + } + this.openFilesReferenced = openFilesReferenced; + var openFileRoots = []; + for (var i = 0, len = this.openFileRoots.length; i < len; i++) { + var rootFile = this.openFileRoots[i]; + var rootedProject = rootFile.defaultProject; + var referencingProjects = this.findReferencingProjects(rootFile, rootedProject); + if (rootFile.defaultProject && rootFile.defaultProject.isConfiguredProject()) { + if (!rootedProject.isConfiguredProject()) { + this.removeProject(rootedProject); + } + this.openFileRootsConfigured.push(rootFile); + } + else { + if (referencingProjects.length === 0) { + rootFile.defaultProject = rootedProject; + openFileRoots.push(rootFile); + } + else { + this.removeProject(rootedProject); + this.openFilesReferenced.push(rootFile); + } + } + } + this.openFileRoots = openFileRoots; + for (var i = 0, len = unattachedOpenFiles.length; i < len; i++) { + this.addOpenFile(unattachedOpenFiles[i]); + } + this.printProjects(); + }; + ProjectService.prototype.getScriptInfo = function (filename) { + filename = ts.normalizePath(filename); + return ts.lookUp(this.filenameToScriptInfo, filename); + }; + ProjectService.prototype.openFile = function (fileName, openedByClient, fileContent, scriptKind) { + var _this = this; + fileName = ts.normalizePath(fileName); + var info = ts.lookUp(this.filenameToScriptInfo, fileName); + if (!info) { + var content = void 0; + if (this.host.fileExists(fileName)) { + content = fileContent || this.host.readFile(fileName); + } + if (!content) { + if (openedByClient) { + content = ""; + } + } + if (content !== undefined) { + info = new ScriptInfo(this.host, fileName, content, openedByClient); + info.scriptKind = scriptKind; + info.setFormatOptions(this.getFormatCodeOptions()); + this.filenameToScriptInfo[fileName] = info; + if (!info.isOpen) { + info.fileWatcher = this.host.watchFile(fileName, function (_) { _this.watchedFileChanged(fileName); }); + } + } + } + if (info) { + if (fileContent) { + info.svc.reload(fileContent); + } + if (openedByClient) { + info.isOpen = true; + } + } + return info; + }; + ProjectService.prototype.findConfigFile = function (searchPath) { + while (true) { + var tsconfigFileName = ts.combinePaths(searchPath, "tsconfig.json"); + if (this.host.fileExists(tsconfigFileName)) { + return tsconfigFileName; + } + var jsconfigFileName = ts.combinePaths(searchPath, "jsconfig.json"); + if (this.host.fileExists(jsconfigFileName)) { + return jsconfigFileName; + } + var parentPath = ts.getDirectoryPath(searchPath); + if (parentPath === searchPath) { + break; + } + searchPath = parentPath; + } + return undefined; + }; + ProjectService.prototype.openClientFile = function (fileName, fileContent, scriptKind) { + var _a = this.openOrUpdateConfiguredProjectForFile(fileName), configFileName = _a.configFileName, configFileErrors = _a.configFileErrors; + var info = this.openFile(fileName, true, fileContent, scriptKind); + this.addOpenFile(info); + this.printProjects(); + return { configFileName: configFileName, configFileErrors: configFileErrors }; + }; + ProjectService.prototype.openOrUpdateConfiguredProjectForFile = function (fileName) { + var searchPath = ts.normalizePath(ts.getDirectoryPath(fileName)); + this.log("Search path: " + searchPath, "Info"); + var configFileName = this.findConfigFile(searchPath); + if (configFileName) { + this.log("Config file name: " + configFileName, "Info"); + var project = this.findConfiguredProjectByConfigFile(configFileName); + if (!project) { + var configResult = this.openConfigFile(configFileName, fileName); + if (!configResult.success) { + return { configFileName: configFileName, configFileErrors: configResult.errors }; + } + else { + this.log("Opened configuration file " + configFileName, "Info"); + this.configuredProjects.push(configResult.project); + if (configResult.errors && configResult.errors.length > 0) { + return { configFileName: configFileName, configFileErrors: configResult.errors }; + } + } + } + else { + this.updateConfiguredProject(project); + } + } + else { + this.log("No config files found."); + } + return {}; + }; + ProjectService.prototype.closeClientFile = function (filename) { + var info = ts.lookUp(this.filenameToScriptInfo, filename); + if (info) { + this.closeOpenFile(info); + info.isOpen = false; + } + this.printProjects(); + }; + ProjectService.prototype.getProjectForFile = function (filename) { + var scriptInfo = ts.lookUp(this.filenameToScriptInfo, filename); + if (scriptInfo) { + return scriptInfo.defaultProject; + } + }; + ProjectService.prototype.printProjectsForFile = function (filename) { + var scriptInfo = ts.lookUp(this.filenameToScriptInfo, filename); + if (scriptInfo) { + this.psLogger.startGroup(); + this.psLogger.info("Projects for " + filename); + var projects = this.findReferencingProjects(scriptInfo); + for (var i = 0, len = projects.length; i < len; i++) { + this.psLogger.info("Project " + i.toString()); + } + this.psLogger.endGroup(); + } + else { + this.psLogger.info(filename + " not in any project"); + } + }; + ProjectService.prototype.printProjects = function () { + if (!this.psLogger.isVerbose()) { + return; + } + this.psLogger.startGroup(); + for (var i = 0, len = this.inferredProjects.length; i < len; i++) { + var project = this.inferredProjects[i]; + project.updateGraph(); + this.psLogger.info("Project " + i.toString()); + this.psLogger.info(project.filesToString()); + this.psLogger.info("-----------------------------------------------"); + } + for (var i = 0, len = this.configuredProjects.length; i < len; i++) { + var project = this.configuredProjects[i]; + project.updateGraph(); + this.psLogger.info("Project (configured) " + (i + this.inferredProjects.length).toString()); + this.psLogger.info(project.filesToString()); + this.psLogger.info("-----------------------------------------------"); + } + this.psLogger.info("Open file roots of inferred projects: "); + for (var i = 0, len = this.openFileRoots.length; i < len; i++) { + this.psLogger.info(this.openFileRoots[i].fileName); + } + this.psLogger.info("Open files referenced by inferred or configured projects: "); + for (var i = 0, len = this.openFilesReferenced.length; i < len; i++) { + var fileInfo = this.openFilesReferenced[i].fileName; + if (this.openFilesReferenced[i].defaultProject.isConfiguredProject()) { + fileInfo += " (configured)"; + } + this.psLogger.info(fileInfo); + } + this.psLogger.info("Open file roots of configured projects: "); + for (var i = 0, len = this.openFileRootsConfigured.length; i < len; i++) { + this.psLogger.info(this.openFileRootsConfigured[i].fileName); + } + this.psLogger.endGroup(); + }; + ProjectService.prototype.configProjectIsActive = function (fileName) { + return this.findConfiguredProjectByConfigFile(fileName) === undefined; + }; + ProjectService.prototype.findConfiguredProjectByConfigFile = function (configFileName) { + for (var i = 0, len = this.configuredProjects.length; i < len; i++) { + if (this.configuredProjects[i].projectFilename == configFileName) { + return this.configuredProjects[i]; + } + } + return undefined; + }; + ProjectService.prototype.configFileToProjectOptions = function (configFilename) { + configFilename = ts.normalizePath(configFilename); + var dirPath = ts.getDirectoryPath(configFilename); + var contents = this.host.readFile(configFilename); + var rawConfig = ts.parseConfigFileTextToJson(configFilename, contents); + if (rawConfig.error) { + return { succeeded: false, errors: [rawConfig.error] }; + } + else { + var parsedCommandLine = ts.parseJsonConfigFileContent(rawConfig.config, this.host, dirPath, {}, configFilename); + ts.Debug.assert(!!parsedCommandLine.fileNames); + if (parsedCommandLine.errors && (parsedCommandLine.errors.length > 0)) { + return { succeeded: false, errors: parsedCommandLine.errors }; + } + else if (parsedCommandLine.fileNames.length === 0) { + var error = ts.createCompilerDiagnostic(ts.Diagnostics.The_config_file_0_found_doesn_t_contain_any_source_files, configFilename); + return { succeeded: false, errors: [error] }; + } + else { + var projectOptions = { + files: parsedCommandLine.fileNames, + compilerOptions: parsedCommandLine.options + }; + return { succeeded: true, projectOptions: projectOptions }; + } + } + }; + ProjectService.prototype.openConfigFile = function (configFilename, clientFileName) { + var _this = this; + var _a = this.configFileToProjectOptions(configFilename), succeeded = _a.succeeded, projectOptions = _a.projectOptions, errors = _a.errors; + if (!succeeded) { + return { success: false, errors: errors }; + } + else { + var project_1 = this.createProject(configFilename, projectOptions); + var errors_1; + for (var _i = 0, _b = projectOptions.files; _i < _b.length; _i++) { + var rootFilename = _b[_i]; + if (this.host.fileExists(rootFilename)) { + var info = this.openFile(rootFilename, clientFileName == rootFilename); + project_1.addRoot(info); + } + else { + (errors_1 || (errors_1 = [])).push(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, rootFilename)); + } + } + project_1.finishGraph(); + project_1.projectFileWatcher = this.host.watchFile(configFilename, function (_) { return _this.watchedProjectConfigFileChanged(project_1); }); + this.log("Add recursive watcher for: " + ts.getDirectoryPath(configFilename)); + project_1.directoryWatcher = this.host.watchDirectory(ts.getDirectoryPath(configFilename), function (path) { return _this.directoryWatchedForSourceFilesChanged(project_1, path); }, true); + return { success: true, project: project_1, errors: errors_1 }; + } + }; + ProjectService.prototype.updateConfiguredProject = function (project) { + var _this = this; + if (!this.host.fileExists(project.projectFilename)) { + this.log("Config file deleted"); + this.removeProject(project); + } + else { + var _a = this.configFileToProjectOptions(project.projectFilename), succeeded = _a.succeeded, projectOptions = _a.projectOptions, errors = _a.errors; + if (!succeeded) { + return errors; + } + else { + var oldFileNames_1 = project.compilerService.host.roots.map(function (info) { return info.fileName; }); + var newFileNames_1 = ts.filter(projectOptions.files, function (f) { return _this.host.fileExists(f); }); + var fileNamesToRemove = oldFileNames_1.filter(function (f) { return newFileNames_1.indexOf(f) < 0; }); + var fileNamesToAdd = newFileNames_1.filter(function (f) { return oldFileNames_1.indexOf(f) < 0; }); + for (var _i = 0, fileNamesToRemove_1 = fileNamesToRemove; _i < fileNamesToRemove_1.length; _i++) { + var fileName = fileNamesToRemove_1[_i]; + var info = this.getScriptInfo(fileName); + if (info) { + project.removeRoot(info); + } + } + for (var _b = 0, fileNamesToAdd_1 = fileNamesToAdd; _b < fileNamesToAdd_1.length; _b++) { + var fileName = fileNamesToAdd_1[_b]; + var info = this.getScriptInfo(fileName); + if (!info) { + info = this.openFile(fileName, false); + } + else { + if (info.isOpen) { + if (this.openFileRoots.indexOf(info) >= 0) { + this.openFileRoots = copyListRemovingItem(info, this.openFileRoots); + if (info.defaultProject && !info.defaultProject.isConfiguredProject()) { + this.removeProject(info.defaultProject); + } + } + if (this.openFilesReferenced.indexOf(info) >= 0) { + this.openFilesReferenced = copyListRemovingItem(info, this.openFilesReferenced); + } + this.openFileRootsConfigured.push(info); + info.defaultProject = project; + } + } + project.addRoot(info); + } + project.setProjectOptions(projectOptions); + project.finishGraph(); + } + } + }; + ProjectService.prototype.createProject = function (projectFilename, projectOptions) { + var project = new Project(this, projectOptions); + project.projectFilename = projectFilename; + return project; + }; + return ProjectService; + }()); + server.ProjectService = ProjectService; + var CompilerService = (function () { + function CompilerService(project, opt) { + this.project = project; + this.documentRegistry = ts.createDocumentRegistry(); + this.host = new LSHost(project.projectService.host, project); + if (opt) { + this.setCompilerOptions(opt); + } + else { + var defaultOpts = ts.getDefaultCompilerOptions(); + defaultOpts.allowNonTsExtensions = true; + defaultOpts.allowJs = true; + this.setCompilerOptions(defaultOpts); + } + this.languageService = ts.createLanguageService(this.host, this.documentRegistry); + this.classifier = ts.createClassifier(); + } + CompilerService.prototype.setCompilerOptions = function (opt) { + this.settings = opt; + this.host.setCompilationSettings(opt); + }; + CompilerService.prototype.isExternalModule = function (filename) { + var sourceFile = this.languageService.getNonBoundSourceFile(filename); + return ts.isExternalModule(sourceFile); + }; + CompilerService.getDefaultFormatCodeOptions = function (host) { + return ts.clone({ + IndentSize: 4, + TabSize: 4, + NewLineCharacter: host.newLine || "\n", + ConvertTabsToSpaces: true, + IndentStyle: ts.IndentStyle.Smart, + InsertSpaceAfterCommaDelimiter: true, + InsertSpaceAfterSemicolonInForStatements: true, + InsertSpaceBeforeAndAfterBinaryOperators: true, + InsertSpaceAfterKeywordsInControlFlowStatements: true, + InsertSpaceAfterFunctionKeywordForAnonymousFunctions: false, + InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false, + InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false, + InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false, + PlaceOpenBraceOnNewLineForFunctions: false, + PlaceOpenBraceOnNewLineForControlBlocks: false + }); + }; + return CompilerService; + }()); + server.CompilerService = CompilerService; + (function (CharRangeSection) { + CharRangeSection[CharRangeSection["PreStart"] = 0] = "PreStart"; + CharRangeSection[CharRangeSection["Start"] = 1] = "Start"; + CharRangeSection[CharRangeSection["Entire"] = 2] = "Entire"; + CharRangeSection[CharRangeSection["Mid"] = 3] = "Mid"; + CharRangeSection[CharRangeSection["End"] = 4] = "End"; + CharRangeSection[CharRangeSection["PostEnd"] = 5] = "PostEnd"; + })(server.CharRangeSection || (server.CharRangeSection = {})); + var CharRangeSection = server.CharRangeSection; + var BaseLineIndexWalker = (function () { + function BaseLineIndexWalker() { + this.goSubtree = true; + this.done = false; + } + BaseLineIndexWalker.prototype.leaf = function (rangeStart, rangeLength, ll) { + }; + return BaseLineIndexWalker; + }()); + var EditWalker = (function (_super) { + __extends(EditWalker, _super); + function EditWalker() { + _super.call(this); + this.lineIndex = new LineIndex(); + this.endBranch = []; + this.state = CharRangeSection.Entire; + this.initialText = ""; + this.trailingText = ""; + this.suppressTrailingText = false; + this.lineIndex.root = new LineNode(); + this.startPath = [this.lineIndex.root]; + this.stack = [this.lineIndex.root]; + } + EditWalker.prototype.insertLines = function (insertedText) { + if (this.suppressTrailingText) { + this.trailingText = ""; + } + if (insertedText) { + insertedText = this.initialText + insertedText + this.trailingText; + } + else { + insertedText = this.initialText + this.trailingText; + } + var lm = LineIndex.linesFromText(insertedText); + var lines = lm.lines; + if (lines.length > 1) { + if (lines[lines.length - 1] == "") { + lines.length--; + } + } + var branchParent; + var lastZeroCount; + for (var k = this.endBranch.length - 1; k >= 0; k--) { + this.endBranch[k].updateCounts(); + if (this.endBranch[k].charCount() === 0) { + lastZeroCount = this.endBranch[k]; + if (k > 0) { + branchParent = this.endBranch[k - 1]; + } + else { + branchParent = this.branchNode; + } + } + } + if (lastZeroCount) { + branchParent.remove(lastZeroCount); + } + var insertionNode = this.startPath[this.startPath.length - 2]; + var leafNode = this.startPath[this.startPath.length - 1]; + var len = lines.length; + if (len > 0) { + leafNode.text = lines[0]; + if (len > 1) { + var insertedNodes = new Array(len - 1); + var startNode = leafNode; + for (var i = 1, len_1 = lines.length; i < len_1; i++) { + insertedNodes[i - 1] = new LineLeaf(lines[i]); + } + var pathIndex = this.startPath.length - 2; + while (pathIndex >= 0) { + insertionNode = this.startPath[pathIndex]; + insertedNodes = insertionNode.insertAt(startNode, insertedNodes); + pathIndex--; + startNode = insertionNode; + } + var insertedNodesLen = insertedNodes.length; + while (insertedNodesLen > 0) { + var newRoot = new LineNode(); + newRoot.add(this.lineIndex.root); + insertedNodes = newRoot.insertAt(this.lineIndex.root, insertedNodes); + insertedNodesLen = insertedNodes.length; + this.lineIndex.root = newRoot; + } + this.lineIndex.root.updateCounts(); + } + else { + for (var j = this.startPath.length - 2; j >= 0; j--) { + this.startPath[j].updateCounts(); + } + } + } + else { + insertionNode.remove(leafNode); + for (var j = this.startPath.length - 2; j >= 0; j--) { + this.startPath[j].updateCounts(); + } + } + return this.lineIndex; + }; + EditWalker.prototype.post = function (relativeStart, relativeLength, lineCollection, parent, nodeType) { + if (lineCollection === this.lineCollectionAtBranch) { + this.state = CharRangeSection.End; + } + this.stack.length--; + return undefined; + }; + EditWalker.prototype.pre = function (relativeStart, relativeLength, lineCollection, parent, nodeType) { + var currentNode = this.stack[this.stack.length - 1]; + if ((this.state === CharRangeSection.Entire) && (nodeType === CharRangeSection.Start)) { + this.state = CharRangeSection.Start; + this.branchNode = currentNode; + this.lineCollectionAtBranch = lineCollection; + } + var child; + function fresh(node) { + if (node.isLeaf()) { + return new LineLeaf(""); + } + else + return new LineNode(); + } + switch (nodeType) { + case CharRangeSection.PreStart: + this.goSubtree = false; + if (this.state !== CharRangeSection.End) { + currentNode.add(lineCollection); + } + break; + case CharRangeSection.Start: + if (this.state === CharRangeSection.End) { + this.goSubtree = false; + } + else { + child = fresh(lineCollection); + currentNode.add(child); + this.startPath[this.startPath.length] = child; + } + break; + case CharRangeSection.Entire: + if (this.state !== CharRangeSection.End) { + child = fresh(lineCollection); + currentNode.add(child); + this.startPath[this.startPath.length] = child; + } + else { + if (!lineCollection.isLeaf()) { + child = fresh(lineCollection); + currentNode.add(child); + this.endBranch[this.endBranch.length] = child; + } + } + break; + case CharRangeSection.Mid: + this.goSubtree = false; + break; + case CharRangeSection.End: + if (this.state !== CharRangeSection.End) { + this.goSubtree = false; + } + else { + if (!lineCollection.isLeaf()) { + child = fresh(lineCollection); + currentNode.add(child); + this.endBranch[this.endBranch.length] = child; + } + } + break; + case CharRangeSection.PostEnd: + this.goSubtree = false; + if (this.state !== CharRangeSection.Start) { + currentNode.add(lineCollection); + } + break; + } + if (this.goSubtree) { + this.stack[this.stack.length] = child; + } + return lineCollection; + }; + EditWalker.prototype.leaf = function (relativeStart, relativeLength, ll) { + if (this.state === CharRangeSection.Start) { + this.initialText = ll.text.substring(0, relativeStart); + } + else if (this.state === CharRangeSection.Entire) { + this.initialText = ll.text.substring(0, relativeStart); + this.trailingText = ll.text.substring(relativeStart + relativeLength); + } + else { + this.trailingText = ll.text.substring(relativeStart + relativeLength); + } + }; + return EditWalker; + }(BaseLineIndexWalker)); + var TextChange = (function () { + function TextChange(pos, deleteLen, insertedText) { + this.pos = pos; + this.deleteLen = deleteLen; + this.insertedText = insertedText; + } + TextChange.prototype.getTextChangeRange = function () { + return ts.createTextChangeRange(ts.createTextSpan(this.pos, this.deleteLen), this.insertedText ? this.insertedText.length : 0); + }; + return TextChange; + }()); + server.TextChange = TextChange; + var ScriptVersionCache = (function () { + function ScriptVersionCache() { + this.changes = []; + this.versions = []; + this.minVersion = 0; + this.currentVersion = 0; + } + ScriptVersionCache.prototype.edit = function (pos, deleteLen, insertedText) { + this.changes[this.changes.length] = new TextChange(pos, deleteLen, insertedText); + if ((this.changes.length > ScriptVersionCache.changeNumberThreshold) || + (deleteLen > ScriptVersionCache.changeLengthThreshold) || + (insertedText && (insertedText.length > ScriptVersionCache.changeLengthThreshold))) { + this.getSnapshot(); + } + }; + ScriptVersionCache.prototype.latest = function () { + return this.versions[this.currentVersion]; + }; + ScriptVersionCache.prototype.latestVersion = function () { + if (this.changes.length > 0) { + this.getSnapshot(); + } + return this.currentVersion; + }; + ScriptVersionCache.prototype.reloadFromFile = function (filename, cb) { + var content = this.host.readFile(filename); + if (!content) { + content = ""; + } + this.reload(content); + if (cb) + cb(); + }; + ScriptVersionCache.prototype.reload = function (script) { + this.currentVersion++; + this.changes = []; + var snap = new LineIndexSnapshot(this.currentVersion, this); + this.versions[this.currentVersion] = snap; + snap.index = new LineIndex(); + var lm = LineIndex.linesFromText(script); + snap.index.load(lm.lines); + for (var i = this.minVersion; i < this.currentVersion; i++) { + this.versions[i] = undefined; + } + this.minVersion = this.currentVersion; + }; + ScriptVersionCache.prototype.getSnapshot = function () { + var snap = this.versions[this.currentVersion]; + if (this.changes.length > 0) { + var snapIndex = this.latest().index; + for (var i = 0, len = this.changes.length; i < len; i++) { + var change = this.changes[i]; + snapIndex = snapIndex.edit(change.pos, change.deleteLen, change.insertedText); + } + snap = new LineIndexSnapshot(this.currentVersion + 1, this); + snap.index = snapIndex; + snap.changesSincePreviousVersion = this.changes; + this.currentVersion = snap.version; + this.versions[snap.version] = snap; + this.changes = []; + if ((this.currentVersion - this.minVersion) >= ScriptVersionCache.maxVersions) { + var oldMin = this.minVersion; + this.minVersion = (this.currentVersion - ScriptVersionCache.maxVersions) + 1; + for (var j = oldMin; j < this.minVersion; j++) { + this.versions[j] = undefined; + } + } + } + return snap; + }; + ScriptVersionCache.prototype.getTextChangesBetweenVersions = function (oldVersion, newVersion) { + if (oldVersion < newVersion) { + if (oldVersion >= this.minVersion) { + var textChangeRanges = []; + for (var i = oldVersion + 1; i <= newVersion; i++) { + var snap = this.versions[i]; + for (var j = 0, len = snap.changesSincePreviousVersion.length; j < len; j++) { + var textChange = snap.changesSincePreviousVersion[j]; + textChangeRanges[textChangeRanges.length] = textChange.getTextChangeRange(); + } + } + return ts.collapseTextChangeRangesAcrossMultipleVersions(textChangeRanges); + } + else { + return undefined; + } + } + else { + return ts.unchangedTextChangeRange; + } + }; + ScriptVersionCache.fromString = function (host, script) { + var svc = new ScriptVersionCache(); + var snap = new LineIndexSnapshot(0, svc); + svc.versions[svc.currentVersion] = snap; + svc.host = host; + snap.index = new LineIndex(); + var lm = LineIndex.linesFromText(script); + snap.index.load(lm.lines); + return svc; + }; + ScriptVersionCache.changeNumberThreshold = 8; + ScriptVersionCache.changeLengthThreshold = 256; + ScriptVersionCache.maxVersions = 8; + return ScriptVersionCache; + }()); + server.ScriptVersionCache = ScriptVersionCache; + var LineIndexSnapshot = (function () { + function LineIndexSnapshot(version, cache) { + this.version = version; + this.cache = cache; + this.changesSincePreviousVersion = []; + } + LineIndexSnapshot.prototype.getText = function (rangeStart, rangeEnd) { + return this.index.getText(rangeStart, rangeEnd - rangeStart); + }; + LineIndexSnapshot.prototype.getLength = function () { + return this.index.root.charCount(); + }; + LineIndexSnapshot.prototype.getLineStartPositions = function () { + var starts = [-1]; + var count = 1; + var pos = 0; + this.index.every(function (ll, s, len) { + starts[count] = pos; + count++; + pos += ll.text.length; + return true; + }, 0); + return starts; + }; + LineIndexSnapshot.prototype.getLineMapper = function () { + var _this = this; + return function (line) { + return _this.index.lineNumberToInfo(line).offset; + }; + }; + LineIndexSnapshot.prototype.getTextChangeRangeSinceVersion = function (scriptVersion) { + if (this.version <= scriptVersion) { + return ts.unchangedTextChangeRange; + } + else { + return this.cache.getTextChangesBetweenVersions(scriptVersion, this.version); + } + }; + LineIndexSnapshot.prototype.getChangeRange = function (oldSnapshot) { + var oldSnap = oldSnapshot; + return this.getTextChangeRangeSinceVersion(oldSnap.version); + }; + return LineIndexSnapshot; + }()); + server.LineIndexSnapshot = LineIndexSnapshot; + var LineIndex = (function () { + function LineIndex() { + this.checkEdits = false; + } + LineIndex.prototype.charOffsetToLineNumberAndPos = function (charOffset) { + return this.root.charOffsetToLineNumberAndPos(1, charOffset); + }; + LineIndex.prototype.lineNumberToInfo = function (lineNumber) { + var lineCount = this.root.lineCount(); + if (lineNumber <= lineCount) { + var lineInfo = this.root.lineNumberToInfo(lineNumber, 0); + lineInfo.line = lineNumber; + return lineInfo; + } + else { + return { + line: lineNumber, + offset: this.root.charCount() + }; + } + }; + LineIndex.prototype.load = function (lines) { + if (lines.length > 0) { + var leaves = []; + for (var i = 0, len = lines.length; i < len; i++) { + leaves[i] = new LineLeaf(lines[i]); + } + this.root = LineIndex.buildTreeFromBottom(leaves); + } + else { + this.root = new LineNode(); + } + }; + LineIndex.prototype.walk = function (rangeStart, rangeLength, walkFns) { + this.root.walk(rangeStart, rangeLength, walkFns); + }; + LineIndex.prototype.getText = function (rangeStart, rangeLength) { + var accum = ""; + if ((rangeLength > 0) && (rangeStart < this.root.charCount())) { + this.walk(rangeStart, rangeLength, { + goSubtree: true, + done: false, + leaf: function (relativeStart, relativeLength, ll) { + accum = accum.concat(ll.text.substring(relativeStart, relativeStart + relativeLength)); + } + }); + } + return accum; + }; + LineIndex.prototype.getLength = function () { + return this.root.charCount(); + }; + LineIndex.prototype.every = function (f, rangeStart, rangeEnd) { + if (!rangeEnd) { + rangeEnd = this.root.charCount(); + } + var walkFns = { + goSubtree: true, + done: false, + leaf: function (relativeStart, relativeLength, ll) { + if (!f(ll, relativeStart, relativeLength)) { + this.done = true; + } + } + }; + this.walk(rangeStart, rangeEnd - rangeStart, walkFns); + return !walkFns.done; + }; + LineIndex.prototype.edit = function (pos, deleteLength, newText) { + function editFlat(source, s, dl, nt) { + if (nt === void 0) { nt = ""; } + return source.substring(0, s) + nt + source.substring(s + dl, source.length); + } + if (this.root.charCount() === 0) { + if (newText) { + this.load(LineIndex.linesFromText(newText).lines); + return this; + } + } + else { + var checkText = void 0; + if (this.checkEdits) { + checkText = editFlat(this.getText(0, this.root.charCount()), pos, deleteLength, newText); + } + var walker = new EditWalker(); + if (pos >= this.root.charCount()) { + pos = this.root.charCount() - 1; + var endString = this.getText(pos, 1); + if (newText) { + newText = endString + newText; + } + else { + newText = endString; + } + deleteLength = 0; + walker.suppressTrailingText = true; + } + else if (deleteLength > 0) { + var e = pos + deleteLength; + var lineInfo = this.charOffsetToLineNumberAndPos(e); + if ((lineInfo && (lineInfo.offset === 0))) { + deleteLength += lineInfo.text.length; + if (newText) { + newText = newText + lineInfo.text; + } + else { + newText = lineInfo.text; + } + } + } + if (pos < this.root.charCount()) { + this.root.walk(pos, deleteLength, walker); + walker.insertLines(newText); + } + if (this.checkEdits) { + var updatedText = this.getText(0, this.root.charCount()); + ts.Debug.assert(checkText == updatedText, "buffer edit mismatch"); + } + return walker.lineIndex; + } + }; + LineIndex.buildTreeFromBottom = function (nodes) { + var nodeCount = Math.ceil(nodes.length / lineCollectionCapacity); + var interiorNodes = []; + var nodeIndex = 0; + for (var i = 0; i < nodeCount; i++) { + interiorNodes[i] = new LineNode(); + var charCount = 0; + var lineCount = 0; + for (var j = 0; j < lineCollectionCapacity; j++) { + if (nodeIndex < nodes.length) { + interiorNodes[i].add(nodes[nodeIndex]); + charCount += nodes[nodeIndex].charCount(); + lineCount += nodes[nodeIndex].lineCount(); + } + else { + break; + } + nodeIndex++; + } + interiorNodes[i].totalChars = charCount; + interiorNodes[i].totalLines = lineCount; + } + if (interiorNodes.length === 1) { + return interiorNodes[0]; + } + else { + return this.buildTreeFromBottom(interiorNodes); + } + }; + LineIndex.linesFromText = function (text) { + var lineStarts = ts.computeLineStarts(text); + if (lineStarts.length === 0) { + return { lines: [], lineMap: lineStarts }; + } + var lines = new Array(lineStarts.length); + var lc = lineStarts.length - 1; + for (var lmi = 0; lmi < lc; lmi++) { + lines[lmi] = text.substring(lineStarts[lmi], lineStarts[lmi + 1]); + } + var endText = text.substring(lineStarts[lc]); + if (endText.length > 0) { + lines[lc] = endText; + } + else { + lines.length--; + } + return { lines: lines, lineMap: lineStarts }; + }; + return LineIndex; + }()); + server.LineIndex = LineIndex; + var LineNode = (function () { + function LineNode() { + this.totalChars = 0; + this.totalLines = 0; + this.children = []; + } + LineNode.prototype.isLeaf = function () { + return false; + }; + LineNode.prototype.updateCounts = function () { + this.totalChars = 0; + this.totalLines = 0; + for (var i = 0, len = this.children.length; i < len; i++) { + var child = this.children[i]; + this.totalChars += child.charCount(); + this.totalLines += child.lineCount(); + } + }; + LineNode.prototype.execWalk = function (rangeStart, rangeLength, walkFns, childIndex, nodeType) { + if (walkFns.pre) { + walkFns.pre(rangeStart, rangeLength, this.children[childIndex], this, nodeType); + } + if (walkFns.goSubtree) { + this.children[childIndex].walk(rangeStart, rangeLength, walkFns); + if (walkFns.post) { + walkFns.post(rangeStart, rangeLength, this.children[childIndex], this, nodeType); + } + } + else { + walkFns.goSubtree = true; + } + return walkFns.done; + }; + LineNode.prototype.skipChild = function (relativeStart, relativeLength, childIndex, walkFns, nodeType) { + if (walkFns.pre && (!walkFns.done)) { + walkFns.pre(relativeStart, relativeLength, this.children[childIndex], this, nodeType); + walkFns.goSubtree = true; + } + }; + LineNode.prototype.walk = function (rangeStart, rangeLength, walkFns) { + var childIndex = 0; + var child = this.children[0]; + var childCharCount = child.charCount(); + var adjustedStart = rangeStart; + while (adjustedStart >= childCharCount) { + this.skipChild(adjustedStart, rangeLength, childIndex, walkFns, CharRangeSection.PreStart); + adjustedStart -= childCharCount; + childIndex++; + child = this.children[childIndex]; + childCharCount = child.charCount(); + } + if ((adjustedStart + rangeLength) <= childCharCount) { + if (this.execWalk(adjustedStart, rangeLength, walkFns, childIndex, CharRangeSection.Entire)) { + return; + } + } + else { + if (this.execWalk(adjustedStart, childCharCount - adjustedStart, walkFns, childIndex, CharRangeSection.Start)) { + return; + } + var adjustedLength = rangeLength - (childCharCount - adjustedStart); + childIndex++; + child = this.children[childIndex]; + childCharCount = child.charCount(); + while (adjustedLength > childCharCount) { + if (this.execWalk(0, childCharCount, walkFns, childIndex, CharRangeSection.Mid)) { + return; + } + adjustedLength -= childCharCount; + childIndex++; + child = this.children[childIndex]; + childCharCount = child.charCount(); + } + if (adjustedLength > 0) { + if (this.execWalk(0, adjustedLength, walkFns, childIndex, CharRangeSection.End)) { + return; + } + } + } + if (walkFns.pre) { + var clen = this.children.length; + if (childIndex < (clen - 1)) { + for (var ej = childIndex + 1; ej < clen; ej++) { + this.skipChild(0, 0, ej, walkFns, CharRangeSection.PostEnd); + } + } + } + }; + LineNode.prototype.charOffsetToLineNumberAndPos = function (lineNumber, charOffset) { + var childInfo = this.childFromCharOffset(lineNumber, charOffset); + if (!childInfo.child) { + return { + line: lineNumber, + offset: charOffset + }; + } + else if (childInfo.childIndex < this.children.length) { + if (childInfo.child.isLeaf()) { + return { + line: childInfo.lineNumber, + offset: childInfo.charOffset, + text: (childInfo.child).text, + leaf: (childInfo.child) + }; + } + else { + var lineNode = (childInfo.child); + return lineNode.charOffsetToLineNumberAndPos(childInfo.lineNumber, childInfo.charOffset); + } + } + else { + var lineInfo = this.lineNumberToInfo(this.lineCount(), 0); + return { line: this.lineCount(), offset: lineInfo.leaf.charCount() }; + } + }; + LineNode.prototype.lineNumberToInfo = function (lineNumber, charOffset) { + var childInfo = this.childFromLineNumber(lineNumber, charOffset); + if (!childInfo.child) { + return { + line: lineNumber, + offset: charOffset + }; + } + else if (childInfo.child.isLeaf()) { + return { + line: lineNumber, + offset: childInfo.charOffset, + text: (childInfo.child).text, + leaf: (childInfo.child) + }; + } + else { + var lineNode = (childInfo.child); + return lineNode.lineNumberToInfo(childInfo.relativeLineNumber, childInfo.charOffset); + } + }; + LineNode.prototype.childFromLineNumber = function (lineNumber, charOffset) { + var child; + var relativeLineNumber = lineNumber; + var i; + var len; + for (i = 0, len = this.children.length; i < len; i++) { + child = this.children[i]; + var childLineCount = child.lineCount(); + if (childLineCount >= relativeLineNumber) { + break; + } + else { + relativeLineNumber -= childLineCount; + charOffset += child.charCount(); + } + } + return { + child: child, + childIndex: i, + relativeLineNumber: relativeLineNumber, + charOffset: charOffset + }; + }; + LineNode.prototype.childFromCharOffset = function (lineNumber, charOffset) { + var child; + var i; + var len; + for (i = 0, len = this.children.length; i < len; i++) { + child = this.children[i]; + if (child.charCount() > charOffset) { + break; + } + else { + charOffset -= child.charCount(); + lineNumber += child.lineCount(); + } + } + return { + child: child, + childIndex: i, + charOffset: charOffset, + lineNumber: lineNumber + }; + }; + LineNode.prototype.splitAfter = function (childIndex) { + var splitNode; + var clen = this.children.length; + childIndex++; + var endLength = childIndex; + if (childIndex < clen) { + splitNode = new LineNode(); + while (childIndex < clen) { + splitNode.add(this.children[childIndex]); + childIndex++; + } + splitNode.updateCounts(); + } + this.children.length = endLength; + return splitNode; + }; + LineNode.prototype.remove = function (child) { + var childIndex = this.findChildIndex(child); + var clen = this.children.length; + if (childIndex < (clen - 1)) { + for (var i = childIndex; i < (clen - 1); i++) { + this.children[i] = this.children[i + 1]; + } + } + this.children.length--; + }; + LineNode.prototype.findChildIndex = function (child) { + var childIndex = 0; + var clen = this.children.length; + while ((this.children[childIndex] !== child) && (childIndex < clen)) + childIndex++; + return childIndex; + }; + LineNode.prototype.insertAt = function (child, nodes) { + var childIndex = this.findChildIndex(child); + var clen = this.children.length; + var nodeCount = nodes.length; + if ((clen < lineCollectionCapacity) && (childIndex === (clen - 1)) && (nodeCount === 1)) { + this.add(nodes[0]); + this.updateCounts(); + return []; + } + else { + var shiftNode = this.splitAfter(childIndex); + var nodeIndex = 0; + childIndex++; + while ((childIndex < lineCollectionCapacity) && (nodeIndex < nodeCount)) { + this.children[childIndex] = nodes[nodeIndex]; + childIndex++; + nodeIndex++; + } + var splitNodes = []; + var splitNodeCount = 0; + if (nodeIndex < nodeCount) { + splitNodeCount = Math.ceil((nodeCount - nodeIndex) / lineCollectionCapacity); + splitNodes = new Array(splitNodeCount); + var splitNodeIndex = 0; + for (var i = 0; i < splitNodeCount; i++) { + splitNodes[i] = new LineNode(); + } + var splitNode = splitNodes[0]; + while (nodeIndex < nodeCount) { + splitNode.add(nodes[nodeIndex]); + nodeIndex++; + if (splitNode.children.length === lineCollectionCapacity) { + splitNodeIndex++; + splitNode = splitNodes[splitNodeIndex]; + } + } + for (var i = splitNodes.length - 1; i >= 0; i--) { + if (splitNodes[i].children.length === 0) { + splitNodes.length--; + } + } + } + if (shiftNode) { + splitNodes[splitNodes.length] = shiftNode; + } + this.updateCounts(); + for (var i = 0; i < splitNodeCount; i++) { + splitNodes[i].updateCounts(); + } + return splitNodes; + } + }; + LineNode.prototype.add = function (collection) { + this.children[this.children.length] = collection; + return (this.children.length < lineCollectionCapacity); + }; + LineNode.prototype.charCount = function () { + return this.totalChars; + }; + LineNode.prototype.lineCount = function () { + return this.totalLines; + }; + return LineNode; + }()); + server.LineNode = LineNode; + var LineLeaf = (function () { + function LineLeaf(text) { + this.text = text; + } + LineLeaf.prototype.setUdata = function (data) { + this.udata = data; + }; + LineLeaf.prototype.getUdata = function () { + return this.udata; + }; + LineLeaf.prototype.isLeaf = function () { + return true; + }; + LineLeaf.prototype.walk = function (rangeStart, rangeLength, walkFns) { + walkFns.leaf(rangeStart, rangeLength, this); + }; + LineLeaf.prototype.charCount = function () { + return this.text.length; + }; + LineLeaf.prototype.lineCount = function () { + return 1; + }; + return LineLeaf; + }()); + server.LineLeaf = LineLeaf; + })(server = ts.server || (ts.server = {})); +})(ts || (ts = {})); +var debugObjectHost = this; +var ts; +(function (ts) { + function logInternalError(logger, err) { + if (logger) { + logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message); + } + } + var ScriptSnapshotShimAdapter = (function () { + function ScriptSnapshotShimAdapter(scriptSnapshotShim) { + this.scriptSnapshotShim = scriptSnapshotShim; + } + ScriptSnapshotShimAdapter.prototype.getText = function (start, end) { + return this.scriptSnapshotShim.getText(start, end); + }; + ScriptSnapshotShimAdapter.prototype.getLength = function () { + return this.scriptSnapshotShim.getLength(); + }; + ScriptSnapshotShimAdapter.prototype.getChangeRange = function (oldSnapshot) { + var oldSnapshotShim = oldSnapshot; + var encoded = this.scriptSnapshotShim.getChangeRange(oldSnapshotShim.scriptSnapshotShim); + if (encoded == null) { + return null; + } + var decoded = JSON.parse(encoded); + return ts.createTextChangeRange(ts.createTextSpan(decoded.span.start, decoded.span.length), decoded.newLength); + }; + ScriptSnapshotShimAdapter.prototype.dispose = function () { + if ("dispose" in this.scriptSnapshotShim) { + this.scriptSnapshotShim.dispose(); + } + }; + return ScriptSnapshotShimAdapter; + }()); + var LanguageServiceShimHostAdapter = (function () { + function LanguageServiceShimHostAdapter(shimHost) { + var _this = this; + this.shimHost = shimHost; + this.loggingEnabled = false; + this.tracingEnabled = false; + if ("getModuleResolutionsForFile" in this.shimHost) { + this.resolveModuleNames = function (moduleNames, containingFile) { + var resolutionsInFile = JSON.parse(_this.shimHost.getModuleResolutionsForFile(containingFile)); + return ts.map(moduleNames, function (name) { + var result = ts.lookUp(resolutionsInFile, name); + return result ? { resolvedFileName: result } : undefined; + }); + }; + } + if ("directoryExists" in this.shimHost) { + this.directoryExists = function (directoryName) { return _this.shimHost.directoryExists(directoryName); }; + } + if ("getTypeReferenceDirectiveResolutionsForFile" in this.shimHost) { + this.resolveTypeReferenceDirectives = function (typeDirectiveNames, containingFile) { + var typeDirectivesForFile = JSON.parse(_this.shimHost.getTypeReferenceDirectiveResolutionsForFile(containingFile)); + return ts.map(typeDirectiveNames, function (name) { return ts.lookUp(typeDirectivesForFile, name); }); + }; + } + } + LanguageServiceShimHostAdapter.prototype.log = function (s) { + if (this.loggingEnabled) { + this.shimHost.log(s); + } + }; + LanguageServiceShimHostAdapter.prototype.trace = function (s) { + if (this.tracingEnabled) { + this.shimHost.trace(s); + } + }; + LanguageServiceShimHostAdapter.prototype.error = function (s) { + this.shimHost.error(s); + }; + LanguageServiceShimHostAdapter.prototype.getProjectVersion = function () { + if (!this.shimHost.getProjectVersion) { + return undefined; + } + return this.shimHost.getProjectVersion(); + }; + LanguageServiceShimHostAdapter.prototype.useCaseSensitiveFileNames = function () { + return this.shimHost.useCaseSensitiveFileNames ? this.shimHost.useCaseSensitiveFileNames() : false; + }; + LanguageServiceShimHostAdapter.prototype.getCompilationSettings = function () { + var settingsJson = this.shimHost.getCompilationSettings(); + if (settingsJson == null || settingsJson == "") { + throw Error("LanguageServiceShimHostAdapter.getCompilationSettings: empty compilationSettings"); + } + return JSON.parse(settingsJson); + }; + LanguageServiceShimHostAdapter.prototype.getScriptFileNames = function () { + var encoded = this.shimHost.getScriptFileNames(); + return this.files = JSON.parse(encoded); + }; + LanguageServiceShimHostAdapter.prototype.getScriptSnapshot = function (fileName) { + var scriptSnapshot = this.shimHost.getScriptSnapshot(fileName); + return scriptSnapshot && new ScriptSnapshotShimAdapter(scriptSnapshot); + }; + LanguageServiceShimHostAdapter.prototype.getScriptKind = function (fileName) { + if ("getScriptKind" in this.shimHost) { + return this.shimHost.getScriptKind(fileName); + } + else { + return 0; + } + }; + LanguageServiceShimHostAdapter.prototype.getScriptVersion = function (fileName) { + return this.shimHost.getScriptVersion(fileName); + }; + LanguageServiceShimHostAdapter.prototype.getLocalizedDiagnosticMessages = function () { + var diagnosticMessagesJson = this.shimHost.getLocalizedDiagnosticMessages(); + if (diagnosticMessagesJson == null || diagnosticMessagesJson == "") { + return null; + } + try { + return JSON.parse(diagnosticMessagesJson); + } + catch (e) { + this.log(e.description || "diagnosticMessages.generated.json has invalid JSON format"); + return null; + } + }; + LanguageServiceShimHostAdapter.prototype.getCancellationToken = function () { + var hostCancellationToken = this.shimHost.getCancellationToken(); + return new ThrottledCancellationToken(hostCancellationToken); + }; + LanguageServiceShimHostAdapter.prototype.getCurrentDirectory = function () { + return this.shimHost.getCurrentDirectory(); + }; + LanguageServiceShimHostAdapter.prototype.getDefaultLibFileName = function (options) { + return this.shimHost.getDefaultLibFileName(JSON.stringify(options)); + }; + return LanguageServiceShimHostAdapter; + }()); + ts.LanguageServiceShimHostAdapter = LanguageServiceShimHostAdapter; + var ThrottledCancellationToken = (function () { + function ThrottledCancellationToken(hostCancellationToken) { + this.hostCancellationToken = hostCancellationToken; + this.lastCancellationCheckTime = 0; + } + ThrottledCancellationToken.prototype.isCancellationRequested = function () { + var time = Date.now(); + var duration = Math.abs(time - this.lastCancellationCheckTime); + if (duration > 10) { + this.lastCancellationCheckTime = time; + return this.hostCancellationToken.isCancellationRequested(); + } + return false; + }; + return ThrottledCancellationToken; + }()); + var CoreServicesShimHostAdapter = (function () { + function CoreServicesShimHostAdapter(shimHost) { + var _this = this; + this.shimHost = shimHost; + if ("directoryExists" in this.shimHost) { + this.directoryExists = function (directoryName) { return _this.shimHost.directoryExists(directoryName); }; + } + if ("realpath" in this.shimHost) { + this.realpath = function (path) { return _this.shimHost.realpath(path); }; + } + } + CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extension, exclude, depth) { + var encoded; + try { + encoded = this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude), depth); + } + catch (e) { + encoded = this.shimHost.readDirectory(rootDir, extension, JSON.stringify(exclude)); + } + return JSON.parse(encoded); + }; + CoreServicesShimHostAdapter.prototype.fileExists = function (fileName) { + return this.shimHost.fileExists(fileName); + }; + CoreServicesShimHostAdapter.prototype.readFile = function (fileName) { + return this.shimHost.readFile(fileName); + }; + return CoreServicesShimHostAdapter; + }()); + ts.CoreServicesShimHostAdapter = CoreServicesShimHostAdapter; + function simpleForwardCall(logger, actionDescription, action, logPerformance) { + var start; + if (logPerformance) { + logger.log(actionDescription); + start = Date.now(); + } + var result = action(); + if (logPerformance) { + var end = Date.now(); + logger.log(actionDescription + " completed in " + (end - start) + " msec"); + if (typeof result === "string") { + var str = result; + if (str.length > 128) { + str = str.substring(0, 128) + "..."; + } + logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'"); + } + } + return result; + } + function forwardJSONCall(logger, actionDescription, action, logPerformance) { + try { + var result = simpleForwardCall(logger, actionDescription, action, logPerformance); + return JSON.stringify({ result: result }); + } + catch (err) { + if (err instanceof ts.OperationCanceledException) { + return JSON.stringify({ canceled: true }); + } + logInternalError(logger, err); + err.description = actionDescription; + return JSON.stringify({ error: err }); + } + } + var ShimBase = (function () { + function ShimBase(factory) { + this.factory = factory; + factory.registerShim(this); + } + ShimBase.prototype.dispose = function (dummy) { + this.factory.unregisterShim(this); + }; + return ShimBase; + }()); + function realizeDiagnostics(diagnostics, newLine) { + return diagnostics.map(function (d) { return realizeDiagnostic(d, newLine); }); + } + ts.realizeDiagnostics = realizeDiagnostics; + function realizeDiagnostic(diagnostic, newLine) { + return { + message: ts.flattenDiagnosticMessageText(diagnostic.messageText, newLine), + start: diagnostic.start, + length: diagnostic.length, + category: ts.DiagnosticCategory[diagnostic.category].toLowerCase(), + code: diagnostic.code + }; + } + var LanguageServiceShimObject = (function (_super) { + __extends(LanguageServiceShimObject, _super); + function LanguageServiceShimObject(factory, host, languageService) { + _super.call(this, factory); + this.host = host; + this.languageService = languageService; + this.logPerformance = false; + this.logger = this.host; + } + LanguageServiceShimObject.prototype.forwardJSONCall = function (actionDescription, action) { + return forwardJSONCall(this.logger, actionDescription, action, this.logPerformance); + }; + LanguageServiceShimObject.prototype.dispose = function (dummy) { + this.logger.log("dispose()"); + this.languageService.dispose(); + this.languageService = null; + if (debugObjectHost && debugObjectHost.CollectGarbage) { + debugObjectHost.CollectGarbage(); + this.logger.log("CollectGarbage()"); + } + this.logger = null; + _super.prototype.dispose.call(this, dummy); + }; + LanguageServiceShimObject.prototype.refresh = function (throwOnError) { + this.forwardJSONCall("refresh(" + throwOnError + ")", function () { return null; }); + }; + LanguageServiceShimObject.prototype.cleanupSemanticCache = function () { + var _this = this; + this.forwardJSONCall("cleanupSemanticCache()", function () { + _this.languageService.cleanupSemanticCache(); + return null; + }); + }; + LanguageServiceShimObject.prototype.realizeDiagnostics = function (diagnostics) { + var newLine = ts.getNewLineOrDefaultFromHost(this.host); + return ts.realizeDiagnostics(diagnostics, newLine); + }; + LanguageServiceShimObject.prototype.getSyntacticClassifications = function (fileName, start, length) { + var _this = this; + return this.forwardJSONCall("getSyntacticClassifications('" + fileName + "', " + start + ", " + length + ")", function () { return _this.languageService.getSyntacticClassifications(fileName, ts.createTextSpan(start, length)); }); + }; + LanguageServiceShimObject.prototype.getSemanticClassifications = function (fileName, start, length) { + var _this = this; + return this.forwardJSONCall("getSemanticClassifications('" + fileName + "', " + start + ", " + length + ")", function () { return _this.languageService.getSemanticClassifications(fileName, ts.createTextSpan(start, length)); }); + }; + LanguageServiceShimObject.prototype.getEncodedSyntacticClassifications = function (fileName, start, length) { + var _this = this; + return this.forwardJSONCall("getEncodedSyntacticClassifications('" + fileName + "', " + start + ", " + length + ")", function () { return convertClassifications(_this.languageService.getEncodedSyntacticClassifications(fileName, ts.createTextSpan(start, length))); }); + }; + LanguageServiceShimObject.prototype.getEncodedSemanticClassifications = function (fileName, start, length) { + var _this = this; + return this.forwardJSONCall("getEncodedSemanticClassifications('" + fileName + "', " + start + ", " + length + ")", function () { return convertClassifications(_this.languageService.getEncodedSemanticClassifications(fileName, ts.createTextSpan(start, length))); }); + }; + LanguageServiceShimObject.prototype.getSyntacticDiagnostics = function (fileName) { + var _this = this; + return this.forwardJSONCall("getSyntacticDiagnostics('" + fileName + "')", function () { + var diagnostics = _this.languageService.getSyntacticDiagnostics(fileName); + return _this.realizeDiagnostics(diagnostics); + }); + }; + LanguageServiceShimObject.prototype.getSemanticDiagnostics = function (fileName) { + var _this = this; + return this.forwardJSONCall("getSemanticDiagnostics('" + fileName + "')", function () { + var diagnostics = _this.languageService.getSemanticDiagnostics(fileName); + return _this.realizeDiagnostics(diagnostics); + }); + }; + LanguageServiceShimObject.prototype.getCompilerOptionsDiagnostics = function () { + var _this = this; + return this.forwardJSONCall("getCompilerOptionsDiagnostics()", function () { + var diagnostics = _this.languageService.getCompilerOptionsDiagnostics(); + return _this.realizeDiagnostics(diagnostics); + }); + }; + LanguageServiceShimObject.prototype.getQuickInfoAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getQuickInfoAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getQuickInfoAtPosition(fileName, position); }); + }; + LanguageServiceShimObject.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) { + var _this = this; + return this.forwardJSONCall("getNameOrDottedNameSpan('" + fileName + "', " + startPos + ", " + endPos + ")", function () { return _this.languageService.getNameOrDottedNameSpan(fileName, startPos, endPos); }); + }; + LanguageServiceShimObject.prototype.getBreakpointStatementAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getBreakpointStatementAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getBreakpointStatementAtPosition(fileName, position); }); + }; + LanguageServiceShimObject.prototype.getSignatureHelpItems = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getSignatureHelpItems('" + fileName + "', " + position + ")", function () { return _this.languageService.getSignatureHelpItems(fileName, position); }); + }; + LanguageServiceShimObject.prototype.getDefinitionAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getDefinitionAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getDefinitionAtPosition(fileName, position); }); + }; + LanguageServiceShimObject.prototype.getTypeDefinitionAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getTypeDefinitionAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getTypeDefinitionAtPosition(fileName, position); }); + }; + LanguageServiceShimObject.prototype.getRenameInfo = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getRenameInfo('" + fileName + "', " + position + ")", function () { return _this.languageService.getRenameInfo(fileName, position); }); + }; + LanguageServiceShimObject.prototype.findRenameLocations = function (fileName, position, findInStrings, findInComments) { + var _this = this; + return this.forwardJSONCall("findRenameLocations('" + fileName + "', " + position + ", " + findInStrings + ", " + findInComments + ")", function () { return _this.languageService.findRenameLocations(fileName, position, findInStrings, findInComments); }); + }; + LanguageServiceShimObject.prototype.getBraceMatchingAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getBraceMatchingAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getBraceMatchingAtPosition(fileName, position); }); + }; + LanguageServiceShimObject.prototype.isValidBraceCompletionAtPostion = function (fileName, position, openingBrace) { + var _this = this; + return this.forwardJSONCall("isValidBraceCompletionAtPostion('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPostion(fileName, position, openingBrace); }); + }; + LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options) { + var _this = this; + return this.forwardJSONCall("getIndentationAtPosition('" + fileName + "', " + position + ")", function () { + var localOptions = JSON.parse(options); + return _this.languageService.getIndentationAtPosition(fileName, position, localOptions); + }); + }; + LanguageServiceShimObject.prototype.getReferencesAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getReferencesAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getReferencesAtPosition(fileName, position); }); + }; + LanguageServiceShimObject.prototype.findReferences = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("findReferences('" + fileName + "', " + position + ")", function () { return _this.languageService.findReferences(fileName, position); }); + }; + LanguageServiceShimObject.prototype.getOccurrencesAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getOccurrencesAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getOccurrencesAtPosition(fileName, position); }); + }; + LanguageServiceShimObject.prototype.getDocumentHighlights = function (fileName, position, filesToSearch) { + var _this = this; + return this.forwardJSONCall("getDocumentHighlights('" + fileName + "', " + position + ")", function () { + var results = _this.languageService.getDocumentHighlights(fileName, position, JSON.parse(filesToSearch)); + var normalizedName = ts.normalizeSlashes(fileName).toLowerCase(); + return ts.filter(results, function (r) { return ts.normalizeSlashes(r.fileName).toLowerCase() === normalizedName; }); + }); + }; + LanguageServiceShimObject.prototype.getCompletionsAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getCompletionsAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getCompletionsAtPosition(fileName, position); }); + }; + LanguageServiceShimObject.prototype.getCompletionEntryDetails = function (fileName, position, entryName) { + var _this = this; + return this.forwardJSONCall("getCompletionEntryDetails('" + fileName + "', " + position + ", '" + entryName + "')", function () { return _this.languageService.getCompletionEntryDetails(fileName, position, entryName); }); + }; + LanguageServiceShimObject.prototype.getFormattingEditsForRange = function (fileName, start, end, options) { + var _this = this; + return this.forwardJSONCall("getFormattingEditsForRange('" + fileName + "', " + start + ", " + end + ")", function () { + var localOptions = JSON.parse(options); + return _this.languageService.getFormattingEditsForRange(fileName, start, end, localOptions); + }); + }; + LanguageServiceShimObject.prototype.getFormattingEditsForDocument = function (fileName, options) { + var _this = this; + return this.forwardJSONCall("getFormattingEditsForDocument('" + fileName + "')", function () { + var localOptions = JSON.parse(options); + return _this.languageService.getFormattingEditsForDocument(fileName, localOptions); + }); + }; + LanguageServiceShimObject.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) { + var _this = this; + return this.forwardJSONCall("getFormattingEditsAfterKeystroke('" + fileName + "', " + position + ", '" + key + "')", function () { + var localOptions = JSON.parse(options); + return _this.languageService.getFormattingEditsAfterKeystroke(fileName, position, key, localOptions); + }); + }; + LanguageServiceShimObject.prototype.getDocCommentTemplateAtPosition = function (fileName, position) { + var _this = this; + return this.forwardJSONCall("getDocCommentTemplateAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getDocCommentTemplateAtPosition(fileName, position); }); + }; + LanguageServiceShimObject.prototype.getNavigateToItems = function (searchValue, maxResultCount) { + var _this = this; + return this.forwardJSONCall("getNavigateToItems('" + searchValue + "', " + maxResultCount + ")", function () { return _this.languageService.getNavigateToItems(searchValue, maxResultCount); }); + }; + LanguageServiceShimObject.prototype.getNavigationBarItems = function (fileName) { + var _this = this; + return this.forwardJSONCall("getNavigationBarItems('" + fileName + "')", function () { return _this.languageService.getNavigationBarItems(fileName); }); + }; + LanguageServiceShimObject.prototype.getOutliningSpans = function (fileName) { + var _this = this; + return this.forwardJSONCall("getOutliningSpans('" + fileName + "')", function () { return _this.languageService.getOutliningSpans(fileName); }); + }; + LanguageServiceShimObject.prototype.getTodoComments = function (fileName, descriptors) { + var _this = this; + return this.forwardJSONCall("getTodoComments('" + fileName + "')", function () { return _this.languageService.getTodoComments(fileName, JSON.parse(descriptors)); }); + }; + LanguageServiceShimObject.prototype.getEmitOutput = function (fileName) { + var _this = this; + return this.forwardJSONCall("getEmitOutput('" + fileName + "')", function () { return _this.languageService.getEmitOutput(fileName); }); + }; + return LanguageServiceShimObject; + }(ShimBase)); + function convertClassifications(classifications) { + return { spans: classifications.spans.join(","), endOfLineState: classifications.endOfLineState }; + } + var ClassifierShimObject = (function (_super) { + __extends(ClassifierShimObject, _super); + function ClassifierShimObject(factory, logger) { + _super.call(this, factory); + this.logger = logger; + this.logPerformance = false; + this.classifier = ts.createClassifier(); + } + ClassifierShimObject.prototype.getEncodedLexicalClassifications = function (text, lexState, syntacticClassifierAbsent) { + var _this = this; + return forwardJSONCall(this.logger, "getEncodedLexicalClassifications", function () { return convertClassifications(_this.classifier.getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent)); }, this.logPerformance); + }; + ClassifierShimObject.prototype.getClassificationsForLine = function (text, lexState, classifyKeywordsInGenerics) { + var classification = this.classifier.getClassificationsForLine(text, lexState, classifyKeywordsInGenerics); + var result = ""; + for (var _i = 0, _a = classification.entries; _i < _a.length; _i++) { + var item = _a[_i]; + result += item.length + "\n"; + result += item.classification + "\n"; + } + result += classification.finalLexState; + return result; + }; + return ClassifierShimObject; + }(ShimBase)); + var CoreServicesShimObject = (function (_super) { + __extends(CoreServicesShimObject, _super); + function CoreServicesShimObject(factory, logger, host) { + _super.call(this, factory); + this.logger = logger; + this.host = host; + this.logPerformance = false; + } + CoreServicesShimObject.prototype.forwardJSONCall = function (actionDescription, action) { + return forwardJSONCall(this.logger, actionDescription, action, this.logPerformance); + }; + CoreServicesShimObject.prototype.resolveModuleName = function (fileName, moduleName, compilerOptionsJson) { + var _this = this; + return this.forwardJSONCall("resolveModuleName('" + fileName + "')", function () { + var compilerOptions = JSON.parse(compilerOptionsJson); + var result = ts.resolveModuleName(moduleName, ts.normalizeSlashes(fileName), compilerOptions, _this.host); + return { + resolvedFileName: result.resolvedModule ? result.resolvedModule.resolvedFileName : undefined, + failedLookupLocations: result.failedLookupLocations + }; + }); + }; + CoreServicesShimObject.prototype.resolveTypeReferenceDirective = function (fileName, typeReferenceDirective, compilerOptionsJson) { + var _this = this; + return this.forwardJSONCall("resolveTypeReferenceDirective(" + fileName + ")", function () { + var compilerOptions = JSON.parse(compilerOptionsJson); + var result = ts.resolveTypeReferenceDirective(typeReferenceDirective, ts.normalizeSlashes(fileName), compilerOptions, _this.host); + return { + resolvedFileName: result.resolvedTypeReferenceDirective ? result.resolvedTypeReferenceDirective.resolvedFileName : undefined, + primary: result.resolvedTypeReferenceDirective ? result.resolvedTypeReferenceDirective.primary : true, + failedLookupLocations: result.failedLookupLocations + }; + }); + }; + CoreServicesShimObject.prototype.getPreProcessedFileInfo = function (fileName, sourceTextSnapshot) { + var _this = this; + return this.forwardJSONCall("getPreProcessedFileInfo('" + fileName + "')", function () { + var result = ts.preProcessFile(sourceTextSnapshot.getText(0, sourceTextSnapshot.getLength()), true, true); + return { + referencedFiles: _this.convertFileReferences(result.referencedFiles), + importedFiles: _this.convertFileReferences(result.importedFiles), + ambientExternalModules: result.ambientExternalModules, + isLibFile: result.isLibFile, + typeReferenceDirectives: _this.convertFileReferences(result.typeReferenceDirectives) + }; + }); + }; + CoreServicesShimObject.prototype.convertFileReferences = function (refs) { + if (!refs) { + return undefined; + } + var result = []; + for (var _i = 0, refs_2 = refs; _i < refs_2.length; _i++) { + var ref = refs_2[_i]; + result.push({ + path: ts.normalizeSlashes(ref.fileName), + position: ref.pos, + length: ref.end - ref.pos + }); + } + return result; + }; + CoreServicesShimObject.prototype.getTSConfigFileInfo = function (fileName, sourceTextSnapshot) { + var _this = this; + return this.forwardJSONCall("getTSConfigFileInfo('" + fileName + "')", function () { + var text = sourceTextSnapshot.getText(0, sourceTextSnapshot.getLength()); + var result = ts.parseConfigFileTextToJson(fileName, text); + if (result.error) { + return { + options: {}, + typingOptions: {}, + files: [], + raw: {}, + errors: [realizeDiagnostic(result.error, "\r\n")] + }; + } + var normalizedFileName = ts.normalizeSlashes(fileName); + var configFile = ts.parseJsonConfigFileContent(result.config, _this.host, ts.getDirectoryPath(normalizedFileName), {}, normalizedFileName); + return { + options: configFile.options, + typingOptions: configFile.typingOptions, + files: configFile.fileNames, + raw: configFile.raw, + errors: realizeDiagnostics(configFile.errors, "\r\n") + }; + }); + }; + CoreServicesShimObject.prototype.getDefaultCompilationSettings = function () { + return this.forwardJSONCall("getDefaultCompilationSettings()", function () { return ts.getDefaultCompilerOptions(); }); + }; + CoreServicesShimObject.prototype.discoverTypings = function (discoverTypingsJson) { + var _this = this; + var getCanonicalFileName = ts.createGetCanonicalFileName(false); + return this.forwardJSONCall("discoverTypings()", function () { + var info = JSON.parse(discoverTypingsJson); + return ts.JsTyping.discoverTypings(_this.host, info.fileNames, ts.toPath(info.projectRootPath, info.projectRootPath, getCanonicalFileName), ts.toPath(info.safeListPath, info.safeListPath, getCanonicalFileName), info.packageNameToTypingLocation, info.typingOptions, info.compilerOptions); + }); + }; + return CoreServicesShimObject; + }(ShimBase)); + var TypeScriptServicesFactory = (function () { + function TypeScriptServicesFactory() { + this._shims = []; + } + TypeScriptServicesFactory.prototype.getServicesVersion = function () { + return ts.servicesVersion; + }; + TypeScriptServicesFactory.prototype.createLanguageServiceShim = function (host) { + try { + if (this.documentRegistry === undefined) { + this.documentRegistry = ts.createDocumentRegistry(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames(), host.getCurrentDirectory()); + } + var hostAdapter = new LanguageServiceShimHostAdapter(host); + var languageService = ts.createLanguageService(hostAdapter, this.documentRegistry); + return new LanguageServiceShimObject(this, host, languageService); + } + catch (err) { + logInternalError(host, err); + throw err; + } + }; + TypeScriptServicesFactory.prototype.createClassifierShim = function (logger) { + try { + return new ClassifierShimObject(this, logger); + } + catch (err) { + logInternalError(logger, err); + throw err; + } + }; + TypeScriptServicesFactory.prototype.createCoreServicesShim = function (host) { + try { + var adapter = new CoreServicesShimHostAdapter(host); + return new CoreServicesShimObject(this, host, adapter); + } + catch (err) { + logInternalError(host, err); + throw err; + } + }; + TypeScriptServicesFactory.prototype.close = function () { + this._shims = []; + this.documentRegistry = undefined; + }; + TypeScriptServicesFactory.prototype.registerShim = function (shim) { + this._shims.push(shim); + }; + TypeScriptServicesFactory.prototype.unregisterShim = function (shim) { + for (var i = 0, n = this._shims.length; i < n; i++) { + if (this._shims[i] === shim) { + delete this._shims[i]; + return; + } + } + throw new Error("Invalid operation"); + }; + return TypeScriptServicesFactory; + }()); + ts.TypeScriptServicesFactory = TypeScriptServicesFactory; + if (typeof module !== "undefined" && module.exports) { + module.exports = ts; + } +})(ts || (ts = {})); +var TypeScript; +(function (TypeScript) { + var Services; + (function (Services) { + Services.TypeScriptServicesFactory = ts.TypeScriptServicesFactory; + })(Services = TypeScript.Services || (TypeScript.Services = {})); +})(TypeScript || (TypeScript = {})); +var toolsVersion = "1.9"; diff --git a/lib/typescript.d.ts b/lib/typescript.d.ts index e9917c7cc6b..84a06001d14 100644 --- a/lib/typescript.d.ts +++ b/lib/typescript.d.ts @@ -160,173 +160,174 @@ declare namespace ts { IsKeyword = 124, ModuleKeyword = 125, NamespaceKeyword = 126, - ReadonlyKeyword = 127, - RequireKeyword = 128, - NumberKeyword = 129, - SetKeyword = 130, - StringKeyword = 131, - SymbolKeyword = 132, - TypeKeyword = 133, - UndefinedKeyword = 134, - FromKeyword = 135, - GlobalKeyword = 136, - OfKeyword = 137, - QualifiedName = 138, - ComputedPropertyName = 139, - TypeParameter = 140, - Parameter = 141, - Decorator = 142, - PropertySignature = 143, - PropertyDeclaration = 144, - MethodSignature = 145, - MethodDeclaration = 146, - Constructor = 147, - GetAccessor = 148, - SetAccessor = 149, - CallSignature = 150, - ConstructSignature = 151, - IndexSignature = 152, - TypePredicate = 153, - TypeReference = 154, - FunctionType = 155, - ConstructorType = 156, - TypeQuery = 157, - TypeLiteral = 158, - ArrayType = 159, - TupleType = 160, - UnionType = 161, - IntersectionType = 162, - ParenthesizedType = 163, - ThisType = 164, - StringLiteralType = 165, - ObjectBindingPattern = 166, - ArrayBindingPattern = 167, - BindingElement = 168, - ArrayLiteralExpression = 169, - ObjectLiteralExpression = 170, - PropertyAccessExpression = 171, - ElementAccessExpression = 172, - CallExpression = 173, - NewExpression = 174, - TaggedTemplateExpression = 175, - TypeAssertionExpression = 176, - ParenthesizedExpression = 177, - FunctionExpression = 178, - ArrowFunction = 179, - DeleteExpression = 180, - TypeOfExpression = 181, - VoidExpression = 182, - AwaitExpression = 183, - PrefixUnaryExpression = 184, - PostfixUnaryExpression = 185, - BinaryExpression = 186, - ConditionalExpression = 187, - TemplateExpression = 188, - YieldExpression = 189, - SpreadElementExpression = 190, - ClassExpression = 191, - OmittedExpression = 192, - ExpressionWithTypeArguments = 193, - AsExpression = 194, - NonNullExpression = 195, - TemplateSpan = 196, - SemicolonClassElement = 197, - Block = 198, - VariableStatement = 199, - EmptyStatement = 200, - ExpressionStatement = 201, - IfStatement = 202, - DoStatement = 203, - WhileStatement = 204, - ForStatement = 205, - ForInStatement = 206, - ForOfStatement = 207, - ContinueStatement = 208, - BreakStatement = 209, - ReturnStatement = 210, - WithStatement = 211, - SwitchStatement = 212, - LabeledStatement = 213, - ThrowStatement = 214, - TryStatement = 215, - DebuggerStatement = 216, - VariableDeclaration = 217, - VariableDeclarationList = 218, - FunctionDeclaration = 219, - ClassDeclaration = 220, - InterfaceDeclaration = 221, - TypeAliasDeclaration = 222, - EnumDeclaration = 223, - ModuleDeclaration = 224, - ModuleBlock = 225, - CaseBlock = 226, - GlobalModuleExportDeclaration = 227, - ImportEqualsDeclaration = 228, - ImportDeclaration = 229, - ImportClause = 230, - NamespaceImport = 231, - NamedImports = 232, - ImportSpecifier = 233, - ExportAssignment = 234, - ExportDeclaration = 235, - NamedExports = 236, - ExportSpecifier = 237, - MissingDeclaration = 238, - ExternalModuleReference = 239, - JsxElement = 240, - JsxSelfClosingElement = 241, - JsxOpeningElement = 242, - JsxText = 243, - JsxClosingElement = 244, - JsxAttribute = 245, - JsxSpreadAttribute = 246, - JsxExpression = 247, - CaseClause = 248, - DefaultClause = 249, - HeritageClause = 250, - CatchClause = 251, - PropertyAssignment = 252, - ShorthandPropertyAssignment = 253, - EnumMember = 254, - SourceFile = 255, - JSDocTypeExpression = 256, - JSDocAllType = 257, - JSDocUnknownType = 258, - JSDocArrayType = 259, - JSDocUnionType = 260, - JSDocTupleType = 261, - JSDocNullableType = 262, - JSDocNonNullableType = 263, - JSDocRecordType = 264, - JSDocRecordMember = 265, - JSDocTypeReference = 266, - JSDocOptionalType = 267, - JSDocFunctionType = 268, - JSDocVariadicType = 269, - JSDocConstructorType = 270, - JSDocThisType = 271, - JSDocComment = 272, - JSDocTag = 273, - JSDocParameterTag = 274, - JSDocReturnTag = 275, - JSDocTypeTag = 276, - JSDocTemplateTag = 277, - SyntaxList = 278, - Count = 279, + NeverKeyword = 127, + ReadonlyKeyword = 128, + RequireKeyword = 129, + NumberKeyword = 130, + SetKeyword = 131, + StringKeyword = 132, + SymbolKeyword = 133, + TypeKeyword = 134, + UndefinedKeyword = 135, + FromKeyword = 136, + GlobalKeyword = 137, + OfKeyword = 138, + QualifiedName = 139, + ComputedPropertyName = 140, + TypeParameter = 141, + Parameter = 142, + Decorator = 143, + PropertySignature = 144, + PropertyDeclaration = 145, + MethodSignature = 146, + MethodDeclaration = 147, + Constructor = 148, + GetAccessor = 149, + SetAccessor = 150, + CallSignature = 151, + ConstructSignature = 152, + IndexSignature = 153, + TypePredicate = 154, + TypeReference = 155, + FunctionType = 156, + ConstructorType = 157, + TypeQuery = 158, + TypeLiteral = 159, + ArrayType = 160, + TupleType = 161, + UnionType = 162, + IntersectionType = 163, + ParenthesizedType = 164, + ThisType = 165, + StringLiteralType = 166, + ObjectBindingPattern = 167, + ArrayBindingPattern = 168, + BindingElement = 169, + ArrayLiteralExpression = 170, + ObjectLiteralExpression = 171, + PropertyAccessExpression = 172, + ElementAccessExpression = 173, + CallExpression = 174, + NewExpression = 175, + TaggedTemplateExpression = 176, + TypeAssertionExpression = 177, + ParenthesizedExpression = 178, + FunctionExpression = 179, + ArrowFunction = 180, + DeleteExpression = 181, + TypeOfExpression = 182, + VoidExpression = 183, + AwaitExpression = 184, + PrefixUnaryExpression = 185, + PostfixUnaryExpression = 186, + BinaryExpression = 187, + ConditionalExpression = 188, + TemplateExpression = 189, + YieldExpression = 190, + SpreadElementExpression = 191, + ClassExpression = 192, + OmittedExpression = 193, + ExpressionWithTypeArguments = 194, + AsExpression = 195, + NonNullExpression = 196, + TemplateSpan = 197, + SemicolonClassElement = 198, + Block = 199, + VariableStatement = 200, + EmptyStatement = 201, + ExpressionStatement = 202, + IfStatement = 203, + DoStatement = 204, + WhileStatement = 205, + ForStatement = 206, + ForInStatement = 207, + ForOfStatement = 208, + ContinueStatement = 209, + BreakStatement = 210, + ReturnStatement = 211, + WithStatement = 212, + SwitchStatement = 213, + LabeledStatement = 214, + ThrowStatement = 215, + TryStatement = 216, + DebuggerStatement = 217, + VariableDeclaration = 218, + VariableDeclarationList = 219, + FunctionDeclaration = 220, + ClassDeclaration = 221, + InterfaceDeclaration = 222, + TypeAliasDeclaration = 223, + EnumDeclaration = 224, + ModuleDeclaration = 225, + ModuleBlock = 226, + CaseBlock = 227, + GlobalModuleExportDeclaration = 228, + ImportEqualsDeclaration = 229, + ImportDeclaration = 230, + ImportClause = 231, + NamespaceImport = 232, + NamedImports = 233, + ImportSpecifier = 234, + ExportAssignment = 235, + ExportDeclaration = 236, + NamedExports = 237, + ExportSpecifier = 238, + MissingDeclaration = 239, + ExternalModuleReference = 240, + JsxElement = 241, + JsxSelfClosingElement = 242, + JsxOpeningElement = 243, + JsxText = 244, + JsxClosingElement = 245, + JsxAttribute = 246, + JsxSpreadAttribute = 247, + JsxExpression = 248, + CaseClause = 249, + DefaultClause = 250, + HeritageClause = 251, + CatchClause = 252, + PropertyAssignment = 253, + ShorthandPropertyAssignment = 254, + EnumMember = 255, + SourceFile = 256, + JSDocTypeExpression = 257, + JSDocAllType = 258, + JSDocUnknownType = 259, + JSDocArrayType = 260, + JSDocUnionType = 261, + JSDocTupleType = 262, + JSDocNullableType = 263, + JSDocNonNullableType = 264, + JSDocRecordType = 265, + JSDocRecordMember = 266, + JSDocTypeReference = 267, + JSDocOptionalType = 268, + JSDocFunctionType = 269, + JSDocVariadicType = 270, + JSDocConstructorType = 271, + JSDocThisType = 272, + JSDocComment = 273, + JSDocTag = 274, + JSDocParameterTag = 275, + JSDocReturnTag = 276, + JSDocTypeTag = 277, + JSDocTemplateTag = 278, + SyntaxList = 279, + Count = 280, FirstAssignment = 56, LastAssignment = 68, FirstReservedWord = 70, LastReservedWord = 105, FirstKeyword = 70, - LastKeyword = 137, + LastKeyword = 138, FirstFutureReservedWord = 106, LastFutureReservedWord = 114, - FirstTypeNode = 153, - LastTypeNode = 165, + FirstTypeNode = 154, + LastTypeNode = 166, FirstPunctuation = 15, LastPunctuation = 68, FirstToken = 0, - LastToken = 137, + LastToken = 138, FirstTriviaToken = 2, LastTriviaToken = 7, FirstLiteralToken = 8, @@ -335,7 +336,7 @@ declare namespace ts { LastTemplateToken = 14, FirstBinaryOperator = 25, LastBinaryOperator = 68, - FirstNode = 138, + FirstNode = 139, } enum NodeFlags { None = 0, @@ -370,8 +371,9 @@ declare namespace ts { ThisNodeOrAnySubNodesHasError = 268435456, HasAggregatedChildData = 536870912, HasJsxSpreadAttribute = 1073741824, - Modifier = 959, + Modifier = 1023, AccessibilityModifier = 28, + ParameterPropertyModifier = 92, BlockScoped = 3072, ReachabilityCheckFlags = 98304, EmitHelperFlags = 3932160, @@ -405,9 +407,6 @@ declare namespace ts { text: string; originalKeywordKind?: SyntaxKind; } - interface TransientIdentifier extends Identifier { - resolvedSymbol: Symbol; - } interface QualifiedName extends Node { left: EntityName; right: Identifier; @@ -1047,6 +1046,34 @@ declare namespace ts { postParameterName?: Identifier; isBracketed: boolean; } + enum FlowFlags { + Unreachable = 1, + Start = 2, + BranchLabel = 4, + LoopLabel = 8, + Assignment = 16, + TrueCondition = 32, + FalseCondition = 64, + Referenced = 128, + Shared = 256, + Label = 12, + Condition = 96, + } + interface FlowNode { + flags: FlowFlags; + id?: number; + } + interface FlowLabel extends FlowNode { + antecedents: FlowNode[]; + } + interface FlowAssignment extends FlowNode { + node: Expression | VariableDeclaration | BindingElement; + antecedent: FlowNode; + } + interface FlowCondition extends FlowNode { + expression: Expression; + antecedent: FlowNode; + } interface AmdDependency { path: string; name: string; @@ -1077,6 +1104,7 @@ declare namespace ts { interface ScriptReferenceHost { getCompilerOptions(): CompilerOptions; getSourceFile(fileName: string): SourceFile; + getSourceFileByPath(path: Path): SourceFile; getCurrentDirectory(): string; } interface ParseConfigHost { @@ -1169,11 +1197,13 @@ declare namespace ts { getIndexTypeOfType(type: Type, kind: IndexKind): Type; getBaseTypes(type: InterfaceType): ObjectType[]; getReturnTypeOfSignature(signature: Signature): Type; + getNonNullableType(type: Type): Type; getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; getSymbolAtLocation(node: Node): Symbol; getSymbolsOfParameterPropertyDeclaration(parameter: ParameterDeclaration, parameterName: string): Symbol[]; getShorthandAssignmentValueSymbol(location: Node): Symbol; getExportSpecifierLocalTargetSymbol(location: ExportSpecifier): Symbol; + getPropertySymbolOfDestructuringAssignment(location: Identifier): Symbol; getTypeAtLocation(node: Node): Type; typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string; symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string; @@ -1233,6 +1263,7 @@ declare namespace ts { WriteTypeArgumentsOfSignature = 32, InElementType = 64, UseFullyQualifiedType = 128, + InFirstTypeArgument = 256, } enum SymbolFormatFlags { None = 0, @@ -1356,11 +1387,13 @@ declare namespace ts { ESSymbol = 16777216, ThisType = 33554432, ObjectLiteralPatternWithComputedProperties = 67108864, + Never = 134217728, StringLike = 258, NumberLike = 132, ObjectType = 80896, UnionOrIntersection = 49152, StructuredType = 130048, + Narrowable = 97793, } type DestructuringPattern = BindingPattern | ObjectLiteralExpression | ArrayLiteralExpression; interface Type { @@ -1525,13 +1558,13 @@ declare namespace ts { lib?: string[]; types?: string[]; list?: string[]; - [option: string]: CompilerOptionsValue; + [option: string]: CompilerOptionsValue | undefined; } interface TypingOptions { enableAutoDiscovery?: boolean; include?: string[]; exclude?: string[]; - [option: string]: string[] | boolean; + [option: string]: string[] | boolean | undefined; } interface DiscoverTypingsInfo { fileNames: string[]; @@ -1585,6 +1618,7 @@ declare namespace ts { options: CompilerOptions; typingOptions?: TypingOptions; fileNames: string[]; + raw?: any; errors: Diagnostic[]; } interface ModuleResolutionHost { @@ -1592,6 +1626,7 @@ declare namespace ts { readFile(fileName: string): string; trace?(s: string): void; directoryExists?(directoryName: string): boolean; + realpath?(path: string): string; } interface ResolvedModule { resolvedFileName: string; @@ -1611,6 +1646,7 @@ declare namespace ts { } interface CompilerHost extends ModuleResolutionHost { getSourceFile(fileName: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; + getSourceFileByPath?(fileName: string, path: Path, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; getCancellationToken?(): CancellationToken; getDefaultLibFileName(options: CompilerOptions): string; getDefaultLibLocation?(): string; @@ -1637,6 +1673,11 @@ declare namespace ts { declare namespace ts { type FileWatcherCallback = (fileName: string, removed?: boolean) => void; type DirectoryWatcherCallback = (directoryName: string) => void; + interface WatchedFile { + fileName: string; + callback: FileWatcherCallback; + mtime?: Date; + } interface System { args: string[]; newLine: string; @@ -1657,6 +1698,7 @@ declare namespace ts { createHash?(data: string): string; getMemoryUsage?(): number; exit(exitCode?: number): void; + realpath?(path: string): string; } interface FileWatcher { close(): void; @@ -1843,6 +1885,7 @@ declare namespace ts { getStringIndexType(): Type; getNumberIndexType(): Type; getBaseTypes(): ObjectType[]; + getNonNullableType(): Type; } interface Signature { getDeclaration(): SignatureDeclaration; @@ -1898,7 +1941,7 @@ declare namespace ts { getScriptFileNames(): string[]; getScriptKind?(fileName: string): ScriptKind; getScriptVersion(fileName: string): string; - getScriptSnapshot(fileName: string): IScriptSnapshot; + getScriptSnapshot(fileName: string): IScriptSnapshot | undefined; getLocalizedDiagnosticMessages?(): any; getCancellationToken?(): HostCancellationToken; getCurrentDirectory(): string; @@ -1951,6 +1994,7 @@ declare namespace ts { getFormattingEditsForDocument(fileName: string, options: FormatCodeOptions): TextChange[]; getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions): TextChange[]; getDocCommentTemplateAtPosition(fileName: string, position: number): TextInsertion; + isValidBraceCompletionAtPostion(fileName: string, position: number, openingBrace: number): boolean; getEmitOutput(fileName: string): EmitOutput; getProgram(): Program; dispose(): void; @@ -2266,6 +2310,7 @@ declare namespace ts { * in the registry and a new one was created. */ acquireDocument(fileName: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string, scriptKind?: ScriptKind): SourceFile; + acquireDocumentWithKey(fileName: string, path: Path, compilationSettings: CompilerOptions, key: DocumentRegistryBucketKey, scriptSnapshot: IScriptSnapshot, version: string, scriptKind?: ScriptKind): SourceFile; /** * Request an updated version of an already existing SourceFile with a given fileName * and compilationSettings. The update will in-turn call updateLanguageServiceSourceFile @@ -2279,6 +2324,8 @@ declare namespace ts { * @param version Current version of the file. */ updateDocument(fileName: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string, scriptKind?: ScriptKind): SourceFile; + updateDocumentWithKey(fileName: string, path: Path, compilationSettings: CompilerOptions, key: DocumentRegistryBucketKey, scriptSnapshot: IScriptSnapshot, version: string, scriptKind?: ScriptKind): SourceFile; + getKeyForCompilationSettings(settings: CompilerOptions): DocumentRegistryBucketKey; /** * Informs the DocumentRegistry that a file is not needed any longer. * @@ -2289,8 +2336,12 @@ declare namespace ts { * @param compilationSettings The compilation settings used to acquire the file */ releaseDocument(fileName: string, compilationSettings: CompilerOptions): void; + releaseDocumentWithKey(path: Path, key: DocumentRegistryBucketKey): void; reportStats(): string; } + type DocumentRegistryBucketKey = string & { + __bucketKey: any; + }; namespace ScriptElementKind { const unknown: string; const warning: string; diff --git a/lib/typescript.js b/lib/typescript.js index f8b128defd8..e78eda7b0bb 100644 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -161,194 +161,195 @@ var ts; SyntaxKind[SyntaxKind["IsKeyword"] = 124] = "IsKeyword"; SyntaxKind[SyntaxKind["ModuleKeyword"] = 125] = "ModuleKeyword"; SyntaxKind[SyntaxKind["NamespaceKeyword"] = 126] = "NamespaceKeyword"; - SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 127] = "ReadonlyKeyword"; - SyntaxKind[SyntaxKind["RequireKeyword"] = 128] = "RequireKeyword"; - SyntaxKind[SyntaxKind["NumberKeyword"] = 129] = "NumberKeyword"; - SyntaxKind[SyntaxKind["SetKeyword"] = 130] = "SetKeyword"; - SyntaxKind[SyntaxKind["StringKeyword"] = 131] = "StringKeyword"; - SyntaxKind[SyntaxKind["SymbolKeyword"] = 132] = "SymbolKeyword"; - SyntaxKind[SyntaxKind["TypeKeyword"] = 133] = "TypeKeyword"; - SyntaxKind[SyntaxKind["UndefinedKeyword"] = 134] = "UndefinedKeyword"; - SyntaxKind[SyntaxKind["FromKeyword"] = 135] = "FromKeyword"; - SyntaxKind[SyntaxKind["GlobalKeyword"] = 136] = "GlobalKeyword"; - SyntaxKind[SyntaxKind["OfKeyword"] = 137] = "OfKeyword"; + SyntaxKind[SyntaxKind["NeverKeyword"] = 127] = "NeverKeyword"; + SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 128] = "ReadonlyKeyword"; + SyntaxKind[SyntaxKind["RequireKeyword"] = 129] = "RequireKeyword"; + SyntaxKind[SyntaxKind["NumberKeyword"] = 130] = "NumberKeyword"; + SyntaxKind[SyntaxKind["SetKeyword"] = 131] = "SetKeyword"; + SyntaxKind[SyntaxKind["StringKeyword"] = 132] = "StringKeyword"; + SyntaxKind[SyntaxKind["SymbolKeyword"] = 133] = "SymbolKeyword"; + SyntaxKind[SyntaxKind["TypeKeyword"] = 134] = "TypeKeyword"; + SyntaxKind[SyntaxKind["UndefinedKeyword"] = 135] = "UndefinedKeyword"; + SyntaxKind[SyntaxKind["FromKeyword"] = 136] = "FromKeyword"; + SyntaxKind[SyntaxKind["GlobalKeyword"] = 137] = "GlobalKeyword"; + SyntaxKind[SyntaxKind["OfKeyword"] = 138] = "OfKeyword"; // Parse tree nodes // Names - SyntaxKind[SyntaxKind["QualifiedName"] = 138] = "QualifiedName"; - SyntaxKind[SyntaxKind["ComputedPropertyName"] = 139] = "ComputedPropertyName"; + SyntaxKind[SyntaxKind["QualifiedName"] = 139] = "QualifiedName"; + SyntaxKind[SyntaxKind["ComputedPropertyName"] = 140] = "ComputedPropertyName"; // Signature elements - SyntaxKind[SyntaxKind["TypeParameter"] = 140] = "TypeParameter"; - SyntaxKind[SyntaxKind["Parameter"] = 141] = "Parameter"; - SyntaxKind[SyntaxKind["Decorator"] = 142] = "Decorator"; + SyntaxKind[SyntaxKind["TypeParameter"] = 141] = "TypeParameter"; + SyntaxKind[SyntaxKind["Parameter"] = 142] = "Parameter"; + SyntaxKind[SyntaxKind["Decorator"] = 143] = "Decorator"; // TypeMember - SyntaxKind[SyntaxKind["PropertySignature"] = 143] = "PropertySignature"; - SyntaxKind[SyntaxKind["PropertyDeclaration"] = 144] = "PropertyDeclaration"; - SyntaxKind[SyntaxKind["MethodSignature"] = 145] = "MethodSignature"; - SyntaxKind[SyntaxKind["MethodDeclaration"] = 146] = "MethodDeclaration"; - SyntaxKind[SyntaxKind["Constructor"] = 147] = "Constructor"; - SyntaxKind[SyntaxKind["GetAccessor"] = 148] = "GetAccessor"; - SyntaxKind[SyntaxKind["SetAccessor"] = 149] = "SetAccessor"; - SyntaxKind[SyntaxKind["CallSignature"] = 150] = "CallSignature"; - SyntaxKind[SyntaxKind["ConstructSignature"] = 151] = "ConstructSignature"; - SyntaxKind[SyntaxKind["IndexSignature"] = 152] = "IndexSignature"; + SyntaxKind[SyntaxKind["PropertySignature"] = 144] = "PropertySignature"; + SyntaxKind[SyntaxKind["PropertyDeclaration"] = 145] = "PropertyDeclaration"; + SyntaxKind[SyntaxKind["MethodSignature"] = 146] = "MethodSignature"; + SyntaxKind[SyntaxKind["MethodDeclaration"] = 147] = "MethodDeclaration"; + SyntaxKind[SyntaxKind["Constructor"] = 148] = "Constructor"; + SyntaxKind[SyntaxKind["GetAccessor"] = 149] = "GetAccessor"; + SyntaxKind[SyntaxKind["SetAccessor"] = 150] = "SetAccessor"; + SyntaxKind[SyntaxKind["CallSignature"] = 151] = "CallSignature"; + SyntaxKind[SyntaxKind["ConstructSignature"] = 152] = "ConstructSignature"; + SyntaxKind[SyntaxKind["IndexSignature"] = 153] = "IndexSignature"; // Type - SyntaxKind[SyntaxKind["TypePredicate"] = 153] = "TypePredicate"; - SyntaxKind[SyntaxKind["TypeReference"] = 154] = "TypeReference"; - SyntaxKind[SyntaxKind["FunctionType"] = 155] = "FunctionType"; - SyntaxKind[SyntaxKind["ConstructorType"] = 156] = "ConstructorType"; - SyntaxKind[SyntaxKind["TypeQuery"] = 157] = "TypeQuery"; - SyntaxKind[SyntaxKind["TypeLiteral"] = 158] = "TypeLiteral"; - SyntaxKind[SyntaxKind["ArrayType"] = 159] = "ArrayType"; - SyntaxKind[SyntaxKind["TupleType"] = 160] = "TupleType"; - SyntaxKind[SyntaxKind["UnionType"] = 161] = "UnionType"; - SyntaxKind[SyntaxKind["IntersectionType"] = 162] = "IntersectionType"; - SyntaxKind[SyntaxKind["ParenthesizedType"] = 163] = "ParenthesizedType"; - SyntaxKind[SyntaxKind["ThisType"] = 164] = "ThisType"; - SyntaxKind[SyntaxKind["StringLiteralType"] = 165] = "StringLiteralType"; + SyntaxKind[SyntaxKind["TypePredicate"] = 154] = "TypePredicate"; + SyntaxKind[SyntaxKind["TypeReference"] = 155] = "TypeReference"; + SyntaxKind[SyntaxKind["FunctionType"] = 156] = "FunctionType"; + SyntaxKind[SyntaxKind["ConstructorType"] = 157] = "ConstructorType"; + SyntaxKind[SyntaxKind["TypeQuery"] = 158] = "TypeQuery"; + SyntaxKind[SyntaxKind["TypeLiteral"] = 159] = "TypeLiteral"; + SyntaxKind[SyntaxKind["ArrayType"] = 160] = "ArrayType"; + SyntaxKind[SyntaxKind["TupleType"] = 161] = "TupleType"; + SyntaxKind[SyntaxKind["UnionType"] = 162] = "UnionType"; + SyntaxKind[SyntaxKind["IntersectionType"] = 163] = "IntersectionType"; + SyntaxKind[SyntaxKind["ParenthesizedType"] = 164] = "ParenthesizedType"; + SyntaxKind[SyntaxKind["ThisType"] = 165] = "ThisType"; + SyntaxKind[SyntaxKind["StringLiteralType"] = 166] = "StringLiteralType"; // Binding patterns - SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 166] = "ObjectBindingPattern"; - SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 167] = "ArrayBindingPattern"; - SyntaxKind[SyntaxKind["BindingElement"] = 168] = "BindingElement"; + SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 167] = "ObjectBindingPattern"; + SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 168] = "ArrayBindingPattern"; + SyntaxKind[SyntaxKind["BindingElement"] = 169] = "BindingElement"; // Expression - SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 169] = "ArrayLiteralExpression"; - SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 170] = "ObjectLiteralExpression"; - SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 171] = "PropertyAccessExpression"; - SyntaxKind[SyntaxKind["ElementAccessExpression"] = 172] = "ElementAccessExpression"; - SyntaxKind[SyntaxKind["CallExpression"] = 173] = "CallExpression"; - SyntaxKind[SyntaxKind["NewExpression"] = 174] = "NewExpression"; - SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 175] = "TaggedTemplateExpression"; - SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 176] = "TypeAssertionExpression"; - SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 177] = "ParenthesizedExpression"; - SyntaxKind[SyntaxKind["FunctionExpression"] = 178] = "FunctionExpression"; - SyntaxKind[SyntaxKind["ArrowFunction"] = 179] = "ArrowFunction"; - SyntaxKind[SyntaxKind["DeleteExpression"] = 180] = "DeleteExpression"; - SyntaxKind[SyntaxKind["TypeOfExpression"] = 181] = "TypeOfExpression"; - SyntaxKind[SyntaxKind["VoidExpression"] = 182] = "VoidExpression"; - SyntaxKind[SyntaxKind["AwaitExpression"] = 183] = "AwaitExpression"; - SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 184] = "PrefixUnaryExpression"; - SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 185] = "PostfixUnaryExpression"; - SyntaxKind[SyntaxKind["BinaryExpression"] = 186] = "BinaryExpression"; - SyntaxKind[SyntaxKind["ConditionalExpression"] = 187] = "ConditionalExpression"; - SyntaxKind[SyntaxKind["TemplateExpression"] = 188] = "TemplateExpression"; - SyntaxKind[SyntaxKind["YieldExpression"] = 189] = "YieldExpression"; - SyntaxKind[SyntaxKind["SpreadElementExpression"] = 190] = "SpreadElementExpression"; - SyntaxKind[SyntaxKind["ClassExpression"] = 191] = "ClassExpression"; - SyntaxKind[SyntaxKind["OmittedExpression"] = 192] = "OmittedExpression"; - SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 193] = "ExpressionWithTypeArguments"; - SyntaxKind[SyntaxKind["AsExpression"] = 194] = "AsExpression"; - SyntaxKind[SyntaxKind["NonNullExpression"] = 195] = "NonNullExpression"; + SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 170] = "ArrayLiteralExpression"; + SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 171] = "ObjectLiteralExpression"; + SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 172] = "PropertyAccessExpression"; + SyntaxKind[SyntaxKind["ElementAccessExpression"] = 173] = "ElementAccessExpression"; + SyntaxKind[SyntaxKind["CallExpression"] = 174] = "CallExpression"; + SyntaxKind[SyntaxKind["NewExpression"] = 175] = "NewExpression"; + SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 176] = "TaggedTemplateExpression"; + SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 177] = "TypeAssertionExpression"; + SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 178] = "ParenthesizedExpression"; + SyntaxKind[SyntaxKind["FunctionExpression"] = 179] = "FunctionExpression"; + SyntaxKind[SyntaxKind["ArrowFunction"] = 180] = "ArrowFunction"; + SyntaxKind[SyntaxKind["DeleteExpression"] = 181] = "DeleteExpression"; + SyntaxKind[SyntaxKind["TypeOfExpression"] = 182] = "TypeOfExpression"; + SyntaxKind[SyntaxKind["VoidExpression"] = 183] = "VoidExpression"; + SyntaxKind[SyntaxKind["AwaitExpression"] = 184] = "AwaitExpression"; + SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 185] = "PrefixUnaryExpression"; + SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 186] = "PostfixUnaryExpression"; + SyntaxKind[SyntaxKind["BinaryExpression"] = 187] = "BinaryExpression"; + SyntaxKind[SyntaxKind["ConditionalExpression"] = 188] = "ConditionalExpression"; + SyntaxKind[SyntaxKind["TemplateExpression"] = 189] = "TemplateExpression"; + SyntaxKind[SyntaxKind["YieldExpression"] = 190] = "YieldExpression"; + SyntaxKind[SyntaxKind["SpreadElementExpression"] = 191] = "SpreadElementExpression"; + SyntaxKind[SyntaxKind["ClassExpression"] = 192] = "ClassExpression"; + SyntaxKind[SyntaxKind["OmittedExpression"] = 193] = "OmittedExpression"; + SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 194] = "ExpressionWithTypeArguments"; + SyntaxKind[SyntaxKind["AsExpression"] = 195] = "AsExpression"; + SyntaxKind[SyntaxKind["NonNullExpression"] = 196] = "NonNullExpression"; // Misc - SyntaxKind[SyntaxKind["TemplateSpan"] = 196] = "TemplateSpan"; - SyntaxKind[SyntaxKind["SemicolonClassElement"] = 197] = "SemicolonClassElement"; + SyntaxKind[SyntaxKind["TemplateSpan"] = 197] = "TemplateSpan"; + SyntaxKind[SyntaxKind["SemicolonClassElement"] = 198] = "SemicolonClassElement"; // Element - SyntaxKind[SyntaxKind["Block"] = 198] = "Block"; - SyntaxKind[SyntaxKind["VariableStatement"] = 199] = "VariableStatement"; - SyntaxKind[SyntaxKind["EmptyStatement"] = 200] = "EmptyStatement"; - SyntaxKind[SyntaxKind["ExpressionStatement"] = 201] = "ExpressionStatement"; - SyntaxKind[SyntaxKind["IfStatement"] = 202] = "IfStatement"; - SyntaxKind[SyntaxKind["DoStatement"] = 203] = "DoStatement"; - SyntaxKind[SyntaxKind["WhileStatement"] = 204] = "WhileStatement"; - SyntaxKind[SyntaxKind["ForStatement"] = 205] = "ForStatement"; - SyntaxKind[SyntaxKind["ForInStatement"] = 206] = "ForInStatement"; - SyntaxKind[SyntaxKind["ForOfStatement"] = 207] = "ForOfStatement"; - SyntaxKind[SyntaxKind["ContinueStatement"] = 208] = "ContinueStatement"; - SyntaxKind[SyntaxKind["BreakStatement"] = 209] = "BreakStatement"; - SyntaxKind[SyntaxKind["ReturnStatement"] = 210] = "ReturnStatement"; - SyntaxKind[SyntaxKind["WithStatement"] = 211] = "WithStatement"; - SyntaxKind[SyntaxKind["SwitchStatement"] = 212] = "SwitchStatement"; - SyntaxKind[SyntaxKind["LabeledStatement"] = 213] = "LabeledStatement"; - SyntaxKind[SyntaxKind["ThrowStatement"] = 214] = "ThrowStatement"; - SyntaxKind[SyntaxKind["TryStatement"] = 215] = "TryStatement"; - SyntaxKind[SyntaxKind["DebuggerStatement"] = 216] = "DebuggerStatement"; - SyntaxKind[SyntaxKind["VariableDeclaration"] = 217] = "VariableDeclaration"; - SyntaxKind[SyntaxKind["VariableDeclarationList"] = 218] = "VariableDeclarationList"; - SyntaxKind[SyntaxKind["FunctionDeclaration"] = 219] = "FunctionDeclaration"; - SyntaxKind[SyntaxKind["ClassDeclaration"] = 220] = "ClassDeclaration"; - SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 221] = "InterfaceDeclaration"; - SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 222] = "TypeAliasDeclaration"; - SyntaxKind[SyntaxKind["EnumDeclaration"] = 223] = "EnumDeclaration"; - SyntaxKind[SyntaxKind["ModuleDeclaration"] = 224] = "ModuleDeclaration"; - SyntaxKind[SyntaxKind["ModuleBlock"] = 225] = "ModuleBlock"; - SyntaxKind[SyntaxKind["CaseBlock"] = 226] = "CaseBlock"; - SyntaxKind[SyntaxKind["GlobalModuleExportDeclaration"] = 227] = "GlobalModuleExportDeclaration"; - SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 228] = "ImportEqualsDeclaration"; - SyntaxKind[SyntaxKind["ImportDeclaration"] = 229] = "ImportDeclaration"; - SyntaxKind[SyntaxKind["ImportClause"] = 230] = "ImportClause"; - SyntaxKind[SyntaxKind["NamespaceImport"] = 231] = "NamespaceImport"; - SyntaxKind[SyntaxKind["NamedImports"] = 232] = "NamedImports"; - SyntaxKind[SyntaxKind["ImportSpecifier"] = 233] = "ImportSpecifier"; - SyntaxKind[SyntaxKind["ExportAssignment"] = 234] = "ExportAssignment"; - SyntaxKind[SyntaxKind["ExportDeclaration"] = 235] = "ExportDeclaration"; - SyntaxKind[SyntaxKind["NamedExports"] = 236] = "NamedExports"; - SyntaxKind[SyntaxKind["ExportSpecifier"] = 237] = "ExportSpecifier"; - SyntaxKind[SyntaxKind["MissingDeclaration"] = 238] = "MissingDeclaration"; + SyntaxKind[SyntaxKind["Block"] = 199] = "Block"; + SyntaxKind[SyntaxKind["VariableStatement"] = 200] = "VariableStatement"; + SyntaxKind[SyntaxKind["EmptyStatement"] = 201] = "EmptyStatement"; + SyntaxKind[SyntaxKind["ExpressionStatement"] = 202] = "ExpressionStatement"; + SyntaxKind[SyntaxKind["IfStatement"] = 203] = "IfStatement"; + SyntaxKind[SyntaxKind["DoStatement"] = 204] = "DoStatement"; + SyntaxKind[SyntaxKind["WhileStatement"] = 205] = "WhileStatement"; + SyntaxKind[SyntaxKind["ForStatement"] = 206] = "ForStatement"; + SyntaxKind[SyntaxKind["ForInStatement"] = 207] = "ForInStatement"; + SyntaxKind[SyntaxKind["ForOfStatement"] = 208] = "ForOfStatement"; + SyntaxKind[SyntaxKind["ContinueStatement"] = 209] = "ContinueStatement"; + SyntaxKind[SyntaxKind["BreakStatement"] = 210] = "BreakStatement"; + SyntaxKind[SyntaxKind["ReturnStatement"] = 211] = "ReturnStatement"; + SyntaxKind[SyntaxKind["WithStatement"] = 212] = "WithStatement"; + SyntaxKind[SyntaxKind["SwitchStatement"] = 213] = "SwitchStatement"; + SyntaxKind[SyntaxKind["LabeledStatement"] = 214] = "LabeledStatement"; + SyntaxKind[SyntaxKind["ThrowStatement"] = 215] = "ThrowStatement"; + SyntaxKind[SyntaxKind["TryStatement"] = 216] = "TryStatement"; + SyntaxKind[SyntaxKind["DebuggerStatement"] = 217] = "DebuggerStatement"; + SyntaxKind[SyntaxKind["VariableDeclaration"] = 218] = "VariableDeclaration"; + SyntaxKind[SyntaxKind["VariableDeclarationList"] = 219] = "VariableDeclarationList"; + SyntaxKind[SyntaxKind["FunctionDeclaration"] = 220] = "FunctionDeclaration"; + SyntaxKind[SyntaxKind["ClassDeclaration"] = 221] = "ClassDeclaration"; + SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 222] = "InterfaceDeclaration"; + SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 223] = "TypeAliasDeclaration"; + SyntaxKind[SyntaxKind["EnumDeclaration"] = 224] = "EnumDeclaration"; + SyntaxKind[SyntaxKind["ModuleDeclaration"] = 225] = "ModuleDeclaration"; + SyntaxKind[SyntaxKind["ModuleBlock"] = 226] = "ModuleBlock"; + SyntaxKind[SyntaxKind["CaseBlock"] = 227] = "CaseBlock"; + SyntaxKind[SyntaxKind["GlobalModuleExportDeclaration"] = 228] = "GlobalModuleExportDeclaration"; + SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 229] = "ImportEqualsDeclaration"; + SyntaxKind[SyntaxKind["ImportDeclaration"] = 230] = "ImportDeclaration"; + SyntaxKind[SyntaxKind["ImportClause"] = 231] = "ImportClause"; + SyntaxKind[SyntaxKind["NamespaceImport"] = 232] = "NamespaceImport"; + SyntaxKind[SyntaxKind["NamedImports"] = 233] = "NamedImports"; + SyntaxKind[SyntaxKind["ImportSpecifier"] = 234] = "ImportSpecifier"; + SyntaxKind[SyntaxKind["ExportAssignment"] = 235] = "ExportAssignment"; + SyntaxKind[SyntaxKind["ExportDeclaration"] = 236] = "ExportDeclaration"; + SyntaxKind[SyntaxKind["NamedExports"] = 237] = "NamedExports"; + SyntaxKind[SyntaxKind["ExportSpecifier"] = 238] = "ExportSpecifier"; + SyntaxKind[SyntaxKind["MissingDeclaration"] = 239] = "MissingDeclaration"; // Module references - SyntaxKind[SyntaxKind["ExternalModuleReference"] = 239] = "ExternalModuleReference"; + SyntaxKind[SyntaxKind["ExternalModuleReference"] = 240] = "ExternalModuleReference"; // JSX - SyntaxKind[SyntaxKind["JsxElement"] = 240] = "JsxElement"; - SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 241] = "JsxSelfClosingElement"; - SyntaxKind[SyntaxKind["JsxOpeningElement"] = 242] = "JsxOpeningElement"; - SyntaxKind[SyntaxKind["JsxText"] = 243] = "JsxText"; - SyntaxKind[SyntaxKind["JsxClosingElement"] = 244] = "JsxClosingElement"; - SyntaxKind[SyntaxKind["JsxAttribute"] = 245] = "JsxAttribute"; - SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 246] = "JsxSpreadAttribute"; - SyntaxKind[SyntaxKind["JsxExpression"] = 247] = "JsxExpression"; + SyntaxKind[SyntaxKind["JsxElement"] = 241] = "JsxElement"; + SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 242] = "JsxSelfClosingElement"; + SyntaxKind[SyntaxKind["JsxOpeningElement"] = 243] = "JsxOpeningElement"; + SyntaxKind[SyntaxKind["JsxText"] = 244] = "JsxText"; + SyntaxKind[SyntaxKind["JsxClosingElement"] = 245] = "JsxClosingElement"; + SyntaxKind[SyntaxKind["JsxAttribute"] = 246] = "JsxAttribute"; + SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 247] = "JsxSpreadAttribute"; + SyntaxKind[SyntaxKind["JsxExpression"] = 248] = "JsxExpression"; // Clauses - SyntaxKind[SyntaxKind["CaseClause"] = 248] = "CaseClause"; - SyntaxKind[SyntaxKind["DefaultClause"] = 249] = "DefaultClause"; - SyntaxKind[SyntaxKind["HeritageClause"] = 250] = "HeritageClause"; - SyntaxKind[SyntaxKind["CatchClause"] = 251] = "CatchClause"; + SyntaxKind[SyntaxKind["CaseClause"] = 249] = "CaseClause"; + SyntaxKind[SyntaxKind["DefaultClause"] = 250] = "DefaultClause"; + SyntaxKind[SyntaxKind["HeritageClause"] = 251] = "HeritageClause"; + SyntaxKind[SyntaxKind["CatchClause"] = 252] = "CatchClause"; // Property assignments - SyntaxKind[SyntaxKind["PropertyAssignment"] = 252] = "PropertyAssignment"; - SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 253] = "ShorthandPropertyAssignment"; + SyntaxKind[SyntaxKind["PropertyAssignment"] = 253] = "PropertyAssignment"; + SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 254] = "ShorthandPropertyAssignment"; // Enum - SyntaxKind[SyntaxKind["EnumMember"] = 254] = "EnumMember"; + SyntaxKind[SyntaxKind["EnumMember"] = 255] = "EnumMember"; // Top-level nodes - SyntaxKind[SyntaxKind["SourceFile"] = 255] = "SourceFile"; + SyntaxKind[SyntaxKind["SourceFile"] = 256] = "SourceFile"; // JSDoc nodes - SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 256] = "JSDocTypeExpression"; + SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 257] = "JSDocTypeExpression"; // The * type - SyntaxKind[SyntaxKind["JSDocAllType"] = 257] = "JSDocAllType"; + SyntaxKind[SyntaxKind["JSDocAllType"] = 258] = "JSDocAllType"; // The ? type - SyntaxKind[SyntaxKind["JSDocUnknownType"] = 258] = "JSDocUnknownType"; - SyntaxKind[SyntaxKind["JSDocArrayType"] = 259] = "JSDocArrayType"; - SyntaxKind[SyntaxKind["JSDocUnionType"] = 260] = "JSDocUnionType"; - SyntaxKind[SyntaxKind["JSDocTupleType"] = 261] = "JSDocTupleType"; - SyntaxKind[SyntaxKind["JSDocNullableType"] = 262] = "JSDocNullableType"; - SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 263] = "JSDocNonNullableType"; - SyntaxKind[SyntaxKind["JSDocRecordType"] = 264] = "JSDocRecordType"; - SyntaxKind[SyntaxKind["JSDocRecordMember"] = 265] = "JSDocRecordMember"; - SyntaxKind[SyntaxKind["JSDocTypeReference"] = 266] = "JSDocTypeReference"; - SyntaxKind[SyntaxKind["JSDocOptionalType"] = 267] = "JSDocOptionalType"; - SyntaxKind[SyntaxKind["JSDocFunctionType"] = 268] = "JSDocFunctionType"; - SyntaxKind[SyntaxKind["JSDocVariadicType"] = 269] = "JSDocVariadicType"; - SyntaxKind[SyntaxKind["JSDocConstructorType"] = 270] = "JSDocConstructorType"; - SyntaxKind[SyntaxKind["JSDocThisType"] = 271] = "JSDocThisType"; - SyntaxKind[SyntaxKind["JSDocComment"] = 272] = "JSDocComment"; - SyntaxKind[SyntaxKind["JSDocTag"] = 273] = "JSDocTag"; - SyntaxKind[SyntaxKind["JSDocParameterTag"] = 274] = "JSDocParameterTag"; - SyntaxKind[SyntaxKind["JSDocReturnTag"] = 275] = "JSDocReturnTag"; - SyntaxKind[SyntaxKind["JSDocTypeTag"] = 276] = "JSDocTypeTag"; - SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 277] = "JSDocTemplateTag"; + SyntaxKind[SyntaxKind["JSDocUnknownType"] = 259] = "JSDocUnknownType"; + SyntaxKind[SyntaxKind["JSDocArrayType"] = 260] = "JSDocArrayType"; + SyntaxKind[SyntaxKind["JSDocUnionType"] = 261] = "JSDocUnionType"; + SyntaxKind[SyntaxKind["JSDocTupleType"] = 262] = "JSDocTupleType"; + SyntaxKind[SyntaxKind["JSDocNullableType"] = 263] = "JSDocNullableType"; + SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 264] = "JSDocNonNullableType"; + SyntaxKind[SyntaxKind["JSDocRecordType"] = 265] = "JSDocRecordType"; + SyntaxKind[SyntaxKind["JSDocRecordMember"] = 266] = "JSDocRecordMember"; + SyntaxKind[SyntaxKind["JSDocTypeReference"] = 267] = "JSDocTypeReference"; + SyntaxKind[SyntaxKind["JSDocOptionalType"] = 268] = "JSDocOptionalType"; + SyntaxKind[SyntaxKind["JSDocFunctionType"] = 269] = "JSDocFunctionType"; + SyntaxKind[SyntaxKind["JSDocVariadicType"] = 270] = "JSDocVariadicType"; + SyntaxKind[SyntaxKind["JSDocConstructorType"] = 271] = "JSDocConstructorType"; + SyntaxKind[SyntaxKind["JSDocThisType"] = 272] = "JSDocThisType"; + SyntaxKind[SyntaxKind["JSDocComment"] = 273] = "JSDocComment"; + SyntaxKind[SyntaxKind["JSDocTag"] = 274] = "JSDocTag"; + SyntaxKind[SyntaxKind["JSDocParameterTag"] = 275] = "JSDocParameterTag"; + SyntaxKind[SyntaxKind["JSDocReturnTag"] = 276] = "JSDocReturnTag"; + SyntaxKind[SyntaxKind["JSDocTypeTag"] = 277] = "JSDocTypeTag"; + SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 278] = "JSDocTemplateTag"; // Synthesized list - SyntaxKind[SyntaxKind["SyntaxList"] = 278] = "SyntaxList"; + SyntaxKind[SyntaxKind["SyntaxList"] = 279] = "SyntaxList"; // Enum value count - SyntaxKind[SyntaxKind["Count"] = 279] = "Count"; + SyntaxKind[SyntaxKind["Count"] = 280] = "Count"; // Markers SyntaxKind[SyntaxKind["FirstAssignment"] = 56] = "FirstAssignment"; SyntaxKind[SyntaxKind["LastAssignment"] = 68] = "LastAssignment"; SyntaxKind[SyntaxKind["FirstReservedWord"] = 70] = "FirstReservedWord"; SyntaxKind[SyntaxKind["LastReservedWord"] = 105] = "LastReservedWord"; SyntaxKind[SyntaxKind["FirstKeyword"] = 70] = "FirstKeyword"; - SyntaxKind[SyntaxKind["LastKeyword"] = 137] = "LastKeyword"; + SyntaxKind[SyntaxKind["LastKeyword"] = 138] = "LastKeyword"; SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 106] = "FirstFutureReservedWord"; SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 114] = "LastFutureReservedWord"; - SyntaxKind[SyntaxKind["FirstTypeNode"] = 153] = "FirstTypeNode"; - SyntaxKind[SyntaxKind["LastTypeNode"] = 165] = "LastTypeNode"; + SyntaxKind[SyntaxKind["FirstTypeNode"] = 154] = "FirstTypeNode"; + SyntaxKind[SyntaxKind["LastTypeNode"] = 166] = "LastTypeNode"; SyntaxKind[SyntaxKind["FirstPunctuation"] = 15] = "FirstPunctuation"; SyntaxKind[SyntaxKind["LastPunctuation"] = 68] = "LastPunctuation"; SyntaxKind[SyntaxKind["FirstToken"] = 0] = "FirstToken"; - SyntaxKind[SyntaxKind["LastToken"] = 137] = "LastToken"; + SyntaxKind[SyntaxKind["LastToken"] = 138] = "LastToken"; SyntaxKind[SyntaxKind["FirstTriviaToken"] = 2] = "FirstTriviaToken"; SyntaxKind[SyntaxKind["LastTriviaToken"] = 7] = "LastTriviaToken"; SyntaxKind[SyntaxKind["FirstLiteralToken"] = 8] = "FirstLiteralToken"; @@ -357,7 +358,7 @@ var ts; SyntaxKind[SyntaxKind["LastTemplateToken"] = 14] = "LastTemplateToken"; SyntaxKind[SyntaxKind["FirstBinaryOperator"] = 25] = "FirstBinaryOperator"; SyntaxKind[SyntaxKind["LastBinaryOperator"] = 68] = "LastBinaryOperator"; - SyntaxKind[SyntaxKind["FirstNode"] = 138] = "FirstNode"; + SyntaxKind[SyntaxKind["FirstNode"] = 139] = "FirstNode"; })(ts.SyntaxKind || (ts.SyntaxKind = {})); var SyntaxKind = ts.SyntaxKind; (function (NodeFlags) { @@ -393,8 +394,10 @@ var ts; NodeFlags[NodeFlags["ThisNodeOrAnySubNodesHasError"] = 268435456] = "ThisNodeOrAnySubNodesHasError"; NodeFlags[NodeFlags["HasAggregatedChildData"] = 536870912] = "HasAggregatedChildData"; NodeFlags[NodeFlags["HasJsxSpreadAttribute"] = 1073741824] = "HasJsxSpreadAttribute"; - NodeFlags[NodeFlags["Modifier"] = 959] = "Modifier"; + NodeFlags[NodeFlags["Modifier"] = 1023] = "Modifier"; NodeFlags[NodeFlags["AccessibilityModifier"] = 28] = "AccessibilityModifier"; + // Accessibility modifiers and 'readonly' can be attached to a parameter in a constructor to make it a property. + NodeFlags[NodeFlags["ParameterPropertyModifier"] = 92] = "ParameterPropertyModifier"; NodeFlags[NodeFlags["BlockScoped"] = 3072] = "BlockScoped"; NodeFlags[NodeFlags["ReachabilityCheckFlags"] = 98304] = "ReachabilityCheckFlags"; NodeFlags[NodeFlags["EmitHelperFlags"] = 3932160] = "EmitHelperFlags"; @@ -420,6 +423,20 @@ var ts; RelationComparisonResult[RelationComparisonResult["FailedAndReported"] = 3] = "FailedAndReported"; })(ts.RelationComparisonResult || (ts.RelationComparisonResult = {})); var RelationComparisonResult = ts.RelationComparisonResult; + (function (FlowFlags) { + FlowFlags[FlowFlags["Unreachable"] = 1] = "Unreachable"; + FlowFlags[FlowFlags["Start"] = 2] = "Start"; + FlowFlags[FlowFlags["BranchLabel"] = 4] = "BranchLabel"; + FlowFlags[FlowFlags["LoopLabel"] = 8] = "LoopLabel"; + FlowFlags[FlowFlags["Assignment"] = 16] = "Assignment"; + FlowFlags[FlowFlags["TrueCondition"] = 32] = "TrueCondition"; + FlowFlags[FlowFlags["FalseCondition"] = 64] = "FalseCondition"; + FlowFlags[FlowFlags["Referenced"] = 128] = "Referenced"; + FlowFlags[FlowFlags["Shared"] = 256] = "Shared"; + FlowFlags[FlowFlags["Label"] = 12] = "Label"; + FlowFlags[FlowFlags["Condition"] = 96] = "Condition"; + })(ts.FlowFlags || (ts.FlowFlags = {})); + var FlowFlags = ts.FlowFlags; var OperationCanceledException = (function () { function OperationCanceledException() { } @@ -448,6 +465,7 @@ var ts; TypeFormatFlags[TypeFormatFlags["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature"; TypeFormatFlags[TypeFormatFlags["InElementType"] = 64] = "InElementType"; TypeFormatFlags[TypeFormatFlags["UseFullyQualifiedType"] = 128] = "UseFullyQualifiedType"; + TypeFormatFlags[TypeFormatFlags["InFirstTypeArgument"] = 256] = "InFirstTypeArgument"; })(ts.TypeFormatFlags || (ts.TypeFormatFlags = {})); var TypeFormatFlags = ts.TypeFormatFlags; (function (SymbolFormatFlags) { @@ -625,10 +643,11 @@ var ts; TypeFlags[TypeFlags["ESSymbol"] = 16777216] = "ESSymbol"; TypeFlags[TypeFlags["ThisType"] = 33554432] = "ThisType"; TypeFlags[TypeFlags["ObjectLiteralPatternWithComputedProperties"] = 67108864] = "ObjectLiteralPatternWithComputedProperties"; + TypeFlags[TypeFlags["Never"] = 134217728] = "Never"; /* @internal */ TypeFlags[TypeFlags["Nullable"] = 96] = "Nullable"; /* @internal */ - TypeFlags[TypeFlags["Intrinsic"] = 16777343] = "Intrinsic"; + TypeFlags[TypeFlags["Intrinsic"] = 150995071] = "Intrinsic"; /* @internal */ TypeFlags[TypeFlags["Primitive"] = 16777726] = "Primitive"; TypeFlags[TypeFlags["StringLike"] = 258] = "StringLike"; @@ -636,6 +655,7 @@ var ts; TypeFlags[TypeFlags["ObjectType"] = 80896] = "ObjectType"; TypeFlags[TypeFlags["UnionOrIntersection"] = 49152] = "UnionOrIntersection"; TypeFlags[TypeFlags["StructuredType"] = 130048] = "StructuredType"; + TypeFlags[TypeFlags["Narrowable"] = 97793] = "Narrowable"; /* @internal */ TypeFlags[TypeFlags["RequiresWidening"] = 6291456] = "RequiresWidening"; /* @internal */ @@ -940,11 +960,11 @@ var ts; return undefined; } ts.forEach = forEach; - function contains(array, value) { + function contains(array, value, areEqual) { if (array) { for (var _i = 0, array_1 = array; _i < array_1.length; _i++) { var v = array_1[_i]; - if (v === value) { + if (areEqual ? areEqual(v, value) : v === value) { return true; } } @@ -1010,13 +1030,13 @@ var ts; return array1.concat(array2); } ts.concatenate = concatenate; - function deduplicate(array) { + function deduplicate(array, areEqual) { var result; if (array) { result = []; for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { var item = array_5[_i]; - if (!contains(result, item)) { + if (!contains(result, item, areEqual)) { result.push(item); } } @@ -1890,77 +1910,7 @@ var ts; var _path = require("path"); var _os = require("os"); var _crypto = require("crypto"); - // average async stat takes about 30 microseconds - // set chunk size to do 30 files in < 1 millisecond - function createPollingWatchedFileSet(interval, chunkSize) { - if (interval === void 0) { interval = 2500; } - if (chunkSize === void 0) { chunkSize = 30; } - var watchedFiles = []; - var nextFileToCheck = 0; - var watchTimer; - function getModifiedTime(fileName) { - return _fs.statSync(fileName).mtime; - } - function poll(checkedIndex) { - var watchedFile = watchedFiles[checkedIndex]; - if (!watchedFile) { - return; - } - _fs.stat(watchedFile.fileName, function (err, stats) { - if (err) { - watchedFile.callback(watchedFile.fileName); - } - else if (watchedFile.mtime.getTime() !== stats.mtime.getTime()) { - watchedFile.mtime = getModifiedTime(watchedFile.fileName); - watchedFile.callback(watchedFile.fileName, watchedFile.mtime.getTime() === 0); - } - }); - } - // this implementation uses polling and - // stat due to inconsistencies of fs.watch - // and efficiency of stat on modern filesystems - function startWatchTimer() { - watchTimer = setInterval(function () { - var count = 0; - var nextToCheck = nextFileToCheck; - var firstCheck = -1; - while ((count < chunkSize) && (nextToCheck !== firstCheck)) { - poll(nextToCheck); - if (firstCheck < 0) { - firstCheck = nextToCheck; - } - nextToCheck++; - if (nextToCheck === watchedFiles.length) { - nextToCheck = 0; - } - count++; - } - nextFileToCheck = nextToCheck; - }, interval); - } - function addFile(fileName, callback) { - var file = { - fileName: fileName, - callback: callback, - mtime: getModifiedTime(fileName) - }; - watchedFiles.push(file); - if (watchedFiles.length === 1) { - startWatchTimer(); - } - return file; - } - function removeFile(file) { - watchedFiles = ts.copyListRemovingItem(file, watchedFiles); - } - return { - getModifiedTime: getModifiedTime, - poll: poll, - startWatchTimer: startWatchTimer, - addFile: addFile, - removeFile: removeFile - }; - } + var useNonPollingWatchers = process.env["TSC_NONPOLLING_WATCHER"]; function createWatchedFileSet() { var dirWatchers = {}; // One file can have multiple watchers @@ -2030,20 +1980,6 @@ var ts; } } } - // REVIEW: for now this implementation uses polling. - // The advantage of polling is that it works reliably - // on all os and with network mounted files. - // For 90 referenced files, the average time to detect - // changes is 2*msInterval (by default 5 seconds). - // The overhead of this is .04 percent (1/2500) with - // average pause of < 1 millisecond (and max - // pause less than 1.5 milliseconds); question is - // do we anticipate reference sets in the 100s and - // do we care about waiting 10-20 seconds to detect - // changes for large reference sets? If so, do we want - // to increase the chunk size or decrease the interval - // time dynamically to match the large reference set? - var pollingWatchedFileSet = createPollingWatchedFileSet(); var watchedFileSet = createWatchedFileSet(); function isNode4OrLater() { return parseInt(process.version.charAt(1)) >= 4; @@ -2131,7 +2067,7 @@ var ts; var directories = []; for (var _i = 0, files_2 = files; _i < files_2.length; _i++) { var current = files_2[_i]; - // This is necessary because on some file system node fails to exclude + // This is necessary because on some file system node fails to exclude // "." and "..". See https://github.com/nodejs/node/issues/4002 if (current === "." || current === "..") { continue; @@ -2165,15 +2101,24 @@ var ts; readFile: readFile, writeFile: writeFile, watchFile: function (fileName, callback) { - // Node 4.0 stabilized the `fs.watch` function on Windows which avoids polling - // and is more efficient than `fs.watchFile` (ref: https://github.com/nodejs/node/pull/2649 - // and https://github.com/Microsoft/TypeScript/issues/4643), therefore - // if the current node.js version is newer than 4, use `fs.watch` instead. - var watchSet = isNode4OrLater() ? watchedFileSet : pollingWatchedFileSet; - var watchedFile = watchSet.addFile(fileName, callback); - return { - close: function () { return watchSet.removeFile(watchedFile); } - }; + if (useNonPollingWatchers) { + var watchedFile_1 = watchedFileSet.addFile(fileName, callback); + return { + close: function () { return watchedFileSet.removeFile(watchedFile_1); } + }; + } + else { + _fs.watchFile(fileName, { persistent: true, interval: 250 }, fileChanged); + return { + close: function () { return _fs.unwatchFile(fileName, fileChanged); } + }; + } + function fileChanged(curr, prev) { + if (+curr.mtime <= +prev.mtime) { + return; + } + callback(fileName); + } }, watchDirectory: function (directoryName, callback, recursive) { // Node 4.0 `fs.watch` function supports the "recursive" option on both OSX and Windows @@ -2234,10 +2179,14 @@ var ts; }, exit: function (exitCode) { process.exit(exitCode); + }, + realpath: function (path) { + return _fs.realpathSync(path); } }; } function getChakraSystem() { + var realpath = ChakraHost.realpath && (function (path) { return ChakraHost.realpath(path); }); return { newLine: ChakraHost.newLine || "\r\n", args: ChakraHost.args, @@ -2261,10 +2210,14 @@ var ts; getExecutingFilePath: function () { return ChakraHost.executingFile; }, getCurrentDirectory: function () { return ChakraHost.currentDirectory; }, readDirectory: ChakraHost.readDirectory, - exit: ChakraHost.quit + exit: ChakraHost.quit, + realpath: realpath }; } - if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { + if (typeof ChakraHost !== "undefined") { + return getChakraSystem(); + } + else if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { return getWScriptSystem(); } else if (typeof process !== "undefined" && process.nextTick && !process.browser && typeof require !== "undefined") { @@ -2272,9 +2225,6 @@ var ts; // process.browser check excludes webpack and browserify return getNodeSystem(); } - else if (typeof ChakraHost !== "undefined") { - return getChakraSystem(); - } else { return undefined; // Unsupported host } @@ -2365,7 +2315,6 @@ var ts; A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: ts.DiagnosticCategory.Error, key: "A_return_statement_can_only_be_used_within_a_function_body_1108", message: "A 'return' statement can only be used within a function body." }, Expression_expected: { code: 1109, category: ts.DiagnosticCategory.Error, key: "Expression_expected_1109", message: "Expression expected." }, Type_expected: { code: 1110, category: ts.DiagnosticCategory.Error, key: "Type_expected_1110", message: "Type expected." }, - A_class_member_cannot_be_declared_optional: { code: 1112, category: ts.DiagnosticCategory.Error, key: "A_class_member_cannot_be_declared_optional_1112", message: "A class member cannot be declared optional." }, A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: ts.DiagnosticCategory.Error, key: "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113", message: "A 'default' clause cannot appear more than once in a 'switch' statement." }, Duplicate_label_0: { code: 1114, category: ts.DiagnosticCategory.Error, key: "Duplicate_label_0_1114", message: "Duplicate label '{0}'" }, A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: ts.DiagnosticCategory.Error, key: "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115", message: "A 'continue' statement can only jump to a label of an enclosing iteration statement." }, @@ -2489,6 +2438,9 @@ var ts; A_type_literal_property_cannot_have_an_initializer: { code: 1247, category: ts.DiagnosticCategory.Error, key: "A_type_literal_property_cannot_have_an_initializer_1247", message: "A type literal property cannot have an initializer." }, A_class_member_cannot_have_the_0_keyword: { code: 1248, category: ts.DiagnosticCategory.Error, key: "A_class_member_cannot_have_the_0_keyword_1248", message: "A class member cannot have the '{0}' keyword." }, A_decorator_can_only_decorate_a_method_implementation_not_an_overload: { code: 1249, category: ts.DiagnosticCategory.Error, key: "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249", message: "A decorator can only decorate a method implementation, not an overload." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5: { code: 1250, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode: { code: 1251, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode: { code: 1252, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Modules are automatically in strict mode." }, with_statements_are_not_allowed_in_an_async_function_block: { code: 1300, category: ts.DiagnosticCategory.Error, key: "with_statements_are_not_allowed_in_an_async_function_block_1300", message: "'with' statements are not allowed in an async function block." }, await_expression_is_only_allowed_within_an_async_function: { code: 1308, category: ts.DiagnosticCategory.Error, key: "await_expression_is_only_allowed_within_an_async_function_1308", message: "'await' expression is only allowed within an async function." }, Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1311, category: ts.DiagnosticCategory.Error, key: "Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher_1311", message: "Async functions are only available when targeting ECMAScript 6 and higher." }, @@ -2718,7 +2670,10 @@ var ts; A_module_cannot_have_multiple_default_exports: { code: 2528, category: ts.DiagnosticCategory.Error, key: "A_module_cannot_have_multiple_default_exports_2528", message: "A module cannot have multiple default exports." }, Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions: { code: 2529, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529", message: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions." }, Property_0_is_incompatible_with_index_signature: { code: 2530, category: ts.DiagnosticCategory.Error, key: "Property_0_is_incompatible_with_index_signature_2530", message: "Property '{0}' is incompatible with index signature." }, - Object_is_possibly_null_or_undefined: { code: 2531, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_or_undefined_2531", message: "Object is possibly 'null' or 'undefined'." }, + Object_is_possibly_null: { code: 2531, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_2531", message: "Object is possibly 'null'." }, + Object_is_possibly_undefined: { code: 2532, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_undefined_2532", message: "Object is possibly 'undefined'." }, + Object_is_possibly_null_or_undefined: { code: 2533, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_or_undefined_2533", message: "Object is possibly 'null' or 'undefined'." }, + A_function_returning_never_cannot_have_a_reachable_end_point: { code: 2534, category: ts.DiagnosticCategory.Error, key: "A_function_returning_never_cannot_have_a_reachable_end_point_2534", message: "A function returning 'never' cannot have a reachable end point." }, JSX_element_attributes_type_0_may_not_be_a_union_type: { code: 2600, category: ts.DiagnosticCategory.Error, key: "JSX_element_attributes_type_0_may_not_be_a_union_type_2600", message: "JSX element attributes type '{0}' may not be a union type." }, The_return_type_of_a_JSX_element_constructor_must_return_an_object_type: { code: 2601, category: ts.DiagnosticCategory.Error, key: "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601", message: "The return type of a JSX element constructor must return an object type." }, JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist: { code: 2602, category: ts.DiagnosticCategory.Error, key: "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602", message: "JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist." }, @@ -2738,11 +2693,10 @@ var ts; Type_0_provides_no_match_for_the_signature_1: { code: 2658, category: ts.DiagnosticCategory.Error, key: "Type_0_provides_no_match_for_the_signature_1_2658", message: "Type '{0}' provides no match for the signature '{1}'" }, super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher: { code: 2659, category: ts.DiagnosticCategory.Error, key: "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659", message: "'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher." }, super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions: { code: 2660, category: ts.DiagnosticCategory.Error, key: "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660", message: "'super' can only be referenced in members of derived classes or object literal expressions." }, - Cannot_re_export_name_that_is_not_defined_in_the_module: { code: 2661, category: ts.DiagnosticCategory.Error, key: "Cannot_re_export_name_that_is_not_defined_in_the_module_2661", message: "Cannot re-export name that is not defined in the module." }, + Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module: { code: 2661, category: ts.DiagnosticCategory.Error, key: "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661", message: "Cannot export '{0}'. Only local declarations can be exported from a module." }, Cannot_find_name_0_Did_you_mean_the_static_member_1_0: { code: 2662, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662", message: "Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?" }, Cannot_find_name_0_Did_you_mean_the_instance_member_this_0: { code: 2663, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663", message: "Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?" }, Invalid_module_name_in_augmentation_module_0_cannot_be_found: { code: 2664, category: ts.DiagnosticCategory.Error, key: "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664", message: "Invalid module name in augmentation, module '{0}' cannot be found." }, - Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope: { code: 2665, category: ts.DiagnosticCategory.Error, key: "Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope_2665", message: "Module augmentation cannot introduce new names in the top level scope." }, Exports_and_export_assignments_are_not_permitted_in_module_augmentations: { code: 2666, category: ts.DiagnosticCategory.Error, key: "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666", message: "Exports and export assignments are not permitted in module augmentations." }, Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module: { code: 2667, category: ts.DiagnosticCategory.Error, key: "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667", message: "Imports are not permitted in module augmentations. Consider moving them to the enclosing external module." }, export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible: { code: 2668, category: ts.DiagnosticCategory.Error, key: "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668", message: "'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible." }, @@ -2759,7 +2713,7 @@ var ts; A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void: { code: 2679, category: ts.DiagnosticCategory.Error, key: "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679", message: "A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'." }, A_this_parameter_must_be_the_first_parameter: { code: 2680, category: ts.DiagnosticCategory.Error, key: "A_this_parameter_must_be_the_first_parameter_2680", message: "A 'this' parameter must be the first parameter." }, A_constructor_cannot_have_a_this_parameter: { code: 2681, category: ts.DiagnosticCategory.Error, key: "A_constructor_cannot_have_a_this_parameter_2681", message: "A constructor cannot have a 'this' parameter." }, - A_setter_cannot_have_a_this_parameter: { code: 2682, category: ts.DiagnosticCategory.Error, key: "A_setter_cannot_have_a_this_parameter_2682", message: "A setter cannot have a 'this' parameter." }, + get_and_set_accessor_must_have_the_same_this_type: { code: 2682, category: ts.DiagnosticCategory.Error, key: "get_and_set_accessor_must_have_the_same_this_type_2682", message: "'get' and 'set' accessor must have the same 'this' type." }, this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation: { code: 2683, category: ts.DiagnosticCategory.Error, key: "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683", message: "'this' implicitly has type 'any' because it does not have a type annotation." }, The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1: { code: 2684, category: ts.DiagnosticCategory.Error, key: "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684", message: "The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'." }, The_this_types_of_each_signature_are_incompatible: { code: 2685, category: ts.DiagnosticCategory.Error, key: "The_this_types_of_each_signature_are_incompatible_2685", message: "The 'this' types of each signature are incompatible." }, @@ -2856,6 +2810,8 @@ var ts; Option_paths_cannot_be_used_without_specifying_baseUrl_option: { code: 5060, category: ts.DiagnosticCategory.Error, key: "Option_paths_cannot_be_used_without_specifying_baseUrl_option_5060", message: "Option 'paths' cannot be used without specifying '--baseUrl' option." }, Pattern_0_can_have_at_most_one_Asterisk_character: { code: 5061, category: ts.DiagnosticCategory.Error, key: "Pattern_0_can_have_at_most_one_Asterisk_character_5061", message: "Pattern '{0}' can have at most one '*' character" }, Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character: { code: 5062, category: ts.DiagnosticCategory.Error, key: "Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character_5062", message: "Substitution '{0}' in pattern '{1}' in can have at most one '*' character" }, + Substututions_for_pattern_0_should_be_an_array: { code: 5063, category: ts.DiagnosticCategory.Error, key: "Substututions_for_pattern_0_should_be_an_array_5063", message: "Substututions for pattern '{0}' should be an array." }, + Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2: { code: 5064, category: ts.DiagnosticCategory.Error, key: "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064", message: "Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'." }, Concatenate_and_emit_output_to_single_file: { code: 6001, category: ts.DiagnosticCategory.Message, key: "Concatenate_and_emit_output_to_single_file_6001", message: "Concatenate and emit output to single file." }, Generates_corresponding_d_ts_file: { code: 6002, category: ts.DiagnosticCategory.Message, key: "Generates_corresponding_d_ts_file_6002", message: "Generates corresponding '.d.ts' file." }, Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: ts.DiagnosticCategory.Message, key: "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", message: "Specify the location where debugger should locate map files instead of generated locations." }, @@ -2966,6 +2922,8 @@ var ts; Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder: { code: 6126, category: ts.DiagnosticCategory.Message, key: "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126", message: "Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder." }, Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1: { code: 6127, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127", message: "======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========" }, Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set: { code: 6128, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128", message: "======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========" }, + The_config_file_0_found_doesn_t_contain_any_source_files: { code: 6129, category: ts.DiagnosticCategory.Error, key: "The_config_file_0_found_doesn_t_contain_any_source_files_6129", message: "The config file '{0}' found doesn't contain any source files." }, + Resolving_real_path_for_0_result_1: { code: 6130, category: ts.DiagnosticCategory.Message, key: "Resolving_real_path_for_0_result_1_6130", message: "Resolving real path for '{0}', result '{1}'" }, Variable_0_implicitly_has_an_1_type: { code: 7005, category: ts.DiagnosticCategory.Error, key: "Variable_0_implicitly_has_an_1_type_7005", message: "Variable '{0}' implicitly has an '{1}' type." }, Parameter_0_implicitly_has_an_1_type: { code: 7006, category: ts.DiagnosticCategory.Error, key: "Parameter_0_implicitly_has_an_1_type_7006", message: "Parameter '{0}' implicitly has an '{1}' type." }, Member_0_implicitly_has_an_1_type: { code: 7008, category: ts.DiagnosticCategory.Error, key: "Member_0_implicitly_has_an_1_type_7008", message: "Member '{0}' implicitly has an '{1}' type." }, @@ -3053,7 +3011,7 @@ var ts; "false": 84 /* FalseKeyword */, "finally": 85 /* FinallyKeyword */, "for": 86 /* ForKeyword */, - "from": 135 /* FromKeyword */, + "from": 136 /* FromKeyword */, "function": 87 /* FunctionKeyword */, "get": 123 /* GetKeyword */, "if": 88 /* IfKeyword */, @@ -3066,30 +3024,31 @@ var ts; "let": 108 /* LetKeyword */, "module": 125 /* ModuleKeyword */, "namespace": 126 /* NamespaceKeyword */, + "never": 127 /* NeverKeyword */, "new": 92 /* NewKeyword */, "null": 93 /* NullKeyword */, - "number": 129 /* NumberKeyword */, + "number": 130 /* NumberKeyword */, "package": 109 /* PackageKeyword */, "private": 110 /* PrivateKeyword */, "protected": 111 /* ProtectedKeyword */, "public": 112 /* PublicKeyword */, - "readonly": 127 /* ReadonlyKeyword */, - "require": 128 /* RequireKeyword */, - "global": 136 /* GlobalKeyword */, + "readonly": 128 /* ReadonlyKeyword */, + "require": 129 /* RequireKeyword */, + "global": 137 /* GlobalKeyword */, "return": 94 /* ReturnKeyword */, - "set": 130 /* SetKeyword */, + "set": 131 /* SetKeyword */, "static": 113 /* StaticKeyword */, - "string": 131 /* StringKeyword */, + "string": 132 /* StringKeyword */, "super": 95 /* SuperKeyword */, "switch": 96 /* SwitchKeyword */, - "symbol": 132 /* SymbolKeyword */, + "symbol": 133 /* SymbolKeyword */, "this": 97 /* ThisKeyword */, "throw": 98 /* ThrowKeyword */, "true": 99 /* TrueKeyword */, "try": 100 /* TryKeyword */, - "type": 133 /* TypeKeyword */, + "type": 134 /* TypeKeyword */, "typeof": 101 /* TypeOfKeyword */, - "undefined": 134 /* UndefinedKeyword */, + "undefined": 135 /* UndefinedKeyword */, "var": 102 /* VarKeyword */, "void": 103 /* VoidKeyword */, "while": 104 /* WhileKeyword */, @@ -3097,7 +3056,7 @@ var ts; "yield": 114 /* YieldKeyword */, "async": 118 /* AsyncKeyword */, "await": 119 /* AwaitKeyword */, - "of": 137 /* OfKeyword */, + "of": 138 /* OfKeyword */, "{": 15 /* OpenBraceToken */, "}": 16 /* CloseBraceToken */, "(": 17 /* OpenParenToken */, @@ -4515,7 +4474,7 @@ var ts; break; } } - return token = 243 /* JsxText */; + return token = 244 /* JsxText */; } // Scans a JSX identifier; these differ from normal identifiers in that // they allow dashes @@ -4715,6 +4674,24 @@ var ts; return node.end - node.pos; } ts.getFullWidth = getFullWidth; + function mapIsEqualTo(map1, map2) { + if (!map1 || !map2) { + return map1 === map2; + } + return containsAll(map1, map2) && containsAll(map2, map1); + } + ts.mapIsEqualTo = mapIsEqualTo; + function containsAll(map, other) { + for (var key in map) { + if (!ts.hasProperty(map, key)) { + continue; + } + if (!ts.hasProperty(other, key) || map[key] !== other[key]) { + return false; + } + } + return true; + } function arrayIsEqualTo(array1, array2, equaler) { if (!array1 || !array2) { return array1 === array2; @@ -4805,7 +4782,7 @@ var ts; } } function getSourceFileOfNode(node) { - while (node && node.kind !== 255 /* SourceFile */) { + while (node && node.kind !== 256 /* SourceFile */) { node = node.parent; } return node; @@ -4813,11 +4790,11 @@ var ts; ts.getSourceFileOfNode = getSourceFileOfNode; function isStatementWithLocals(node) { switch (node.kind) { - case 198 /* Block */: - case 226 /* CaseBlock */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: + case 199 /* Block */: + case 227 /* CaseBlock */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: return true; } return false; @@ -4947,13 +4924,13 @@ var ts; } ts.isBlockOrCatchScoped = isBlockOrCatchScoped; function isAmbientModule(node) { - return node && node.kind === 224 /* ModuleDeclaration */ && + return node && node.kind === 225 /* ModuleDeclaration */ && (node.name.kind === 9 /* StringLiteral */ || isGlobalScopeAugmentation(node)); } ts.isAmbientModule = isAmbientModule; function isBlockScopedContainerTopLevel(node) { - return node.kind === 255 /* SourceFile */ || - node.kind === 224 /* ModuleDeclaration */ || + return node.kind === 256 /* SourceFile */ || + node.kind === 225 /* ModuleDeclaration */ || isFunctionLike(node) || isFunctionBlock(node); } @@ -4970,9 +4947,9 @@ var ts; return false; } switch (node.parent.kind) { - case 255 /* SourceFile */: + case 256 /* SourceFile */: return ts.isExternalModule(node.parent); - case 225 /* ModuleBlock */: + case 226 /* ModuleBlock */: return isAmbientModule(node.parent.parent) && !ts.isExternalModule(node.parent.parent.parent); } return false; @@ -4987,15 +4964,15 @@ var ts; return current; } switch (current.kind) { - case 255 /* SourceFile */: - case 226 /* CaseBlock */: - case 251 /* CatchClause */: - case 224 /* ModuleDeclaration */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: + case 256 /* SourceFile */: + case 227 /* CaseBlock */: + case 252 /* CatchClause */: + case 225 /* ModuleDeclaration */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: return current; - case 198 /* Block */: + case 199 /* Block */: // function block is not considered block-scope container // see comment in binder.ts: bind(...), case for SyntaxKind.Block if (!isFunctionLike(current.parent)) { @@ -5008,9 +4985,9 @@ var ts; ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer; function isCatchClauseVariableDeclaration(declaration) { return declaration && - declaration.kind === 217 /* VariableDeclaration */ && + declaration.kind === 218 /* VariableDeclaration */ && declaration.parent && - declaration.parent.kind === 251 /* CatchClause */; + declaration.parent.kind === 252 /* CatchClause */; } ts.isCatchClauseVariableDeclaration = isCatchClauseVariableDeclaration; // Return display name of an identifier @@ -5048,11 +5025,11 @@ var ts; ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition; function getErrorSpanForArrowFunction(sourceFile, node) { var pos = ts.skipTrivia(sourceFile.text, node.pos); - if (node.body && node.body.kind === 198 /* Block */) { + if (node.body && node.body.kind === 199 /* Block */) { var startLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.pos).line; var endLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.end).line; if (startLine < endLine) { - // The arrow function spans multiple lines, + // The arrow function spans multiple lines, // make the error span be the first line, inclusive. return ts.createTextSpan(pos, getEndLinePosition(startLine, sourceFile) - pos + 1); } @@ -5062,7 +5039,7 @@ var ts; function getErrorSpanForNode(sourceFile, node) { var errorNode = node; switch (node.kind) { - case 255 /* SourceFile */: + case 256 /* SourceFile */: var pos_1 = ts.skipTrivia(sourceFile.text, 0, /*stopAfterLineBreak*/ false); if (pos_1 === sourceFile.text.length) { // file is empty - return span for the beginning of the file @@ -5071,23 +5048,23 @@ var ts; return getSpanOfTokenAtPosition(sourceFile, pos_1); // This list is a work in progress. Add missing node kinds to improve their error // spans. - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 221 /* InterfaceDeclaration */: - case 224 /* ModuleDeclaration */: - case 223 /* EnumDeclaration */: - case 254 /* EnumMember */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 222 /* TypeAliasDeclaration */: + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + case 225 /* ModuleDeclaration */: + case 224 /* EnumDeclaration */: + case 255 /* EnumMember */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 223 /* TypeAliasDeclaration */: errorNode = node.name; break; - case 179 /* ArrowFunction */: + case 180 /* ArrowFunction */: return getErrorSpanForArrowFunction(sourceFile, node); } if (errorNode === undefined) { @@ -5110,11 +5087,11 @@ var ts; } ts.isDeclarationFile = isDeclarationFile; function isConstEnumDeclaration(node) { - return node.kind === 223 /* EnumDeclaration */ && isConst(node); + return node.kind === 224 /* EnumDeclaration */ && isConst(node); } ts.isConstEnumDeclaration = isConstEnumDeclaration; function walkUpBindingElementsAndPatterns(node) { - while (node && (node.kind === 168 /* BindingElement */ || isBindingPattern(node))) { + while (node && (node.kind === 169 /* BindingElement */ || isBindingPattern(node))) { node = node.parent; } return node; @@ -5129,14 +5106,14 @@ var ts; function getCombinedNodeFlags(node) { node = walkUpBindingElementsAndPatterns(node); var flags = node.flags; - if (node.kind === 217 /* VariableDeclaration */) { + if (node.kind === 218 /* VariableDeclaration */) { node = node.parent; } - if (node && node.kind === 218 /* VariableDeclarationList */) { + if (node && node.kind === 219 /* VariableDeclarationList */) { flags |= node.flags; node = node.parent; } - if (node && node.kind === 199 /* VariableStatement */) { + if (node && node.kind === 200 /* VariableStatement */) { flags |= node.flags; } return flags; @@ -5151,11 +5128,11 @@ var ts; } ts.isLet = isLet; function isSuperCallExpression(n) { - return n.kind === 173 /* CallExpression */ && n.expression.kind === 95 /* SuperKeyword */; + return n.kind === 174 /* CallExpression */ && n.expression.kind === 95 /* SuperKeyword */; } ts.isSuperCallExpression = isSuperCallExpression; function isPrologueDirective(node) { - return node.kind === 201 /* ExpressionStatement */ && node.expression.kind === 9 /* StringLiteral */; + return node.kind === 202 /* ExpressionStatement */ && node.expression.kind === 9 /* StringLiteral */; } ts.isPrologueDirective = isPrologueDirective; function getLeadingCommentRangesOfNode(node, sourceFileOfNode) { @@ -5171,7 +5148,7 @@ var ts; } ts.getJsDocComments = getJsDocComments; function getJsDocCommentsFromText(node, text) { - var commentRanges = (node.kind === 141 /* Parameter */ || node.kind === 140 /* TypeParameter */) ? + var commentRanges = (node.kind === 142 /* Parameter */ || node.kind === 141 /* TypeParameter */) ? ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) : getLeadingCommentRangesOfNodeFromText(node, text); return ts.filter(commentRanges, isJsDocComment); @@ -5187,38 +5164,39 @@ var ts; ts.fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*/; ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*/; function isTypeNode(node) { - if (153 /* FirstTypeNode */ <= node.kind && node.kind <= 165 /* LastTypeNode */) { + if (154 /* FirstTypeNode */ <= node.kind && node.kind <= 166 /* LastTypeNode */) { return true; } switch (node.kind) { case 117 /* AnyKeyword */: - case 129 /* NumberKeyword */: - case 131 /* StringKeyword */: + case 130 /* NumberKeyword */: + case 132 /* StringKeyword */: case 120 /* BooleanKeyword */: - case 132 /* SymbolKeyword */: - case 134 /* UndefinedKeyword */: + case 133 /* SymbolKeyword */: + case 135 /* UndefinedKeyword */: + case 127 /* NeverKeyword */: return true; case 103 /* VoidKeyword */: - return node.parent.kind !== 182 /* VoidExpression */; - case 193 /* ExpressionWithTypeArguments */: + return node.parent.kind !== 183 /* VoidExpression */; + case 194 /* ExpressionWithTypeArguments */: return !isExpressionWithTypeArgumentsInClassExtendsClause(node); // Identifiers and qualified names may be type nodes, depending on their context. Climb // above them to find the lowest container case 69 /* Identifier */: // If the identifier is the RHS of a qualified name, then it's a type iff its parent is. - if (node.parent.kind === 138 /* QualifiedName */ && node.parent.right === node) { + if (node.parent.kind === 139 /* QualifiedName */ && node.parent.right === node) { node = node.parent; } - else if (node.parent.kind === 171 /* PropertyAccessExpression */ && node.parent.name === node) { + else if (node.parent.kind === 172 /* PropertyAccessExpression */ && node.parent.name === node) { node = node.parent; } // At this point, node is either a qualified name or an identifier - ts.Debug.assert(node.kind === 69 /* Identifier */ || node.kind === 138 /* QualifiedName */ || node.kind === 171 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'."); - case 138 /* QualifiedName */: - case 171 /* PropertyAccessExpression */: + ts.Debug.assert(node.kind === 69 /* Identifier */ || node.kind === 139 /* QualifiedName */ || node.kind === 172 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'."); + case 139 /* QualifiedName */: + case 172 /* PropertyAccessExpression */: case 97 /* ThisKeyword */: var parent_1 = node.parent; - if (parent_1.kind === 157 /* TypeQuery */) { + if (parent_1.kind === 158 /* TypeQuery */) { return false; } // Do not recursively call isTypeNode on the parent. In the example: @@ -5227,38 +5205,38 @@ var ts; // // Calling isTypeNode would consider the qualified name A.B a type node. Only C or // A.B.C is a type node. - if (153 /* FirstTypeNode */ <= parent_1.kind && parent_1.kind <= 165 /* LastTypeNode */) { + if (154 /* FirstTypeNode */ <= parent_1.kind && parent_1.kind <= 166 /* LastTypeNode */) { return true; } switch (parent_1.kind) { - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: return !isExpressionWithTypeArgumentsInClassExtendsClause(parent_1); - case 140 /* TypeParameter */: + case 141 /* TypeParameter */: return node === parent_1.constraint; - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 141 /* Parameter */: - case 217 /* VariableDeclaration */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 142 /* Parameter */: + case 218 /* VariableDeclaration */: return node === parent_1.type; - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 147 /* Constructor */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 148 /* Constructor */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: return node === parent_1.type; - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: return node === parent_1.type; - case 176 /* TypeAssertionExpression */: + case 177 /* TypeAssertionExpression */: return node === parent_1.type; - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: return parent_1.typeArguments && ts.indexOf(parent_1.typeArguments, node) >= 0; - case 175 /* TaggedTemplateExpression */: + case 176 /* TaggedTemplateExpression */: // TODO (drosen): TaggedTemplateExpressions may eventually support type arguments. return false; } @@ -5272,23 +5250,23 @@ var ts; return traverse(body); function traverse(node) { switch (node.kind) { - case 210 /* ReturnStatement */: + case 211 /* ReturnStatement */: return visitor(node); - case 226 /* CaseBlock */: - case 198 /* Block */: - case 202 /* IfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 211 /* WithStatement */: - case 212 /* SwitchStatement */: - case 248 /* CaseClause */: - case 249 /* DefaultClause */: - case 213 /* LabeledStatement */: - case 215 /* TryStatement */: - case 251 /* CatchClause */: + case 227 /* CaseBlock */: + case 199 /* Block */: + case 203 /* IfStatement */: + case 204 /* DoStatement */: + case 205 /* WhileStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 212 /* WithStatement */: + case 213 /* SwitchStatement */: + case 249 /* CaseClause */: + case 250 /* DefaultClause */: + case 214 /* LabeledStatement */: + case 216 /* TryStatement */: + case 252 /* CatchClause */: return ts.forEachChild(node, traverse); } } @@ -5298,18 +5276,18 @@ var ts; return traverse(body); function traverse(node) { switch (node.kind) { - case 189 /* YieldExpression */: + case 190 /* YieldExpression */: visitor(node); var operand = node.expression; if (operand) { traverse(operand); } - case 223 /* EnumDeclaration */: - case 221 /* InterfaceDeclaration */: - case 224 /* ModuleDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: + case 224 /* EnumDeclaration */: + case 222 /* InterfaceDeclaration */: + case 225 /* ModuleDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: // These are not allowed inside a generator now, but eventually they may be allowed // as local types. Regardless, any yield statements contained within them should be // skipped in this traversal. @@ -5317,7 +5295,7 @@ var ts; default: if (isFunctionLike(node)) { var name_5 = node.name; - if (name_5 && name_5.kind === 139 /* ComputedPropertyName */) { + if (name_5 && name_5.kind === 140 /* ComputedPropertyName */) { // Note that we will not include methods/accessors of a class because they would require // first descending into the class. This is by design. traverse(name_5.expression); @@ -5336,14 +5314,14 @@ var ts; function isVariableLike(node) { if (node) { switch (node.kind) { - case 168 /* BindingElement */: - case 254 /* EnumMember */: - case 141 /* Parameter */: - case 252 /* PropertyAssignment */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 253 /* ShorthandPropertyAssignment */: - case 217 /* VariableDeclaration */: + case 169 /* BindingElement */: + case 255 /* EnumMember */: + case 142 /* Parameter */: + case 253 /* PropertyAssignment */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 254 /* ShorthandPropertyAssignment */: + case 218 /* VariableDeclaration */: return true; } } @@ -5351,11 +5329,11 @@ var ts; } ts.isVariableLike = isVariableLike; function isAccessor(node) { - return node && (node.kind === 148 /* GetAccessor */ || node.kind === 149 /* SetAccessor */); + return node && (node.kind === 149 /* GetAccessor */ || node.kind === 150 /* SetAccessor */); } ts.isAccessor = isAccessor; function isClassLike(node) { - return node && (node.kind === 220 /* ClassDeclaration */ || node.kind === 191 /* ClassExpression */); + return node && (node.kind === 221 /* ClassDeclaration */ || node.kind === 192 /* ClassExpression */); } ts.isClassLike = isClassLike; function isFunctionLike(node) { @@ -5364,32 +5342,32 @@ var ts; ts.isFunctionLike = isFunctionLike; function isFunctionLikeKind(kind) { switch (kind) { - case 147 /* Constructor */: - case 178 /* FunctionExpression */: - case 219 /* FunctionDeclaration */: - case 179 /* ArrowFunction */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: - case 155 /* FunctionType */: - case 156 /* ConstructorType */: + case 148 /* Constructor */: + case 179 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: + case 180 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: return true; } } ts.isFunctionLikeKind = isFunctionLikeKind; function introducesArgumentsExoticObject(node) { switch (node.kind) { - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: return true; } return false; @@ -5397,24 +5375,24 @@ var ts; ts.introducesArgumentsExoticObject = introducesArgumentsExoticObject; function isIterationStatement(node, lookInLabeledStatements) { switch (node.kind) { - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 204 /* DoStatement */: + case 205 /* WhileStatement */: return true; - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements); } return false; } ts.isIterationStatement = isIterationStatement; function isFunctionBlock(node) { - return node && node.kind === 198 /* Block */ && isFunctionLike(node.parent); + return node && node.kind === 199 /* Block */ && isFunctionLike(node.parent); } ts.isFunctionBlock = isFunctionBlock; function isObjectLiteralMethod(node) { - return node && node.kind === 146 /* MethodDeclaration */ && node.parent.kind === 170 /* ObjectLiteralExpression */; + return node && node.kind === 147 /* MethodDeclaration */ && node.parent.kind === 171 /* ObjectLiteralExpression */; } ts.isObjectLiteralMethod = isObjectLiteralMethod; function isIdentifierTypePredicate(predicate) { @@ -5434,6 +5412,15 @@ var ts; } } ts.getContainingFunction = getContainingFunction; + function getContainingFunctionOrModule(node) { + while (true) { + node = node.parent; + if (isFunctionLike(node) || node.kind === 225 /* ModuleDeclaration */ || node.kind === 256 /* SourceFile */) { + return node; + } + } + } + ts.getContainingFunctionOrModule = getContainingFunctionOrModule; function getContainingClass(node) { while (true) { node = node.parent; @@ -5450,7 +5437,7 @@ var ts; return undefined; } switch (node.kind) { - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: // If the grandparent node is an object literal (as opposed to a class), // then the computed property is not a 'this' container. // A computed property name in a class needs to be a this container @@ -5465,9 +5452,9 @@ var ts; // the *body* of the container. node = node.parent; break; - case 142 /* Decorator */: + case 143 /* Decorator */: // Decorators are always applied outside of the body of a class or method. - if (node.parent.kind === 141 /* Parameter */ && isClassElement(node.parent.parent)) { + if (node.parent.kind === 142 /* Parameter */ && isClassElement(node.parent.parent)) { // If the decorator's parent is a Parameter, we resolve the this container from // the grandparent class declaration. node = node.parent.parent; @@ -5478,26 +5465,26 @@ var ts; node = node.parent; } break; - case 179 /* ArrowFunction */: + case 180 /* ArrowFunction */: if (!includeArrowFunctions) { continue; } // Fall through - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 224 /* ModuleDeclaration */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: - case 223 /* EnumDeclaration */: - case 255 /* SourceFile */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 225 /* ModuleDeclaration */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 224 /* EnumDeclaration */: + case 256 /* SourceFile */: return node; } } @@ -5518,26 +5505,26 @@ var ts; return node; } switch (node.kind) { - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: node = node.parent; break; - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: if (!stopOnFunctions) { continue; } - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: return node; - case 142 /* Decorator */: + case 143 /* Decorator */: // Decorators are always applied outside of the body of a class or method. - if (node.parent.kind === 141 /* Parameter */ && isClassElement(node.parent.parent)) { + if (node.parent.kind === 142 /* Parameter */ && isClassElement(node.parent.parent)) { // If the decorator's parent is a Parameter, we resolve the this container from // the grandparent class declaration. node = node.parent.parent; @@ -5556,20 +5543,20 @@ var ts; * Determines whether a node is a property or element access expression for super. */ function isSuperPropertyOrElementAccess(node) { - return (node.kind === 171 /* PropertyAccessExpression */ - || node.kind === 172 /* ElementAccessExpression */) + return (node.kind === 172 /* PropertyAccessExpression */ + || node.kind === 173 /* ElementAccessExpression */) && node.expression.kind === 95 /* SuperKeyword */; } ts.isSuperPropertyOrElementAccess = isSuperPropertyOrElementAccess; function getEntityNameFromTypeNode(node) { if (node) { switch (node.kind) { - case 154 /* TypeReference */: + case 155 /* TypeReference */: return node.typeName; - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: return node.expression; case 69 /* Identifier */: - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: return node; } } @@ -5577,7 +5564,7 @@ var ts; } ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode; function getInvokedExpression(node) { - if (node.kind === 175 /* TaggedTemplateExpression */) { + if (node.kind === 176 /* TaggedTemplateExpression */) { return node.tag; } // Will either be a CallExpression, NewExpression, or Decorator. @@ -5586,25 +5573,25 @@ var ts; ts.getInvokedExpression = getInvokedExpression; function nodeCanBeDecorated(node) { switch (node.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: // classes are valid targets return true; - case 144 /* PropertyDeclaration */: + case 145 /* PropertyDeclaration */: // property declarations are valid if their parent is a class declaration. - return node.parent.kind === 220 /* ClassDeclaration */; - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 146 /* MethodDeclaration */: + return node.parent.kind === 221 /* ClassDeclaration */; + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 147 /* MethodDeclaration */: // if this method has a body and its parent is a class declaration, this is a valid target. return node.body !== undefined - && node.parent.kind === 220 /* ClassDeclaration */; - case 141 /* Parameter */: + && node.parent.kind === 221 /* ClassDeclaration */; + case 142 /* Parameter */: // if the parameter's parent has a body and its grandparent is a class declaration, this is a valid target; return node.parent.body !== undefined - && (node.parent.kind === 147 /* Constructor */ - || node.parent.kind === 146 /* MethodDeclaration */ - || node.parent.kind === 149 /* SetAccessor */) - && node.parent.parent.kind === 220 /* ClassDeclaration */; + && (node.parent.kind === 148 /* Constructor */ + || node.parent.kind === 147 /* MethodDeclaration */ + || node.parent.kind === 150 /* SetAccessor */) + && node.parent.parent.kind === 221 /* ClassDeclaration */; } return false; } @@ -5615,18 +5602,18 @@ var ts; } ts.nodeIsDecorated = nodeIsDecorated; function isPropertyAccessExpression(node) { - return node.kind === 171 /* PropertyAccessExpression */; + return node.kind === 172 /* PropertyAccessExpression */; } ts.isPropertyAccessExpression = isPropertyAccessExpression; function isElementAccessExpression(node) { - return node.kind === 172 /* ElementAccessExpression */; + return node.kind === 173 /* ElementAccessExpression */; } ts.isElementAccessExpression = isElementAccessExpression; function isJSXTagName(node) { var parent = node.parent; - if (parent.kind === 242 /* JsxOpeningElement */ || - parent.kind === 241 /* JsxSelfClosingElement */ || - parent.kind === 244 /* JsxClosingElement */) { + if (parent.kind === 243 /* JsxOpeningElement */ || + parent.kind === 242 /* JsxSelfClosingElement */ || + parent.kind === 245 /* JsxClosingElement */) { return parent.tagName === node; } return false; @@ -5634,48 +5621,49 @@ var ts; ts.isJSXTagName = isJSXTagName; function isExpression(node) { switch (node.kind) { + case 97 /* ThisKeyword */: case 95 /* SuperKeyword */: case 93 /* NullKeyword */: case 99 /* TrueKeyword */: case 84 /* FalseKeyword */: case 10 /* RegularExpressionLiteral */: - case 169 /* ArrayLiteralExpression */: - case 170 /* ObjectLiteralExpression */: - case 171 /* PropertyAccessExpression */: - case 172 /* ElementAccessExpression */: - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 175 /* TaggedTemplateExpression */: - case 194 /* AsExpression */: - case 176 /* TypeAssertionExpression */: - case 195 /* NonNullExpression */: - case 177 /* ParenthesizedExpression */: - case 178 /* FunctionExpression */: - case 191 /* ClassExpression */: - case 179 /* ArrowFunction */: - case 182 /* VoidExpression */: - case 180 /* DeleteExpression */: - case 181 /* TypeOfExpression */: - case 184 /* PrefixUnaryExpression */: - case 185 /* PostfixUnaryExpression */: - case 186 /* BinaryExpression */: - case 187 /* ConditionalExpression */: - case 190 /* SpreadElementExpression */: - case 188 /* TemplateExpression */: + case 170 /* ArrayLiteralExpression */: + case 171 /* ObjectLiteralExpression */: + case 172 /* PropertyAccessExpression */: + case 173 /* ElementAccessExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: + case 176 /* TaggedTemplateExpression */: + case 195 /* AsExpression */: + case 177 /* TypeAssertionExpression */: + case 196 /* NonNullExpression */: + case 178 /* ParenthesizedExpression */: + case 179 /* FunctionExpression */: + case 192 /* ClassExpression */: + case 180 /* ArrowFunction */: + case 183 /* VoidExpression */: + case 181 /* DeleteExpression */: + case 182 /* TypeOfExpression */: + case 185 /* PrefixUnaryExpression */: + case 186 /* PostfixUnaryExpression */: + case 187 /* BinaryExpression */: + case 188 /* ConditionalExpression */: + case 191 /* SpreadElementExpression */: + case 189 /* TemplateExpression */: case 11 /* NoSubstitutionTemplateLiteral */: - case 192 /* OmittedExpression */: - case 240 /* JsxElement */: - case 241 /* JsxSelfClosingElement */: - case 189 /* YieldExpression */: - case 183 /* AwaitExpression */: + case 193 /* OmittedExpression */: + case 241 /* JsxElement */: + case 242 /* JsxSelfClosingElement */: + case 190 /* YieldExpression */: + case 184 /* AwaitExpression */: return true; - case 138 /* QualifiedName */: - while (node.parent.kind === 138 /* QualifiedName */) { + case 139 /* QualifiedName */: + while (node.parent.kind === 139 /* QualifiedName */) { node = node.parent; } - return node.parent.kind === 157 /* TypeQuery */ || isJSXTagName(node); + return node.parent.kind === 158 /* TypeQuery */ || isJSXTagName(node); case 69 /* Identifier */: - if (node.parent.kind === 157 /* TypeQuery */ || isJSXTagName(node)) { + if (node.parent.kind === 158 /* TypeQuery */ || isJSXTagName(node)) { return true; } // fall through @@ -5684,47 +5672,47 @@ var ts; case 97 /* ThisKeyword */: var parent_2 = node.parent; switch (parent_2.kind) { - case 217 /* VariableDeclaration */: - case 141 /* Parameter */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 254 /* EnumMember */: - case 252 /* PropertyAssignment */: - case 168 /* BindingElement */: + case 218 /* VariableDeclaration */: + case 142 /* Parameter */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 255 /* EnumMember */: + case 253 /* PropertyAssignment */: + case 169 /* BindingElement */: return parent_2.initializer === node; - case 201 /* ExpressionStatement */: - case 202 /* IfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: - case 210 /* ReturnStatement */: - case 211 /* WithStatement */: - case 212 /* SwitchStatement */: - case 248 /* CaseClause */: - case 214 /* ThrowStatement */: - case 212 /* SwitchStatement */: + case 202 /* ExpressionStatement */: + case 203 /* IfStatement */: + case 204 /* DoStatement */: + case 205 /* WhileStatement */: + case 211 /* ReturnStatement */: + case 212 /* WithStatement */: + case 213 /* SwitchStatement */: + case 249 /* CaseClause */: + case 215 /* ThrowStatement */: + case 213 /* SwitchStatement */: return parent_2.expression === node; - case 205 /* ForStatement */: + case 206 /* ForStatement */: var forStatement = parent_2; - return (forStatement.initializer === node && forStatement.initializer.kind !== 218 /* VariableDeclarationList */) || + return (forStatement.initializer === node && forStatement.initializer.kind !== 219 /* VariableDeclarationList */) || forStatement.condition === node || forStatement.incrementor === node; - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: var forInStatement = parent_2; - return (forInStatement.initializer === node && forInStatement.initializer.kind !== 218 /* VariableDeclarationList */) || + return (forInStatement.initializer === node && forInStatement.initializer.kind !== 219 /* VariableDeclarationList */) || forInStatement.expression === node; - case 176 /* TypeAssertionExpression */: - case 194 /* AsExpression */: + case 177 /* TypeAssertionExpression */: + case 195 /* AsExpression */: return node === parent_2.expression; - case 196 /* TemplateSpan */: + case 197 /* TemplateSpan */: return node === parent_2.expression; - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: return node === parent_2.expression; - case 142 /* Decorator */: - case 247 /* JsxExpression */: - case 246 /* JsxSpreadAttribute */: + case 143 /* Decorator */: + case 248 /* JsxExpression */: + case 247 /* JsxSpreadAttribute */: return true; - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: return parent_2.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent_2); default: if (isExpression(parent_2)) { @@ -5748,7 +5736,7 @@ var ts; } ts.isInstantiatedModule = isInstantiatedModule; function isExternalModuleImportEqualsDeclaration(node) { - return node.kind === 228 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 239 /* ExternalModuleReference */; + return node.kind === 229 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 240 /* ExternalModuleReference */; } ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration; function getExternalModuleImportEqualsDeclarationExpression(node) { @@ -5757,7 +5745,7 @@ var ts; } ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression; function isInternalModuleImportEqualsDeclaration(node) { - return node.kind === 228 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 239 /* ExternalModuleReference */; + return node.kind === 229 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 240 /* ExternalModuleReference */; } ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration; function isSourceFileJavaScript(file) { @@ -5775,24 +5763,28 @@ var ts; */ function isRequireCall(expression, checkArgumentIsStringLiteral) { // of the form 'require("name")' - var isRequire = expression.kind === 173 /* CallExpression */ && + var isRequire = expression.kind === 174 /* CallExpression */ && expression.expression.kind === 69 /* Identifier */ && expression.expression.text === "require" && expression.arguments.length === 1; return isRequire && (!checkArgumentIsStringLiteral || expression.arguments[0].kind === 9 /* StringLiteral */); } ts.isRequireCall = isRequireCall; + function isSingleOrDoubleQuote(charCode) { + return charCode === 39 /* singleQuote */ || charCode === 34 /* doubleQuote */; + } + ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; /// Given a BinaryExpression, returns SpecialPropertyAssignmentKind for the various kinds of property /// assignments we treat as special in the binder function getSpecialPropertyAssignmentKind(expression) { if (!isInJavaScriptFile(expression)) { return 0 /* None */; } - if (expression.kind !== 186 /* BinaryExpression */) { + if (expression.kind !== 187 /* BinaryExpression */) { return 0 /* None */; } var expr = expression; - if (expr.operatorToken.kind !== 56 /* EqualsToken */ || expr.left.kind !== 171 /* PropertyAccessExpression */) { + if (expr.operatorToken.kind !== 56 /* EqualsToken */ || expr.left.kind !== 172 /* PropertyAccessExpression */) { return 0 /* None */; } var lhs = expr.left; @@ -5810,30 +5802,37 @@ var ts; else if (lhs.expression.kind === 97 /* ThisKeyword */) { return 4 /* ThisProperty */; } - else if (lhs.expression.kind === 171 /* PropertyAccessExpression */) { + else if (lhs.expression.kind === 172 /* PropertyAccessExpression */) { // chained dot, e.g. x.y.z = expr; this var is the 'x.y' part var innerPropertyAccess = lhs.expression; - if (innerPropertyAccess.expression.kind === 69 /* Identifier */ && innerPropertyAccess.name.text === "prototype") { - return 3 /* PrototypeProperty */; + if (innerPropertyAccess.expression.kind === 69 /* Identifier */) { + // module.exports.name = expr + var innerPropertyAccessIdentifier = innerPropertyAccess.expression; + if (innerPropertyAccessIdentifier.text === "module" && innerPropertyAccess.name.text === "exports") { + return 1 /* ExportsProperty */; + } + if (innerPropertyAccess.name.text === "prototype") { + return 3 /* PrototypeProperty */; + } } } return 0 /* None */; } ts.getSpecialPropertyAssignmentKind = getSpecialPropertyAssignmentKind; function getExternalModuleName(node) { - if (node.kind === 229 /* ImportDeclaration */) { + if (node.kind === 230 /* ImportDeclaration */) { return node.moduleSpecifier; } - if (node.kind === 228 /* ImportEqualsDeclaration */) { + if (node.kind === 229 /* ImportEqualsDeclaration */) { var reference = node.moduleReference; - if (reference.kind === 239 /* ExternalModuleReference */) { + if (reference.kind === 240 /* ExternalModuleReference */) { return reference.expression; } } - if (node.kind === 235 /* ExportDeclaration */) { + if (node.kind === 236 /* ExportDeclaration */) { return node.moduleSpecifier; } - if (node.kind === 224 /* ModuleDeclaration */ && node.name.kind === 9 /* StringLiteral */) { + if (node.kind === 225 /* ModuleDeclaration */ && node.name.kind === 9 /* StringLiteral */) { return node.name; } } @@ -5841,13 +5840,13 @@ var ts; function hasQuestionToken(node) { if (node) { switch (node.kind) { - case 141 /* Parameter */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 253 /* ShorthandPropertyAssignment */: - case 252 /* PropertyAssignment */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 142 /* Parameter */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 254 /* ShorthandPropertyAssignment */: + case 253 /* PropertyAssignment */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return node.questionToken !== undefined; } } @@ -5855,9 +5854,9 @@ var ts; } ts.hasQuestionToken = hasQuestionToken; function isJSDocConstructSignature(node) { - return node.kind === 268 /* JSDocFunctionType */ && + return node.kind === 269 /* JSDocFunctionType */ && node.parameters.length > 0 && - node.parameters[0].type.kind === 270 /* JSDocConstructorType */; + node.parameters[0].type.kind === 271 /* JSDocConstructorType */; } ts.isJSDocConstructSignature = isJSDocConstructSignature; function getJSDocTag(node, kind, checkParentVariableStatement) { @@ -5879,16 +5878,16 @@ var ts; if (node.jsDocComment) { return node.jsDocComment; } - // Try to recognize this pattern when node is initializer of variable declaration and JSDoc comments are on containing variable statement. - // /** + // Try to recognize this pattern when node is initializer of variable declaration and JSDoc comments are on containing variable statement. + // /** // * @param {number} name - // * @returns {number} + // * @returns {number} // */ // var x = function(name) { return name.length; } if (checkParentVariableStatement) { - var isInitializerOfVariableDeclarationInStatement = node.parent.kind === 217 /* VariableDeclaration */ && + var isInitializerOfVariableDeclarationInStatement = node.parent.kind === 218 /* VariableDeclaration */ && node.parent.initializer === node && - node.parent.parent.parent.kind === 199 /* VariableStatement */; + node.parent.parent.parent.kind === 200 /* VariableStatement */; var variableStatementNode = isInitializerOfVariableDeclarationInStatement ? node.parent.parent.parent : undefined; if (variableStatementNode) { return variableStatementNode.jsDocComment; @@ -5896,13 +5895,13 @@ var ts; // Also recognize when the node is the RHS of an assignment expression var parent_3 = node.parent; var isSourceOfAssignmentExpressionStatement = parent_3 && parent_3.parent && - parent_3.kind === 186 /* BinaryExpression */ && + parent_3.kind === 187 /* BinaryExpression */ && parent_3.operatorToken.kind === 56 /* EqualsToken */ && - parent_3.parent.kind === 201 /* ExpressionStatement */; + parent_3.parent.kind === 202 /* ExpressionStatement */; if (isSourceOfAssignmentExpressionStatement) { return parent_3.parent.jsDocComment; } - var isPropertyAssignmentExpression = parent_3 && parent_3.kind === 252 /* PropertyAssignment */; + var isPropertyAssignmentExpression = parent_3 && parent_3.kind === 253 /* PropertyAssignment */; if (isPropertyAssignmentExpression) { return parent_3.jsDocComment; } @@ -5910,15 +5909,15 @@ var ts; return undefined; } function getJSDocTypeTag(node) { - return getJSDocTag(node, 276 /* JSDocTypeTag */, /*checkParentVariableStatement*/ false); + return getJSDocTag(node, 277 /* JSDocTypeTag */, /*checkParentVariableStatement*/ false); } ts.getJSDocTypeTag = getJSDocTypeTag; function getJSDocReturnTag(node) { - return getJSDocTag(node, 275 /* JSDocReturnTag */, /*checkParentVariableStatement*/ true); + return getJSDocTag(node, 276 /* JSDocReturnTag */, /*checkParentVariableStatement*/ true); } ts.getJSDocReturnTag = getJSDocReturnTag; function getJSDocTemplateTag(node) { - return getJSDocTag(node, 277 /* JSDocTemplateTag */, /*checkParentVariableStatement*/ false); + return getJSDocTag(node, 278 /* JSDocTemplateTag */, /*checkParentVariableStatement*/ false); } ts.getJSDocTemplateTag = getJSDocTemplateTag; function getCorrespondingJSDocParameterTag(parameter) { @@ -5930,7 +5929,7 @@ var ts; if (jsDocComment) { for (var _i = 0, _a = jsDocComment.tags; _i < _a.length; _i++) { var tag = _a[_i]; - if (tag.kind === 274 /* JSDocParameterTag */) { + if (tag.kind === 275 /* JSDocParameterTag */) { var parameterTag = tag; var name_6 = parameterTag.preParameterName || parameterTag.postParameterName; if (name_6.text === parameterName) { @@ -5947,22 +5946,27 @@ var ts; return isRestParameter(ts.lastOrUndefined(s.parameters)); } ts.hasRestParameter = hasRestParameter; + function hasDeclaredRestParameter(s) { + return isDeclaredRestParam(ts.lastOrUndefined(s.parameters)); + } + ts.hasDeclaredRestParameter = hasDeclaredRestParameter; function isRestParameter(node) { - if (node) { - if (node.flags & 134217728 /* JavaScriptFile */) { - if (node.type && node.type.kind === 269 /* JSDocVariadicType */) { - return true; - } - var paramTag = getCorrespondingJSDocParameterTag(node); - if (paramTag && paramTag.typeExpression) { - return paramTag.typeExpression.type.kind === 269 /* JSDocVariadicType */; - } + if (node && (node.flags & 134217728 /* JavaScriptFile */)) { + if (node.type && node.type.kind === 270 /* JSDocVariadicType */) { + return true; + } + var paramTag = getCorrespondingJSDocParameterTag(node); + if (paramTag && paramTag.typeExpression) { + return paramTag.typeExpression.type.kind === 270 /* JSDocVariadicType */; } - return node.dotDotDotToken !== undefined; } - return false; + return isDeclaredRestParam(node); } ts.isRestParameter = isRestParameter; + function isDeclaredRestParam(node) { + return node && node.dotDotDotToken !== undefined; + } + ts.isDeclaredRestParam = isDeclaredRestParam; function isLiteralKind(kind) { return 8 /* FirstLiteralToken */ <= kind && kind <= 11 /* LastLiteralToken */; } @@ -5976,9 +5980,34 @@ var ts; } ts.isTemplateLiteralKind = isTemplateLiteralKind; function isBindingPattern(node) { - return !!node && (node.kind === 167 /* ArrayBindingPattern */ || node.kind === 166 /* ObjectBindingPattern */); + return !!node && (node.kind === 168 /* ArrayBindingPattern */ || node.kind === 167 /* ObjectBindingPattern */); } ts.isBindingPattern = isBindingPattern; + // A node is an assignment target if it is on the left hand side of an '=' token, if it is parented by a property + // assignment in an object literal that is an assignment target, or if it is parented by an array literal that is + // an assignment target. Examples include 'a = xxx', '{ p: a } = xxx', '[{ p: a}] = xxx'. + function isAssignmentTarget(node) { + while (node.parent.kind === 178 /* ParenthesizedExpression */) { + node = node.parent; + } + while (true) { + var parent_4 = node.parent; + if (parent_4.kind === 170 /* ArrayLiteralExpression */ || parent_4.kind === 191 /* SpreadElementExpression */) { + node = parent_4; + continue; + } + if (parent_4.kind === 253 /* PropertyAssignment */ || parent_4.kind === 254 /* ShorthandPropertyAssignment */) { + node = parent_4.parent; + continue; + } + return parent_4.kind === 187 /* BinaryExpression */ && + parent_4.operatorToken.kind === 56 /* EqualsToken */ && + parent_4.left === node || + (parent_4.kind === 207 /* ForInStatement */ || parent_4.kind === 208 /* ForOfStatement */) && + parent_4.initializer === node; + } + } + ts.isAssignmentTarget = isAssignmentTarget; function isNodeDescendentOf(node, ancestor) { while (node) { if (node === ancestor) @@ -5990,7 +6019,7 @@ var ts; ts.isNodeDescendentOf = isNodeDescendentOf; function isInAmbientContext(node) { while (node) { - if (node.flags & 2 /* Ambient */ || (node.kind === 255 /* SourceFile */ && node.isDeclarationFile)) { + if (node.flags & 2 /* Ambient */ || (node.kind === 256 /* SourceFile */ && node.isDeclarationFile)) { return true; } node = node.parent; @@ -6000,34 +6029,34 @@ var ts; ts.isInAmbientContext = isInAmbientContext; function isDeclaration(node) { switch (node.kind) { - case 179 /* ArrowFunction */: - case 168 /* BindingElement */: - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 147 /* Constructor */: - case 223 /* EnumDeclaration */: - case 254 /* EnumMember */: - case 237 /* ExportSpecifier */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 148 /* GetAccessor */: - case 230 /* ImportClause */: - case 228 /* ImportEqualsDeclaration */: - case 233 /* ImportSpecifier */: - case 221 /* InterfaceDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 224 /* ModuleDeclaration */: - case 231 /* NamespaceImport */: - case 141 /* Parameter */: - case 252 /* PropertyAssignment */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 149 /* SetAccessor */: - case 253 /* ShorthandPropertyAssignment */: - case 222 /* TypeAliasDeclaration */: - case 140 /* TypeParameter */: - case 217 /* VariableDeclaration */: + case 180 /* ArrowFunction */: + case 169 /* BindingElement */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 148 /* Constructor */: + case 224 /* EnumDeclaration */: + case 255 /* EnumMember */: + case 238 /* ExportSpecifier */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 149 /* GetAccessor */: + case 231 /* ImportClause */: + case 229 /* ImportEqualsDeclaration */: + case 234 /* ImportSpecifier */: + case 222 /* InterfaceDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 225 /* ModuleDeclaration */: + case 232 /* NamespaceImport */: + case 142 /* Parameter */: + case 253 /* PropertyAssignment */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 150 /* SetAccessor */: + case 254 /* ShorthandPropertyAssignment */: + case 223 /* TypeAliasDeclaration */: + case 141 /* TypeParameter */: + case 218 /* VariableDeclaration */: return true; } return false; @@ -6035,25 +6064,25 @@ var ts; ts.isDeclaration = isDeclaration; function isStatement(n) { switch (n.kind) { - case 209 /* BreakStatement */: - case 208 /* ContinueStatement */: - case 216 /* DebuggerStatement */: - case 203 /* DoStatement */: - case 201 /* ExpressionStatement */: - case 200 /* EmptyStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 205 /* ForStatement */: - case 202 /* IfStatement */: - case 213 /* LabeledStatement */: - case 210 /* ReturnStatement */: - case 212 /* SwitchStatement */: - case 214 /* ThrowStatement */: - case 215 /* TryStatement */: - case 199 /* VariableStatement */: - case 204 /* WhileStatement */: - case 211 /* WithStatement */: - case 234 /* ExportAssignment */: + case 210 /* BreakStatement */: + case 209 /* ContinueStatement */: + case 217 /* DebuggerStatement */: + case 204 /* DoStatement */: + case 202 /* ExpressionStatement */: + case 201 /* EmptyStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 206 /* ForStatement */: + case 203 /* IfStatement */: + case 214 /* LabeledStatement */: + case 211 /* ReturnStatement */: + case 213 /* SwitchStatement */: + case 215 /* ThrowStatement */: + case 216 /* TryStatement */: + case 200 /* VariableStatement */: + case 205 /* WhileStatement */: + case 212 /* WithStatement */: + case 235 /* ExportAssignment */: return true; default: return false; @@ -6062,13 +6091,13 @@ var ts; ts.isStatement = isStatement; function isClassElement(n) { switch (n.kind) { - case 147 /* Constructor */: - case 144 /* PropertyDeclaration */: - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 145 /* MethodSignature */: - case 152 /* IndexSignature */: + case 148 /* Constructor */: + case 145 /* PropertyDeclaration */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 146 /* MethodSignature */: + case 153 /* IndexSignature */: return true; default: return false; @@ -6081,7 +6110,7 @@ var ts; return false; } var parent = name.parent; - if (parent.kind === 233 /* ImportSpecifier */ || parent.kind === 237 /* ExportSpecifier */) { + if (parent.kind === 234 /* ImportSpecifier */ || parent.kind === 238 /* ExportSpecifier */) { if (parent.propertyName) { return true; } @@ -6092,35 +6121,41 @@ var ts; return false; } ts.isDeclarationName = isDeclarationName; + function isLiteralComputedPropertyDeclarationName(node) { + return (node.kind === 9 /* StringLiteral */ || node.kind === 8 /* NumericLiteral */) && + node.parent.kind === 140 /* ComputedPropertyName */ && + isDeclaration(node.parent.parent); + } + ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName; // Return true if the given identifier is classified as an IdentifierName function isIdentifierName(node) { var parent = node.parent; switch (parent.kind) { - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 254 /* EnumMember */: - case 252 /* PropertyAssignment */: - case 171 /* PropertyAccessExpression */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 255 /* EnumMember */: + case 253 /* PropertyAssignment */: + case 172 /* PropertyAccessExpression */: // Name in member declaration or property name in property access return parent.name === node; - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: // Name on right hand side of dot in a type query if (parent.right === node) { - while (parent.kind === 138 /* QualifiedName */) { + while (parent.kind === 139 /* QualifiedName */) { parent = parent.parent; } - return parent.kind === 157 /* TypeQuery */; + return parent.kind === 158 /* TypeQuery */; } return false; - case 168 /* BindingElement */: - case 233 /* ImportSpecifier */: + case 169 /* BindingElement */: + case 234 /* ImportSpecifier */: // Property name in binding element or import specifier return parent.propertyName === node; - case 237 /* ExportSpecifier */: + case 238 /* ExportSpecifier */: // Any name in an export specifier return true; } @@ -6136,13 +6171,13 @@ var ts; // export = ... // export default ... function isAliasSymbolDeclaration(node) { - return node.kind === 228 /* ImportEqualsDeclaration */ || - node.kind === 227 /* GlobalModuleExportDeclaration */ || - node.kind === 230 /* ImportClause */ && !!node.name || - node.kind === 231 /* NamespaceImport */ || - node.kind === 233 /* ImportSpecifier */ || - node.kind === 237 /* ExportSpecifier */ || - node.kind === 234 /* ExportAssignment */ && node.expression.kind === 69 /* Identifier */; + return node.kind === 229 /* ImportEqualsDeclaration */ || + node.kind === 228 /* GlobalModuleExportDeclaration */ || + node.kind === 231 /* ImportClause */ && !!node.name || + node.kind === 232 /* NamespaceImport */ || + node.kind === 234 /* ImportSpecifier */ || + node.kind === 238 /* ExportSpecifier */ || + node.kind === 235 /* ExportAssignment */ && node.expression.kind === 69 /* Identifier */; } ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration; function getClassExtendsHeritageClauseElement(node) { @@ -6224,7 +6259,7 @@ var ts; } ts.getFileReferenceFromReferencePath = getFileReferenceFromReferencePath; function isKeyword(token) { - return 70 /* FirstKeyword */ <= token && token <= 137 /* LastKeyword */; + return 70 /* FirstKeyword */ <= token && token <= 138 /* LastKeyword */; } ts.isKeyword = isKeyword; function isTrivia(token) { @@ -6251,7 +6286,7 @@ var ts; } ts.hasDynamicName = hasDynamicName; function isDynamicName(name) { - return name.kind === 139 /* ComputedPropertyName */ && + return name.kind === 140 /* ComputedPropertyName */ && !isStringOrNumericLiteral(name.expression.kind) && !isWellKnownSymbolSyntactically(name.expression); } @@ -6269,12 +6304,15 @@ var ts; if (name.kind === 69 /* Identifier */ || name.kind === 9 /* StringLiteral */ || name.kind === 8 /* NumericLiteral */) { return name.text; } - if (name.kind === 139 /* ComputedPropertyName */) { + if (name.kind === 140 /* ComputedPropertyName */) { var nameExpression = name.expression; if (isWellKnownSymbolSyntactically(nameExpression)) { var rightHandSideName = nameExpression.name.text; return getPropertyNameForKnownSymbolName(rightHandSideName); } + else if (nameExpression.kind === 9 /* StringLiteral */ || nameExpression.kind === 8 /* NumericLiteral */) { + return nameExpression.text; + } } return undefined; } @@ -6301,7 +6339,7 @@ var ts; case 112 /* PublicKeyword */: case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: - case 127 /* ReadonlyKeyword */: + case 128 /* ReadonlyKeyword */: case 113 /* StaticKeyword */: return true; } @@ -6310,18 +6348,18 @@ var ts; ts.isModifierKind = isModifierKind; function isParameterDeclaration(node) { var root = getRootDeclaration(node); - return root.kind === 141 /* Parameter */; + return root.kind === 142 /* Parameter */; } ts.isParameterDeclaration = isParameterDeclaration; function getRootDeclaration(node) { - while (node.kind === 168 /* BindingElement */) { + while (node.kind === 169 /* BindingElement */) { node = node.parent.parent; } return node; } ts.getRootDeclaration = getRootDeclaration; function nodeStartsNewLexicalEnvironment(n) { - return isFunctionLike(n) || n.kind === 224 /* ModuleDeclaration */ || n.kind === 255 /* SourceFile */; + return isFunctionLike(n) || n.kind === 225 /* ModuleDeclaration */ || n.kind === 256 /* SourceFile */; } ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment; /** @@ -6371,7 +6409,7 @@ var ts; } ts.cloneEntityName = cloneEntityName; function isQualifiedName(node) { - return node.kind === 138 /* QualifiedName */; + return node.kind === 139 /* QualifiedName */; } ts.isQualifiedName = isQualifiedName; function nodeIsSynthesized(node) { @@ -6725,14 +6763,19 @@ var ts; ts.getLineOfLocalPositionFromLineMap = getLineOfLocalPositionFromLineMap; function getFirstConstructorWithBody(node) { return ts.forEach(node.members, function (member) { - if (member.kind === 147 /* Constructor */ && nodeIsPresent(member.body)) { + if (member.kind === 148 /* Constructor */ && nodeIsPresent(member.body)) { return member; } }); } ts.getFirstConstructorWithBody = getFirstConstructorWithBody; function getSetAccessorTypeAnnotationNode(accessor) { - return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type; + if (accessor && accessor.parameters.length > 0) { + var hasThis = accessor.parameters.length === 2 && + accessor.parameters[0].name.kind === 69 /* Identifier */ && + accessor.parameters[0].name.originalKeywordKind === 97 /* ThisKeyword */; + return accessor.parameters[hasThis ? 1 : 0].type; + } } ts.getSetAccessorTypeAnnotationNode = getSetAccessorTypeAnnotationNode; function getAllAccessorDeclarations(declarations, accessor) { @@ -6742,10 +6785,10 @@ var ts; var setAccessor; if (hasDynamicName(accessor)) { firstAccessor = accessor; - if (accessor.kind === 148 /* GetAccessor */) { + if (accessor.kind === 149 /* GetAccessor */) { getAccessor = accessor; } - else if (accessor.kind === 149 /* SetAccessor */) { + else if (accessor.kind === 150 /* SetAccessor */) { setAccessor = accessor; } else { @@ -6754,7 +6797,7 @@ var ts; } else { ts.forEach(declarations, function (member) { - if ((member.kind === 148 /* GetAccessor */ || member.kind === 149 /* SetAccessor */) + if ((member.kind === 149 /* GetAccessor */ || member.kind === 150 /* SetAccessor */) && (member.flags & 32 /* Static */) === (accessor.flags & 32 /* Static */)) { var memberName = getPropertyNameForPropertyNameNode(member.name); var accessorName = getPropertyNameForPropertyNameNode(accessor.name); @@ -6765,10 +6808,10 @@ var ts; else if (!secondAccessor) { secondAccessor = member; } - if (member.kind === 148 /* GetAccessor */ && !getAccessor) { + if (member.kind === 149 /* GetAccessor */ && !getAccessor) { getAccessor = member; } - if (member.kind === 149 /* SetAccessor */ && !setAccessor) { + if (member.kind === 150 /* SetAccessor */ && !setAccessor) { setAccessor = member; } } @@ -6971,7 +7014,7 @@ var ts; case 74 /* ConstKeyword */: return 2048 /* Const */; case 77 /* DefaultKeyword */: return 512 /* Default */; case 118 /* AsyncKeyword */: return 256 /* Async */; - case 127 /* ReadonlyKeyword */: return 64 /* Readonly */; + case 128 /* ReadonlyKeyword */: return 64 /* Readonly */; } return 0; } @@ -6979,25 +7022,25 @@ var ts; function isLeftHandSideExpression(expr) { if (expr) { switch (expr.kind) { - case 171 /* PropertyAccessExpression */: - case 172 /* ElementAccessExpression */: - case 174 /* NewExpression */: - case 173 /* CallExpression */: - case 195 /* NonNullExpression */: - case 240 /* JsxElement */: - case 241 /* JsxSelfClosingElement */: - case 175 /* TaggedTemplateExpression */: - case 169 /* ArrayLiteralExpression */: - case 177 /* ParenthesizedExpression */: - case 170 /* ObjectLiteralExpression */: - case 191 /* ClassExpression */: - case 178 /* FunctionExpression */: + case 172 /* PropertyAccessExpression */: + case 173 /* ElementAccessExpression */: + case 175 /* NewExpression */: + case 174 /* CallExpression */: + case 196 /* NonNullExpression */: + case 241 /* JsxElement */: + case 242 /* JsxSelfClosingElement */: + case 176 /* TaggedTemplateExpression */: + case 170 /* ArrayLiteralExpression */: + case 178 /* ParenthesizedExpression */: + case 171 /* ObjectLiteralExpression */: + case 192 /* ClassExpression */: + case 179 /* FunctionExpression */: case 69 /* Identifier */: case 10 /* RegularExpressionLiteral */: case 8 /* NumericLiteral */: case 9 /* StringLiteral */: case 11 /* NoSubstitutionTemplateLiteral */: - case 188 /* TemplateExpression */: + case 189 /* TemplateExpression */: case 84 /* FalseKeyword */: case 93 /* NullKeyword */: case 97 /* ThisKeyword */: @@ -7014,7 +7057,7 @@ var ts; } ts.isAssignmentOperator = isAssignmentOperator; function isExpressionWithTypeArgumentsInClassExtendsClause(node) { - return node.kind === 193 /* ExpressionWithTypeArguments */ && + return node.kind === 194 /* ExpressionWithTypeArguments */ && node.parent.token === 83 /* ExtendsKeyword */ && isClassLike(node.parent.parent); } @@ -7037,16 +7080,16 @@ var ts; } } function isRightSideOfQualifiedNameOrPropertyAccess(node) { - return (node.parent.kind === 138 /* QualifiedName */ && node.parent.right === node) || - (node.parent.kind === 171 /* PropertyAccessExpression */ && node.parent.name === node); + return (node.parent.kind === 139 /* QualifiedName */ && node.parent.right === node) || + (node.parent.kind === 172 /* PropertyAccessExpression */ && node.parent.name === node); } ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess; function isEmptyObjectLiteralOrArrayLiteral(expression) { var kind = expression.kind; - if (kind === 170 /* ObjectLiteralExpression */) { + if (kind === 171 /* ObjectLiteralExpression */) { return expression.properties.length === 0; } - if (kind === 169 /* ArrayLiteralExpression */) { + if (kind === 170 /* ArrayLiteralExpression */) { return expression.elements.length === 0; } return false; @@ -7406,9 +7449,9 @@ var ts; } ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions; function getTypeParameterOwner(d) { - if (d && d.kind === 140 /* TypeParameter */) { + if (d && d.kind === 141 /* TypeParameter */) { for (var current = d; current; current = current.parent) { - if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 221 /* InterfaceDeclaration */) { + if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 222 /* InterfaceDeclaration */) { return current; } } @@ -7416,7 +7459,7 @@ var ts; } ts.getTypeParameterOwner = getTypeParameterOwner; function isParameterPropertyDeclaration(node) { - return node.flags & 28 /* AccessibilityModifier */ && node.parent.kind === 147 /* Constructor */ && ts.isClassLike(node.parent.parent); + return node.flags & 92 /* ParameterPropertyModifier */ && node.parent.kind === 148 /* Constructor */ && ts.isClassLike(node.parent.parent); } ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration; function startsWith(str, prefix) { @@ -7437,7 +7480,7 @@ var ts; var NodeConstructor; var SourceFileConstructor; function createNode(kind, pos, end) { - if (kind === 255 /* SourceFile */) { + if (kind === 256 /* SourceFile */) { return new (SourceFileConstructor || (SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor()))(kind, pos, end); } else { @@ -7480,26 +7523,26 @@ var ts; var visitNodes = cbNodeArray ? visitNodeArray : visitEachNode; var cbNodes = cbNodeArray || cbNode; switch (node.kind) { - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: return visitNode(cbNode, node.left) || visitNode(cbNode, node.right); - case 140 /* TypeParameter */: + case 141 /* TypeParameter */: return visitNode(cbNode, node.name) || visitNode(cbNode, node.constraint) || visitNode(cbNode, node.expression); - case 253 /* ShorthandPropertyAssignment */: + case 254 /* ShorthandPropertyAssignment */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.equalsToken) || visitNode(cbNode, node.objectAssignmentInitializer); - case 141 /* Parameter */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 252 /* PropertyAssignment */: - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: + case 142 /* Parameter */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 253 /* PropertyAssignment */: + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.propertyName) || @@ -7508,24 +7551,24 @@ var ts; visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.type) || visitNode(cbNode, node.initializer); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNodes(cbNodes, node.typeParameters) || visitNodes(cbNodes, node.parameters) || visitNode(cbNode, node.type); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 178 /* FunctionExpression */: - case 219 /* FunctionDeclaration */: - case 179 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 179 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: + case 180 /* ArrowFunction */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.asteriskToken) || @@ -7536,294 +7579,294 @@ var ts; visitNode(cbNode, node.type) || visitNode(cbNode, node.equalsGreaterThanToken) || visitNode(cbNode, node.body); - case 154 /* TypeReference */: + case 155 /* TypeReference */: return visitNode(cbNode, node.typeName) || visitNodes(cbNodes, node.typeArguments); - case 153 /* TypePredicate */: + case 154 /* TypePredicate */: return visitNode(cbNode, node.parameterName) || visitNode(cbNode, node.type); - case 157 /* TypeQuery */: + case 158 /* TypeQuery */: return visitNode(cbNode, node.exprName); - case 158 /* TypeLiteral */: + case 159 /* TypeLiteral */: return visitNodes(cbNodes, node.members); - case 159 /* ArrayType */: + case 160 /* ArrayType */: return visitNode(cbNode, node.elementType); - case 160 /* TupleType */: + case 161 /* TupleType */: return visitNodes(cbNodes, node.elementTypes); - case 161 /* UnionType */: - case 162 /* IntersectionType */: + case 162 /* UnionType */: + case 163 /* IntersectionType */: return visitNodes(cbNodes, node.types); - case 163 /* ParenthesizedType */: + case 164 /* ParenthesizedType */: return visitNode(cbNode, node.type); - case 166 /* ObjectBindingPattern */: - case 167 /* ArrayBindingPattern */: + case 167 /* ObjectBindingPattern */: + case 168 /* ArrayBindingPattern */: return visitNodes(cbNodes, node.elements); - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: return visitNodes(cbNodes, node.elements); - case 170 /* ObjectLiteralExpression */: + case 171 /* ObjectLiteralExpression */: return visitNodes(cbNodes, node.properties); - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.dotToken) || visitNode(cbNode, node.name); - case 172 /* ElementAccessExpression */: + case 173 /* ElementAccessExpression */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.argumentExpression); - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.typeArguments) || visitNodes(cbNodes, node.arguments); - case 175 /* TaggedTemplateExpression */: + case 176 /* TaggedTemplateExpression */: return visitNode(cbNode, node.tag) || visitNode(cbNode, node.template); - case 176 /* TypeAssertionExpression */: + case 177 /* TypeAssertionExpression */: return visitNode(cbNode, node.type) || visitNode(cbNode, node.expression); - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return visitNode(cbNode, node.expression); - case 180 /* DeleteExpression */: + case 181 /* DeleteExpression */: return visitNode(cbNode, node.expression); - case 181 /* TypeOfExpression */: + case 182 /* TypeOfExpression */: return visitNode(cbNode, node.expression); - case 182 /* VoidExpression */: + case 183 /* VoidExpression */: return visitNode(cbNode, node.expression); - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: return visitNode(cbNode, node.operand); - case 189 /* YieldExpression */: + case 190 /* YieldExpression */: return visitNode(cbNode, node.asteriskToken) || visitNode(cbNode, node.expression); - case 183 /* AwaitExpression */: + case 184 /* AwaitExpression */: return visitNode(cbNode, node.expression); - case 185 /* PostfixUnaryExpression */: + case 186 /* PostfixUnaryExpression */: return visitNode(cbNode, node.operand); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return visitNode(cbNode, node.left) || visitNode(cbNode, node.operatorToken) || visitNode(cbNode, node.right); - case 194 /* AsExpression */: + case 195 /* AsExpression */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.type); - case 195 /* NonNullExpression */: + case 196 /* NonNullExpression */: return visitNode(cbNode, node.expression); - case 187 /* ConditionalExpression */: + case 188 /* ConditionalExpression */: return visitNode(cbNode, node.condition) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.whenTrue) || visitNode(cbNode, node.colonToken) || visitNode(cbNode, node.whenFalse); - case 190 /* SpreadElementExpression */: + case 191 /* SpreadElementExpression */: return visitNode(cbNode, node.expression); - case 198 /* Block */: - case 225 /* ModuleBlock */: + case 199 /* Block */: + case 226 /* ModuleBlock */: return visitNodes(cbNodes, node.statements); - case 255 /* SourceFile */: + case 256 /* SourceFile */: return visitNodes(cbNodes, node.statements) || visitNode(cbNode, node.endOfFileToken); - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.declarationList); - case 218 /* VariableDeclarationList */: + case 219 /* VariableDeclarationList */: return visitNodes(cbNodes, node.declarations); - case 201 /* ExpressionStatement */: + case 202 /* ExpressionStatement */: return visitNode(cbNode, node.expression); - case 202 /* IfStatement */: + case 203 /* IfStatement */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.thenStatement) || visitNode(cbNode, node.elseStatement); - case 203 /* DoStatement */: + case 204 /* DoStatement */: return visitNode(cbNode, node.statement) || visitNode(cbNode, node.expression); - case 204 /* WhileStatement */: + case 205 /* WhileStatement */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 205 /* ForStatement */: + case 206 /* ForStatement */: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.condition) || visitNode(cbNode, node.incrementor) || visitNode(cbNode, node.statement); - case 206 /* ForInStatement */: + case 207 /* ForInStatement */: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 207 /* ForOfStatement */: + case 208 /* ForOfStatement */: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 208 /* ContinueStatement */: - case 209 /* BreakStatement */: + case 209 /* ContinueStatement */: + case 210 /* BreakStatement */: return visitNode(cbNode, node.label); - case 210 /* ReturnStatement */: + case 211 /* ReturnStatement */: return visitNode(cbNode, node.expression); - case 211 /* WithStatement */: + case 212 /* WithStatement */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 212 /* SwitchStatement */: + case 213 /* SwitchStatement */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.caseBlock); - case 226 /* CaseBlock */: + case 227 /* CaseBlock */: return visitNodes(cbNodes, node.clauses); - case 248 /* CaseClause */: + case 249 /* CaseClause */: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.statements); - case 249 /* DefaultClause */: + case 250 /* DefaultClause */: return visitNodes(cbNodes, node.statements); - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: return visitNode(cbNode, node.label) || visitNode(cbNode, node.statement); - case 214 /* ThrowStatement */: + case 215 /* ThrowStatement */: return visitNode(cbNode, node.expression); - case 215 /* TryStatement */: + case 216 /* TryStatement */: return visitNode(cbNode, node.tryBlock) || visitNode(cbNode, node.catchClause) || visitNode(cbNode, node.finallyBlock); - case 251 /* CatchClause */: + case 252 /* CatchClause */: return visitNode(cbNode, node.variableDeclaration) || visitNode(cbNode, node.block); - case 142 /* Decorator */: + case 143 /* Decorator */: return visitNode(cbNode, node.expression); - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeParameters) || visitNodes(cbNodes, node.heritageClauses) || visitNodes(cbNodes, node.members); - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeParameters) || visitNodes(cbNodes, node.heritageClauses) || visitNodes(cbNodes, node.members); - case 222 /* TypeAliasDeclaration */: + case 223 /* TypeAliasDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeParameters) || visitNode(cbNode, node.type); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.members); - case 254 /* EnumMember */: + case 255 /* EnumMember */: return visitNode(cbNode, node.name) || visitNode(cbNode, node.initializer); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.body); - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.moduleReference); - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.importClause) || visitNode(cbNode, node.moduleSpecifier); - case 230 /* ImportClause */: + case 231 /* ImportClause */: return visitNode(cbNode, node.name) || visitNode(cbNode, node.namedBindings); - case 227 /* GlobalModuleExportDeclaration */: + case 228 /* GlobalModuleExportDeclaration */: return visitNode(cbNode, node.name); - case 231 /* NamespaceImport */: + case 232 /* NamespaceImport */: return visitNode(cbNode, node.name); - case 232 /* NamedImports */: - case 236 /* NamedExports */: + case 233 /* NamedImports */: + case 237 /* NamedExports */: return visitNodes(cbNodes, node.elements); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.exportClause) || visitNode(cbNode, node.moduleSpecifier); - case 233 /* ImportSpecifier */: - case 237 /* ExportSpecifier */: + case 234 /* ImportSpecifier */: + case 238 /* ExportSpecifier */: return visitNode(cbNode, node.propertyName) || visitNode(cbNode, node.name); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.expression); - case 188 /* TemplateExpression */: + case 189 /* TemplateExpression */: return visitNode(cbNode, node.head) || visitNodes(cbNodes, node.templateSpans); - case 196 /* TemplateSpan */: + case 197 /* TemplateSpan */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal); - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: return visitNode(cbNode, node.expression); - case 250 /* HeritageClause */: + case 251 /* HeritageClause */: return visitNodes(cbNodes, node.types); - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.typeArguments); - case 239 /* ExternalModuleReference */: + case 240 /* ExternalModuleReference */: return visitNode(cbNode, node.expression); - case 238 /* MissingDeclaration */: + case 239 /* MissingDeclaration */: return visitNodes(cbNodes, node.decorators); - case 240 /* JsxElement */: + case 241 /* JsxElement */: return visitNode(cbNode, node.openingElement) || visitNodes(cbNodes, node.children) || visitNode(cbNode, node.closingElement); - case 241 /* JsxSelfClosingElement */: - case 242 /* JsxOpeningElement */: + case 242 /* JsxSelfClosingElement */: + case 243 /* JsxOpeningElement */: return visitNode(cbNode, node.tagName) || visitNodes(cbNodes, node.attributes); - case 245 /* JsxAttribute */: + case 246 /* JsxAttribute */: return visitNode(cbNode, node.name) || visitNode(cbNode, node.initializer); - case 246 /* JsxSpreadAttribute */: + case 247 /* JsxSpreadAttribute */: return visitNode(cbNode, node.expression); - case 247 /* JsxExpression */: + case 248 /* JsxExpression */: return visitNode(cbNode, node.expression); - case 244 /* JsxClosingElement */: + case 245 /* JsxClosingElement */: return visitNode(cbNode, node.tagName); - case 256 /* JSDocTypeExpression */: + case 257 /* JSDocTypeExpression */: return visitNode(cbNode, node.type); - case 260 /* JSDocUnionType */: + case 261 /* JSDocUnionType */: return visitNodes(cbNodes, node.types); - case 261 /* JSDocTupleType */: + case 262 /* JSDocTupleType */: return visitNodes(cbNodes, node.types); - case 259 /* JSDocArrayType */: + case 260 /* JSDocArrayType */: return visitNode(cbNode, node.elementType); - case 263 /* JSDocNonNullableType */: + case 264 /* JSDocNonNullableType */: return visitNode(cbNode, node.type); - case 262 /* JSDocNullableType */: + case 263 /* JSDocNullableType */: return visitNode(cbNode, node.type); - case 264 /* JSDocRecordType */: + case 265 /* JSDocRecordType */: return visitNodes(cbNodes, node.members); - case 266 /* JSDocTypeReference */: + case 267 /* JSDocTypeReference */: return visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeArguments); - case 267 /* JSDocOptionalType */: + case 268 /* JSDocOptionalType */: return visitNode(cbNode, node.type); - case 268 /* JSDocFunctionType */: + case 269 /* JSDocFunctionType */: return visitNodes(cbNodes, node.parameters) || visitNode(cbNode, node.type); - case 269 /* JSDocVariadicType */: + case 270 /* JSDocVariadicType */: return visitNode(cbNode, node.type); - case 270 /* JSDocConstructorType */: + case 271 /* JSDocConstructorType */: return visitNode(cbNode, node.type); - case 271 /* JSDocThisType */: + case 272 /* JSDocThisType */: return visitNode(cbNode, node.type); - case 265 /* JSDocRecordMember */: + case 266 /* JSDocRecordMember */: return visitNode(cbNode, node.name) || visitNode(cbNode, node.type); - case 272 /* JSDocComment */: + case 273 /* JSDocComment */: return visitNodes(cbNodes, node.tags); - case 274 /* JSDocParameterTag */: + case 275 /* JSDocParameterTag */: return visitNode(cbNode, node.preParameterName) || visitNode(cbNode, node.typeExpression) || visitNode(cbNode, node.postParameterName); - case 275 /* JSDocReturnTag */: + case 276 /* JSDocReturnTag */: return visitNode(cbNode, node.typeExpression); - case 276 /* JSDocTypeTag */: + case 277 /* JSDocTypeTag */: return visitNode(cbNode, node.typeExpression); - case 277 /* JSDocTemplateTag */: + case 278 /* JSDocTemplateTag */: return visitNodes(cbNodes, node.typeParameters); } } @@ -8060,7 +8103,7 @@ var ts; function createSourceFile(fileName, languageVersion, scriptKind) { // code from createNode is inlined here so createNode won't have to deal with special case of creating source files // this is quite rare comparing to other nodes and createNode should be as fast as possible - var sourceFile = new SourceFileConstructor(255 /* SourceFile */, /*pos*/ 0, /* end */ sourceText.length); + var sourceFile = new SourceFileConstructor(256 /* SourceFile */, /*pos*/ 0, /* end */ sourceText.length); nodeCount++; sourceFile.text = sourceText; sourceFile.bindDiagnostics = []; @@ -8413,7 +8456,7 @@ var ts; // PropertyName [Yield]: // LiteralPropertyName // ComputedPropertyName[?Yield] - var node = createNode(139 /* ComputedPropertyName */); + var node = createNode(140 /* ComputedPropertyName */); parseExpected(19 /* OpenBracketToken */); // We parse any expression (including a comma expression). But the grammar // says that only an assignment expression is allowed, so the grammar checker @@ -8814,14 +8857,14 @@ var ts; function isReusableClassMember(node) { if (node) { switch (node.kind) { - case 147 /* Constructor */: - case 152 /* IndexSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 144 /* PropertyDeclaration */: - case 197 /* SemicolonClassElement */: + case 148 /* Constructor */: + case 153 /* IndexSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 145 /* PropertyDeclaration */: + case 198 /* SemicolonClassElement */: return true; - case 146 /* MethodDeclaration */: + case 147 /* MethodDeclaration */: // Method declarations are not necessarily reusable. An object-literal // may have a method calls "constructor(...)" and we must reparse that // into an actual .ConstructorDeclaration. @@ -8836,8 +8879,8 @@ var ts; function isReusableSwitchClause(node) { if (node) { switch (node.kind) { - case 248 /* CaseClause */: - case 249 /* DefaultClause */: + case 249 /* CaseClause */: + case 250 /* DefaultClause */: return true; } } @@ -8846,58 +8889,58 @@ var ts; function isReusableStatement(node) { if (node) { switch (node.kind) { - case 219 /* FunctionDeclaration */: - case 199 /* VariableStatement */: - case 198 /* Block */: - case 202 /* IfStatement */: - case 201 /* ExpressionStatement */: - case 214 /* ThrowStatement */: - case 210 /* ReturnStatement */: - case 212 /* SwitchStatement */: - case 209 /* BreakStatement */: - case 208 /* ContinueStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 205 /* ForStatement */: - case 204 /* WhileStatement */: - case 211 /* WithStatement */: - case 200 /* EmptyStatement */: - case 215 /* TryStatement */: - case 213 /* LabeledStatement */: - case 203 /* DoStatement */: - case 216 /* DebuggerStatement */: - case 229 /* ImportDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 235 /* ExportDeclaration */: - case 234 /* ExportAssignment */: - case 224 /* ModuleDeclaration */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 222 /* TypeAliasDeclaration */: + case 220 /* FunctionDeclaration */: + case 200 /* VariableStatement */: + case 199 /* Block */: + case 203 /* IfStatement */: + case 202 /* ExpressionStatement */: + case 215 /* ThrowStatement */: + case 211 /* ReturnStatement */: + case 213 /* SwitchStatement */: + case 210 /* BreakStatement */: + case 209 /* ContinueStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 206 /* ForStatement */: + case 205 /* WhileStatement */: + case 212 /* WithStatement */: + case 201 /* EmptyStatement */: + case 216 /* TryStatement */: + case 214 /* LabeledStatement */: + case 204 /* DoStatement */: + case 217 /* DebuggerStatement */: + case 230 /* ImportDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 236 /* ExportDeclaration */: + case 235 /* ExportAssignment */: + case 225 /* ModuleDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 223 /* TypeAliasDeclaration */: return true; } } return false; } function isReusableEnumMember(node) { - return node.kind === 254 /* EnumMember */; + return node.kind === 255 /* EnumMember */; } function isReusableTypeMember(node) { if (node) { switch (node.kind) { - case 151 /* ConstructSignature */: - case 145 /* MethodSignature */: - case 152 /* IndexSignature */: - case 143 /* PropertySignature */: - case 150 /* CallSignature */: + case 152 /* ConstructSignature */: + case 146 /* MethodSignature */: + case 153 /* IndexSignature */: + case 144 /* PropertySignature */: + case 151 /* CallSignature */: return true; } } return false; } function isReusableVariableDeclaration(node) { - if (node.kind !== 217 /* VariableDeclaration */) { + if (node.kind !== 218 /* VariableDeclaration */) { return false; } // Very subtle incremental parsing bug. Consider the following code: @@ -8918,7 +8961,7 @@ var ts; return variableDeclarator.initializer === undefined; } function isReusableParameter(node) { - if (node.kind !== 141 /* Parameter */) { + if (node.kind !== 142 /* Parameter */) { return false; } // See the comment in isReusableVariableDeclaration for why we do this. @@ -9035,7 +9078,7 @@ var ts; function parseEntityName(allowReservedWords, diagnosticMessage) { var entity = parseIdentifier(diagnosticMessage); while (parseOptional(21 /* DotToken */)) { - var node = createNode(138 /* QualifiedName */, entity.pos); + var node = createNode(139 /* QualifiedName */, entity.pos); // !!! node.left = entity; node.right = parseRightSideOfDot(allowReservedWords); entity = finishNode(node); @@ -9074,7 +9117,7 @@ var ts; return allowIdentifierNames ? parseIdentifierName() : parseIdentifier(); } function parseTemplateExpression() { - var template = createNode(188 /* TemplateExpression */); + var template = createNode(189 /* TemplateExpression */); template.head = parseTemplateLiteralFragment(); ts.Debug.assert(template.head.kind === 12 /* TemplateHead */, "Template head has wrong token kind"); var templateSpans = []; @@ -9087,7 +9130,7 @@ var ts; return finishNode(template); } function parseTemplateSpan() { - var span = createNode(196 /* TemplateSpan */); + var span = createNode(197 /* TemplateSpan */); span.expression = allowInAnd(parseExpression); var literal; if (token === 16 /* CloseBraceToken */) { @@ -9101,7 +9144,7 @@ var ts; return finishNode(span); } function parseStringLiteralTypeNode() { - return parseLiteralLikeNode(165 /* StringLiteralType */, /*internName*/ true); + return parseLiteralLikeNode(166 /* StringLiteralType */, /*internName*/ true); } function parseLiteralNode(internName) { return parseLiteralLikeNode(token, internName); @@ -9138,7 +9181,7 @@ var ts; // TYPES function parseTypeReference() { var typeName = parseEntityName(/*allowReservedWords*/ false, ts.Diagnostics.Type_expected); - var node = createNode(154 /* TypeReference */, typeName.pos); + var node = createNode(155 /* TypeReference */, typeName.pos); node.typeName = typeName; if (!scanner.hasPrecedingLineBreak() && token === 25 /* LessThanToken */) { node.typeArguments = parseBracketedList(18 /* TypeArguments */, parseType, 25 /* LessThanToken */, 27 /* GreaterThanToken */); @@ -9147,24 +9190,24 @@ var ts; } function parseThisTypePredicate(lhs) { nextToken(); - var node = createNode(153 /* TypePredicate */, lhs.pos); + var node = createNode(154 /* TypePredicate */, lhs.pos); node.parameterName = lhs; node.type = parseType(); return finishNode(node); } function parseThisTypeNode() { - var node = createNode(164 /* ThisType */); + var node = createNode(165 /* ThisType */); nextToken(); return finishNode(node); } function parseTypeQuery() { - var node = createNode(157 /* TypeQuery */); + var node = createNode(158 /* TypeQuery */); parseExpected(101 /* TypeOfKeyword */); node.exprName = parseEntityName(/*allowReservedWords*/ true); return finishNode(node); } function parseTypeParameter() { - var node = createNode(140 /* TypeParameter */); + var node = createNode(141 /* TypeParameter */); node.name = parseIdentifier(); if (parseOptional(83 /* ExtendsKeyword */)) { // It's not uncommon for people to write improper constraints to a generic. If the @@ -9208,7 +9251,7 @@ var ts; } } function parseParameter() { - var node = createNode(141 /* Parameter */); + var node = createNode(142 /* Parameter */); if (token === 97 /* ThisKeyword */) { node.name = createIdentifier(/*isIdentifier*/ true, undefined); node.type = parseParameterType(); @@ -9307,7 +9350,7 @@ var ts; } function parseSignatureMember(kind) { var node = createNode(kind); - if (kind === 151 /* ConstructSignature */) { + if (kind === 152 /* ConstructSignature */) { parseExpected(92 /* NewKeyword */); } fillSignature(54 /* ColonToken */, /*yieldContext*/ false, /*awaitContext*/ false, /*requireCompleteParameterList*/ false, node); @@ -9371,7 +9414,7 @@ var ts; return token === 54 /* ColonToken */ || token === 24 /* CommaToken */ || token === 20 /* CloseBracketToken */; } function parseIndexSignatureDeclaration(fullStart, decorators, modifiers) { - var node = createNode(152 /* IndexSignature */, fullStart); + var node = createNode(153 /* IndexSignature */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); node.parameters = parseBracketedList(16 /* Parameters */, parseParameter, 19 /* OpenBracketToken */, 20 /* CloseBracketToken */); @@ -9383,7 +9426,7 @@ var ts; var name = parsePropertyName(); var questionToken = parseOptionalToken(53 /* QuestionToken */); if (token === 17 /* OpenParenToken */ || token === 25 /* LessThanToken */) { - var method = createNode(145 /* MethodSignature */, fullStart); + var method = createNode(146 /* MethodSignature */, fullStart); setModifiers(method, modifiers); method.name = name; method.questionToken = questionToken; @@ -9394,7 +9437,7 @@ var ts; return finishNode(method); } else { - var property = createNode(143 /* PropertySignature */, fullStart); + var property = createNode(144 /* PropertySignature */, fullStart); setModifiers(property, modifiers); property.name = name; property.questionToken = questionToken; @@ -9442,10 +9485,10 @@ var ts; } function parseTypeMember() { if (token === 17 /* OpenParenToken */ || token === 25 /* LessThanToken */) { - return parseSignatureMember(150 /* CallSignature */); + return parseSignatureMember(151 /* CallSignature */); } if (token === 92 /* NewKeyword */ && lookAhead(isStartOfConstructSignature)) { - return parseSignatureMember(151 /* ConstructSignature */); + return parseSignatureMember(152 /* ConstructSignature */); } var fullStart = getNodePos(); var modifiers = parseModifiers(); @@ -9459,7 +9502,7 @@ var ts; return token === 17 /* OpenParenToken */ || token === 25 /* LessThanToken */; } function parseTypeLiteral() { - var node = createNode(158 /* TypeLiteral */); + var node = createNode(159 /* TypeLiteral */); node.members = parseObjectTypeMembers(); return finishNode(node); } @@ -9475,12 +9518,12 @@ var ts; return members; } function parseTupleType() { - var node = createNode(160 /* TupleType */); + var node = createNode(161 /* TupleType */); node.elementTypes = parseBracketedList(19 /* TupleElementTypes */, parseType, 19 /* OpenBracketToken */, 20 /* CloseBracketToken */); return finishNode(node); } function parseParenthesizedType() { - var node = createNode(163 /* ParenthesizedType */); + var node = createNode(164 /* ParenthesizedType */); parseExpected(17 /* OpenParenToken */); node.type = parseType(); parseExpected(18 /* CloseParenToken */); @@ -9488,7 +9531,7 @@ var ts; } function parseFunctionOrConstructorType(kind) { var node = createNode(kind); - if (kind === 156 /* ConstructorType */) { + if (kind === 157 /* ConstructorType */) { parseExpected(92 /* NewKeyword */); } fillSignature(34 /* EqualsGreaterThanToken */, /*yieldContext*/ false, /*awaitContext*/ false, /*requireCompleteParameterList*/ false, node); @@ -9501,11 +9544,12 @@ var ts; function parseNonArrayType() { switch (token) { case 117 /* AnyKeyword */: - case 131 /* StringKeyword */: - case 129 /* NumberKeyword */: + case 132 /* StringKeyword */: + case 130 /* NumberKeyword */: case 120 /* BooleanKeyword */: - case 132 /* SymbolKeyword */: - case 134 /* UndefinedKeyword */: + case 133 /* SymbolKeyword */: + case 135 /* UndefinedKeyword */: + case 127 /* NeverKeyword */: // If these are followed by a dot, then parse these out as a dotted type reference instead. var node = tryParse(parseKeywordAndNoDot); return node || parseTypeReference(); @@ -9538,15 +9582,16 @@ var ts; function isStartOfType() { switch (token) { case 117 /* AnyKeyword */: - case 131 /* StringKeyword */: - case 129 /* NumberKeyword */: + case 132 /* StringKeyword */: + case 130 /* NumberKeyword */: case 120 /* BooleanKeyword */: - case 132 /* SymbolKeyword */: + case 133 /* SymbolKeyword */: case 103 /* VoidKeyword */: - case 134 /* UndefinedKeyword */: + case 135 /* UndefinedKeyword */: case 93 /* NullKeyword */: case 97 /* ThisKeyword */: case 101 /* TypeOfKeyword */: + case 127 /* NeverKeyword */: case 15 /* OpenBraceToken */: case 19 /* OpenBracketToken */: case 25 /* LessThanToken */: @@ -9569,7 +9614,7 @@ var ts; var type = parseNonArrayType(); while (!scanner.hasPrecedingLineBreak() && parseOptional(19 /* OpenBracketToken */)) { parseExpected(20 /* CloseBracketToken */); - var node = createNode(159 /* ArrayType */, type.pos); + var node = createNode(160 /* ArrayType */, type.pos); node.elementType = type; type = finishNode(node); } @@ -9591,10 +9636,10 @@ var ts; return type; } function parseIntersectionTypeOrHigher() { - return parseUnionOrIntersectionType(162 /* IntersectionType */, parseArrayTypeOrHigher, 46 /* AmpersandToken */); + return parseUnionOrIntersectionType(163 /* IntersectionType */, parseArrayTypeOrHigher, 46 /* AmpersandToken */); } function parseUnionTypeOrHigher() { - return parseUnionOrIntersectionType(161 /* UnionType */, parseIntersectionTypeOrHigher, 47 /* BarToken */); + return parseUnionOrIntersectionType(162 /* UnionType */, parseIntersectionTypeOrHigher, 47 /* BarToken */); } function isStartOfFunctionType() { if (token === 25 /* LessThanToken */) { @@ -9651,7 +9696,7 @@ var ts; var typePredicateVariable = isIdentifier() && tryParse(parseTypePredicatePrefix); var type = parseType(); if (typePredicateVariable) { - var node = createNode(153 /* TypePredicate */, typePredicateVariable.pos); + var node = createNode(154 /* TypePredicate */, typePredicateVariable.pos); node.parameterName = typePredicateVariable; node.type = type; return finishNode(node); @@ -9674,10 +9719,10 @@ var ts; } function parseTypeWorker() { if (isStartOfFunctionType()) { - return parseFunctionOrConstructorType(155 /* FunctionType */); + return parseFunctionOrConstructorType(156 /* FunctionType */); } if (token === 92 /* NewKeyword */) { - return parseFunctionOrConstructorType(156 /* ConstructorType */); + return parseFunctionOrConstructorType(157 /* ConstructorType */); } return parseUnionTypeOrHigher(); } @@ -9796,7 +9841,8 @@ var ts; // 2) LeftHandSideExpression = AssignmentExpression[?in,?yield] // 3) LeftHandSideExpression AssignmentOperator AssignmentExpression[?in,?yield] // 4) ArrowFunctionExpression[?in,?yield] - // 5) [+Yield] YieldExpression[?In] + // 5) AsyncArrowFunctionExpression[in,yield,await] + // 6) [+Yield] YieldExpression[?In] // // Note: for ease of implementation we treat productions '2' and '3' as the same thing. // (i.e. they're both BinaryExpressions with an assignment operator in it). @@ -9804,11 +9850,18 @@ var ts; if (isYieldExpression()) { return parseYieldExpression(); } - // Then, check if we have an arrow function (production '4') that starts with a parenthesized - // parameter list. If we do, we must *not* recurse for productions 1, 2 or 3. An ArrowFunction is + // Then, check if we have an arrow function (production '4' and '5') that starts with a parenthesized + // parameter list or is an async arrow function. + // AsyncArrowFunctionExpression: + // 1) async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In] + // 2) CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In] + // Production (1) of AsyncArrowFunctionExpression is parsed in "tryParseAsyncSimpleArrowFunctionExpression". + // And production (2) is parsed in "tryParseParenthesizedArrowFunctionExpression". + // + // If we do successfully parse arrow-function, we must *not* recurse for productions 1, 2 or 3. An ArrowFunction is // not a LeftHandSideExpression, nor does it start a ConditionalExpression. So we are done // with AssignmentExpression if we see one. - var arrowExpression = tryParseParenthesizedArrowFunctionExpression(); + var arrowExpression = tryParseParenthesizedArrowFunctionExpression() || tryParseAsyncSimpleArrowFunctionExpression(); if (arrowExpression) { return arrowExpression; } @@ -9870,7 +9923,7 @@ var ts; return !scanner.hasPrecedingLineBreak() && isIdentifier(); } function parseYieldExpression() { - var node = createNode(189 /* YieldExpression */); + var node = createNode(190 /* YieldExpression */); // YieldExpression[In] : // yield // yield [no LineTerminator here] [Lexical goal InputElementRegExp]AssignmentExpression[?In, Yield] @@ -9888,17 +9941,24 @@ var ts; return finishNode(node); } } - function parseSimpleArrowFunctionExpression(identifier) { + function parseSimpleArrowFunctionExpression(identifier, asyncModifier) { ts.Debug.assert(token === 34 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); - var node = createNode(179 /* ArrowFunction */, identifier.pos); - var parameter = createNode(141 /* Parameter */, identifier.pos); + var node; + if (asyncModifier) { + node = createNode(180 /* ArrowFunction */, asyncModifier.pos); + setModifiers(node, asyncModifier); + } + else { + node = createNode(180 /* ArrowFunction */, identifier.pos); + } + var parameter = createNode(142 /* Parameter */, identifier.pos); parameter.name = identifier; finishNode(parameter); node.parameters = [parameter]; node.parameters.pos = parameter.pos; node.parameters.end = parameter.end; node.equalsGreaterThanToken = parseExpectedToken(34 /* EqualsGreaterThanToken */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, "=>"); - node.body = parseArrowFunctionExpressionBody(/*isAsync*/ false); + node.body = parseArrowFunctionExpressionBody(/*isAsync*/ !!asyncModifier); return finishNode(node); } function tryParseParenthesizedArrowFunctionExpression() { @@ -10042,8 +10102,39 @@ var ts; function parsePossibleParenthesizedArrowFunctionExpressionHead() { return parseParenthesizedArrowFunctionExpressionHead(/*allowAmbiguity*/ false); } + function tryParseAsyncSimpleArrowFunctionExpression() { + // We do a check here so that we won't be doing unnecessarily call to "lookAhead" + if (token === 118 /* AsyncKeyword */) { + var isUnParenthesizedAsyncArrowFunction = lookAhead(isUnParenthesizedAsyncArrowFunctionWorker); + if (isUnParenthesizedAsyncArrowFunction === 1 /* True */) { + var asyncModifier = parseModifiersForArrowFunction(); + var expr = parseBinaryExpressionOrHigher(/*precedence*/ 0); + return parseSimpleArrowFunctionExpression(expr, asyncModifier); + } + } + return undefined; + } + function isUnParenthesizedAsyncArrowFunctionWorker() { + // AsyncArrowFunctionExpression: + // 1) async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In] + // 2) CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In] + if (token === 118 /* AsyncKeyword */) { + nextToken(); + // If the "async" is followed by "=>" token then it is not a begining of an async arrow-function + // but instead a simple arrow-function which will be parsed inside "parseAssignmentExpressionOrHigher" + if (scanner.hasPrecedingLineBreak() || token === 34 /* EqualsGreaterThanToken */) { + return 0 /* False */; + } + // Check for un-parenthesized AsyncArrowFunction + var expr = parseBinaryExpressionOrHigher(/*precedence*/ 0); + if (!scanner.hasPrecedingLineBreak() && expr.kind === 69 /* Identifier */ && token === 34 /* EqualsGreaterThanToken */) { + return 1 /* True */; + } + } + return 0 /* False */; + } function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) { - var node = createNode(179 /* ArrowFunction */); + var node = createNode(180 /* ArrowFunction */); setModifiers(node, parseModifiersForArrowFunction()); var isAsync = !!(node.flags & 256 /* Async */); // Arrow functions are never generators. @@ -10109,7 +10200,7 @@ var ts; } // Note: we explicitly 'allowIn' in the whenTrue part of the condition expression, and // we do not that for the 'whenFalse' part. - var node = createNode(187 /* ConditionalExpression */, leftOperand.pos); + var node = createNode(188 /* ConditionalExpression */, leftOperand.pos); node.condition = leftOperand; node.questionToken = questionToken; node.whenTrue = doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher); @@ -10122,7 +10213,7 @@ var ts; return parseBinaryExpressionRest(precedence, leftOperand); } function isInOrOfKeyword(t) { - return t === 90 /* InKeyword */ || t === 137 /* OfKeyword */; + return t === 90 /* InKeyword */ || t === 138 /* OfKeyword */; } function parseBinaryExpressionRest(precedence, leftOperand) { while (true) { @@ -10230,39 +10321,39 @@ var ts; return -1; } function makeBinaryExpression(left, operatorToken, right) { - var node = createNode(186 /* BinaryExpression */, left.pos); + var node = createNode(187 /* BinaryExpression */, left.pos); node.left = left; node.operatorToken = operatorToken; node.right = right; return finishNode(node); } function makeAsExpression(left, right) { - var node = createNode(194 /* AsExpression */, left.pos); + var node = createNode(195 /* AsExpression */, left.pos); node.expression = left; node.type = right; return finishNode(node); } function parsePrefixUnaryExpression() { - var node = createNode(184 /* PrefixUnaryExpression */); + var node = createNode(185 /* PrefixUnaryExpression */); node.operator = token; nextToken(); node.operand = parseSimpleUnaryExpression(); return finishNode(node); } function parseDeleteExpression() { - var node = createNode(180 /* DeleteExpression */); + var node = createNode(181 /* DeleteExpression */); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function parseTypeOfExpression() { - var node = createNode(181 /* TypeOfExpression */); + var node = createNode(182 /* TypeOfExpression */); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function parseVoidExpression() { - var node = createNode(182 /* VoidExpression */); + var node = createNode(183 /* VoidExpression */); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); @@ -10278,7 +10369,7 @@ var ts; return false; } function parseAwaitExpression() { - var node = createNode(183 /* AwaitExpression */); + var node = createNode(184 /* AwaitExpression */); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); @@ -10304,7 +10395,7 @@ var ts; var simpleUnaryExpression = parseSimpleUnaryExpression(); if (token === 38 /* AsteriskAsteriskToken */) { var start = ts.skipTrivia(sourceText, simpleUnaryExpression.pos); - if (simpleUnaryExpression.kind === 176 /* TypeAssertionExpression */) { + if (simpleUnaryExpression.kind === 177 /* TypeAssertionExpression */) { 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 { @@ -10394,7 +10485,7 @@ var ts; */ function parseIncrementExpression() { if (token === 41 /* PlusPlusToken */ || token === 42 /* MinusMinusToken */) { - var node = createNode(184 /* PrefixUnaryExpression */); + var node = createNode(185 /* PrefixUnaryExpression */); node.operator = token; nextToken(); node.operand = parseLeftHandSideExpressionOrHigher(); @@ -10407,7 +10498,7 @@ var ts; var expression = parseLeftHandSideExpressionOrHigher(); ts.Debug.assert(ts.isLeftHandSideExpression(expression)); if ((token === 41 /* PlusPlusToken */ || token === 42 /* MinusMinusToken */) && !scanner.hasPrecedingLineBreak()) { - var node = createNode(185 /* PostfixUnaryExpression */, expression.pos); + var node = createNode(186 /* PostfixUnaryExpression */, expression.pos); node.operand = expression; node.operator = token; nextToken(); @@ -10511,7 +10602,7 @@ var ts; } // If we have seen "super" it must be followed by '(' or '.'. // If it wasn't then just try to parse out a '.' and report an error. - var node = createNode(171 /* PropertyAccessExpression */, expression.pos); + var node = createNode(172 /* PropertyAccessExpression */, expression.pos); node.expression = expression; node.dotToken = parseExpectedToken(21 /* DotToken */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); node.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); @@ -10530,8 +10621,8 @@ var ts; function parseJsxElementOrSelfClosingElement(inExpressionContext) { var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext); var result; - if (opening.kind === 242 /* JsxOpeningElement */) { - var node = createNode(240 /* JsxElement */, opening.pos); + if (opening.kind === 243 /* JsxOpeningElement */) { + var node = createNode(241 /* JsxElement */, opening.pos); node.openingElement = opening; node.children = parseJsxChildren(node.openingElement.tagName); node.closingElement = parseJsxClosingElement(inExpressionContext); @@ -10541,7 +10632,7 @@ var ts; result = finishNode(node); } else { - ts.Debug.assert(opening.kind === 241 /* JsxSelfClosingElement */); + ts.Debug.assert(opening.kind === 242 /* JsxSelfClosingElement */); // Nothing else to do for self-closing elements result = opening; } @@ -10556,7 +10647,7 @@ var ts; var invalidElement = tryParse(function () { return parseJsxElementOrSelfClosingElement(/*inExpressionContext*/ true); }); if (invalidElement) { parseErrorAtCurrentToken(ts.Diagnostics.JSX_expressions_must_have_one_parent_element); - var badNode = createNode(186 /* BinaryExpression */, result.pos); + var badNode = createNode(187 /* BinaryExpression */, result.pos); badNode.end = invalidElement.end; badNode.left = result; badNode.right = invalidElement; @@ -10568,13 +10659,13 @@ var ts; return result; } function parseJsxText() { - var node = createNode(243 /* JsxText */, scanner.getStartPos()); + var node = createNode(244 /* JsxText */, scanner.getStartPos()); token = scanner.scanJsxToken(); return finishNode(node); } function parseJsxChild() { switch (token) { - case 243 /* JsxText */: + case 244 /* JsxText */: return parseJsxText(); case 15 /* OpenBraceToken */: return parseJsxExpression(/*inExpressionContext*/ false); @@ -10616,7 +10707,7 @@ var ts; // Closing tag, so scan the immediately-following text with the JSX scanning instead // of regular scanning to avoid treating illegal characters (e.g. '#') as immediate // scanning errors - node = createNode(242 /* JsxOpeningElement */, fullStart); + node = createNode(243 /* JsxOpeningElement */, fullStart); scanJsxText(); } else { @@ -10628,7 +10719,7 @@ var ts; parseExpected(27 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false); scanJsxText(); } - node = createNode(241 /* JsxSelfClosingElement */, fullStart); + node = createNode(242 /* JsxSelfClosingElement */, fullStart); } node.tagName = tagName; node.attributes = attributes; @@ -10639,7 +10730,7 @@ var ts; var elementName = parseIdentifierName(); while (parseOptional(21 /* DotToken */)) { scanJsxIdentifier(); - var node = createNode(138 /* QualifiedName */, elementName.pos); + var node = createNode(139 /* QualifiedName */, elementName.pos); // !!! node.left = elementName; node.right = parseIdentifierName(); elementName = finishNode(node); @@ -10647,7 +10738,7 @@ var ts; return elementName; } function parseJsxExpression(inExpressionContext) { - var node = createNode(247 /* JsxExpression */); + var node = createNode(248 /* JsxExpression */); parseExpected(15 /* OpenBraceToken */); if (token !== 16 /* CloseBraceToken */) { node.expression = parseAssignmentExpressionOrHigher(); @@ -10666,7 +10757,7 @@ var ts; return parseJsxSpreadAttribute(); } scanJsxIdentifier(); - var node = createNode(245 /* JsxAttribute */); + var node = createNode(246 /* JsxAttribute */); node.name = parseIdentifierName(); if (parseOptional(56 /* EqualsToken */)) { switch (token) { @@ -10681,7 +10772,7 @@ var ts; return finishNode(node); } function parseJsxSpreadAttribute() { - var node = createNode(246 /* JsxSpreadAttribute */); + var node = createNode(247 /* JsxSpreadAttribute */); parseExpected(15 /* OpenBraceToken */); parseExpected(22 /* DotDotDotToken */); node.expression = parseExpression(); @@ -10689,7 +10780,7 @@ var ts; return finishNode(node); } function parseJsxClosingElement(inExpressionContext) { - var node = createNode(244 /* JsxClosingElement */); + var node = createNode(245 /* JsxClosingElement */); parseExpected(26 /* LessThanSlashToken */); node.tagName = parseJsxElementName(); if (inExpressionContext) { @@ -10702,7 +10793,7 @@ var ts; return finishNode(node); } function parseTypeAssertion() { - var node = createNode(176 /* TypeAssertionExpression */); + var node = createNode(177 /* TypeAssertionExpression */); parseExpected(25 /* LessThanToken */); node.type = parseType(); parseExpected(27 /* GreaterThanToken */); @@ -10713,7 +10804,7 @@ var ts; while (true) { var dotToken = parseOptionalToken(21 /* DotToken */); if (dotToken) { - var propertyAccess = createNode(171 /* PropertyAccessExpression */, expression.pos); + var propertyAccess = createNode(172 /* PropertyAccessExpression */, expression.pos); propertyAccess.expression = expression; propertyAccess.dotToken = dotToken; propertyAccess.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); @@ -10722,14 +10813,14 @@ var ts; } if (token === 49 /* ExclamationToken */ && !scanner.hasPrecedingLineBreak()) { nextToken(); - var nonNullExpression = createNode(195 /* NonNullExpression */, expression.pos); + var nonNullExpression = createNode(196 /* NonNullExpression */, expression.pos); nonNullExpression.expression = expression; expression = finishNode(nonNullExpression); continue; } // when in the [Decorator] context, we do not parse ElementAccess as it could be part of a ComputedPropertyName if (!inDecoratorContext() && parseOptional(19 /* OpenBracketToken */)) { - var indexedAccess = createNode(172 /* ElementAccessExpression */, expression.pos); + var indexedAccess = createNode(173 /* ElementAccessExpression */, expression.pos); indexedAccess.expression = expression; // It's not uncommon for a user to write: "new Type[]". // Check for that common pattern and report a better error message. @@ -10745,7 +10836,7 @@ var ts; continue; } if (token === 11 /* NoSubstitutionTemplateLiteral */ || token === 12 /* TemplateHead */) { - var tagExpression = createNode(175 /* TaggedTemplateExpression */, expression.pos); + var tagExpression = createNode(176 /* TaggedTemplateExpression */, expression.pos); tagExpression.tag = expression; tagExpression.template = token === 11 /* NoSubstitutionTemplateLiteral */ ? parseLiteralNode() @@ -10768,7 +10859,7 @@ var ts; if (!typeArguments) { return expression; } - var callExpr = createNode(173 /* CallExpression */, expression.pos); + var callExpr = createNode(174 /* CallExpression */, expression.pos); callExpr.expression = expression; callExpr.typeArguments = typeArguments; callExpr.arguments = parseArgumentList(); @@ -10776,7 +10867,7 @@ var ts; continue; } else if (token === 17 /* OpenParenToken */) { - var callExpr = createNode(173 /* CallExpression */, expression.pos); + var callExpr = createNode(174 /* CallExpression */, expression.pos); callExpr.expression = expression; callExpr.arguments = parseArgumentList(); expression = finishNode(callExpr); @@ -10886,28 +10977,28 @@ var ts; return parseIdentifier(ts.Diagnostics.Expression_expected); } function parseParenthesizedExpression() { - var node = createNode(177 /* ParenthesizedExpression */); + var node = createNode(178 /* ParenthesizedExpression */); parseExpected(17 /* OpenParenToken */); node.expression = allowInAnd(parseExpression); parseExpected(18 /* CloseParenToken */); return finishNode(node); } function parseSpreadElement() { - var node = createNode(190 /* SpreadElementExpression */); + var node = createNode(191 /* SpreadElementExpression */); parseExpected(22 /* DotDotDotToken */); node.expression = parseAssignmentExpressionOrHigher(); return finishNode(node); } function parseArgumentOrArrayLiteralElement() { return token === 22 /* DotDotDotToken */ ? parseSpreadElement() : - token === 24 /* CommaToken */ ? createNode(192 /* OmittedExpression */) : + token === 24 /* CommaToken */ ? createNode(193 /* OmittedExpression */) : parseAssignmentExpressionOrHigher(); } function parseArgumentExpression() { return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement); } function parseArrayLiteralExpression() { - var node = createNode(169 /* ArrayLiteralExpression */); + var node = createNode(170 /* ArrayLiteralExpression */); parseExpected(19 /* OpenBracketToken */); if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; @@ -10918,10 +11009,10 @@ var ts; } function tryParseAccessorDeclaration(fullStart, decorators, modifiers) { if (parseContextualModifier(123 /* GetKeyword */)) { - return addJSDocComment(parseAccessorDeclaration(148 /* GetAccessor */, fullStart, decorators, modifiers)); + return addJSDocComment(parseAccessorDeclaration(149 /* GetAccessor */, fullStart, decorators, modifiers)); } - else if (parseContextualModifier(130 /* SetKeyword */)) { - return parseAccessorDeclaration(149 /* SetAccessor */, fullStart, decorators, modifiers); + else if (parseContextualModifier(131 /* SetKeyword */)) { + return parseAccessorDeclaration(150 /* SetAccessor */, fullStart, decorators, modifiers); } return undefined; } @@ -10948,7 +11039,7 @@ var ts; // this is necessary because ObjectLiteral productions are also used to cover grammar for ObjectAssignmentPattern var isShorthandPropertyAssignment = tokenIsIdentifier && (token === 24 /* CommaToken */ || token === 16 /* CloseBraceToken */ || token === 56 /* EqualsToken */); if (isShorthandPropertyAssignment) { - var shorthandDeclaration = createNode(253 /* ShorthandPropertyAssignment */, fullStart); + var shorthandDeclaration = createNode(254 /* ShorthandPropertyAssignment */, fullStart); shorthandDeclaration.name = propertyName; shorthandDeclaration.questionToken = questionToken; var equalsToken = parseOptionalToken(56 /* EqualsToken */); @@ -10959,7 +11050,7 @@ var ts; return addJSDocComment(finishNode(shorthandDeclaration)); } else { - var propertyAssignment = createNode(252 /* PropertyAssignment */, fullStart); + var propertyAssignment = createNode(253 /* PropertyAssignment */, fullStart); propertyAssignment.modifiers = modifiers; propertyAssignment.name = propertyName; propertyAssignment.questionToken = questionToken; @@ -10969,7 +11060,7 @@ var ts; } } function parseObjectLiteralExpression() { - var node = createNode(170 /* ObjectLiteralExpression */); + var node = createNode(171 /* ObjectLiteralExpression */); parseExpected(15 /* OpenBraceToken */); if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; @@ -10988,7 +11079,7 @@ var ts; if (saveDecoratorContext) { setDecoratorContext(/*val*/ false); } - var node = createNode(178 /* FunctionExpression */); + var node = createNode(179 /* FunctionExpression */); setModifiers(node, parseModifiers()); parseExpected(87 /* FunctionKeyword */); node.asteriskToken = parseOptionalToken(37 /* AsteriskToken */); @@ -11010,7 +11101,7 @@ var ts; return isIdentifier() ? parseIdentifier() : undefined; } function parseNewExpression() { - var node = createNode(174 /* NewExpression */); + var node = createNode(175 /* NewExpression */); parseExpected(92 /* NewKeyword */); node.expression = parseMemberExpressionOrHigher(); node.typeArguments = tryParse(parseTypeArgumentsInExpression); @@ -11021,7 +11112,7 @@ var ts; } // STATEMENTS function parseBlock(ignoreMissingOpenBrace, diagnosticMessage) { - var node = createNode(198 /* Block */); + var node = createNode(199 /* Block */); if (parseExpected(15 /* OpenBraceToken */, diagnosticMessage) || ignoreMissingOpenBrace) { node.statements = parseList(1 /* BlockStatements */, parseStatement); parseExpected(16 /* CloseBraceToken */); @@ -11051,12 +11142,12 @@ var ts; return block; } function parseEmptyStatement() { - var node = createNode(200 /* EmptyStatement */); + var node = createNode(201 /* EmptyStatement */); parseExpected(23 /* SemicolonToken */); return finishNode(node); } function parseIfStatement() { - var node = createNode(202 /* IfStatement */); + var node = createNode(203 /* IfStatement */); parseExpected(88 /* IfKeyword */); parseExpected(17 /* OpenParenToken */); node.expression = allowInAnd(parseExpression); @@ -11066,7 +11157,7 @@ var ts; return finishNode(node); } function parseDoStatement() { - var node = createNode(203 /* DoStatement */); + var node = createNode(204 /* DoStatement */); parseExpected(79 /* DoKeyword */); node.statement = parseStatement(); parseExpected(104 /* WhileKeyword */); @@ -11081,7 +11172,7 @@ var ts; return finishNode(node); } function parseWhileStatement() { - var node = createNode(204 /* WhileStatement */); + var node = createNode(205 /* WhileStatement */); parseExpected(104 /* WhileKeyword */); parseExpected(17 /* OpenParenToken */); node.expression = allowInAnd(parseExpression); @@ -11104,21 +11195,21 @@ var ts; } var forOrForInOrForOfStatement; if (parseOptional(90 /* InKeyword */)) { - var forInStatement = createNode(206 /* ForInStatement */, pos); + var forInStatement = createNode(207 /* ForInStatement */, pos); forInStatement.initializer = initializer; forInStatement.expression = allowInAnd(parseExpression); parseExpected(18 /* CloseParenToken */); forOrForInOrForOfStatement = forInStatement; } - else if (parseOptional(137 /* OfKeyword */)) { - var forOfStatement = createNode(207 /* ForOfStatement */, pos); + else if (parseOptional(138 /* OfKeyword */)) { + var forOfStatement = createNode(208 /* ForOfStatement */, pos); forOfStatement.initializer = initializer; forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher); parseExpected(18 /* CloseParenToken */); forOrForInOrForOfStatement = forOfStatement; } else { - var forStatement = createNode(205 /* ForStatement */, pos); + var forStatement = createNode(206 /* ForStatement */, pos); forStatement.initializer = initializer; parseExpected(23 /* SemicolonToken */); if (token !== 23 /* SemicolonToken */ && token !== 18 /* CloseParenToken */) { @@ -11136,7 +11227,7 @@ var ts; } function parseBreakOrContinueStatement(kind) { var node = createNode(kind); - parseExpected(kind === 209 /* BreakStatement */ ? 70 /* BreakKeyword */ : 75 /* ContinueKeyword */); + parseExpected(kind === 210 /* BreakStatement */ ? 70 /* BreakKeyword */ : 75 /* ContinueKeyword */); if (!canParseSemicolon()) { node.label = parseIdentifier(); } @@ -11144,7 +11235,7 @@ var ts; return finishNode(node); } function parseReturnStatement() { - var node = createNode(210 /* ReturnStatement */); + var node = createNode(211 /* ReturnStatement */); parseExpected(94 /* ReturnKeyword */); if (!canParseSemicolon()) { node.expression = allowInAnd(parseExpression); @@ -11153,7 +11244,7 @@ var ts; return finishNode(node); } function parseWithStatement() { - var node = createNode(211 /* WithStatement */); + var node = createNode(212 /* WithStatement */); parseExpected(105 /* WithKeyword */); parseExpected(17 /* OpenParenToken */); node.expression = allowInAnd(parseExpression); @@ -11162,7 +11253,7 @@ var ts; return finishNode(node); } function parseCaseClause() { - var node = createNode(248 /* CaseClause */); + var node = createNode(249 /* CaseClause */); parseExpected(71 /* CaseKeyword */); node.expression = allowInAnd(parseExpression); parseExpected(54 /* ColonToken */); @@ -11170,7 +11261,7 @@ var ts; return finishNode(node); } function parseDefaultClause() { - var node = createNode(249 /* DefaultClause */); + var node = createNode(250 /* DefaultClause */); parseExpected(77 /* DefaultKeyword */); parseExpected(54 /* ColonToken */); node.statements = parseList(3 /* SwitchClauseStatements */, parseStatement); @@ -11180,12 +11271,12 @@ var ts; return token === 71 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause(); } function parseSwitchStatement() { - var node = createNode(212 /* SwitchStatement */); + var node = createNode(213 /* SwitchStatement */); parseExpected(96 /* SwitchKeyword */); parseExpected(17 /* OpenParenToken */); node.expression = allowInAnd(parseExpression); parseExpected(18 /* CloseParenToken */); - var caseBlock = createNode(226 /* CaseBlock */, scanner.getStartPos()); + var caseBlock = createNode(227 /* CaseBlock */, scanner.getStartPos()); parseExpected(15 /* OpenBraceToken */); caseBlock.clauses = parseList(2 /* SwitchClauses */, parseCaseOrDefaultClause); parseExpected(16 /* CloseBraceToken */); @@ -11200,7 +11291,7 @@ var ts; // directly as that might consume an expression on the following line. // We just return 'undefined' in that case. The actual error will be reported in the // grammar walker. - var node = createNode(214 /* ThrowStatement */); + var node = createNode(215 /* ThrowStatement */); parseExpected(98 /* ThrowKeyword */); node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression); parseSemicolon(); @@ -11208,7 +11299,7 @@ var ts; } // TODO: Review for error recovery function parseTryStatement() { - var node = createNode(215 /* TryStatement */); + var node = createNode(216 /* TryStatement */); parseExpected(100 /* TryKeyword */); node.tryBlock = parseBlock(/*ignoreMissingOpenBrace*/ false); node.catchClause = token === 72 /* CatchKeyword */ ? parseCatchClause() : undefined; @@ -11221,7 +11312,7 @@ var ts; return finishNode(node); } function parseCatchClause() { - var result = createNode(251 /* CatchClause */); + var result = createNode(252 /* CatchClause */); parseExpected(72 /* CatchKeyword */); if (parseExpected(17 /* OpenParenToken */)) { result.variableDeclaration = parseVariableDeclaration(); @@ -11231,7 +11322,7 @@ var ts; return finishNode(result); } function parseDebuggerStatement() { - var node = createNode(216 /* DebuggerStatement */); + var node = createNode(217 /* DebuggerStatement */); parseExpected(76 /* DebuggerKeyword */); parseSemicolon(); return finishNode(node); @@ -11243,13 +11334,13 @@ var ts; var fullStart = scanner.getStartPos(); var expression = allowInAnd(parseExpression); if (expression.kind === 69 /* Identifier */ && parseOptional(54 /* ColonToken */)) { - var labeledStatement = createNode(213 /* LabeledStatement */, fullStart); + var labeledStatement = createNode(214 /* LabeledStatement */, fullStart); labeledStatement.label = expression; labeledStatement.statement = parseStatement(); return addJSDocComment(finishNode(labeledStatement)); } else { - var expressionStatement = createNode(201 /* ExpressionStatement */, fullStart); + var expressionStatement = createNode(202 /* ExpressionStatement */, fullStart); expressionStatement.expression = expression; parseSemicolon(); return addJSDocComment(finishNode(expressionStatement)); @@ -11299,7 +11390,7 @@ var ts; // // could be legal, it would add complexity for very little gain. case 107 /* InterfaceKeyword */: - case 133 /* TypeKeyword */: + case 134 /* TypeKeyword */: return nextTokenIsIdentifierOnSameLine(); case 125 /* ModuleKeyword */: case 126 /* NamespaceKeyword */: @@ -11310,14 +11401,14 @@ var ts; case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: case 112 /* PublicKeyword */: - case 127 /* ReadonlyKeyword */: + case 128 /* ReadonlyKeyword */: nextToken(); // ASI takes effect for this modifier. if (scanner.hasPrecedingLineBreak()) { return false; } continue; - case 136 /* GlobalKeyword */: + case 137 /* GlobalKeyword */: nextToken(); return token === 15 /* OpenBraceToken */ || token === 69 /* Identifier */ || token === 82 /* ExportKeyword */; case 89 /* ImportKeyword */: @@ -11379,15 +11470,15 @@ var ts; case 107 /* InterfaceKeyword */: case 125 /* ModuleKeyword */: case 126 /* NamespaceKeyword */: - case 133 /* TypeKeyword */: - case 136 /* GlobalKeyword */: + case 134 /* TypeKeyword */: + case 137 /* GlobalKeyword */: // When these don't start a declaration, they're an identifier in an expression statement return true; case 112 /* PublicKeyword */: case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: case 113 /* StaticKeyword */: - case 127 /* ReadonlyKeyword */: + case 128 /* ReadonlyKeyword */: // When these don't start a declaration, they may be the start of a class member if an identifier // immediately follows. Otherwise they're an identifier in an expression statement. return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); @@ -11430,9 +11521,9 @@ var ts; case 86 /* ForKeyword */: return parseForOrForInOrForOfStatement(); case 75 /* ContinueKeyword */: - return parseBreakOrContinueStatement(208 /* ContinueStatement */); + return parseBreakOrContinueStatement(209 /* ContinueStatement */); case 70 /* BreakKeyword */: - return parseBreakOrContinueStatement(209 /* BreakStatement */); + return parseBreakOrContinueStatement(210 /* BreakStatement */); case 94 /* ReturnKeyword */: return parseReturnStatement(); case 105 /* WithKeyword */: @@ -11452,7 +11543,7 @@ var ts; return parseDeclaration(); case 118 /* AsyncKeyword */: case 107 /* InterfaceKeyword */: - case 133 /* TypeKeyword */: + case 134 /* TypeKeyword */: case 125 /* ModuleKeyword */: case 126 /* NamespaceKeyword */: case 122 /* DeclareKeyword */: @@ -11465,8 +11556,8 @@ var ts; case 112 /* PublicKeyword */: case 115 /* AbstractKeyword */: case 113 /* StaticKeyword */: - case 127 /* ReadonlyKeyword */: - case 136 /* GlobalKeyword */: + case 128 /* ReadonlyKeyword */: + case 137 /* GlobalKeyword */: if (isStartOfDeclaration()) { return parseDeclaration(); } @@ -11489,11 +11580,11 @@ var ts; return parseClassDeclaration(fullStart, decorators, modifiers); case 107 /* InterfaceKeyword */: return parseInterfaceDeclaration(fullStart, decorators, modifiers); - case 133 /* TypeKeyword */: + case 134 /* TypeKeyword */: return parseTypeAliasDeclaration(fullStart, decorators, modifiers); case 81 /* EnumKeyword */: return parseEnumDeclaration(fullStart, decorators, modifiers); - case 136 /* GlobalKeyword */: + case 137 /* GlobalKeyword */: case 125 /* ModuleKeyword */: case 126 /* NamespaceKeyword */: return parseModuleDeclaration(fullStart, decorators, modifiers); @@ -11514,7 +11605,7 @@ var ts; if (decorators || modifiers) { // We reached this point because we encountered decorators and/or modifiers and assumed a declaration // would follow. For recovery and error reporting purposes, return an incomplete declaration. - var node = createMissingNode(238 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected); + var node = createMissingNode(239 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected); node.pos = fullStart; node.decorators = decorators; setModifiers(node, modifiers); @@ -11536,16 +11627,16 @@ var ts; // DECLARATIONS function parseArrayBindingElement() { if (token === 24 /* CommaToken */) { - return createNode(192 /* OmittedExpression */); + return createNode(193 /* OmittedExpression */); } - var node = createNode(168 /* BindingElement */); + var node = createNode(169 /* BindingElement */); node.dotDotDotToken = parseOptionalToken(22 /* DotDotDotToken */); node.name = parseIdentifierOrPattern(); node.initializer = parseBindingElementInitializer(/*inParameter*/ false); return finishNode(node); } function parseObjectBindingElement() { - var node = createNode(168 /* BindingElement */); + var node = createNode(169 /* BindingElement */); var tokenIsIdentifier = isIdentifier(); var propertyName = parsePropertyName(); if (tokenIsIdentifier && token !== 54 /* ColonToken */) { @@ -11560,14 +11651,14 @@ var ts; return finishNode(node); } function parseObjectBindingPattern() { - var node = createNode(166 /* ObjectBindingPattern */); + var node = createNode(167 /* ObjectBindingPattern */); parseExpected(15 /* OpenBraceToken */); node.elements = parseDelimitedList(9 /* ObjectBindingElements */, parseObjectBindingElement); parseExpected(16 /* CloseBraceToken */); return finishNode(node); } function parseArrayBindingPattern() { - var node = createNode(167 /* ArrayBindingPattern */); + var node = createNode(168 /* ArrayBindingPattern */); parseExpected(19 /* OpenBracketToken */); node.elements = parseDelimitedList(10 /* ArrayBindingElements */, parseArrayBindingElement); parseExpected(20 /* CloseBracketToken */); @@ -11586,7 +11677,7 @@ var ts; return parseIdentifier(); } function parseVariableDeclaration() { - var node = createNode(217 /* VariableDeclaration */); + var node = createNode(218 /* VariableDeclaration */); node.name = parseIdentifierOrPattern(); node.type = parseTypeAnnotation(); if (!isInOrOfKeyword(token)) { @@ -11595,7 +11686,7 @@ var ts; return finishNode(node); } function parseVariableDeclarationList(inForStatementInitializer) { - var node = createNode(218 /* VariableDeclarationList */); + var node = createNode(219 /* VariableDeclarationList */); switch (token) { case 102 /* VarKeyword */: break; @@ -11618,7 +11709,7 @@ var ts; // So we need to look ahead to determine if 'of' should be treated as a keyword in // this context. // The checker will then give an error that there is an empty declaration list. - if (token === 137 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) { + if (token === 138 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) { node.declarations = createMissingList(); } else { @@ -11633,7 +11724,7 @@ var ts; return nextTokenIsIdentifier() && nextToken() === 18 /* CloseParenToken */; } function parseVariableStatement(fullStart, decorators, modifiers) { - var node = createNode(199 /* VariableStatement */, fullStart); + var node = createNode(200 /* VariableStatement */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); node.declarationList = parseVariableDeclarationList(/*inForStatementInitializer*/ false); @@ -11641,7 +11732,7 @@ var ts; return addJSDocComment(finishNode(node)); } function parseFunctionDeclaration(fullStart, decorators, modifiers) { - var node = createNode(219 /* FunctionDeclaration */, fullStart); + var node = createNode(220 /* FunctionDeclaration */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(87 /* FunctionKeyword */); @@ -11654,7 +11745,7 @@ var ts; return addJSDocComment(finishNode(node)); } function parseConstructorDeclaration(pos, decorators, modifiers) { - var node = createNode(147 /* Constructor */, pos); + var node = createNode(148 /* Constructor */, pos); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(121 /* ConstructorKeyword */); @@ -11663,7 +11754,7 @@ var ts; return addJSDocComment(finishNode(node)); } function parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, diagnosticMessage) { - var method = createNode(146 /* MethodDeclaration */, fullStart); + var method = createNode(147 /* MethodDeclaration */, fullStart); method.decorators = decorators; setModifiers(method, modifiers); method.asteriskToken = asteriskToken; @@ -11676,7 +11767,7 @@ var ts; return addJSDocComment(finishNode(method)); } function parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken) { - var property = createNode(144 /* PropertyDeclaration */, fullStart); + var property = createNode(145 /* PropertyDeclaration */, fullStart); property.decorators = decorators; setModifiers(property, modifiers); property.name = name; @@ -11728,7 +11819,7 @@ var ts; case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: case 113 /* StaticKeyword */: - case 127 /* ReadonlyKeyword */: + case 128 /* ReadonlyKeyword */: return true; default: return false; @@ -11769,7 +11860,7 @@ var ts; // If we were able to get any potential identifier... if (idToken !== undefined) { // If we have a non-keyword identifier, or if we have an accessor, then it's safe to parse. - if (!ts.isKeyword(idToken) || idToken === 130 /* SetKeyword */ || idToken === 123 /* GetKeyword */) { + if (!ts.isKeyword(idToken) || idToken === 131 /* SetKeyword */ || idToken === 123 /* GetKeyword */) { return true; } // If it *is* a keyword, but not an accessor, check a little farther along @@ -11803,7 +11894,7 @@ var ts; decorators = []; decorators.pos = decoratorStart; } - var decorator = createNode(142 /* Decorator */, decoratorStart); + var decorator = createNode(143 /* Decorator */, decoratorStart); decorator.expression = doInDecoratorContext(parseLeftHandSideExpressionOrHigher); decorators.push(finishNode(decorator)); } @@ -11827,7 +11918,7 @@ var ts; var modifierKind = token; if (token === 74 /* ConstKeyword */ && permitInvalidConstAsModifier) { // We need to ensure that any subsequent modifiers appear on the same line - // so that when 'const' is a standalone declaration, we don't issue an error. + // so that when 'const' is a standalone declaration, we don't issue an error. if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) { break; } @@ -11868,7 +11959,7 @@ var ts; } function parseClassElement() { if (token === 23 /* SemicolonToken */) { - var result = createNode(197 /* SemicolonClassElement */); + var result = createNode(198 /* SemicolonClassElement */); nextToken(); return finishNode(result); } @@ -11906,10 +11997,10 @@ var ts; return parseClassDeclarationOrExpression( /*fullStart*/ scanner.getStartPos(), /*decorators*/ undefined, - /*modifiers*/ undefined, 191 /* ClassExpression */); + /*modifiers*/ undefined, 192 /* ClassExpression */); } function parseClassDeclaration(fullStart, decorators, modifiers) { - return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 220 /* ClassDeclaration */); + return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 221 /* ClassDeclaration */); } function parseClassDeclarationOrExpression(fullStart, decorators, modifiers, kind) { var node = createNode(kind, fullStart); @@ -11953,7 +12044,7 @@ var ts; } function parseHeritageClause() { if (token === 83 /* ExtendsKeyword */ || token === 106 /* ImplementsKeyword */) { - var node = createNode(250 /* HeritageClause */); + var node = createNode(251 /* HeritageClause */); node.token = token; nextToken(); node.types = parseDelimitedList(7 /* HeritageClauseElement */, parseExpressionWithTypeArguments); @@ -11962,7 +12053,7 @@ var ts; return undefined; } function parseExpressionWithTypeArguments() { - var node = createNode(193 /* ExpressionWithTypeArguments */); + var node = createNode(194 /* ExpressionWithTypeArguments */); node.expression = parseLeftHandSideExpressionOrHigher(); if (token === 25 /* LessThanToken */) { node.typeArguments = parseBracketedList(18 /* TypeArguments */, parseType, 25 /* LessThanToken */, 27 /* GreaterThanToken */); @@ -11976,7 +12067,7 @@ var ts; return parseList(5 /* ClassMembers */, parseClassElement); } function parseInterfaceDeclaration(fullStart, decorators, modifiers) { - var node = createNode(221 /* InterfaceDeclaration */, fullStart); + var node = createNode(222 /* InterfaceDeclaration */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(107 /* InterfaceKeyword */); @@ -11987,10 +12078,10 @@ var ts; return finishNode(node); } function parseTypeAliasDeclaration(fullStart, decorators, modifiers) { - var node = createNode(222 /* TypeAliasDeclaration */, fullStart); + var node = createNode(223 /* TypeAliasDeclaration */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); - parseExpected(133 /* TypeKeyword */); + parseExpected(134 /* TypeKeyword */); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); parseExpected(56 /* EqualsToken */); @@ -12003,13 +12094,13 @@ var ts; // ConstantEnumMemberSection, which starts at the beginning of an enum declaration // or any time an integer literal initializer is encountered. function parseEnumMember() { - var node = createNode(254 /* EnumMember */, scanner.getStartPos()); + var node = createNode(255 /* EnumMember */, scanner.getStartPos()); node.name = parsePropertyName(); node.initializer = allowInAnd(parseNonParameterInitializer); return finishNode(node); } function parseEnumDeclaration(fullStart, decorators, modifiers) { - var node = createNode(223 /* EnumDeclaration */, fullStart); + var node = createNode(224 /* EnumDeclaration */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(81 /* EnumKeyword */); @@ -12024,7 +12115,7 @@ var ts; return finishNode(node); } function parseModuleBlock() { - var node = createNode(225 /* ModuleBlock */, scanner.getStartPos()); + var node = createNode(226 /* ModuleBlock */, scanner.getStartPos()); if (parseExpected(15 /* OpenBraceToken */)) { node.statements = parseList(1 /* BlockStatements */, parseStatement); parseExpected(16 /* CloseBraceToken */); @@ -12035,7 +12126,7 @@ var ts; return finishNode(node); } function parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags) { - var node = createNode(224 /* ModuleDeclaration */, fullStart); + var node = createNode(225 /* ModuleDeclaration */, fullStart); // If we are parsing a dotted namespace name, we want to // propagate the 'Namespace' flag across the names if set. var namespaceFlag = flags & 4096 /* Namespace */; @@ -12049,11 +12140,11 @@ var ts; return finishNode(node); } function parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers) { - var node = createNode(224 /* ModuleDeclaration */, fullStart); + var node = createNode(225 /* ModuleDeclaration */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); - if (token === 136 /* GlobalKeyword */) { - // parse 'global' as name of global scope augmentation + if (token === 137 /* GlobalKeyword */) { + // parse 'global' as name of global scope augmentation node.name = parseIdentifier(); node.flags |= 131072 /* GlobalAugmentation */; } @@ -12065,7 +12156,7 @@ var ts; } function parseModuleDeclaration(fullStart, decorators, modifiers) { var flags = modifiers ? modifiers.flags : 0; - if (token === 136 /* GlobalKeyword */) { + if (token === 137 /* GlobalKeyword */) { // global augmentation return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers); } @@ -12081,7 +12172,7 @@ var ts; return parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags); } function isExternalModuleReference() { - return token === 128 /* RequireKeyword */ && + return token === 129 /* RequireKeyword */ && lookAhead(nextTokenIsOpenParen); } function nextTokenIsOpenParen() { @@ -12091,7 +12182,7 @@ var ts; return nextToken() === 39 /* SlashToken */; } function parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers) { - var exportDeclaration = createNode(227 /* GlobalModuleExportDeclaration */, fullStart); + var exportDeclaration = createNode(228 /* GlobalModuleExportDeclaration */, fullStart); exportDeclaration.decorators = decorators; exportDeclaration.modifiers = modifiers; parseExpected(116 /* AsKeyword */); @@ -12106,11 +12197,11 @@ var ts; var identifier; if (isIdentifier()) { identifier = parseIdentifier(); - if (token !== 24 /* CommaToken */ && token !== 135 /* FromKeyword */) { + if (token !== 24 /* CommaToken */ && token !== 136 /* FromKeyword */) { // ImportEquals declaration of type: // import x = require("mod"); or // import x = M.x; - var importEqualsDeclaration = createNode(228 /* ImportEqualsDeclaration */, fullStart); + var importEqualsDeclaration = createNode(229 /* ImportEqualsDeclaration */, fullStart); importEqualsDeclaration.decorators = decorators; setModifiers(importEqualsDeclaration, modifiers); importEqualsDeclaration.name = identifier; @@ -12121,7 +12212,7 @@ var ts; } } // Import statement - var importDeclaration = createNode(229 /* ImportDeclaration */, fullStart); + var importDeclaration = createNode(230 /* ImportDeclaration */, fullStart); importDeclaration.decorators = decorators; setModifiers(importDeclaration, modifiers); // ImportDeclaration: @@ -12131,7 +12222,7 @@ var ts; token === 37 /* AsteriskToken */ || token === 15 /* OpenBraceToken */) { importDeclaration.importClause = parseImportClause(identifier, afterImportPos); - parseExpected(135 /* FromKeyword */); + parseExpected(136 /* FromKeyword */); } importDeclaration.moduleSpecifier = parseModuleSpecifier(); parseSemicolon(); @@ -12144,7 +12235,7 @@ var ts; // NamedImports // ImportedDefaultBinding, NameSpaceImport // ImportedDefaultBinding, NamedImports - var importClause = createNode(230 /* ImportClause */, fullStart); + var importClause = createNode(231 /* ImportClause */, fullStart); if (identifier) { // ImportedDefaultBinding: // ImportedBinding @@ -12154,7 +12245,7 @@ var ts; // parse namespace or named imports if (!importClause.name || parseOptional(24 /* CommaToken */)) { - importClause.namedBindings = token === 37 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(232 /* NamedImports */); + importClause.namedBindings = token === 37 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(233 /* NamedImports */); } return finishNode(importClause); } @@ -12164,8 +12255,8 @@ var ts; : parseEntityName(/*allowReservedWords*/ false); } function parseExternalModuleReference() { - var node = createNode(239 /* ExternalModuleReference */); - parseExpected(128 /* RequireKeyword */); + var node = createNode(240 /* ExternalModuleReference */); + parseExpected(129 /* RequireKeyword */); parseExpected(17 /* OpenParenToken */); node.expression = parseModuleSpecifier(); parseExpected(18 /* CloseParenToken */); @@ -12187,7 +12278,7 @@ var ts; function parseNamespaceImport() { // NameSpaceImport: // * as ImportedBinding - var namespaceImport = createNode(231 /* NamespaceImport */); + var namespaceImport = createNode(232 /* NamespaceImport */); parseExpected(37 /* AsteriskToken */); parseExpected(116 /* AsKeyword */); namespaceImport.name = parseIdentifier(); @@ -12202,14 +12293,14 @@ var ts; // ImportsList: // ImportSpecifier // ImportsList, ImportSpecifier - node.elements = parseBracketedList(21 /* ImportOrExportSpecifiers */, kind === 232 /* NamedImports */ ? parseImportSpecifier : parseExportSpecifier, 15 /* OpenBraceToken */, 16 /* CloseBraceToken */); + node.elements = parseBracketedList(21 /* ImportOrExportSpecifiers */, kind === 233 /* NamedImports */ ? parseImportSpecifier : parseExportSpecifier, 15 /* OpenBraceToken */, 16 /* CloseBraceToken */); return finishNode(node); } function parseExportSpecifier() { - return parseImportOrExportSpecifier(237 /* ExportSpecifier */); + return parseImportOrExportSpecifier(238 /* ExportSpecifier */); } function parseImportSpecifier() { - return parseImportOrExportSpecifier(233 /* ImportSpecifier */); + return parseImportOrExportSpecifier(234 /* ImportSpecifier */); } function parseImportOrExportSpecifier(kind) { var node = createNode(kind); @@ -12234,27 +12325,27 @@ var ts; else { node.name = identifierName; } - if (kind === 233 /* ImportSpecifier */ && checkIdentifierIsKeyword) { + if (kind === 234 /* ImportSpecifier */ && checkIdentifierIsKeyword) { // Report error identifier expected parseErrorAtPosition(checkIdentifierStart, checkIdentifierEnd - checkIdentifierStart, ts.Diagnostics.Identifier_expected); } return finishNode(node); } function parseExportDeclaration(fullStart, decorators, modifiers) { - var node = createNode(235 /* ExportDeclaration */, fullStart); + var node = createNode(236 /* ExportDeclaration */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); if (parseOptional(37 /* AsteriskToken */)) { - parseExpected(135 /* FromKeyword */); + parseExpected(136 /* FromKeyword */); node.moduleSpecifier = parseModuleSpecifier(); } else { - node.exportClause = parseNamedImportsOrExports(236 /* NamedExports */); + node.exportClause = parseNamedImportsOrExports(237 /* NamedExports */); // It is not uncommon to accidentally omit the 'from' keyword. Additionally, in editing scenarios, // the 'from' keyword can be parsed as a named export when the export clause is unterminated (i.e. `export { from "moduleName";`) // If we don't have a 'from' keyword, see if we have a string literal such that ASI won't take effect. - if (token === 135 /* FromKeyword */ || (token === 9 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) { - parseExpected(135 /* FromKeyword */); + if (token === 136 /* FromKeyword */ || (token === 9 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) { + parseExpected(136 /* FromKeyword */); node.moduleSpecifier = parseModuleSpecifier(); } } @@ -12262,7 +12353,7 @@ var ts; return finishNode(node); } function parseExportAssignment(fullStart, decorators, modifiers) { - var node = createNode(234 /* ExportAssignment */, fullStart); + var node = createNode(235 /* ExportAssignment */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); if (parseOptional(56 /* EqualsToken */)) { @@ -12344,10 +12435,10 @@ var ts; function setExternalModuleIndicator(sourceFile) { sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, function (node) { return node.flags & 1 /* Export */ - || node.kind === 228 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 239 /* ExternalModuleReference */ - || node.kind === 229 /* ImportDeclaration */ - || node.kind === 234 /* ExportAssignment */ - || node.kind === 235 /* ExportDeclaration */ + || node.kind === 229 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 240 /* ExternalModuleReference */ + || node.kind === 230 /* ImportDeclaration */ + || node.kind === 235 /* ExportAssignment */ + || node.kind === 236 /* ExportDeclaration */ ? node : undefined; }); @@ -12420,7 +12511,7 @@ var ts; // Parses out a JSDoc type expression. /* @internal */ function parseJSDocTypeExpression() { - var result = createNode(256 /* JSDocTypeExpression */, scanner.getTokenPos()); + var result = createNode(257 /* JSDocTypeExpression */, scanner.getTokenPos()); parseExpected(15 /* OpenBraceToken */); result.type = parseJSDocTopLevelType(); parseExpected(16 /* CloseBraceToken */); @@ -12431,12 +12522,12 @@ var ts; function parseJSDocTopLevelType() { var type = parseJSDocType(); if (token === 47 /* BarToken */) { - var unionType = createNode(260 /* JSDocUnionType */, type.pos); + var unionType = createNode(261 /* JSDocUnionType */, type.pos); unionType.types = parseJSDocTypeList(type); type = finishNode(unionType); } if (token === 56 /* EqualsToken */) { - var optionalType = createNode(267 /* JSDocOptionalType */, type.pos); + var optionalType = createNode(268 /* JSDocOptionalType */, type.pos); nextToken(); optionalType.type = type; type = finishNode(optionalType); @@ -12447,20 +12538,20 @@ var ts; var type = parseBasicTypeExpression(); while (true) { if (token === 19 /* OpenBracketToken */) { - var arrayType = createNode(259 /* JSDocArrayType */, type.pos); + var arrayType = createNode(260 /* JSDocArrayType */, type.pos); arrayType.elementType = type; nextToken(); parseExpected(20 /* CloseBracketToken */); type = finishNode(arrayType); } else if (token === 53 /* QuestionToken */) { - var nullableType = createNode(262 /* JSDocNullableType */, type.pos); + var nullableType = createNode(263 /* JSDocNullableType */, type.pos); nullableType.type = type; nextToken(); type = finishNode(nullableType); } else if (token === 49 /* ExclamationToken */) { - var nonNullableType = createNode(263 /* JSDocNonNullableType */, type.pos); + var nonNullableType = createNode(264 /* JSDocNonNullableType */, type.pos); nonNullableType.type = type; nextToken(); type = finishNode(nonNullableType); @@ -12494,10 +12585,10 @@ var ts; case 97 /* ThisKeyword */: return parseJSDocThisType(); case 117 /* AnyKeyword */: - case 131 /* StringKeyword */: - case 129 /* NumberKeyword */: + case 132 /* StringKeyword */: + case 130 /* NumberKeyword */: case 120 /* BooleanKeyword */: - case 132 /* SymbolKeyword */: + case 133 /* SymbolKeyword */: case 103 /* VoidKeyword */: return parseTokenNode(); } @@ -12505,27 +12596,27 @@ var ts; return parseJSDocTypeReference(); } function parseJSDocThisType() { - var result = createNode(271 /* JSDocThisType */); + var result = createNode(272 /* JSDocThisType */); nextToken(); parseExpected(54 /* ColonToken */); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocConstructorType() { - var result = createNode(270 /* JSDocConstructorType */); + var result = createNode(271 /* JSDocConstructorType */); nextToken(); parseExpected(54 /* ColonToken */); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocVariadicType() { - var result = createNode(269 /* JSDocVariadicType */); + var result = createNode(270 /* JSDocVariadicType */); nextToken(); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocFunctionType() { - var result = createNode(268 /* JSDocFunctionType */); + var result = createNode(269 /* JSDocFunctionType */); nextToken(); parseExpected(17 /* OpenParenToken */); result.parameters = parseDelimitedList(22 /* JSDocFunctionParameters */, parseJSDocParameter); @@ -12538,7 +12629,7 @@ var ts; return finishNode(result); } function parseJSDocParameter() { - var parameter = createNode(141 /* Parameter */); + var parameter = createNode(142 /* Parameter */); parameter.type = parseJSDocType(); if (parseOptional(56 /* EqualsToken */)) { parameter.questionToken = createNode(56 /* EqualsToken */); @@ -12546,7 +12637,7 @@ var ts; return finishNode(parameter); } function parseJSDocTypeReference() { - var result = createNode(266 /* JSDocTypeReference */); + var result = createNode(267 /* JSDocTypeReference */); result.name = parseSimplePropertyName(); if (token === 25 /* LessThanToken */) { result.typeArguments = parseTypeArguments(); @@ -12581,13 +12672,13 @@ var ts; } } function parseQualifiedName(left) { - var result = createNode(138 /* QualifiedName */, left.pos); + var result = createNode(139 /* QualifiedName */, left.pos); result.left = left; result.right = parseIdentifierName(); return finishNode(result); } function parseJSDocRecordType() { - var result = createNode(264 /* JSDocRecordType */); + var result = createNode(265 /* JSDocRecordType */); nextToken(); result.members = parseDelimitedList(24 /* JSDocRecordMembers */, parseJSDocRecordMember); checkForTrailingComma(result.members); @@ -12595,7 +12686,7 @@ var ts; return finishNode(result); } function parseJSDocRecordMember() { - var result = createNode(265 /* JSDocRecordMember */); + var result = createNode(266 /* JSDocRecordMember */); result.name = parseSimplePropertyName(); if (token === 54 /* ColonToken */) { nextToken(); @@ -12604,13 +12695,13 @@ var ts; return finishNode(result); } function parseJSDocNonNullableType() { - var result = createNode(263 /* JSDocNonNullableType */); + var result = createNode(264 /* JSDocNonNullableType */); nextToken(); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocTupleType() { - var result = createNode(261 /* JSDocTupleType */); + var result = createNode(262 /* JSDocTupleType */); nextToken(); result.types = parseDelimitedList(25 /* JSDocTupleTypes */, parseJSDocType); checkForTrailingComma(result.types); @@ -12624,7 +12715,7 @@ var ts; } } function parseJSDocUnionType() { - var result = createNode(260 /* JSDocUnionType */); + var result = createNode(261 /* JSDocUnionType */); nextToken(); result.types = parseJSDocTypeList(parseJSDocType()); parseExpected(18 /* CloseParenToken */); @@ -12642,7 +12733,7 @@ var ts; return types; } function parseJSDocAllType() { - var result = createNode(257 /* JSDocAllType */); + var result = createNode(258 /* JSDocAllType */); nextToken(); return finishNode(result); } @@ -12665,11 +12756,11 @@ var ts; token === 27 /* GreaterThanToken */ || token === 56 /* EqualsToken */ || token === 47 /* BarToken */) { - var result = createNode(258 /* JSDocUnknownType */, pos); + var result = createNode(259 /* JSDocUnknownType */, pos); return finishNode(result); } else { - var result = createNode(262 /* JSDocNullableType */, pos); + var result = createNode(263 /* JSDocNullableType */, pos); result.type = parseJSDocType(); return finishNode(result); } @@ -12760,7 +12851,7 @@ var ts; if (!tags) { return undefined; } - var result = createNode(272 /* JSDocComment */, start); + var result = createNode(273 /* JSDocComment */, start); result.tags = tags; return finishNode(result, end); } @@ -12774,7 +12865,7 @@ var ts; var atToken = createNode(55 /* AtToken */, scanner.getTokenPos()); atToken.end = scanner.getTextPos(); nextJSDocToken(); - var tagName = parseJSDocIdentifier(); + var tagName = parseJSDocIdentifierName(); if (!tagName) { return; } @@ -12798,7 +12889,7 @@ var ts; return undefined; } function handleUnknownTag(atToken, tagName) { - var result = createNode(273 /* JSDocTag */, atToken.pos); + var result = createNode(274 /* JSDocTag */, atToken.pos); result.atToken = atToken; result.tagName = tagName; return finishNode(result); @@ -12827,7 +12918,7 @@ var ts; var isBracketed; // Looking for something like '[foo]' or 'foo' if (parseOptionalToken(19 /* OpenBracketToken */)) { - name = parseJSDocIdentifier(); + name = parseJSDocIdentifierName(); isBracketed = true; // May have an optional default, e.g. '[foo = 42]' if (parseOptionalToken(56 /* EqualsToken */)) { @@ -12835,8 +12926,8 @@ var ts; } parseExpected(20 /* CloseBracketToken */); } - else if (token === 69 /* Identifier */) { - name = parseJSDocIdentifier(); + else if (ts.tokenIsIdentifierOrKeyword(token)) { + name = parseJSDocIdentifierName(); } if (!name) { parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); @@ -12852,7 +12943,7 @@ var ts; if (!typeExpression) { typeExpression = tryParseTypeExpression(); } - var result = createNode(274 /* JSDocParameterTag */, atToken.pos); + var result = createNode(275 /* JSDocParameterTag */, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.preParameterName = preName; @@ -12862,39 +12953,39 @@ var ts; return finishNode(result); } function handleReturnTag(atToken, tagName) { - if (ts.forEach(tags, function (t) { return t.kind === 275 /* JSDocReturnTag */; })) { + if (ts.forEach(tags, function (t) { return t.kind === 276 /* JSDocReturnTag */; })) { parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); } - var result = createNode(275 /* JSDocReturnTag */, atToken.pos); + var result = createNode(276 /* JSDocReturnTag */, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.typeExpression = tryParseTypeExpression(); return finishNode(result); } function handleTypeTag(atToken, tagName) { - if (ts.forEach(tags, function (t) { return t.kind === 276 /* JSDocTypeTag */; })) { + if (ts.forEach(tags, function (t) { return t.kind === 277 /* JSDocTypeTag */; })) { parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); } - var result = createNode(276 /* JSDocTypeTag */, atToken.pos); + var result = createNode(277 /* JSDocTypeTag */, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.typeExpression = tryParseTypeExpression(); return finishNode(result); } function handleTemplateTag(atToken, tagName) { - if (ts.forEach(tags, function (t) { return t.kind === 277 /* JSDocTemplateTag */; })) { + if (ts.forEach(tags, function (t) { return t.kind === 278 /* JSDocTemplateTag */; })) { parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); } // Type parameter list looks like '@template T,U,V' var typeParameters = []; typeParameters.pos = scanner.getStartPos(); while (true) { - var name_8 = parseJSDocIdentifier(); + var name_8 = parseJSDocIdentifierName(); if (!name_8) { parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); return undefined; } - var typeParameter = createNode(140 /* TypeParameter */, name_8.pos); + var typeParameter = createNode(141 /* TypeParameter */, name_8.pos); typeParameter.name = name_8; finishNode(typeParameter); typeParameters.push(typeParameter); @@ -12905,7 +12996,7 @@ var ts; break; } } - var result = createNode(277 /* JSDocTemplateTag */, atToken.pos); + var result = createNode(278 /* JSDocTemplateTag */, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.typeParameters = typeParameters; @@ -12916,8 +13007,11 @@ var ts; function nextJSDocToken() { return token = scanner.scanJSDocToken(); } - function parseJSDocIdentifier() { - if (token !== 69 /* Identifier */) { + function parseJSDocIdentifierName() { + return createJSDocIdentifier(ts.tokenIsIdentifierOrKeyword(token)); + } + function createJSDocIdentifier(isIdentifier) { + if (!isIdentifier) { parseErrorAtCurrentToken(ts.Diagnostics.Identifier_expected); return undefined; } @@ -13417,33 +13511,19 @@ var ts; ModuleInstanceState[ModuleInstanceState["ConstEnumOnly"] = 2] = "ConstEnumOnly"; })(ts.ModuleInstanceState || (ts.ModuleInstanceState = {})); var ModuleInstanceState = ts.ModuleInstanceState; - var Reachability; - (function (Reachability) { - Reachability[Reachability["Uninitialized"] = 1] = "Uninitialized"; - Reachability[Reachability["Reachable"] = 2] = "Reachable"; - Reachability[Reachability["Unreachable"] = 4] = "Unreachable"; - Reachability[Reachability["ReportedUnreachable"] = 8] = "ReportedUnreachable"; - })(Reachability || (Reachability = {})); - function or(state1, state2) { - return (state1 | state2) & 2 /* Reachable */ - ? 2 /* Reachable */ - : (state1 & state2) & 8 /* ReportedUnreachable */ - ? 8 /* ReportedUnreachable */ - : 4 /* Unreachable */; - } function getModuleInstanceState(node) { // A module is uninstantiated if it contains only // 1. interface declarations, type alias declarations - if (node.kind === 221 /* InterfaceDeclaration */ || node.kind === 222 /* TypeAliasDeclaration */) { + if (node.kind === 222 /* InterfaceDeclaration */ || node.kind === 223 /* TypeAliasDeclaration */) { return 0 /* NonInstantiated */; } else if (ts.isConstEnumDeclaration(node)) { return 2 /* ConstEnumOnly */; } - else if ((node.kind === 229 /* ImportDeclaration */ || node.kind === 228 /* ImportEqualsDeclaration */) && !(node.flags & 1 /* Export */)) { + else if ((node.kind === 230 /* ImportDeclaration */ || node.kind === 229 /* ImportEqualsDeclaration */) && !(node.flags & 1 /* Export */)) { return 0 /* NonInstantiated */; } - else if (node.kind === 225 /* ModuleBlock */) { + else if (node.kind === 226 /* ModuleBlock */) { var state_1 = 0 /* NonInstantiated */; ts.forEachChild(node, function (n) { switch (getModuleInstanceState(n)) { @@ -13462,7 +13542,7 @@ var ts; }); return state_1; } - else if (node.kind === 224 /* ModuleDeclaration */) { + else if (node.kind === 225 /* ModuleDeclaration */) { return getModuleInstanceState(node.body); } else { @@ -13501,6 +13581,7 @@ var ts; function createBinder() { var file; var options; + var languageVersion; var parent; var container; var blockScopeContainer; @@ -13508,10 +13589,13 @@ var ts; var seenThisKeyword; // state used by reachability checks var hasExplicitReturn; - var currentReachabilityState; - var labelStack; - var labelIndexMap; - var implicitLabels; + var currentFlow; + var currentBreakTarget; + var currentContinueTarget; + var currentTrueTarget; + var currentFalseTarget; + var preSwitchCaseFlow; + var activeLabels; // state used for emit helpers var hasClassExtends; var hasAsyncFunctions; @@ -13525,11 +13609,15 @@ var ts; var symbolCount = 0; var Symbol; var classifiableNames; + var unreachableFlow = { flags: 1 /* Unreachable */ }; + var reportedUnreachableFlow = { flags: 1 /* Unreachable */ }; function bindSourceFile(f, opts) { file = f; options = opts; + languageVersion = ts.getEmitScriptTarget(options); inStrictMode = !!file.externalModuleIndicator; classifiableNames = {}; + symbolCount = 0; Symbol = ts.objectAllocator.getSymbolConstructor(); if (!file.locals) { bind(file); @@ -13538,15 +13626,19 @@ var ts; } file = undefined; options = undefined; + languageVersion = undefined; parent = undefined; container = undefined; blockScopeContainer = undefined; lastContainer = undefined; seenThisKeyword = false; hasExplicitReturn = false; - labelStack = undefined; - labelIndexMap = undefined; - implicitLabels = undefined; + currentFlow = undefined; + currentBreakTarget = undefined; + currentContinueTarget = undefined; + currentTrueTarget = undefined; + currentFalseTarget = undefined; + activeLabels = undefined; hasClassExtends = false; hasAsyncFunctions = false; hasDecorators = false; @@ -13574,7 +13666,7 @@ var ts; if (symbolFlags & 107455 /* Value */) { var valueDeclaration = symbol.valueDeclaration; if (!valueDeclaration || - (valueDeclaration.kind !== node.kind && valueDeclaration.kind === 224 /* ModuleDeclaration */)) { + (valueDeclaration.kind !== node.kind && valueDeclaration.kind === 225 /* ModuleDeclaration */)) { // other kinds of value declarations take precedence over modules symbol.valueDeclaration = node; } @@ -13587,7 +13679,7 @@ var ts; if (ts.isAmbientModule(node)) { return ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + node.name.text + "\""; } - if (node.name.kind === 139 /* ComputedPropertyName */) { + if (node.name.kind === 140 /* ComputedPropertyName */) { var nameExpression = node.name.expression; // treat computed property names where expression is string/numeric literal as just string/numeric literal if (ts.isStringOrNumericLiteral(nameExpression.kind)) { @@ -13599,21 +13691,21 @@ var ts; return node.name.text; } switch (node.kind) { - case 147 /* Constructor */: + case 148 /* Constructor */: return "__constructor"; - case 155 /* FunctionType */: - case 150 /* CallSignature */: + case 156 /* FunctionType */: + case 151 /* CallSignature */: return "__call"; - case 156 /* ConstructorType */: - case 151 /* ConstructSignature */: + case 157 /* ConstructorType */: + case 152 /* ConstructSignature */: return "__new"; - case 152 /* IndexSignature */: + case 153 /* IndexSignature */: return "__index"; - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: return "__export"; - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return node.isExportEquals ? "export=" : "default"; - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: switch (ts.getSpecialPropertyAssignmentKind(node)) { case 2 /* ModuleExports */: // module.exports = ... @@ -13628,15 +13720,15 @@ var ts; } ts.Debug.fail("Unknown binary declaration kind"); break; - case 219 /* FunctionDeclaration */: - case 220 /* ClassDeclaration */: + case 220 /* FunctionDeclaration */: + case 221 /* ClassDeclaration */: return node.flags & 512 /* Default */ ? "default" : undefined; - case 268 /* JSDocFunctionType */: + case 269 /* JSDocFunctionType */: return ts.isJSDocConstructSignature(node) ? "__new" : "__call"; - case 141 /* Parameter */: + case 142 /* Parameter */: // Parameters with names are handled at the top of this function. Parameters // without names can only come from JSDocFunctionTypes. - ts.Debug.assert(node.parent.kind === 268 /* JSDocFunctionType */); + ts.Debug.assert(node.parent.kind === 269 /* JSDocFunctionType */); var functionType = node.parent; var index = ts.indexOf(functionType.parameters, node); return "p" + index; @@ -13715,7 +13807,7 @@ var ts; function declareModuleMember(node, symbolFlags, symbolExcludes) { var hasExportModifier = ts.getCombinedNodeFlags(node) & 1 /* Export */; if (symbolFlags & 8388608 /* Alias */) { - if (node.kind === 237 /* ExportSpecifier */ || (node.kind === 228 /* ImportEqualsDeclaration */ && hasExportModifier)) { + if (node.kind === 238 /* ExportSpecifier */ || (node.kind === 229 /* ImportEqualsDeclaration */ && hasExportModifier)) { return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); } else { @@ -13793,45 +13885,47 @@ var ts; blockScopeContainer = node; blockScopeContainer.locals = undefined; } - var savedReachabilityState; - var savedLabelStack; - var savedLabels; - var savedImplicitLabels; var savedHasExplicitReturn; + var savedCurrentFlow; + var savedBreakTarget; + var savedContinueTarget; + var savedActiveLabels; var kind = node.kind; var flags = node.flags; // reset all reachability check related flags on node (for incremental scenarios) flags &= ~98304 /* ReachabilityCheckFlags */; // reset all emit helper flags on node (for incremental scenarios) flags &= ~3932160 /* EmitHelperFlags */; - if (kind === 221 /* InterfaceDeclaration */) { + if (kind === 222 /* InterfaceDeclaration */) { seenThisKeyword = false; } - var saveState = kind === 255 /* SourceFile */ || kind === 225 /* ModuleBlock */ || ts.isFunctionLikeKind(kind); + var saveState = kind === 256 /* SourceFile */ || kind === 226 /* ModuleBlock */ || ts.isFunctionLikeKind(kind); if (saveState) { - savedReachabilityState = currentReachabilityState; - savedLabelStack = labelStack; - savedLabels = labelIndexMap; - savedImplicitLabels = implicitLabels; savedHasExplicitReturn = hasExplicitReturn; - currentReachabilityState = 2 /* Reachable */; + savedCurrentFlow = currentFlow; + savedBreakTarget = currentBreakTarget; + savedContinueTarget = currentContinueTarget; + savedActiveLabels = activeLabels; hasExplicitReturn = false; - labelStack = labelIndexMap = implicitLabels = undefined; + currentFlow = { flags: 2 /* Start */ }; + currentBreakTarget = undefined; + currentContinueTarget = undefined; + activeLabels = undefined; } if (ts.isInJavaScriptFile(node) && node.jsDocComment) { bind(node.jsDocComment); } bindReachableStatement(node); - if (currentReachabilityState === 2 /* Reachable */ && ts.isFunctionLikeKind(kind) && ts.nodeIsPresent(node.body)) { + if (!(currentFlow.flags & 1 /* Unreachable */) && ts.isFunctionLikeKind(kind) && ts.nodeIsPresent(node.body)) { flags |= 32768 /* HasImplicitReturn */; if (hasExplicitReturn) { flags |= 65536 /* HasExplicitReturn */; } } - if (kind === 221 /* InterfaceDeclaration */) { + if (kind === 222 /* InterfaceDeclaration */) { flags = seenThisKeyword ? flags | 16384 /* ContainsThis */ : flags & ~16384 /* ContainsThis */; } - if (kind === 255 /* SourceFile */) { + if (kind === 256 /* SourceFile */) { if (hasClassExtends) { flags |= 262144 /* HasClassExtends */; } @@ -13851,10 +13945,10 @@ var ts; node.flags = flags; if (saveState) { hasExplicitReturn = savedHasExplicitReturn; - currentReachabilityState = savedReachabilityState; - labelStack = savedLabelStack; - labelIndexMap = savedLabels; - implicitLabels = savedImplicitLabels; + currentFlow = savedCurrentFlow; + currentBreakTarget = savedBreakTarget; + currentContinueTarget = savedContinueTarget; + activeLabels = savedActiveLabels; } container = saveContainer; parent = saveParent; @@ -13870,212 +13964,564 @@ var ts; return; } switch (node.kind) { - case 204 /* WhileStatement */: + case 205 /* WhileStatement */: bindWhileStatement(node); break; - case 203 /* DoStatement */: + case 204 /* DoStatement */: bindDoStatement(node); break; - case 205 /* ForStatement */: + case 206 /* ForStatement */: bindForStatement(node); break; - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: bindForInOrForOfStatement(node); break; - case 202 /* IfStatement */: + case 203 /* IfStatement */: bindIfStatement(node); break; - case 210 /* ReturnStatement */: - case 214 /* ThrowStatement */: + case 211 /* ReturnStatement */: + case 215 /* ThrowStatement */: bindReturnOrThrow(node); break; - case 209 /* BreakStatement */: - case 208 /* ContinueStatement */: + case 210 /* BreakStatement */: + case 209 /* ContinueStatement */: bindBreakOrContinueStatement(node); break; - case 215 /* TryStatement */: + case 216 /* TryStatement */: bindTryStatement(node); break; - case 212 /* SwitchStatement */: + case 213 /* SwitchStatement */: bindSwitchStatement(node); break; - case 226 /* CaseBlock */: + case 227 /* CaseBlock */: bindCaseBlock(node); break; - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: bindLabeledStatement(node); break; + case 185 /* PrefixUnaryExpression */: + bindPrefixUnaryExpressionFlow(node); + break; + case 187 /* BinaryExpression */: + bindBinaryExpressionFlow(node); + break; + case 181 /* DeleteExpression */: + bindDeleteExpressionFlow(node); + break; + case 188 /* ConditionalExpression */: + bindConditionalExpressionFlow(node); + break; + case 218 /* VariableDeclaration */: + bindVariableDeclarationFlow(node); + break; default: ts.forEachChild(node, bind); break; } } - function bindWhileStatement(n) { - var preWhileState = n.expression.kind === 84 /* FalseKeyword */ ? 4 /* Unreachable */ : currentReachabilityState; - var postWhileState = n.expression.kind === 99 /* TrueKeyword */ ? 4 /* Unreachable */ : currentReachabilityState; - // bind expressions (don't affect reachability) - bind(n.expression); - currentReachabilityState = preWhileState; - var postWhileLabel = pushImplicitLabel(); - bind(n.statement); - popImplicitLabel(postWhileLabel, postWhileState); + function isNarrowableReference(expr) { + return expr.kind === 69 /* Identifier */ || + expr.kind === 97 /* ThisKeyword */ || + expr.kind === 172 /* PropertyAccessExpression */ && isNarrowableReference(expr.expression); } - function bindDoStatement(n) { - var preDoState = currentReachabilityState; - var postDoLabel = pushImplicitLabel(); - bind(n.statement); - var postDoState = n.expression.kind === 99 /* TrueKeyword */ ? 4 /* Unreachable */ : preDoState; - popImplicitLabel(postDoLabel, postDoState); - // bind expressions (don't affect reachability) - bind(n.expression); - } - function bindForStatement(n) { - var preForState = currentReachabilityState; - var postForLabel = pushImplicitLabel(); - // bind expressions (don't affect reachability) - bind(n.initializer); - bind(n.condition); - bind(n.incrementor); - bind(n.statement); - // for statement is considered infinite when it condition is either omitted or is true keyword - // - for(..;;..) - // - for(..;true;..) - var isInfiniteLoop = (!n.condition || n.condition.kind === 99 /* TrueKeyword */); - var postForState = isInfiniteLoop ? 4 /* Unreachable */ : preForState; - popImplicitLabel(postForLabel, postForState); - } - function bindForInOrForOfStatement(n) { - var preStatementState = currentReachabilityState; - var postStatementLabel = pushImplicitLabel(); - // bind expressions (don't affect reachability) - bind(n.initializer); - bind(n.expression); - bind(n.statement); - popImplicitLabel(postStatementLabel, preStatementState); - } - function bindIfStatement(n) { - // denotes reachability state when entering 'thenStatement' part of the if statement: - // i.e. if condition is false then thenStatement is unreachable - var ifTrueState = n.expression.kind === 84 /* FalseKeyword */ ? 4 /* Unreachable */ : currentReachabilityState; - // denotes reachability state when entering 'elseStatement': - // i.e. if condition is true then elseStatement is unreachable - var ifFalseState = n.expression.kind === 99 /* TrueKeyword */ ? 4 /* Unreachable */ : currentReachabilityState; - currentReachabilityState = ifTrueState; - // bind expression (don't affect reachability) - bind(n.expression); - bind(n.thenStatement); - if (n.elseStatement) { - var preElseState = currentReachabilityState; - currentReachabilityState = ifFalseState; - bind(n.elseStatement); - currentReachabilityState = or(currentReachabilityState, preElseState); + function isNarrowingExpression(expr) { + switch (expr.kind) { + case 69 /* Identifier */: + case 97 /* ThisKeyword */: + case 172 /* PropertyAccessExpression */: + return isNarrowableReference(expr); + case 174 /* CallExpression */: + return true; + case 178 /* ParenthesizedExpression */: + return isNarrowingExpression(expr.expression); + case 187 /* BinaryExpression */: + return isNarrowingBinaryExpression(expr); + case 185 /* PrefixUnaryExpression */: + return expr.operator === 49 /* ExclamationToken */ && isNarrowingExpression(expr.operand); } - else { - currentReachabilityState = or(currentReachabilityState, ifFalseState); + return false; + } + function isNarrowingBinaryExpression(expr) { + switch (expr.operatorToken.kind) { + case 56 /* EqualsToken */: + return isNarrowableReference(expr.left); + case 30 /* EqualsEqualsToken */: + case 31 /* ExclamationEqualsToken */: + case 32 /* EqualsEqualsEqualsToken */: + case 33 /* ExclamationEqualsEqualsToken */: + if (isNarrowingExpression(expr.left) && (expr.right.kind === 93 /* NullKeyword */ || expr.right.kind === 69 /* Identifier */)) { + return true; + } + if (expr.left.kind === 182 /* TypeOfExpression */ && isNarrowingExpression(expr.left.expression) && expr.right.kind === 9 /* StringLiteral */) { + return true; + } + return false; + case 91 /* InstanceOfKeyword */: + return isNarrowingExpression(expr.left); + case 24 /* CommaToken */: + return isNarrowingExpression(expr.right); + } + return false; + } + function createBranchLabel() { + return { + flags: 4 /* BranchLabel */, + antecedents: undefined + }; + } + function createLoopLabel() { + return { + flags: 8 /* LoopLabel */, + antecedents: undefined + }; + } + function setFlowNodeReferenced(flow) { + // On first reference we set the Referenced flag, thereafter we set the Shared flag + flow.flags |= flow.flags & 128 /* Referenced */ ? 256 /* Shared */ : 128 /* Referenced */; + } + function addAntecedent(label, antecedent) { + if (!(antecedent.flags & 1 /* Unreachable */) && !ts.contains(label.antecedents, antecedent)) { + (label.antecedents || (label.antecedents = [])).push(antecedent); + setFlowNodeReferenced(antecedent); } } - function bindReturnOrThrow(n) { - // bind expression (don't affect reachability) - bind(n.expression); - if (n.kind === 210 /* ReturnStatement */) { - hasExplicitReturn = true; + function createFlowCondition(flags, antecedent, expression) { + if (antecedent.flags & 1 /* Unreachable */) { + return antecedent; } - currentReachabilityState = 4 /* Unreachable */; - } - function bindBreakOrContinueStatement(n) { - // call bind on label (don't affect reachability) - bind(n.label); - // for continue case touch label so it will be marked a used - var isValidJump = jumpToLabel(n.label, n.kind === 209 /* BreakStatement */ ? currentReachabilityState : 4 /* Unreachable */); - if (isValidJump) { - currentReachabilityState = 4 /* Unreachable */; + if (!expression) { + return flags & 32 /* TrueCondition */ ? antecedent : unreachableFlow; } + if (expression.kind === 99 /* TrueKeyword */ && flags & 64 /* FalseCondition */ || + expression.kind === 84 /* FalseKeyword */ && flags & 32 /* TrueCondition */) { + return unreachableFlow; + } + if (!isNarrowingExpression(expression)) { + return antecedent; + } + setFlowNodeReferenced(antecedent); + return { + flags: flags, + antecedent: antecedent, + expression: expression + }; } - function bindTryStatement(n) { - // catch\finally blocks has the same reachability as try block - var preTryState = currentReachabilityState; - bind(n.tryBlock); - var postTryState = currentReachabilityState; - currentReachabilityState = preTryState; - bind(n.catchClause); - var postCatchState = currentReachabilityState; - currentReachabilityState = preTryState; - bind(n.finallyBlock); - // post catch/finally state is reachable if - // - post try state is reachable - control flow can fall out of try block - // - post catch state is reachable - control flow can fall out of catch block - currentReachabilityState = n.catchClause ? or(postTryState, postCatchState) : postTryState; + function createFlowAssignment(antecedent, node) { + setFlowNodeReferenced(antecedent); + return { + flags: 16 /* Assignment */, + antecedent: antecedent, + node: node + }; } - function bindSwitchStatement(n) { - var preSwitchState = currentReachabilityState; - var postSwitchLabel = pushImplicitLabel(); - // bind expression (don't affect reachability) - bind(n.expression); - bind(n.caseBlock); - var hasDefault = ts.forEach(n.caseBlock.clauses, function (c) { return c.kind === 249 /* DefaultClause */; }); - // post switch state is unreachable if switch is exhaustive (has a default case ) and does not have fallthrough from the last case - var postSwitchState = hasDefault && currentReachabilityState !== 2 /* Reachable */ ? 4 /* Unreachable */ : preSwitchState; - popImplicitLabel(postSwitchLabel, postSwitchState); + function finishFlowLabel(flow) { + var antecedents = flow.antecedents; + if (!antecedents) { + return unreachableFlow; + } + if (antecedents.length === 1) { + return antecedents[0]; + } + return flow; } - function bindCaseBlock(n) { - var startState = currentReachabilityState; - for (var i = 0; i < n.clauses.length; i++) { - var clause = n.clauses[i]; - currentReachabilityState = startState; - bind(clause); - if (clause.statements.length && - i !== n.clauses.length - 1 && - currentReachabilityState === 2 /* Reachable */ && - options.noFallthroughCasesInSwitch) { - errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); + function isStatementCondition(node) { + var parent = node.parent; + switch (parent.kind) { + case 203 /* IfStatement */: + case 205 /* WhileStatement */: + case 204 /* DoStatement */: + return parent.expression === node; + case 206 /* ForStatement */: + case 188 /* ConditionalExpression */: + return parent.condition === node; + } + return false; + } + function isLogicalExpression(node) { + while (true) { + if (node.kind === 178 /* ParenthesizedExpression */) { + node = node.expression; + } + else if (node.kind === 185 /* PrefixUnaryExpression */ && node.operator === 49 /* ExclamationToken */) { + node = node.operand; + } + else { + return node.kind === 187 /* BinaryExpression */ && (node.operatorToken.kind === 51 /* AmpersandAmpersandToken */ || + node.operatorToken.kind === 52 /* BarBarToken */); } } } - function bindLabeledStatement(n) { - // call bind on label (don't affect reachability) - bind(n.label); - var ok = pushNamedLabel(n.label); - bind(n.statement); - if (ok) { - popNamedLabel(n.label, currentReachabilityState); + function isTopLevelLogicalExpression(node) { + while (node.parent.kind === 178 /* ParenthesizedExpression */ || + node.parent.kind === 185 /* PrefixUnaryExpression */ && + node.parent.operator === 49 /* ExclamationToken */) { + 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 /* TrueCondition */, currentFlow, node)); + addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, 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 preConditionLabel = createBranchLabel(); + var postDoLabel = createBranchLabel(); + addAntecedent(preDoLabel, currentFlow); + currentFlow = preDoLabel; + bindIterativeStatement(node.statement, postDoLabel, preConditionLabel); + addAntecedent(preConditionLabel, currentFlow); + currentFlow = finishFlowLabel(preConditionLabel); + bindCondition(node.expression, preDoLabel, postDoLabel); + currentFlow = finishFlowLabel(postDoLabel); + } + function bindForStatement(node) { + var preLoopLabel = 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; + bind(node.expression); + addAntecedent(postLoopLabel, currentFlow); + bind(node.initializer); + if (node.initializer.kind !== 219 /* VariableDeclarationList */) { + 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 === 211 /* ReturnStatement */) { + hasExplicitReturn = true; + } + currentFlow = unreachableFlow; + } + function findActiveLabel(name) { + if (activeLabels) { + for (var _i = 0, activeLabels_1 = activeLabels; _i < activeLabels_1.length; _i++) { + var label = activeLabels_1[_i]; + if (label.name === name) { + return label; + } + } + } + return undefined; + } + function bindbreakOrContinueFlow(node, breakTarget, continueTarget) { + var flowLabel = node.kind === 210 /* BreakStatement */ ? breakTarget : continueTarget; + if (flowLabel) { + addAntecedent(flowLabel, currentFlow); + currentFlow = unreachableFlow; + } + } + function bindBreakOrContinueStatement(node) { + bind(node.label); + if (node.label) { + var activeLabel = findActiveLabel(node.label.text); + if (activeLabel) { + activeLabel.referenced = true; + bindbreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget); + } + } + else { + bindbreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget); + } + } + function bindTryStatement(node) { + var postFinallyLabel = createBranchLabel(); + var preTryFlow = currentFlow; + // TODO: Every statement in try block is potentially an exit point! + bind(node.tryBlock); + addAntecedent(postFinallyLabel, currentFlow); + if (node.catchClause) { + currentFlow = preTryFlow; + bind(node.catchClause); + addAntecedent(postFinallyLabel, currentFlow); + } + if (node.finallyBlock) { + currentFlow = preTryFlow; + bind(node.finallyBlock); + } + currentFlow = finishFlowLabel(postFinallyLabel); + } + function bindSwitchStatement(node) { + var postSwitchLabel = 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 === 250 /* DefaultClause */; }); + if (!hasDefault) { + addAntecedent(postSwitchLabel, preSwitchCaseFlow); + } + currentBreakTarget = saveBreakTarget; + preSwitchCaseFlow = savePreSwitchCaseFlow; + currentFlow = finishFlowLabel(postSwitchLabel); + } + function bindCaseBlock(node) { + var clauses = node.clauses; + for (var i = 0; i < clauses.length; i++) { + var clause = clauses[i]; + if (clause.statements.length) { + if (currentFlow.flags & 1 /* Unreachable */) { + currentFlow = preSwitchCaseFlow; + } + else { + var preCaseLabel = createBranchLabel(); + addAntecedent(preCaseLabel, preSwitchCaseFlow); + addAntecedent(preCaseLabel, currentFlow); + currentFlow = finishFlowLabel(preCaseLabel); + } + bind(clause); + if (!(currentFlow.flags & 1 /* Unreachable */) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); + } + } + else { + bind(clause); + } + } + } + function pushActiveLabel(name, breakTarget, continueTarget) { + var activeLabel = { + name: name, + breakTarget: breakTarget, + continueTarget: continueTarget, + referenced: false + }; + (activeLabels || (activeLabels = [])).push(activeLabel); + return activeLabel; + } + function popActiveLabel() { + activeLabels.pop(); + } + function bindLabeledStatement(node) { + var preStatementLabel = createLoopLabel(); + var postStatementLabel = createBranchLabel(); + bind(node.label); + addAntecedent(preStatementLabel, currentFlow); + var activeLabel = pushActiveLabel(node.label.text, postStatementLabel, preStatementLabel); + bind(node.statement); + popActiveLabel(); + if (!activeLabel.referenced && !options.allowUnusedLabels) { + file.bindDiagnostics.push(ts.createDiagnosticForNode(node.label, ts.Diagnostics.Unused_label)); + } + addAntecedent(postStatementLabel, currentFlow); + currentFlow = finishFlowLabel(postStatementLabel); + } + function bindDestructuringTargetFlow(node) { + if (node.kind === 187 /* BinaryExpression */ && node.operatorToken.kind === 56 /* EqualsToken */) { + bindAssignmentTargetFlow(node.left); + } + else { + bindAssignmentTargetFlow(node); + } + } + function bindAssignmentTargetFlow(node) { + if (isNarrowableReference(node)) { + currentFlow = createFlowAssignment(currentFlow, node); + } + else if (node.kind === 170 /* ArrayLiteralExpression */) { + for (var _i = 0, _a = node.elements; _i < _a.length; _i++) { + var e = _a[_i]; + if (e.kind === 191 /* SpreadElementExpression */) { + bindAssignmentTargetFlow(e.expression); + } + else { + bindDestructuringTargetFlow(e); + } + } + } + else if (node.kind === 171 /* ObjectLiteralExpression */) { + for (var _b = 0, _c = node.properties; _b < _c.length; _b++) { + var p = _c[_b]; + if (p.kind === 253 /* PropertyAssignment */) { + bindDestructuringTargetFlow(p.initializer); + } + else if (p.kind === 254 /* ShorthandPropertyAssignment */) { + bindAssignmentTargetFlow(p.name); + } + } + } + } + function bindLogicalExpression(node, trueTarget, falseTarget) { + var preRightLabel = createBranchLabel(); + if (node.operatorToken.kind === 51 /* AmpersandAmpersandToken */) { + bindCondition(node.left, preRightLabel, falseTarget); + } + else { + bindCondition(node.left, trueTarget, preRightLabel); + } + currentFlow = finishFlowLabel(preRightLabel); + bind(node.operatorToken); + bindCondition(node.right, trueTarget, falseTarget); + } + function bindPrefixUnaryExpressionFlow(node) { + if (node.operator === 49 /* ExclamationToken */) { + var saveTrueTarget = currentTrueTarget; + currentTrueTarget = currentFalseTarget; + currentFalseTarget = saveTrueTarget; + ts.forEachChild(node, bind); + currentFalseTarget = currentTrueTarget; + currentTrueTarget = saveTrueTarget; + } + else { + ts.forEachChild(node, bind); + } + } + function bindBinaryExpressionFlow(node) { + var operator = node.operatorToken.kind; + if (operator === 51 /* AmpersandAmpersandToken */ || operator === 52 /* BarBarToken */) { + if (isTopLevelLogicalExpression(node)) { + var postExpressionLabel = createBranchLabel(); + bindLogicalExpression(node, postExpressionLabel, postExpressionLabel); + currentFlow = finishFlowLabel(postExpressionLabel); + } + else { + bindLogicalExpression(node, currentTrueTarget, currentFalseTarget); + } + } + else { + ts.forEachChild(node, bind); + if (operator === 56 /* EqualsToken */ && !ts.isAssignmentTarget(node)) { + bindAssignmentTargetFlow(node.left); + } + } + } + function bindDeleteExpressionFlow(node) { + ts.forEachChild(node, bind); + if (node.expression.kind === 172 /* PropertyAccessExpression */) { + 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.whenTrue); + addAntecedent(postExpressionLabel, currentFlow); + currentFlow = finishFlowLabel(falseLabel); + bind(node.whenFalse); + addAntecedent(postExpressionLabel, currentFlow); + currentFlow = finishFlowLabel(postExpressionLabel); + } + function bindInitializedVariableFlow(node) { + var name = node.name; + if (ts.isBindingPattern(name)) { + for (var _i = 0, _a = name.elements; _i < _a.length; _i++) { + var child = _a[_i]; + bindInitializedVariableFlow(child); + } + } + else { + currentFlow = createFlowAssignment(currentFlow, node); + } + } + function bindVariableDeclarationFlow(node) { + ts.forEachChild(node, bind); + if (node.initializer || node.parent.parent.kind === 207 /* ForInStatement */ || node.parent.parent.kind === 208 /* ForOfStatement */) { + bindInitializedVariableFlow(node); } } function getContainerFlags(node) { switch (node.kind) { - case 191 /* ClassExpression */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 170 /* ObjectLiteralExpression */: - case 158 /* TypeLiteral */: - case 264 /* JSDocRecordType */: + case 192 /* ClassExpression */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 171 /* ObjectLiteralExpression */: + case 159 /* TypeLiteral */: + case 265 /* JSDocRecordType */: return 1 /* IsContainer */; - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 219 /* FunctionDeclaration */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 155 /* FunctionType */: - case 268 /* JSDocFunctionType */: - case 156 /* ConstructorType */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 224 /* ModuleDeclaration */: - case 255 /* SourceFile */: - case 222 /* TypeAliasDeclaration */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 220 /* FunctionDeclaration */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 156 /* FunctionType */: + case 269 /* JSDocFunctionType */: + case 157 /* ConstructorType */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 225 /* ModuleDeclaration */: + case 256 /* SourceFile */: + case 223 /* TypeAliasDeclaration */: return 5 /* IsContainerWithLocals */; - case 251 /* CatchClause */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 226 /* CaseBlock */: + case 252 /* CatchClause */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 227 /* CaseBlock */: return 2 /* IsBlockScopedContainer */; - case 198 /* Block */: + case 199 /* Block */: // do not treat blocks directly inside a function as a block-scoped-container. // Locals that reside in this block should go to the function locals. Otherwise 'x' // would not appear to be a redeclaration of a block scoped local in the following @@ -14112,40 +14558,40 @@ var ts; // members are declared (for example, a member of a class will go into a specific // symbol table depending on if it is static or not). We defer to specialized // handlers to take care of declaring these child members. - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return declareModuleMember(node, symbolFlags, symbolExcludes); - case 255 /* SourceFile */: + case 256 /* SourceFile */: return declareSourceFileMember(node, symbolFlags, symbolExcludes); - case 191 /* ClassExpression */: - case 220 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 221 /* ClassDeclaration */: return declareClassMember(node, symbolFlags, symbolExcludes); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); - case 158 /* TypeLiteral */: - case 170 /* ObjectLiteralExpression */: - case 221 /* InterfaceDeclaration */: - case 264 /* JSDocRecordType */: + case 159 /* TypeLiteral */: + case 171 /* ObjectLiteralExpression */: + case 222 /* InterfaceDeclaration */: + case 265 /* JSDocRecordType */: // Interface/Object-types always have their children added to the 'members' of // their container. They are only accessible through an instance of their // container, and are never in scope otherwise (even inside the body of the // object / type / interface declaring them). An exception is type parameters, // which are in scope without qualification (similar to 'locals'). return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 268 /* JSDocFunctionType */: - case 222 /* TypeAliasDeclaration */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 269 /* JSDocFunctionType */: + case 223 /* TypeAliasDeclaration */: // All the children of these container types are never visible through another // symbol (i.e. through another symbol's 'exports' or 'members'). Instead, // they're only accessed 'lexically' (i.e. from code that exists underneath @@ -14166,11 +14612,11 @@ var ts; : declareSymbol(file.locals, undefined, node, symbolFlags, symbolExcludes); } function hasExportDeclarations(node) { - var body = node.kind === 255 /* SourceFile */ ? node : node.body; - if (body.kind === 255 /* SourceFile */ || body.kind === 225 /* ModuleBlock */) { + var body = node.kind === 256 /* SourceFile */ ? node : node.body; + if (body.kind === 256 /* SourceFile */ || body.kind === 226 /* ModuleBlock */) { for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { var stat = _a[_i]; - if (stat.kind === 235 /* ExportDeclaration */ || stat.kind === 234 /* ExportAssignment */) { + if (stat.kind === 236 /* ExportDeclaration */ || stat.kind === 235 /* ExportAssignment */) { return true; } } @@ -14262,7 +14708,7 @@ var ts; // c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true. // d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields - var currentKind = prop.kind === 252 /* PropertyAssignment */ || prop.kind === 253 /* ShorthandPropertyAssignment */ || prop.kind === 146 /* MethodDeclaration */ + var currentKind = prop.kind === 253 /* PropertyAssignment */ || prop.kind === 254 /* ShorthandPropertyAssignment */ || prop.kind === 147 /* MethodDeclaration */ ? 1 /* Property */ : 2 /* Accessor */; var existingKind = seen[identifier.text]; @@ -14284,10 +14730,10 @@ var ts; } function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) { switch (blockScopeContainer.kind) { - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: declareModuleMember(node, symbolFlags, symbolExcludes); break; - case 255 /* SourceFile */: + case 256 /* SourceFile */: if (ts.isExternalModule(container)) { declareModuleMember(node, symbolFlags, symbolExcludes); break; @@ -14310,7 +14756,8 @@ var ts; if (inStrictMode && node.originalKeywordKind >= 106 /* FirstFutureReservedWord */ && node.originalKeywordKind <= 114 /* LastFutureReservedWord */ && - !ts.isIdentifierName(node)) { + !ts.isIdentifierName(node) && + !ts.isInAmbientContext(node)) { // Report error only if there are no parse errors in file if (!file.parseDiagnostics.length) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node))); @@ -14383,6 +14830,30 @@ var ts; checkStrictModeEvalOrArguments(node, node.name); } } + function getStrictModeBlockScopeFunctionDeclarationMessage(node) { + // Provide specialized messages to help the user understand why we think they're in + // strict mode. + if (ts.getContainingClass(node)) { + return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode; + } + 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 /* ES6 */) { + // Report error if function is not top level function declaration + if (blockScopeContainer.kind !== 256 /* SourceFile */ && + blockScopeContainer.kind !== 225 /* ModuleDeclaration */ && + !ts.isFunctionLike(blockScopeContainer)) { + // We check first if the name is inside class declaration or class expression; if so give explicit message + // otherwise report generic error message. + var errorSpan = ts.getErrorSpanForNode(file, node); + file.bindDiagnostics.push(ts.createFileDiagnostic(file, errorSpan.start, errorSpan.length, getStrictModeBlockScopeFunctionDeclarationMessage(node))); + } + } + } function checkStrictModeNumericLiteral(node) { if (inStrictMode && node.isOctalLiteral) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode)); @@ -14447,17 +14918,17 @@ var ts; } function updateStrictMode(node) { switch (node.kind) { - case 255 /* SourceFile */: - case 225 /* ModuleBlock */: + case 256 /* SourceFile */: + case 226 /* ModuleBlock */: updateStrictModeStatementList(node.statements); return; - case 198 /* Block */: + case 199 /* Block */: if (ts.isFunctionLike(node.parent)) { updateStrictModeStatementList(node.statements); } return; - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: // All classes are automatically in strict mode in ES6. inStrictMode = true; return; @@ -14486,8 +14957,17 @@ var ts; switch (node.kind) { /* Strict mode checks */ case 69 /* Identifier */: + case 97 /* ThisKeyword */: + if (currentFlow && (ts.isExpression(node) || parent.kind === 254 /* ShorthandPropertyAssignment */)) { + node.flowNode = currentFlow; + } return checkStrictModeIdentifier(node); - case 186 /* BinaryExpression */: + case 172 /* PropertyAccessExpression */: + if (currentFlow && isNarrowableReference(node)) { + node.flowNode = currentFlow; + } + break; + case 187 /* BinaryExpression */: if (ts.isInJavaScriptFile(node)) { var specialKind = ts.getSpecialPropertyAssignmentKind(node); switch (specialKind) { @@ -14511,105 +14991,105 @@ var ts; } } return checkStrictModeBinaryExpression(node); - case 251 /* CatchClause */: + case 252 /* CatchClause */: return checkStrictModeCatchClause(node); - case 180 /* DeleteExpression */: + case 181 /* DeleteExpression */: return checkStrictModeDeleteExpression(node); case 8 /* NumericLiteral */: return checkStrictModeNumericLiteral(node); - case 185 /* PostfixUnaryExpression */: + case 186 /* PostfixUnaryExpression */: return checkStrictModePostfixUnaryExpression(node); - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: return checkStrictModePrefixUnaryExpression(node); - case 211 /* WithStatement */: + case 212 /* WithStatement */: return checkStrictModeWithStatement(node); - case 164 /* ThisType */: + case 165 /* ThisType */: seenThisKeyword = true; return; - case 153 /* TypePredicate */: + case 154 /* TypePredicate */: return checkTypePredicate(node); - case 140 /* TypeParameter */: + case 141 /* TypeParameter */: return declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 530912 /* TypeParameterExcludes */); - case 141 /* Parameter */: + case 142 /* Parameter */: return bindParameter(node); - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: return bindVariableDeclarationOrBindingElement(node); - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 265 /* JSDocRecordMember */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 266 /* JSDocRecordMember */: return bindPropertyOrMethodOrAccessor(node, 4 /* Property */ | (node.questionToken ? 536870912 /* Optional */ : 0 /* None */), 107455 /* PropertyExcludes */); - case 252 /* PropertyAssignment */: - case 253 /* ShorthandPropertyAssignment */: + case 253 /* PropertyAssignment */: + case 254 /* ShorthandPropertyAssignment */: return bindPropertyOrMethodOrAccessor(node, 4 /* Property */, 107455 /* PropertyExcludes */); - case 254 /* EnumMember */: + case 255 /* EnumMember */: return bindPropertyOrMethodOrAccessor(node, 8 /* EnumMember */, 107455 /* EnumMemberExcludes */); - case 246 /* JsxSpreadAttribute */: + case 247 /* JsxSpreadAttribute */: hasJsxSpreadAttribute = true; return; - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: return declareSymbolAndAddToSymbolTable(node, 131072 /* Signature */, 0 /* None */); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: // If this is an ObjectLiteralExpression method, then it sits in the same space // as other properties in the object literal. So we use SymbolFlags.PropertyExcludes // so that it will conflict with any other object literal members with the same // name. return bindPropertyOrMethodOrAccessor(node, 8192 /* Method */ | (node.questionToken ? 536870912 /* Optional */ : 0 /* None */), ts.isObjectLiteralMethod(node) ? 107455 /* PropertyExcludes */ : 99263 /* MethodExcludes */); - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return bindFunctionDeclaration(node); - case 147 /* Constructor */: + case 148 /* Constructor */: return declareSymbolAndAddToSymbolTable(node, 16384 /* Constructor */, /*symbolExcludes:*/ 0 /* None */); - case 148 /* GetAccessor */: + case 149 /* GetAccessor */: return bindPropertyOrMethodOrAccessor(node, 32768 /* GetAccessor */, 41919 /* GetAccessorExcludes */); - case 149 /* SetAccessor */: + case 150 /* SetAccessor */: return bindPropertyOrMethodOrAccessor(node, 65536 /* SetAccessor */, 74687 /* SetAccessorExcludes */); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 268 /* JSDocFunctionType */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 269 /* JSDocFunctionType */: return bindFunctionOrConstructorType(node); - case 158 /* TypeLiteral */: - case 264 /* JSDocRecordType */: + case 159 /* TypeLiteral */: + case 265 /* JSDocRecordType */: return bindAnonymousDeclaration(node, 2048 /* TypeLiteral */, "__type"); - case 170 /* ObjectLiteralExpression */: + case 171 /* ObjectLiteralExpression */: return bindObjectLiteralExpression(node); - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return bindFunctionExpression(node); - case 173 /* CallExpression */: + case 174 /* CallExpression */: if (ts.isInJavaScriptFile(node)) { bindCallExpression(node); } break; // Members of classes, interfaces, and modules - case 191 /* ClassExpression */: - case 220 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 221 /* ClassDeclaration */: return bindClassLikeDeclaration(node); - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return bindBlockScopedDeclaration(node, 64 /* Interface */, 792960 /* InterfaceExcludes */); - case 222 /* TypeAliasDeclaration */: + case 223 /* TypeAliasDeclaration */: return bindBlockScopedDeclaration(node, 524288 /* TypeAlias */, 793056 /* TypeAliasExcludes */); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return bindEnumDeclaration(node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return bindModuleDeclaration(node); // Imports and exports - case 228 /* ImportEqualsDeclaration */: - case 231 /* NamespaceImport */: - case 233 /* ImportSpecifier */: - case 237 /* ExportSpecifier */: + case 229 /* ImportEqualsDeclaration */: + case 232 /* NamespaceImport */: + case 234 /* ImportSpecifier */: + case 238 /* ExportSpecifier */: return declareSymbolAndAddToSymbolTable(node, 8388608 /* Alias */, 8388608 /* AliasExcludes */); - case 227 /* GlobalModuleExportDeclaration */: + case 228 /* GlobalModuleExportDeclaration */: return bindGlobalModuleExportDeclaration(node); - case 230 /* ImportClause */: + case 231 /* ImportClause */: return bindImportClause(node); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: return bindExportDeclaration(node); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return bindExportAssignment(node); - case 255 /* SourceFile */: + case 256 /* SourceFile */: return bindSourceFileIfExternalModule(); } } @@ -14618,7 +15098,7 @@ var ts; if (parameterName && parameterName.kind === 69 /* Identifier */) { checkStrictModeIdentifier(parameterName); } - if (parameterName && parameterName.kind === 164 /* ThisType */) { + if (parameterName && parameterName.kind === 165 /* ThisType */) { seenThisKeyword = true; } bind(type); @@ -14633,12 +15113,12 @@ var ts; bindAnonymousDeclaration(file, 512 /* ValueModule */, "\"" + ts.removeFileExtension(file.fileName) + "\""); } function bindExportAssignment(node) { - var boundExpression = node.kind === 234 /* ExportAssignment */ ? node.expression : node.right; + var boundExpression = node.kind === 235 /* ExportAssignment */ ? node.expression : node.right; if (!container.symbol || !container.symbol.exports) { // Export assignment in some sort of block construct bindAnonymousDeclaration(node, 8388608 /* Alias */, getDeclarationName(node)); } - else if (boundExpression.kind === 69 /* Identifier */ && node.kind === 234 /* ExportAssignment */) { + else if (boundExpression.kind === 69 /* Identifier */ && node.kind === 235 /* ExportAssignment */) { // An export default clause with an identifier exports all meanings of that identifier declareSymbol(container.symbol.exports, container.symbol, node, 8388608 /* Alias */, 107455 /* PropertyExcludes */ | 8388608 /* AliasExcludes */); } @@ -14651,17 +15131,17 @@ var ts; if (node.modifiers && node.modifiers.length) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Modifiers_cannot_appear_here)); } - if (node.parent.kind !== 255 /* SourceFile */) { + if (node.parent.kind !== 256 /* SourceFile */) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_at_top_level)); return; } else { - var parent_4 = node.parent; - if (!ts.isExternalModule(parent_4)) { + var parent_5 = node.parent; + if (!ts.isExternalModule(parent_5)) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_module_files)); return; } - if (!parent_4.isDeclarationFile) { + if (!parent_5.isDeclarationFile) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_declaration_files)); return; } @@ -14703,7 +15183,7 @@ var ts; } function bindThisPropertyAssignment(node) { // Declare a 'member' in case it turns out the container was an ES5 class - if (container.kind === 178 /* FunctionExpression */ || container.kind === 219 /* FunctionDeclaration */) { + if (container.kind === 179 /* FunctionExpression */ || container.kind === 220 /* FunctionDeclaration */) { container.symbol.members = container.symbol.members || {}; // It's acceptable for multiple 'this' assignments of the same identifier to occur declareSymbol(container.symbol.members, container.symbol, node, 4 /* Property */, 107455 /* PropertyExcludes */ & ~4 /* Property */); @@ -14747,7 +15227,7 @@ var ts; hasDecorators = true; } } - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { bindBlockScopedDeclaration(node, 32 /* Class */, 899519 /* ClassExcludes */); } else { @@ -14840,7 +15320,13 @@ var ts; } } checkStrictModeFunctionName(node); - return declareSymbolAndAddToSymbolTable(node, 16 /* Function */, 106927 /* FunctionExcludes */); + if (inStrictMode) { + checkStrictModeFunctionDeclaration(node); + return bindBlockScopedDeclaration(node, 16 /* Function */, 106927 /* FunctionExcludes */); + } + else { + return declareSymbolAndAddToSymbolTable(node, 16 /* Function */, 106927 /* FunctionExcludes */); + } } function bindFunctionExpression(node) { if (!ts.isDeclarationFile(file) && !ts.isInAmbientContext(node)) { @@ -14866,110 +15352,46 @@ var ts; : declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes); } // reachability checks - function pushNamedLabel(name) { - initializeReachabilityStateIfNecessary(); - if (ts.hasProperty(labelIndexMap, name.text)) { - return false; - } - labelIndexMap[name.text] = labelStack.push(1 /* Uninitialized */) - 1; - return true; - } - function pushImplicitLabel() { - initializeReachabilityStateIfNecessary(); - var index = labelStack.push(1 /* Uninitialized */) - 1; - implicitLabels.push(index); - return index; - } - function popNamedLabel(label, outerState) { - var index = labelIndexMap[label.text]; - ts.Debug.assert(index !== undefined); - ts.Debug.assert(labelStack.length == index + 1); - labelIndexMap[label.text] = undefined; - setCurrentStateAtLabel(labelStack.pop(), outerState, label); - } - function popImplicitLabel(implicitLabelIndex, outerState) { - if (labelStack.length !== implicitLabelIndex + 1) { - ts.Debug.assert(false, "Label stack: " + labelStack.length + ", index:" + implicitLabelIndex); - } - var i = implicitLabels.pop(); - if (implicitLabelIndex !== i) { - ts.Debug.assert(false, "i: " + i + ", index: " + implicitLabelIndex); - } - setCurrentStateAtLabel(labelStack.pop(), outerState, /*name*/ undefined); - } - function setCurrentStateAtLabel(innerMergedState, outerState, label) { - if (innerMergedState === 1 /* Uninitialized */) { - if (label && !options.allowUnusedLabels) { - file.bindDiagnostics.push(ts.createDiagnosticForNode(label, ts.Diagnostics.Unused_label)); - } - currentReachabilityState = outerState; - } - else { - currentReachabilityState = or(innerMergedState, outerState); - } - } - function jumpToLabel(label, outerState) { - initializeReachabilityStateIfNecessary(); - var index = label ? labelIndexMap[label.text] : ts.lastOrUndefined(implicitLabels); - if (index === undefined) { - // reference to unknown label or - // break/continue used outside of loops - return false; - } - var stateAtLabel = labelStack[index]; - labelStack[index] = stateAtLabel === 1 /* Uninitialized */ ? outerState : or(stateAtLabel, outerState); - return true; + function shouldReportErrorOnModuleDeclaration(node) { + var instanceState = getModuleInstanceState(node); + return instanceState === 1 /* Instantiated */ || (instanceState === 2 /* ConstEnumOnly */ && options.preserveConstEnums); } function checkUnreachable(node) { - switch (currentReachabilityState) { - case 4 /* Unreachable */: - var reportError = - // report error on all statements except empty ones - (ts.isStatement(node) && node.kind !== 200 /* EmptyStatement */) || - // report error on class declarations - node.kind === 220 /* ClassDeclaration */ || - // report error on instantiated modules or const-enums only modules if preserveConstEnums is set - (node.kind === 224 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node)) || - // report error on regular enums and const enums if preserveConstEnums is set - (node.kind === 223 /* EnumDeclaration */ && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums)); - if (reportError) { - currentReachabilityState = 8 /* ReportedUnreachable */; - // unreachable code is reported if - // - user has explicitly asked about it AND - // - statement is in not ambient context (statements in ambient context is already an error - // so we should not report extras) AND - // - node is not variable statement OR - // - node is block scoped variable statement OR - // - node is not block scoped variable statement and at least one variable declaration has initializer - // Rationale: we don't want to report errors on non-initialized var's since they are hoisted - // On the other side we do want to report errors on non-initialized 'lets' because of TDZ - var reportUnreachableCode = !options.allowUnreachableCode && - !ts.isInAmbientContext(node) && - (node.kind !== 199 /* VariableStatement */ || - ts.getCombinedNodeFlags(node.declarationList) & 3072 /* BlockScoped */ || - ts.forEach(node.declarationList.declarations, function (d) { return d.initializer; })); - if (reportUnreachableCode) { - errorOnFirstToken(node, ts.Diagnostics.Unreachable_code_detected); - } + if (!(currentFlow.flags & 1 /* Unreachable */)) { + return false; + } + if (currentFlow === unreachableFlow) { + var reportError = + // report error on all statements except empty ones + (ts.isStatement(node) && node.kind !== 201 /* EmptyStatement */) || + // report error on class declarations + node.kind === 221 /* ClassDeclaration */ || + // report error on instantiated modules or const-enums only modules if preserveConstEnums is set + (node.kind === 225 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node)) || + // report error on regular enums and const enums if preserveConstEnums is set + (node.kind === 224 /* EnumDeclaration */ && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums)); + if (reportError) { + currentFlow = reportedUnreachableFlow; + // unreachable code is reported if + // - user has explicitly asked about it AND + // - statement is in not ambient context (statements in ambient context is already an error + // so we should not report extras) AND + // - node is not variable statement OR + // - node is block scoped variable statement OR + // - node is not block scoped variable statement and at least one variable declaration has initializer + // Rationale: we don't want to report errors on non-initialized var's since they are hoisted + // On the other side we do want to report errors on non-initialized 'lets' because of TDZ + var reportUnreachableCode = !options.allowUnreachableCode && + !ts.isInAmbientContext(node) && + (node.kind !== 200 /* VariableStatement */ || + ts.getCombinedNodeFlags(node.declarationList) & 3072 /* BlockScoped */ || + ts.forEach(node.declarationList.declarations, function (d) { return d.initializer; })); + if (reportUnreachableCode) { + errorOnFirstToken(node, ts.Diagnostics.Unreachable_code_detected); } - case 8 /* ReportedUnreachable */: - return true; - default: - return false; + } } - function shouldReportErrorOnModuleDeclaration(node) { - var instanceState = getModuleInstanceState(node); - return instanceState === 1 /* Instantiated */ || (instanceState === 2 /* ConstEnumOnly */ && options.preserveConstEnums); - } - } - function initializeReachabilityStateIfNecessary() { - if (labelIndexMap) { - return; - } - currentReachabilityState = 2 /* Reachable */; - labelIndexMap = {}; - labelStack = []; - implicitLabels = []; + return true; } } })(ts || (ts = {})); @@ -14980,6 +15402,7 @@ var ts; var nextSymbolId = 1; var nextNodeId = 1; var nextMergeId = 1; + var nextFlowId = 1; function getNodeId(node) { if (!node.id) { node.id = nextNodeId; @@ -15043,11 +15466,13 @@ var ts; getIndexTypeOfType: getIndexTypeOfType, getBaseTypes: getBaseTypes, getReturnTypeOfSignature: getReturnTypeOfSignature, + getNonNullableType: getNonNullableType, getSymbolsInScope: getSymbolsInScope, getSymbolAtLocation: getSymbolAtLocation, getShorthandAssignmentValueSymbol: getShorthandAssignmentValueSymbol, getExportSpecifierLocalTargetSymbol: getExportSpecifierLocalTargetSymbol, getTypeAtLocation: getTypeOfNode, + getPropertySymbolOfDestructuringAssignment: getPropertySymbolOfDestructuringAssignment, typeToString: typeToString, getSymbolDisplayBuilder: getSymbolDisplayBuilder, symbolToString: symbolToString, @@ -15080,8 +15505,8 @@ var ts; var nullType = createIntrinsicType(64 /* Null */ | nullableWideningFlags, "null"); var emptyArrayElementType = createIntrinsicType(32 /* Undefined */ | 2097152 /* ContainsUndefinedOrNull */, "undefined"); var unknownType = createIntrinsicType(1 /* Any */, "unknown"); + var neverType = createIntrinsicType(134217728 /* Never */, "never"); var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); - var emptyUnionType = emptyObjectType; var emptyGenericType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); emptyGenericType.instantiations = {}; var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); @@ -15126,6 +15551,9 @@ var ts; var getGlobalThenableType; var jsxElementClassType; var deferredNodes; + var flowLoopStart = 0; + var flowLoopCount = 0; + var visitedFlowCount = 0; var tupleTypes = {}; var unionTypes = {}; var intersectionTypes = {}; @@ -15136,30 +15564,83 @@ var ts; var mergedSymbols = []; var symbolLinks = []; var nodeLinks = []; + var flowLoopCaches = []; + var flowLoopNodes = []; + var flowLoopKeys = []; + var flowLoopTypes = []; + var visitedFlowNodes = []; + var visitedFlowTypes = []; var potentialThisCollisions = []; var awaitedTypeStack = []; var diagnostics = ts.createDiagnosticCollection(); - var primitiveTypeInfo = { - "string": { - type: stringType, - flags: 258 /* StringLike */ - }, - "number": { - type: numberType, - flags: 132 /* NumberLike */ - }, - "boolean": { - type: booleanType, - flags: 8 /* Boolean */ - }, - "symbol": { - type: esSymbolType, - flags: 16777216 /* ESSymbol */ - }, - "undefined": { - type: undefinedType, - flags: 2097152 /* ContainsUndefinedOrNull */ - } + var TypeFacts; + (function (TypeFacts) { + TypeFacts[TypeFacts["None"] = 0] = "None"; + TypeFacts[TypeFacts["TypeofEQString"] = 1] = "TypeofEQString"; + TypeFacts[TypeFacts["TypeofEQNumber"] = 2] = "TypeofEQNumber"; + TypeFacts[TypeFacts["TypeofEQBoolean"] = 4] = "TypeofEQBoolean"; + TypeFacts[TypeFacts["TypeofEQSymbol"] = 8] = "TypeofEQSymbol"; + TypeFacts[TypeFacts["TypeofEQObject"] = 16] = "TypeofEQObject"; + TypeFacts[TypeFacts["TypeofEQFunction"] = 32] = "TypeofEQFunction"; + TypeFacts[TypeFacts["TypeofEQHostObject"] = 64] = "TypeofEQHostObject"; + TypeFacts[TypeFacts["TypeofNEString"] = 128] = "TypeofNEString"; + TypeFacts[TypeFacts["TypeofNENumber"] = 256] = "TypeofNENumber"; + TypeFacts[TypeFacts["TypeofNEBoolean"] = 512] = "TypeofNEBoolean"; + TypeFacts[TypeFacts["TypeofNESymbol"] = 1024] = "TypeofNESymbol"; + TypeFacts[TypeFacts["TypeofNEObject"] = 2048] = "TypeofNEObject"; + TypeFacts[TypeFacts["TypeofNEFunction"] = 4096] = "TypeofNEFunction"; + TypeFacts[TypeFacts["TypeofNEHostObject"] = 8192] = "TypeofNEHostObject"; + TypeFacts[TypeFacts["EQUndefined"] = 16384] = "EQUndefined"; + TypeFacts[TypeFacts["EQNull"] = 32768] = "EQNull"; + TypeFacts[TypeFacts["EQUndefinedOrNull"] = 65536] = "EQUndefinedOrNull"; + TypeFacts[TypeFacts["NEUndefined"] = 131072] = "NEUndefined"; + TypeFacts[TypeFacts["NENull"] = 262144] = "NENull"; + TypeFacts[TypeFacts["NEUndefinedOrNull"] = 524288] = "NEUndefinedOrNull"; + TypeFacts[TypeFacts["Truthy"] = 1048576] = "Truthy"; + TypeFacts[TypeFacts["Falsy"] = 2097152] = "Falsy"; + TypeFacts[TypeFacts["All"] = 4194303] = "All"; + // The following members encode facts about particular kinds of types for use in the getTypeFacts function. + // The presence of a particular fact means that the given test is true for some (and possibly all) values + // of that kind of type. + TypeFacts[TypeFacts["StringStrictFacts"] = 4079361] = "StringStrictFacts"; + TypeFacts[TypeFacts["StringFacts"] = 4194049] = "StringFacts"; + TypeFacts[TypeFacts["NumberStrictFacts"] = 4079234] = "NumberStrictFacts"; + TypeFacts[TypeFacts["NumberFacts"] = 4193922] = "NumberFacts"; + TypeFacts[TypeFacts["BooleanStrictFacts"] = 4078980] = "BooleanStrictFacts"; + TypeFacts[TypeFacts["BooleanFacts"] = 4193668] = "BooleanFacts"; + TypeFacts[TypeFacts["SymbolStrictFacts"] = 1981320] = "SymbolStrictFacts"; + TypeFacts[TypeFacts["SymbolFacts"] = 4193160] = "SymbolFacts"; + TypeFacts[TypeFacts["ObjectStrictFacts"] = 1972176] = "ObjectStrictFacts"; + TypeFacts[TypeFacts["ObjectFacts"] = 4184016] = "ObjectFacts"; + TypeFacts[TypeFacts["FunctionStrictFacts"] = 1970144] = "FunctionStrictFacts"; + TypeFacts[TypeFacts["FunctionFacts"] = 4181984] = "FunctionFacts"; + TypeFacts[TypeFacts["UndefinedFacts"] = 2457472] = "UndefinedFacts"; + TypeFacts[TypeFacts["NullFacts"] = 2340752] = "NullFacts"; + })(TypeFacts || (TypeFacts = {})); + var typeofEQFacts = { + "string": 1 /* TypeofEQString */, + "number": 2 /* TypeofEQNumber */, + "boolean": 4 /* TypeofEQBoolean */, + "symbol": 8 /* TypeofEQSymbol */, + "undefined": 16384 /* EQUndefined */, + "object": 16 /* TypeofEQObject */, + "function": 32 /* TypeofEQFunction */ + }; + var typeofNEFacts = { + "string": 128 /* TypeofNEString */, + "number": 256 /* TypeofNENumber */, + "boolean": 512 /* TypeofNEBoolean */, + "symbol": 1024 /* TypeofNESymbol */, + "undefined": 131072 /* NEUndefined */, + "object": 2048 /* TypeofNEObject */, + "function": 4096 /* TypeofNEFunction */ + }; + var typeofTypesByName = { + "string": stringType, + "number": numberType, + "boolean": booleanType, + "symbol": esSymbolType, + "undefined": undefinedType }; var jsxElementType; /** Things we lazy load from the JSX namespace */ @@ -15275,7 +15756,7 @@ var ts; target.flags |= source.flags; if (source.valueDeclaration && (!target.valueDeclaration || - (target.valueDeclaration.kind === 224 /* ModuleDeclaration */ && source.valueDeclaration.kind !== 224 /* ModuleDeclaration */))) { + (target.valueDeclaration.kind === 225 /* ModuleDeclaration */ && source.valueDeclaration.kind !== 225 /* ModuleDeclaration */))) { // other kinds of value declarations take precedence over modules target.valueDeclaration = source.valueDeclaration; } @@ -15344,7 +15825,11 @@ var ts; } else { // find a module that about to be augmented - var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found); + // do not validate names of augmentations that are defined in ambient context + var moduleNotFoundError = !ts.isInAmbientContext(moduleName.parent.parent) + ? ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found + : undefined; + var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, moduleNotFoundError); if (!mainModule) { return; } @@ -15388,7 +15873,7 @@ var ts; return nodeLinks[nodeId] || (nodeLinks[nodeId] = {}); } function isGlobalSourceFile(node) { - return node.kind === 255 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node); + return node.kind === 256 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node); } function getSymbol(symbols, name, meaning) { if (meaning && ts.hasProperty(symbols, name)) { @@ -15437,7 +15922,7 @@ var ts; if (declaration.pos <= usage.pos) { // declaration is before usage // still might be illegal if usage is in the initializer of the variable declaration - return declaration.kind !== 217 /* VariableDeclaration */ || + return declaration.kind !== 218 /* VariableDeclaration */ || !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage); } // declaration is after usage @@ -15445,18 +15930,26 @@ var ts; return isUsedInFunctionOrNonStaticProperty(declaration, usage); function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) { var container = ts.getEnclosingBlockScopeContainer(declaration); - if (declaration.parent.parent.kind === 199 /* VariableStatement */ || - declaration.parent.parent.kind === 205 /* ForStatement */) { - // variable statement/for statement case, - // use site should not be inside variable declaration (initializer of declaration or binding element) - return isSameScopeDescendentOf(usage, declaration, container); + switch (declaration.parent.parent.kind) { + case 200 /* VariableStatement */: + case 206 /* ForStatement */: + case 208 /* ForOfStatement */: + // variable statement/for/for-of statement case, + // use site should not be inside variable declaration (initializer of declaration or binding element) + if (isSameScopeDescendentOf(usage, declaration, container)) { + return true; + } + break; } - else if (declaration.parent.parent.kind === 207 /* ForOfStatement */ || - declaration.parent.parent.kind === 206 /* ForInStatement */) { - // ForIn/ForOf case - use site should not be used in expression part - var expression = declaration.parent.parent.expression; - return isSameScopeDescendentOf(usage, expression, container); + switch (declaration.parent.parent.kind) { + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + // ForIn/ForOf case - use site should not be used in expression part + if (isSameScopeDescendentOf(usage, declaration.parent.parent.expression, container)) { + return true; + } } + return false; } function isUsedInFunctionOrNonStaticProperty(declaration, usage) { var container = ts.getEnclosingBlockScopeContainer(declaration); @@ -15469,7 +15962,7 @@ var ts; return true; } var initializerOfNonStaticProperty = current.parent && - current.parent.kind === 144 /* PropertyDeclaration */ && + current.parent.kind === 145 /* PropertyDeclaration */ && (current.parent.flags & 32 /* Static */) === 0 && current.parent.initializer === current; if (initializerOfNonStaticProperty) { @@ -15501,11 +15994,11 @@ var ts; // - parameters are only in the scope of function body // This restriction does not apply to JSDoc comment types because they are parented // at a higher level than type parameters would normally be - if (meaning & result.flags & 793056 /* Type */ && lastLocation.kind !== 272 /* JSDocComment */) { + if (meaning & result.flags & 793056 /* Type */ && lastLocation.kind !== 273 /* JSDocComment */) { useResult = result.flags & 262144 /* TypeParameter */ ? lastLocation === location.type || - lastLocation.kind === 141 /* Parameter */ || - lastLocation.kind === 140 /* TypeParameter */ + lastLocation.kind === 142 /* Parameter */ || + lastLocation.kind === 141 /* TypeParameter */ : false; } if (meaning & 107455 /* Value */ && result.flags & 1 /* FunctionScopedVariable */) { @@ -15514,9 +16007,9 @@ var ts; // however it is detected separately when checking initializers of parameters // to make sure that they reference no variables declared after them. useResult = - lastLocation.kind === 141 /* Parameter */ || + lastLocation.kind === 142 /* Parameter */ || (lastLocation === location.type && - result.valueDeclaration.kind === 141 /* Parameter */); + result.valueDeclaration.kind === 142 /* Parameter */); } } if (useResult) { @@ -15528,12 +16021,12 @@ var ts; } } switch (location.kind) { - case 255 /* SourceFile */: + case 256 /* SourceFile */: if (!ts.isExternalOrCommonJsModule(location)) break; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: var moduleExports = getSymbolOfNode(location).exports; - if (location.kind === 255 /* SourceFile */ || ts.isAmbientModule(location)) { + if (location.kind === 256 /* SourceFile */ || ts.isAmbientModule(location)) { // It's an external module. First see if the module has an export default and if the local // name of that export default matches. if (result = moduleExports["default"]) { @@ -15556,7 +16049,7 @@ var ts; // which is not the desired behavior. if (ts.hasProperty(moduleExports, name) && moduleExports[name].flags === 8388608 /* Alias */ && - ts.getDeclarationOfKind(moduleExports[name], 237 /* ExportSpecifier */)) { + ts.getDeclarationOfKind(moduleExports[name], 238 /* ExportSpecifier */)) { break; } } @@ -15564,13 +16057,13 @@ var ts; break loop; } break; - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8 /* EnumMember */)) { break loop; } break; - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: // TypeScript 1.0 spec (April 2014): 8.4.1 // Initializer expressions for instance member variables are evaluated in the scope // of the class constructor body but are not permitted to reference parameters or @@ -15587,9 +16080,9 @@ var ts; } } break; - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 221 /* InterfaceDeclaration */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & 793056 /* Type */)) { if (lastLocation && lastLocation.flags & 32 /* Static */) { // TypeScript 1.0 spec (April 2014): 3.4.1 @@ -15600,7 +16093,7 @@ var ts; } break loop; } - if (location.kind === 191 /* ClassExpression */ && meaning & 32 /* Class */) { + if (location.kind === 192 /* ClassExpression */ && meaning & 32 /* Class */) { var className = location.name; if (className && name === className.text) { result = location.symbol; @@ -15616,9 +16109,9 @@ var ts; // [foo()]() { } // <-- Reference to T from class's own computed property // } // - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: grandparent = location.parent.parent; - if (ts.isClassLike(grandparent) || grandparent.kind === 221 /* InterfaceDeclaration */) { + if (ts.isClassLike(grandparent) || grandparent.kind === 222 /* InterfaceDeclaration */) { // A reference to this grandparent's type parameters would be an error if (result = getSymbol(getSymbolOfNode(grandparent).members, name, meaning & 793056 /* Type */)) { error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type); @@ -15626,19 +16119,19 @@ var ts; } } break; - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 219 /* FunctionDeclaration */: - case 179 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 180 /* ArrowFunction */: if (meaning & 3 /* Variable */ && name === "arguments") { result = argumentsSymbol; break loop; } break; - case 178 /* FunctionExpression */: + case 179 /* FunctionExpression */: if (meaning & 3 /* Variable */ && name === "arguments") { result = argumentsSymbol; break loop; @@ -15651,7 +16144,7 @@ var ts; } } break; - case 142 /* Decorator */: + case 143 /* Decorator */: // Decorators are resolved at the class declaration. Resolving at the parameter // or member would result in looking up locals in the method. // @@ -15660,7 +16153,7 @@ var ts; // method(@y x, y) {} // <-- decorator y should be resolved at the class declaration, not the parameter. // } // - if (location.parent && location.parent.kind === 141 /* Parameter */) { + if (location.parent && location.parent.kind === 142 /* Parameter */) { location = location.parent; } // @@ -15754,7 +16247,7 @@ var ts; // Block-scoped variables cannot be used before their definition var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) ? d : undefined; }); ts.Debug.assert(declaration !== undefined, "Block-scoped variable declaration is undefined"); - if (!isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 217 /* VariableDeclaration */), errorLocation)) { + if (!isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 218 /* VariableDeclaration */), errorLocation)) { error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(declaration.name)); } } @@ -15775,10 +16268,10 @@ var ts; } function getAnyImportSyntax(node) { if (ts.isAliasSymbolDeclaration(node)) { - if (node.kind === 228 /* ImportEqualsDeclaration */) { + if (node.kind === 229 /* ImportEqualsDeclaration */) { return node; } - while (node && node.kind !== 229 /* ImportDeclaration */) { + while (node && node.kind !== 230 /* ImportDeclaration */) { node = node.parent; } return node; @@ -15788,7 +16281,7 @@ var ts; return ts.forEach(symbol.declarations, function (d) { return ts.isAliasSymbolDeclaration(d) ? d : undefined; }); } function getTargetOfImportEqualsDeclaration(node) { - if (node.moduleReference.kind === 239 /* ExternalModuleReference */) { + if (node.moduleReference.kind === 240 /* ExternalModuleReference */) { return resolveExternalModuleSymbol(resolveExternalModuleName(node, ts.getExternalModuleImportEqualsDeclarationExpression(node))); } return getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, node); @@ -15875,6 +16368,8 @@ var ts; else { symbolFromVariable = getPropertyOfVariable(targetSymbol, name_9.text); } + // if symbolFromVariable is export - get its final target + symbolFromVariable = resolveSymbol(symbolFromVariable); var symbolFromModule = getExportOfModule(targetSymbol, name_9.text); var symbol = symbolFromModule && symbolFromVariable ? combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) : @@ -15902,19 +16397,19 @@ var ts; } function getTargetOfAliasDeclaration(node) { switch (node.kind) { - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: return getTargetOfImportEqualsDeclaration(node); - case 230 /* ImportClause */: + case 231 /* ImportClause */: return getTargetOfImportClause(node); - case 231 /* NamespaceImport */: + case 232 /* NamespaceImport */: return getTargetOfNamespaceImport(node); - case 233 /* ImportSpecifier */: + case 234 /* ImportSpecifier */: return getTargetOfImportSpecifier(node); - case 237 /* ExportSpecifier */: + case 238 /* ExportSpecifier */: return getTargetOfExportSpecifier(node); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return getTargetOfExportAssignment(node); - case 227 /* GlobalModuleExportDeclaration */: + case 228 /* GlobalModuleExportDeclaration */: return getTargetOfGlobalModuleExportDeclaration(node); } } @@ -15944,8 +16439,8 @@ var ts; var symbol = getSymbolOfNode(node); var target = resolveAlias(symbol); if (target) { - var markAlias = (target === unknownSymbol && compilerOptions.isolatedModules) || - (target !== unknownSymbol && (target.flags & 107455 /* Value */) && !isConstEnumOrConstEnumOnlyModule(target)); + var markAlias = target === unknownSymbol || + ((target.flags & 107455 /* Value */) && !isConstEnumOrConstEnumOnlyModule(target)); if (markAlias) { markAliasSymbolAsReferenced(symbol); } @@ -15959,11 +16454,11 @@ var ts; if (!links.referenced) { links.referenced = true; var node = getDeclarationOfAliasSymbol(symbol); - if (node.kind === 234 /* ExportAssignment */) { + if (node.kind === 235 /* ExportAssignment */) { // export default checkExpressionCached(node.expression); } - else if (node.kind === 237 /* ExportSpecifier */) { + else if (node.kind === 238 /* ExportSpecifier */) { // export { } or export { as foo } checkExpressionCached(node.propertyName || node.name); } @@ -15976,7 +16471,7 @@ var ts; // This function is only for imports with entity names function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, importDeclaration) { if (!importDeclaration) { - importDeclaration = ts.getAncestor(entityName, 228 /* ImportEqualsDeclaration */); + importDeclaration = ts.getAncestor(entityName, 229 /* ImportEqualsDeclaration */); ts.Debug.assert(importDeclaration !== undefined); } // There are three things we might try to look for. In the following examples, @@ -15989,13 +16484,13 @@ var ts; entityName = entityName.parent; } // Check for case 1 and 3 in the above example - if (entityName.kind === 69 /* Identifier */ || entityName.parent.kind === 138 /* QualifiedName */) { + if (entityName.kind === 69 /* Identifier */ || entityName.parent.kind === 139 /* QualifiedName */) { return resolveEntityName(entityName, 1536 /* Namespace */); } else { // Case 2 in above example // entityName.kind could be a QualifiedName or a Missing identifier - ts.Debug.assert(entityName.parent.kind === 228 /* ImportEqualsDeclaration */); + ts.Debug.assert(entityName.parent.kind === 229 /* ImportEqualsDeclaration */); return resolveEntityName(entityName, 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */); } } @@ -16015,9 +16510,9 @@ var ts; return undefined; } } - else if (name.kind === 138 /* QualifiedName */ || name.kind === 171 /* PropertyAccessExpression */) { - var left = name.kind === 138 /* QualifiedName */ ? name.left : name.expression; - var right = name.kind === 138 /* QualifiedName */ ? name.right : name.name; + else if (name.kind === 139 /* QualifiedName */ || name.kind === 172 /* PropertyAccessExpression */) { + var left = name.kind === 139 /* QualifiedName */ ? name.left : name.expression; + var right = name.kind === 139 /* QualifiedName */ ? name.right : name.name; var namespace = resolveEntityName(left, 1536 /* Namespace */, ignoreErrors); if (!namespace || namespace === unknownSymbol || ts.nodeIsMissing(right)) { return undefined; @@ -16203,7 +16698,7 @@ var ts; var members = node.members; for (var _i = 0, members_1 = members; _i < members_1.length; _i++) { var member = members_1[_i]; - if (member.kind === 147 /* Constructor */ && ts.nodeIsPresent(member.body)) { + if (member.kind === 148 /* Constructor */ && ts.nodeIsPresent(member.body)) { return member; } } @@ -16274,11 +16769,11 @@ var ts; } } switch (location_1.kind) { - case 255 /* SourceFile */: + case 256 /* SourceFile */: if (!ts.isExternalOrCommonJsModule(location_1)) { break; } - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: if (result = callback(getSymbolOfNode(location_1).exports)) { return result; } @@ -16319,7 +16814,7 @@ var ts; return ts.forEachValue(symbols, function (symbolFromSymbolTable) { if (symbolFromSymbolTable.flags & 8388608 /* Alias */ && symbolFromSymbolTable.name !== "export=" - && !ts.getDeclarationOfKind(symbolFromSymbolTable, 237 /* ExportSpecifier */)) { + && !ts.getDeclarationOfKind(symbolFromSymbolTable, 238 /* ExportSpecifier */)) { if (!useOnlyExternalAliasing || // Is this external alias, then use it to name ts.forEach(symbolFromSymbolTable.declarations, ts.isExternalModuleImportEqualsDeclaration)) { @@ -16358,7 +16853,7 @@ var ts; return true; } // Qualify if the symbol from symbol table has same meaning as expected - symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 237 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable; + symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 238 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable; if (symbolFromSymbolTable.flags & meaning) { qualify = true; return true; @@ -16373,10 +16868,10 @@ var ts; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; switch (declaration.kind) { - case 144 /* PropertyDeclaration */: - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 145 /* PropertyDeclaration */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: continue; default: return false; @@ -16449,7 +16944,7 @@ var ts; } } function hasExternalModuleSymbol(declaration) { - return ts.isAmbientModule(declaration) || (declaration.kind === 255 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration)); + return ts.isAmbientModule(declaration) || (declaration.kind === 256 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration)); } function hasVisibleDeclarations(symbol) { var aliasesToMakeVisible; @@ -16485,12 +16980,12 @@ var ts; function isEntityNameVisible(entityName, enclosingDeclaration) { // get symbol of the first identifier of the entityName var meaning; - if (entityName.parent.kind === 157 /* TypeQuery */ || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { + if (entityName.parent.kind === 158 /* TypeQuery */ || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { // Typeof value meaning = 107455 /* Value */ | 1048576 /* ExportValue */; } - else if (entityName.kind === 138 /* QualifiedName */ || entityName.kind === 171 /* PropertyAccessExpression */ || - entityName.parent.kind === 228 /* ImportEqualsDeclaration */) { + else if (entityName.kind === 139 /* QualifiedName */ || entityName.kind === 172 /* PropertyAccessExpression */ || + entityName.parent.kind === 229 /* ImportEqualsDeclaration */) { // Left identifier from type reference or TypeAlias // Entity name of the import declaration meaning = 1536 /* Namespace */; @@ -16561,10 +17056,10 @@ var ts; function getTypeAliasForTypeLiteral(type) { if (type.symbol && type.symbol.flags & 2048 /* TypeLiteral */) { var node = type.symbol.declarations[0].parent; - while (node.kind === 163 /* ParenthesizedType */) { + while (node.kind === 164 /* ParenthesizedType */) { node = node.parent; } - if (node.kind === 222 /* TypeAliasDeclaration */) { + if (node.kind === 223 /* TypeAliasDeclaration */) { return getSymbolOfNode(node); } } @@ -16572,7 +17067,7 @@ var ts; } function isTopLevelInExternalModuleAugmentation(node) { return node && node.parent && - node.parent.kind === 225 /* ModuleBlock */ && + node.parent.kind === 226 /* ModuleBlock */ && ts.isExternalModuleAugmentation(node.parent.parent); } function getSymbolDisplayBuilder() { @@ -16583,10 +17078,10 @@ var ts; return ts.declarationNameToString(declaration.name); } switch (declaration.kind) { - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: return "(Anonymous class)"; - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return "(Anonymous function)"; } } @@ -16594,11 +17089,35 @@ var ts; } /** * Writes only the name of the symbol out to the writer. Uses the original source text - * for the name of the symbol if it is available to match how the user inputted the name. + * for the name of the symbol if it is available to match how the user wrote the name. */ function appendSymbolNameOnly(symbol, writer) { writer.writeSymbol(getNameOfSymbol(symbol), symbol); } + /** + * Writes a property access or element access with the name of the symbol out to the writer. + * Uses the original source text for the name of the symbol if it is available to match how the user wrote the name, + * ensuring that any names written with literals use element accesses. + */ + function appendPropertyOrElementAccessForSymbol(symbol, writer) { + var symbolName = getNameOfSymbol(symbol); + var firstChar = symbolName.charCodeAt(0); + var needsElementAccess = !ts.isIdentifierStart(firstChar, languageVersion); + if (needsElementAccess) { + writePunctuation(writer, 19 /* OpenBracketToken */); + if (ts.isSingleOrDoubleQuote(firstChar)) { + writer.writeStringLiteral(symbolName); + } + else { + writer.writeSymbol(symbolName, symbol); + } + writePunctuation(writer, 20 /* CloseBracketToken */); + } + else { + writePunctuation(writer, 21 /* DotToken */); + writer.writeSymbol(symbolName, symbol); + } + } /** * Enclosing declaration is optional when we don't want to get qualified name in the enclosing declaration scope * Meaning needs to be specified if the enclosing declaration is given @@ -16616,10 +17135,12 @@ var ts; buildTypeParameterDisplayFromSymbol(parentSymbol, writer, enclosingDeclaration); } } - writePunctuation(writer, 21 /* DotToken */); + appendPropertyOrElementAccessForSymbol(symbol, writer); + } + else { + appendSymbolNameOnly(symbol, writer); } parentSymbol = symbol; - appendSymbolNameOnly(symbol, writer); } // const the writer know we just wrote out a symbol. The declaration emitter writer uses // this to determine if an import it has previously seen (and not written out) needs @@ -16673,7 +17194,7 @@ var ts; return writeType(type, globalFlags); function writeType(type, flags) { // Write undefined/null type as any - if (type.flags & 16777343 /* Intrinsic */) { + if (type.flags & 150995071 /* Intrinsic */) { // Special handling for unknown / resolving types, they should show up as any and not unknown or __resolving writer.writeKeyword(!(globalFlags & 16 /* WriteOwnNameForAnyLike */) && isTypeAny(type) ? "any" @@ -16733,7 +17254,7 @@ var ts; } if (pos < end) { writePunctuation(writer, 25 /* LessThanToken */); - writeType(typeArguments[pos], 0 /* None */); + writeType(typeArguments[pos], 256 /* InFirstTypeArgument */); pos++; while (pos < end) { writePunctuation(writer, 24 /* CommaToken */); @@ -16762,14 +17283,14 @@ var ts; while (i < length_1) { // Find group of type arguments for type parameters with the same declaring container. var start = i; - var parent_5 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); + var parent_6 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); do { i++; - } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_5); + } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_6); // When type parameters are their own type arguments for the whole group (i.e. we have // the default outer type arguments), we don't show the group. if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) { - writeSymbolTypeReference(parent_5, typeArguments, start, i, flags); + writeSymbolTypeReference(parent_6, typeArguments, start, i, flags); writePunctuation(writer, 21 /* DotToken */); } } @@ -16797,10 +17318,10 @@ var ts; if (symbol) { // Always use 'typeof T' for type of class, enum, and module objects if (symbol.flags & (32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) { - writeTypeofSymbol(type, flags); + writeTypeOfSymbol(type, flags); } else if (shouldWriteTypeOfFunctionSymbol()) { - writeTypeofSymbol(type, flags); + writeTypeOfSymbol(type, flags); } else if (ts.contains(symbolStack, symbol)) { // If type is an anonymous type literal in a type alias declaration, use type alias name @@ -16835,7 +17356,7 @@ var ts; var isNonLocalFunctionSymbol = !!(symbol.flags & 16 /* Function */) && (symbol.parent || ts.forEach(symbol.declarations, function (declaration) { - return declaration.parent.kind === 255 /* SourceFile */ || declaration.parent.kind === 225 /* ModuleBlock */; + return declaration.parent.kind === 256 /* SourceFile */ || declaration.parent.kind === 226 /* ModuleBlock */; })); if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { // typeof is allowed only for static/non local functions @@ -16844,7 +17365,7 @@ var ts; } } } - function writeTypeofSymbol(type, typeFormatFlags) { + function writeTypeOfSymbol(type, typeFormatFlags) { writeKeyword(writer, 101 /* TypeOfKeyword */); writeSpace(writer); buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455 /* Value */, 0 /* None */, typeFormatFlags); @@ -16852,7 +17373,7 @@ var ts; function writeIndexSignature(info, keyword) { if (info) { if (info.isReadonly) { - writeKeyword(writer, 127 /* ReadonlyKeyword */); + writeKeyword(writer, 128 /* ReadonlyKeyword */); writeSpace(writer); } writePunctuation(writer, 19 /* OpenBracketToken */); @@ -16870,7 +17391,7 @@ var ts; } function writePropertyWithModifiers(prop) { if (isReadonlySymbol(prop)) { - writeKeyword(writer, 127 /* ReadonlyKeyword */); + writeKeyword(writer, 128 /* ReadonlyKeyword */); writeSpace(writer); } buildSymbolDisplay(prop, writer); @@ -16878,6 +17399,18 @@ var ts; writePunctuation(writer, 53 /* QuestionToken */); } } + function shouldAddParenthesisAroundFunctionType(callSignature, flags) { + if (flags & 64 /* InElementType */) { + return true; + } + else if (flags & 256 /* InFirstTypeArgument */) { + // Add parenthesis around function type for the first type argument to avoid ambiguity + var typeParameters = callSignature.target && (flags & 32 /* WriteTypeArgumentsOfSignature */) ? + callSignature.target.typeParameters : callSignature.typeParameters; + return typeParameters && typeParameters.length !== 0; + } + return false; + } function writeLiteralType(type, flags) { var resolved = resolveStructuredTypeMembers(type); if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) { @@ -16887,11 +17420,12 @@ var ts; return; } if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { - if (flags & 64 /* InElementType */) { + var parenthesizeSignature = shouldAddParenthesisAroundFunctionType(resolved.callSignatures[0], flags); + if (parenthesizeSignature) { writePunctuation(writer, 17 /* OpenParenToken */); } buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8 /* WriteArrowStyleSignature */, /*kind*/ undefined, symbolStack); - if (flags & 64 /* InElementType */) { + if (parenthesizeSignature) { writePunctuation(writer, 18 /* CloseParenToken */); } return; @@ -16926,8 +17460,8 @@ var ts; writePunctuation(writer, 23 /* SemicolonToken */); writer.writeLine(); } - writeIndexSignature(resolved.stringIndexInfo, 131 /* StringKeyword */); - writeIndexSignature(resolved.numberIndexInfo, 129 /* NumberKeyword */); + writeIndexSignature(resolved.stringIndexInfo, 132 /* StringKeyword */); + writeIndexSignature(resolved.numberIndexInfo, 130 /* NumberKeyword */); for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) { var p = _e[_d]; var t = getTypeOfSymbol(p); @@ -16991,12 +17525,12 @@ var ts; } function buildBindingPatternDisplay(bindingPattern, writer, enclosingDeclaration, flags, symbolStack) { // We have to explicitly emit square bracket and bracket because these tokens are not stored inside the node. - if (bindingPattern.kind === 166 /* ObjectBindingPattern */) { + if (bindingPattern.kind === 167 /* ObjectBindingPattern */) { writePunctuation(writer, 15 /* OpenBraceToken */); buildDisplayForCommaSeparatedList(bindingPattern.elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); }); writePunctuation(writer, 16 /* CloseBraceToken */); } - else if (bindingPattern.kind === 167 /* ArrayBindingPattern */) { + else if (bindingPattern.kind === 168 /* ArrayBindingPattern */) { writePunctuation(writer, 19 /* OpenBracketToken */); var elements = bindingPattern.elements; buildDisplayForCommaSeparatedList(elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); }); @@ -17007,10 +17541,10 @@ var ts; } } function buildBindingElementDisplay(bindingElement, writer, enclosingDeclaration, flags, symbolStack) { - if (bindingElement.kind === 192 /* OmittedExpression */) { + if (bindingElement.kind === 193 /* OmittedExpression */) { return; } - ts.Debug.assert(bindingElement.kind === 168 /* BindingElement */); + ts.Debug.assert(bindingElement.kind === 169 /* BindingElement */); if (bindingElement.propertyName) { writer.writeSymbol(ts.getTextOfNode(bindingElement.propertyName), bindingElement.symbol); writePunctuation(writer, 54 /* ColonToken */); @@ -17045,12 +17579,14 @@ var ts; function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration, flags, symbolStack) { if (typeParameters && typeParameters.length) { writePunctuation(writer, 25 /* LessThanToken */); + var flags_1 = 256 /* InFirstTypeArgument */; for (var i = 0; i < typeParameters.length; i++) { if (i > 0) { writePunctuation(writer, 24 /* CommaToken */); writeSpace(writer); + flags_1 = 0 /* None */; } - buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, 0 /* None */); + buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, flags_1); } writePunctuation(writer, 27 /* GreaterThanToken */); } @@ -17141,74 +17677,74 @@ var ts; return false; function determineIfDeclarationIsVisible() { switch (node.kind) { - case 168 /* BindingElement */: + case 169 /* BindingElement */: return isDeclarationVisible(node.parent.parent); - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: if (ts.isBindingPattern(node.name) && !node.name.elements.length) { // If the binding pattern is empty, this variable declaration is not visible return false; } // Otherwise fall through - case 224 /* ModuleDeclaration */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 219 /* FunctionDeclaration */: - case 223 /* EnumDeclaration */: - case 228 /* ImportEqualsDeclaration */: + case 225 /* ModuleDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 220 /* FunctionDeclaration */: + case 224 /* EnumDeclaration */: + case 229 /* ImportEqualsDeclaration */: // external module augmentation is always visible if (ts.isExternalModuleAugmentation(node)) { return true; } - var parent_6 = getDeclarationContainer(node); + var parent_7 = getDeclarationContainer(node); // If the node is not exported or it is not ambient module element (except import declaration) if (!(ts.getCombinedNodeFlags(node) & 1 /* Export */) && - !(node.kind !== 228 /* ImportEqualsDeclaration */ && parent_6.kind !== 255 /* SourceFile */ && ts.isInAmbientContext(parent_6))) { - return isGlobalSourceFile(parent_6); + !(node.kind !== 229 /* ImportEqualsDeclaration */ && parent_7.kind !== 256 /* SourceFile */ && ts.isInAmbientContext(parent_7))) { + return isGlobalSourceFile(parent_7); } // Exported members/ambient module elements (exception import declaration) are visible if parent is visible - return isDeclarationVisible(parent_6); - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + return isDeclarationVisible(parent_7); + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: if (node.flags & (8 /* Private */ | 16 /* Protected */)) { // Private/protected properties/methods are not visible return false; } // Public properties/methods are visible if its parents are visible, so const it fall into next case statement - case 147 /* Constructor */: - case 151 /* ConstructSignature */: - case 150 /* CallSignature */: - case 152 /* IndexSignature */: - case 141 /* Parameter */: - case 225 /* ModuleBlock */: - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 158 /* TypeLiteral */: - case 154 /* TypeReference */: - case 159 /* ArrayType */: - case 160 /* TupleType */: - case 161 /* UnionType */: - case 162 /* IntersectionType */: - case 163 /* ParenthesizedType */: + case 148 /* Constructor */: + case 152 /* ConstructSignature */: + case 151 /* CallSignature */: + case 153 /* IndexSignature */: + case 142 /* Parameter */: + case 226 /* ModuleBlock */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 159 /* TypeLiteral */: + case 155 /* TypeReference */: + case 160 /* ArrayType */: + case 161 /* TupleType */: + case 162 /* UnionType */: + case 163 /* IntersectionType */: + case 164 /* ParenthesizedType */: return isDeclarationVisible(node.parent); // Default binding, import specifier and namespace import is visible // only on demand so by default it is not visible - case 230 /* ImportClause */: - case 231 /* NamespaceImport */: - case 233 /* ImportSpecifier */: + case 231 /* ImportClause */: + case 232 /* NamespaceImport */: + case 234 /* ImportSpecifier */: return false; // Type parameters are always visible - case 140 /* TypeParameter */: + case 141 /* TypeParameter */: // Source file is always visible - case 255 /* SourceFile */: + case 256 /* SourceFile */: return true; // Export assignments do not create name bindings outside the module - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return false; default: return false; @@ -17217,10 +17753,10 @@ var ts; } function collectLinkedAliases(node) { var exportSymbol; - if (node.parent && node.parent.kind === 234 /* ExportAssignment */) { + if (node.parent && node.parent.kind === 235 /* ExportAssignment */) { exportSymbol = resolveName(node.parent, node.text, 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */ | 8388608 /* Alias */, ts.Diagnostics.Cannot_find_name_0, node); } - else if (node.parent.kind === 237 /* ExportSpecifier */) { + else if (node.parent.kind === 238 /* ExportSpecifier */) { var exportSpecifier = node.parent; exportSymbol = exportSpecifier.parent.parent.moduleSpecifier ? getExternalModuleMember(exportSpecifier.parent.parent, exportSpecifier) : @@ -17242,7 +17778,7 @@ var ts; // Add the referenced top container visible var internalModuleReference = declaration.moduleReference; var firstIdentifier = getFirstIdentifier(internalModuleReference); - var importSymbol = resolveName(declaration, firstIdentifier.text, 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */, ts.Diagnostics.Cannot_find_name_0, firstIdentifier); + var importSymbol = resolveName(declaration, firstIdentifier.text, 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */, undefined, undefined); if (importSymbol) { buildVisibleNodeList(importSymbol.declarations); } @@ -17314,12 +17850,12 @@ var ts; node = ts.getRootDeclaration(node); while (node) { switch (node.kind) { - case 217 /* VariableDeclaration */: - case 218 /* VariableDeclarationList */: - case 233 /* ImportSpecifier */: - case 232 /* NamedImports */: - case 231 /* NamespaceImport */: - case 230 /* ImportClause */: + case 218 /* VariableDeclaration */: + case 219 /* VariableDeclarationList */: + case 234 /* ImportSpecifier */: + case 233 /* NamedImports */: + case 232 /* NamespaceImport */: + case 231 /* ImportClause */: node = node.parent; break; default: @@ -17356,7 +17892,7 @@ var ts; case 9 /* StringLiteral */: case 8 /* NumericLiteral */: return name.text; - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: if (ts.isStringOrNumericLiteral(name.expression.kind)) { return name.expression.text; } @@ -17364,7 +17900,7 @@ var ts; return undefined; } function isComputedNonLiteralName(name) { - return name.kind === 139 /* ComputedPropertyName */ && !ts.isStringOrNumericLiteral(name.expression.kind); + return name.kind === 140 /* ComputedPropertyName */ && !ts.isStringOrNumericLiteral(name.expression.kind); } /** Return the inferred type for a binding element */ function getTypeForBindingElement(declaration) { @@ -17384,7 +17920,7 @@ var ts; return parentType; } var type; - if (pattern.kind === 166 /* ObjectBindingPattern */) { + if (pattern.kind === 167 /* ObjectBindingPattern */) { // Use explicitly specified property name ({ p: xxx } form), or otherwise the implied name ({ p } form) var name_10 = declaration.propertyName || declaration.name; if (isComputedNonLiteralName(name_10)) { @@ -17434,7 +17970,7 @@ var ts; // In strict null checking mode, if a default value of a non-undefined type is specified, remove // undefined from the final type. if (strictNullChecks && declaration.initializer && !(getNullableKind(checkExpressionCached(declaration.initializer)) & 32 /* Undefined */)) { - type = removeNullableKind(type, 32 /* Undefined */); + type = getTypeWithFacts(type, 131072 /* NEUndefined */); } return type; } @@ -17450,16 +17986,16 @@ var ts; if (typeTag && typeTag.typeExpression) { return typeTag.typeExpression.type; } - if (declaration.kind === 217 /* VariableDeclaration */ && - declaration.parent.kind === 218 /* VariableDeclarationList */ && - declaration.parent.parent.kind === 199 /* VariableStatement */) { + if (declaration.kind === 218 /* VariableDeclaration */ && + declaration.parent.kind === 219 /* VariableDeclarationList */ && + declaration.parent.parent.kind === 200 /* VariableStatement */) { // @type annotation might have been on the variable statement, try that instead. var annotation = ts.getJSDocTypeTag(declaration.parent.parent); if (annotation && annotation.typeExpression) { return annotation.typeExpression.type; } } - else if (declaration.kind === 141 /* Parameter */) { + else if (declaration.kind === 142 /* Parameter */) { // If it's a parameter, see if the parent has a jsdoc comment with an @param // annotation. var paramTag = ts.getCorrespondingJSDocParameterTag(declaration); @@ -17469,6 +18005,9 @@ var ts; } return undefined; } + function addOptionality(type, optional) { + return strictNullChecks && optional ? addNullableKind(type, 32 /* Undefined */) : type; + } // Return the inferred type for a variable, parameter, or property declaration function getTypeForVariableLikeDeclaration(declaration) { if (declaration.flags & 134217728 /* JavaScriptFile */) { @@ -17481,10 +18020,10 @@ var ts; } } // A variable declared in a for..in statement is always of type string - if (declaration.parent.parent.kind === 206 /* ForInStatement */) { + if (declaration.parent.parent.kind === 207 /* ForInStatement */) { return stringType; } - if (declaration.parent.parent.kind === 207 /* ForOfStatement */) { + if (declaration.parent.parent.kind === 208 /* ForOfStatement */) { // checkRightHandSideOfForOf will return undefined if the for-of expression type was // missing properties/signatures required to get its iteratedType (like // [Symbol.iterator] or next). This may be because we accessed properties from anyType, @@ -17496,16 +18035,20 @@ var ts; } // Use type from type annotation if one is present if (declaration.type) { - var type = getTypeFromTypeNode(declaration.type); - return strictNullChecks && declaration.questionToken ? addNullableKind(type, 32 /* Undefined */) : type; + return addOptionality(getTypeFromTypeNode(declaration.type), /*optional*/ !!declaration.questionToken); } - if (declaration.kind === 141 /* Parameter */) { + if (declaration.kind === 142 /* Parameter */) { var func = declaration.parent; // For a parameter of a set accessor, use the type of the get accessor if one is present - if (func.kind === 149 /* SetAccessor */ && !ts.hasDynamicName(func)) { - var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 148 /* GetAccessor */); + if (func.kind === 150 /* SetAccessor */ && !ts.hasDynamicName(func)) { + var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 149 /* GetAccessor */); if (getter) { - return getReturnTypeOfSignature(getSignatureFromDeclaration(getter)); + var signature = getSignatureFromDeclaration(getter); + var thisParameter = getAccessorThisParameter(func); + if (thisParameter && declaration === thisParameter) { + return signature.thisType; + } + return getReturnTypeOfSignature(signature); } } // Use contextual parameter type if one is available @@ -17513,15 +18056,15 @@ var ts; ? getContextuallyTypedThisType(func) : getContextuallyTypedParameterType(declaration); if (type) { - return strictNullChecks && declaration.questionToken ? addNullableKind(type, 32 /* Undefined */) : type; + return addOptionality(type, /*optional*/ !!declaration.questionToken); } } // Use the type of the initializer expression if one is present if (declaration.initializer) { - return checkExpressionCached(declaration.initializer); + return addOptionality(checkExpressionCached(declaration.initializer), /*optional*/ !!declaration.questionToken); } // If it is a short-hand property assignment, use the type of the identifier - if (declaration.kind === 253 /* ShorthandPropertyAssignment */) { + if (declaration.kind === 254 /* ShorthandPropertyAssignment */) { return checkIdentifier(declaration.name); } // If the declaration specifies a binding pattern, use the type implied by the binding pattern @@ -17543,7 +18086,7 @@ var ts; if (ts.isBindingPattern(element.name)) { return getTypeFromBindingPattern(element.name, includePatternInType); } - if (compilerOptions.noImplicitAny) { + if (compilerOptions.noImplicitAny && !declarationBelongsToPrivateAmbientMember(element)) { reportImplicitAnyError(element, anyType); } return anyType; @@ -17582,7 +18125,7 @@ var ts; return languageVersion >= 2 /* ES6 */ ? createIterableType(anyType) : anyArrayType; } // If the pattern has at least one element, and no rest element, then it should imply a tuple type. - var elementTypes = ts.map(elements, function (e) { return e.kind === 192 /* OmittedExpression */ ? anyType : getTypeFromBindingElement(e, includePatternInType); }); + var elementTypes = ts.map(elements, function (e) { return e.kind === 193 /* OmittedExpression */ ? anyType : getTypeFromBindingElement(e, includePatternInType); }); if (includePatternInType) { var result = createNewTupleType(elementTypes); result.pattern = pattern; @@ -17598,7 +18141,7 @@ var ts; // parameter with no type annotation or initializer, the type implied by the binding pattern becomes the type of // the parameter. function getTypeFromBindingPattern(pattern, includePatternInType) { - return pattern.kind === 166 /* ObjectBindingPattern */ + return pattern.kind === 167 /* ObjectBindingPattern */ ? getTypeFromObjectBindingPattern(pattern, includePatternInType) : getTypeFromArrayBindingPattern(pattern, includePatternInType); } @@ -17620,7 +18163,7 @@ var ts; // During a normal type check we'll never get to here with a property assignment (the check of the containing // object literal uses a different path). We exclude widening only so that language services and type verification // tools see the actual type. - if (declaration.kind === 252 /* PropertyAssignment */) { + if (declaration.kind === 253 /* PropertyAssignment */) { return type; } return getWidenedType(type); @@ -17629,13 +18172,17 @@ var ts; type = declaration.dotDotDotToken ? anyArrayType : anyType; // Report implicit any errors unless this is a private property within an ambient declaration if (reportErrors && compilerOptions.noImplicitAny) { - var root = ts.getRootDeclaration(declaration); - if (!isPrivateWithinAmbient(root) && !(root.kind === 141 /* Parameter */ && isPrivateWithinAmbient(root.parent))) { + if (!declarationBelongsToPrivateAmbientMember(declaration)) { reportImplicitAnyError(declaration, type); } } return type; } + function declarationBelongsToPrivateAmbientMember(declaration) { + var root = ts.getRootDeclaration(declaration); + var memberDeclaration = root.kind === 142 /* Parameter */ ? root.parent : root; + return isPrivateWithinAmbient(memberDeclaration); + } function getTypeOfVariableOrParameterOrProperty(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { @@ -17645,21 +18192,21 @@ var ts; } // Handle catch clause variables var declaration = symbol.valueDeclaration; - if (declaration.parent.kind === 251 /* CatchClause */) { + if (declaration.parent.kind === 252 /* CatchClause */) { return links.type = anyType; } // Handle export default expressions - if (declaration.kind === 234 /* ExportAssignment */) { + if (declaration.kind === 235 /* ExportAssignment */) { return links.type = checkExpression(declaration.expression); } // Handle module.exports = expr - if (declaration.kind === 186 /* BinaryExpression */) { + if (declaration.kind === 187 /* BinaryExpression */) { return links.type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); } - if (declaration.kind === 171 /* PropertyAccessExpression */) { + if (declaration.kind === 172 /* PropertyAccessExpression */) { // Declarations only exist for property access expressions for certain // special assignment kinds - if (declaration.parent.kind === 186 /* BinaryExpression */) { + if (declaration.parent.kind === 187 /* BinaryExpression */) { // Handle exports.p = expr or this.p = expr or className.prototype.method = expr return links.type = checkExpressionCached(declaration.parent.right); } @@ -17689,7 +18236,7 @@ var ts; } function getAnnotatedAccessorType(accessor) { if (accessor) { - if (accessor.kind === 148 /* GetAccessor */) { + if (accessor.kind === 149 /* GetAccessor */) { return accessor.type && getTypeFromTypeNode(accessor.type); } else { @@ -17699,11 +18246,20 @@ var ts; } return undefined; } + function getAnnotatedAccessorThisType(accessor) { + if (accessor) { + var parameter = getAccessorThisParameter(accessor); + if (parameter && parameter.type) { + return getTypeFromTypeNode(accessor.parameters[0].type); + } + } + return undefined; + } function getTypeOfAccessors(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - var getter = ts.getDeclarationOfKind(symbol, 148 /* GetAccessor */); - var setter = ts.getDeclarationOfKind(symbol, 149 /* SetAccessor */); + var getter = ts.getDeclarationOfKind(symbol, 149 /* GetAccessor */); + var setter = ts.getDeclarationOfKind(symbol, 150 /* SetAccessor */); if (getter && getter.flags & 134217728 /* JavaScriptFile */) { var jsDocType = getTypeForVariableLikeDeclarationFromJSDocComment(getter); if (jsDocType) { @@ -17741,7 +18297,7 @@ var ts; if (!popTypeResolution()) { type = anyType; if (compilerOptions.noImplicitAny) { - var getter_1 = ts.getDeclarationOfKind(symbol, 148 /* GetAccessor */); + var getter_1 = ts.getDeclarationOfKind(symbol, 149 /* GetAccessor */); 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)); } } @@ -17752,7 +18308,9 @@ var ts; function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - links.type = createObjectType(65536 /* Anonymous */, symbol); + var type = createObjectType(65536 /* Anonymous */, symbol); + links.type = strictNullChecks && symbol.flags & 536870912 /* Optional */ ? + addNullableKind(type, 32 /* Undefined */) : type; } return links.type; } @@ -17841,9 +18399,9 @@ var ts; if (!node) { return typeParameters; } - if (node.kind === 220 /* ClassDeclaration */ || node.kind === 191 /* ClassExpression */ || - node.kind === 219 /* FunctionDeclaration */ || node.kind === 178 /* FunctionExpression */ || - node.kind === 146 /* MethodDeclaration */ || node.kind === 179 /* ArrowFunction */) { + if (node.kind === 221 /* ClassDeclaration */ || node.kind === 192 /* ClassExpression */ || + node.kind === 220 /* FunctionDeclaration */ || node.kind === 179 /* FunctionExpression */ || + node.kind === 147 /* MethodDeclaration */ || node.kind === 180 /* ArrowFunction */) { var declarations = node.typeParameters; if (declarations) { return appendTypeParameters(appendOuterTypeParameters(typeParameters, node), declarations); @@ -17853,7 +18411,7 @@ var ts; } // The outer type parameters are those defined by enclosing generic classes, methods, or functions. function getOuterTypeParametersOfClassOrInterface(symbol) { - var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 221 /* InterfaceDeclaration */); + var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 222 /* InterfaceDeclaration */); return appendOuterTypeParameters(undefined, declaration); } // The local type parameters are the combined set of type parameters from all declarations of the class, @@ -17862,8 +18420,8 @@ var ts; var result; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var node = _a[_i]; - if (node.kind === 221 /* InterfaceDeclaration */ || node.kind === 220 /* ClassDeclaration */ || - node.kind === 191 /* ClassExpression */ || node.kind === 222 /* TypeAliasDeclaration */) { + if (node.kind === 222 /* InterfaceDeclaration */ || node.kind === 221 /* ClassDeclaration */ || + node.kind === 192 /* ClassExpression */ || node.kind === 223 /* TypeAliasDeclaration */) { var declaration = node; if (declaration.typeParameters) { result = appendTypeParameters(result, declaration.typeParameters); @@ -18003,7 +18561,7 @@ var ts; type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray; for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 221 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) { + if (declaration.kind === 222 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) { for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) { var node = _c[_b]; var baseType = getTypeFromTypeNode(node); @@ -18035,7 +18593,7 @@ var ts; function isIndependentInterface(symbol) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 221 /* InterfaceDeclaration */) { + if (declaration.kind === 222 /* InterfaceDeclaration */) { if (declaration.flags & 16384 /* ContainsThis */) { return false; } @@ -18091,7 +18649,7 @@ var ts; if (!pushTypeResolution(symbol, 2 /* DeclaredType */)) { return unknownType; } - var declaration = ts.getDeclarationOfKind(symbol, 222 /* TypeAliasDeclaration */); + var declaration = ts.getDeclarationOfKind(symbol, 223 /* TypeAliasDeclaration */); var type = getTypeFromTypeNode(declaration.type); if (popTypeResolution()) { links.typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); @@ -18124,7 +18682,7 @@ var ts; if (!links.declaredType) { var type = createType(512 /* TypeParameter */); type.symbol = symbol; - if (!ts.getDeclarationOfKind(symbol, 140 /* TypeParameter */).constraint) { + if (!ts.getDeclarationOfKind(symbol, 141 /* TypeParameter */).constraint) { type.constraint = noConstraintType; } links.declaredType = type; @@ -18175,18 +18733,19 @@ var ts; function isIndependentType(node) { switch (node.kind) { case 117 /* AnyKeyword */: - case 131 /* StringKeyword */: - case 129 /* NumberKeyword */: + case 132 /* StringKeyword */: + case 130 /* NumberKeyword */: case 120 /* BooleanKeyword */: - case 132 /* SymbolKeyword */: + case 133 /* SymbolKeyword */: case 103 /* VoidKeyword */: - case 134 /* UndefinedKeyword */: + case 135 /* UndefinedKeyword */: case 93 /* NullKeyword */: - case 165 /* StringLiteralType */: + case 127 /* NeverKeyword */: + case 166 /* StringLiteralType */: return true; - case 159 /* ArrayType */: + case 160 /* ArrayType */: return isIndependentType(node.elementType); - case 154 /* TypeReference */: + case 155 /* TypeReference */: return isIndependentTypeReference(node); } return false; @@ -18199,7 +18758,7 @@ var ts; // A function-like declaration is considered independent (free of this references) if it has a return type // annotation that is considered independent and if each parameter is considered independent. function isIndependentFunctionLikeDeclaration(node) { - if (node.kind !== 147 /* Constructor */ && (!node.type || !isIndependentType(node.type))) { + if (node.kind !== 148 /* Constructor */ && (!node.type || !isIndependentType(node.type))) { return false; } for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) { @@ -18220,12 +18779,12 @@ var ts; var declaration = symbol.declarations[0]; if (declaration) { switch (declaration.kind) { - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return isIndependentVariableLikeDeclaration(declaration); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: return isIndependentFunctionLikeDeclaration(declaration); } } @@ -18761,7 +19320,9 @@ var ts; propTypes.push(getTypeOfSymbol(prop)); } } - return getUnionType(propTypes); + if (propTypes.length) { + return getUnionType(propTypes); + } } return undefined; } @@ -18797,7 +19358,7 @@ var ts; } function isOptionalParameter(node) { if (node.flags & 134217728 /* JavaScriptFile */) { - if (node.type && node.type.kind === 267 /* JSDocOptionalType */) { + if (node.type && node.type.kind === 268 /* JSDocOptionalType */) { return true; } var paramTag = ts.getCorrespondingJSDocParameterTag(node); @@ -18806,7 +19367,7 @@ var ts; return true; } if (paramTag.typeExpression) { - return paramTag.typeExpression.type.kind === 267 /* JSDocOptionalType */; + return paramTag.typeExpression.type.kind === 268 /* JSDocOptionalType */; } } } @@ -18842,20 +19403,12 @@ var ts; function getSignatureFromDeclaration(declaration) { var links = getNodeLinks(declaration); if (!links.resolvedSignature) { - var classType = declaration.kind === 147 /* Constructor */ ? - getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol)) - : undefined; - var typeParameters = classType ? classType.localTypeParameters : - declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : - getTypeParametersFromJSDocTemplate(declaration); var parameters = []; var hasStringLiterals = false; var minArgumentCount = -1; var thisType = undefined; var hasThisParameter = void 0; var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); - var returnType = undefined; - var typePredicate = undefined; // If this is a JSDoc construct signature, then skip the first parameter in the // parameter list. The first parameter represents the return type of the construct // signature. @@ -18874,7 +19427,7 @@ var ts; else { parameters.push(paramSymbol); } - if (param.type && param.type.kind === 165 /* StringLiteralType */) { + if (param.type && param.type.kind === 166 /* StringLiteralType */) { hasStringLiterals = true; } if (param.initializer || param.questionToken || param.dotDotDotToken) { @@ -18887,43 +19440,60 @@ var ts; minArgumentCount = -1; } } + // If only one accessor includes a this-type annotation, the other behaves as if it had the same type annotation + if ((declaration.kind === 149 /* GetAccessor */ || declaration.kind === 150 /* SetAccessor */) && + !ts.hasDynamicName(declaration) && + (!hasThisParameter || thisType === unknownType)) { + var otherKind = declaration.kind === 149 /* GetAccessor */ ? 150 /* SetAccessor */ : 149 /* GetAccessor */; + var setter = ts.getDeclarationOfKind(declaration.symbol, otherKind); + thisType = getAnnotatedAccessorThisType(setter); + } if (minArgumentCount < 0) { minArgumentCount = declaration.parameters.length - (hasThisParameter ? 1 : 0); } if (isJSConstructSignature) { minArgumentCount--; - returnType = getTypeFromTypeNode(declaration.parameters[0].type); - } - else if (classType) { - returnType = classType; - } - else if (declaration.type) { - returnType = getTypeFromTypeNode(declaration.type); - if (declaration.type.kind === 153 /* TypePredicate */) { - typePredicate = createTypePredicateFromTypePredicateNode(declaration.type); - } - } - else { - if (declaration.flags & 134217728 /* JavaScriptFile */) { - var type = getReturnTypeFromJSDocComment(declaration); - if (type && type !== unknownType) { - returnType = type; - } - } - // TypeScript 1.0 spec (April 2014): - // If only one accessor includes a type annotation, the other behaves as if it had the same type annotation. - if (declaration.kind === 148 /* GetAccessor */ && !ts.hasDynamicName(declaration)) { - var setter = ts.getDeclarationOfKind(declaration.symbol, 149 /* SetAccessor */); - returnType = getAnnotatedAccessorType(setter); - } - if (!returnType && ts.nodeIsMissing(declaration.body)) { - returnType = anyType; - } } + var classType = declaration.kind === 148 /* Constructor */ ? + getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol)) + : undefined; + var typeParameters = classType ? classType.localTypeParameters : + declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : + getTypeParametersFromJSDocTemplate(declaration); + var returnType = getSignatureReturnTypeFromDeclaration(declaration, minArgumentCount, isJSConstructSignature, classType); + var typePredicate = declaration.type && declaration.type.kind === 154 /* TypePredicate */ ? + createTypePredicateFromTypePredicateNode(declaration.type) : + undefined; links.resolvedSignature = createSignature(declaration, typeParameters, thisType, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); } return links.resolvedSignature; } + function getSignatureReturnTypeFromDeclaration(declaration, minArgumentCount, isJSConstructSignature, classType) { + if (isJSConstructSignature) { + return getTypeFromTypeNode(declaration.parameters[0].type); + } + else if (classType) { + return classType; + } + else if (declaration.type) { + return getTypeFromTypeNode(declaration.type); + } + if (declaration.flags & 134217728 /* JavaScriptFile */) { + var type = getReturnTypeFromJSDocComment(declaration); + if (type && type !== unknownType) { + return type; + } + } + // TypeScript 1.0 spec (April 2014): + // If only one accessor includes a type annotation, the other behaves as if it had the same type annotation. + if (declaration.kind === 149 /* GetAccessor */ && !ts.hasDynamicName(declaration)) { + var setter = ts.getDeclarationOfKind(declaration.symbol, 150 /* SetAccessor */); + return getAnnotatedAccessorType(setter); + } + if (ts.nodeIsMissing(declaration.body)) { + return anyType; + } + } function getSignaturesOfSymbol(symbol) { if (!symbol) return emptyArray; @@ -18931,20 +19501,20 @@ var ts; for (var i = 0, len = symbol.declarations.length; i < len; i++) { var node = symbol.declarations[i]; switch (node.kind) { - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 268 /* JSDocFunctionType */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 269 /* JSDocFunctionType */: // Don't include signature if node is the implementation of an overloaded function. A node is considered // an implementation node if it has a body and the previous node is of the same kind and immediately // precedes the implementation node (i.e. has the same parent and ends where the implementation starts). @@ -19016,12 +19586,7 @@ var ts; if (!signature.typeParameters) return signature; if (!signature.erasedSignatureCache) { - if (signature.target) { - signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper); - } - else { - signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), /*eraseTypeParameters*/ true); - } + signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), /*eraseTypeParameters*/ true); } return signature.erasedSignatureCache; } @@ -19031,7 +19596,7 @@ var ts; // object type literal or interface (using the new keyword). Each way of declaring a constructor // will result in a different declaration kind. if (!signature.isolatedSignatureType) { - var isConstructor = signature.declaration.kind === 147 /* Constructor */ || signature.declaration.kind === 151 /* ConstructSignature */; + var isConstructor = signature.declaration.kind === 148 /* Constructor */ || signature.declaration.kind === 152 /* ConstructSignature */; var type = createObjectType(65536 /* Anonymous */ | 262144 /* FromSignature */); type.members = emptySymbols; type.properties = emptyArray; @@ -19045,7 +19610,7 @@ var ts; return symbol.members["__index"]; } function getIndexDeclarationOfSymbol(symbol, kind) { - var syntaxKind = kind === 1 /* Number */ ? 129 /* NumberKeyword */ : 131 /* StringKeyword */; + var syntaxKind = kind === 1 /* Number */ ? 130 /* NumberKeyword */ : 132 /* StringKeyword */; var indexSymbol = getIndexSymbol(symbol); if (indexSymbol) { for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) { @@ -19072,7 +19637,7 @@ var ts; return undefined; } function getConstraintDeclaration(type) { - return ts.getDeclarationOfKind(type.symbol, 140 /* TypeParameter */).constraint; + return ts.getDeclarationOfKind(type.symbol, 141 /* TypeParameter */).constraint; } function hasConstraintReferenceTo(type, target) { var checked; @@ -19105,7 +19670,7 @@ var ts; return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint; } function getParentSymbolOfTypeParameter(typeParameter) { - return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 140 /* TypeParameter */).parent); + return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 141 /* TypeParameter */).parent); } function getTypeListId(types) { if (types) { @@ -19205,11 +19770,11 @@ var ts; } function getTypeReferenceName(node) { switch (node.kind) { - case 154 /* TypeReference */: + case 155 /* TypeReference */: return node.typeName; - case 266 /* JSDocTypeReference */: + case 267 /* JSDocTypeReference */: return node.name; - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: // We only support expressions that are simple qualified names. For other // expressions this produces undefined. if (ts.isSupportedExpressionWithTypeArguments(node)) { @@ -19234,7 +19799,7 @@ var ts; if (symbol.flags & 524288 /* TypeAlias */) { return getTypeFromTypeAliasReference(node, symbol); } - if (symbol.flags & 107455 /* Value */ && node.kind === 266 /* JSDocTypeReference */) { + if (symbol.flags & 107455 /* Value */ && node.kind === 267 /* JSDocTypeReference */) { // A JSDocTypeReference may have resolved to a value (as opposed to a type). In // that case, the type of this reference is just the type of the value we resolved // to. @@ -19247,7 +19812,7 @@ var ts; if (!links.resolvedType) { var symbol = void 0; var type = void 0; - if (node.kind === 266 /* JSDocTypeReference */) { + if (node.kind === 267 /* JSDocTypeReference */) { var typeReferenceName = getTypeReferenceName(node); symbol = resolveTypeReferenceName(node, typeReferenceName); type = getTypeReferenceType(node, symbol); @@ -19256,7 +19821,7 @@ var ts; } else { // We only support expressions that are simple qualified names. For other expressions this produces undefined. - var typeNameOrExpression = node.kind === 154 /* TypeReference */ ? node.typeName : + var typeNameOrExpression = node.kind === 155 /* TypeReference */ ? node.typeName : ts.isSupportedExpressionWithTypeArguments(node) ? node.expression : undefined; symbol = typeNameOrExpression && resolveEntityName(typeNameOrExpression, 793056 /* Type */) || unknownSymbol; @@ -19289,9 +19854,9 @@ var ts; for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) { var declaration = declarations_3[_i]; switch (declaration.kind) { - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: return declaration; } } @@ -19392,7 +19957,7 @@ var ts; if (type.flags & 64 /* Null */) typeSet.containsNull = true; } - else if (!ts.contains(typeSet, type)) { + else if (type !== neverType && !ts.contains(typeSet, type)) { typeSet.push(type); } } @@ -19430,7 +19995,10 @@ var ts; // a named type that circularly references itself. function getUnionType(types, noSubtypeReduction) { if (types.length === 0) { - return emptyUnionType; + return neverType; + } + if (types.length === 1) { + return types[0]; } var typeSet = []; addTypesToSet(typeSet, types, 16384 /* Union */); @@ -19447,7 +20015,9 @@ var ts; removeSubtypes(typeSet); } if (typeSet.length === 0) { - return typeSet.containsNull ? nullType : undefinedType; + return typeSet.containsNull ? nullType : + typeSet.containsUndefined ? undefinedType : + neverType; } else if (typeSet.length === 1) { return typeSet[0]; @@ -19526,7 +20096,7 @@ var ts; function getTypeFromStringLiteralTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { - links.resolvedType = getStringLiteralTypeForText(node.text); + links.resolvedType = getStringLiteralTypeForText(ts.unescapeIdentifier(node.text)); } return links.resolvedType; } @@ -19549,9 +20119,9 @@ var ts; function getThisType(node) { var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false); var parent = container && container.parent; - if (parent && (ts.isClassLike(parent) || parent.kind === 221 /* InterfaceDeclaration */)) { + if (parent && (ts.isClassLike(parent) || parent.kind === 222 /* InterfaceDeclaration */)) { if (!(container.flags & 32 /* Static */) && - (container.kind !== 147 /* Constructor */ || ts.isNodeDescendentOf(node, container.body))) { + (container.kind !== 148 /* Constructor */ || ts.isNodeDescendentOf(node, container.body))) { return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType; } } @@ -19568,68 +20138,71 @@ var ts; function getTypeFromTypeNode(node) { switch (node.kind) { case 117 /* AnyKeyword */: - case 257 /* JSDocAllType */: - case 258 /* JSDocUnknownType */: + case 258 /* JSDocAllType */: + case 259 /* JSDocUnknownType */: return anyType; - case 131 /* StringKeyword */: + case 132 /* StringKeyword */: return stringType; - case 129 /* NumberKeyword */: + case 130 /* NumberKeyword */: return numberType; case 120 /* BooleanKeyword */: return booleanType; - case 132 /* SymbolKeyword */: + case 133 /* SymbolKeyword */: return esSymbolType; case 103 /* VoidKeyword */: return voidType; - case 134 /* UndefinedKeyword */: + case 135 /* UndefinedKeyword */: return undefinedType; case 93 /* NullKeyword */: return nullType; - case 164 /* ThisType */: + case 127 /* NeverKeyword */: + return neverType; + case 165 /* ThisType */: + case 97 /* ThisKeyword */: return getTypeFromThisTypeNode(node); - case 165 /* StringLiteralType */: + case 166 /* StringLiteralType */: return getTypeFromStringLiteralTypeNode(node); - case 154 /* TypeReference */: - case 266 /* JSDocTypeReference */: + case 155 /* TypeReference */: + case 267 /* JSDocTypeReference */: return getTypeFromTypeReference(node); - case 153 /* TypePredicate */: + case 154 /* TypePredicate */: return booleanType; - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: return getTypeFromTypeReference(node); - case 157 /* TypeQuery */: + case 158 /* TypeQuery */: return getTypeFromTypeQueryNode(node); - case 159 /* ArrayType */: - case 259 /* JSDocArrayType */: + case 160 /* ArrayType */: + case 260 /* JSDocArrayType */: return getTypeFromArrayTypeNode(node); - case 160 /* TupleType */: + case 161 /* TupleType */: return getTypeFromTupleTypeNode(node); - case 161 /* UnionType */: - case 260 /* JSDocUnionType */: + case 162 /* UnionType */: + case 261 /* JSDocUnionType */: return getTypeFromUnionTypeNode(node); - case 162 /* IntersectionType */: + case 163 /* IntersectionType */: return getTypeFromIntersectionTypeNode(node); - case 163 /* ParenthesizedType */: - case 262 /* JSDocNullableType */: - case 263 /* JSDocNonNullableType */: - case 270 /* JSDocConstructorType */: - case 271 /* JSDocThisType */: - case 267 /* JSDocOptionalType */: + case 164 /* ParenthesizedType */: + case 263 /* JSDocNullableType */: + case 264 /* JSDocNonNullableType */: + case 271 /* JSDocConstructorType */: + case 272 /* JSDocThisType */: + case 268 /* JSDocOptionalType */: return getTypeFromTypeNode(node.type); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 158 /* TypeLiteral */: - case 268 /* JSDocFunctionType */: - case 264 /* JSDocRecordType */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 159 /* TypeLiteral */: + case 269 /* JSDocFunctionType */: + case 265 /* JSDocRecordType */: return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); // This function assumes that an identifier or qualified name is a type expression // Callers should first ensure this by calling isTypeNode case 69 /* Identifier */: - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: var symbol = getSymbolAtLocation(node); return symbol && getDeclaredTypeOfSymbol(symbol); - case 261 /* JSDocTupleType */: + case 262 /* JSDocTupleType */: return getTypeFromJSDocTupleType(node); - case 269 /* JSDocVariadicType */: + case 270 /* JSDocVariadicType */: return getTypeFromJSDocVariadicType(node); default: return unknownType; @@ -19789,41 +20362,41 @@ var ts; var node = symbol.declarations[0].parent; while (node) { switch (node.kind) { - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 221 /* InterfaceDeclaration */: - case 222 /* TypeAliasDeclaration */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: var declaration = node; if (declaration.typeParameters) { for (var _i = 0, _a = declaration.typeParameters; _i < _a.length; _i++) { var d = _a[_i]; - if (ts.contains(mappedTypes, getDeclaredTypeOfTypeParameter(d.symbol))) { + if (ts.contains(mappedTypes, getDeclaredTypeOfTypeParameter(getSymbolOfNode(d)))) { return true; } } } - if (ts.isClassLike(node) || node.kind === 221 /* InterfaceDeclaration */) { + if (ts.isClassLike(node) || node.kind === 222 /* InterfaceDeclaration */) { var thisType = getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType; if (thisType && ts.contains(mappedTypes, thisType)) { return true; } } break; - case 224 /* ModuleDeclaration */: - case 255 /* SourceFile */: + case 225 /* ModuleDeclaration */: + case 256 /* SourceFile */: return false; } node = node.parent; @@ -19868,36 +20441,39 @@ var ts; // Returns true if the given expression contains (at any level of nesting) a function or arrow expression // that is subject to contextual typing. function isContextSensitive(node) { - ts.Debug.assert(node.kind !== 146 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 147 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); switch (node.kind) { - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return isContextSensitiveFunctionLikeDeclaration(node); - case 170 /* ObjectLiteralExpression */: + case 171 /* ObjectLiteralExpression */: return ts.forEach(node.properties, isContextSensitive); - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: return ts.forEach(node.elements, isContextSensitive); - case 187 /* ConditionalExpression */: + case 188 /* ConditionalExpression */: return isContextSensitive(node.whenTrue) || isContextSensitive(node.whenFalse); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return node.operatorToken.kind === 52 /* BarBarToken */ && (isContextSensitive(node.left) || isContextSensitive(node.right)); - case 252 /* PropertyAssignment */: + case 253 /* PropertyAssignment */: return isContextSensitive(node.initializer); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: return isContextSensitiveFunctionLikeDeclaration(node); - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return isContextSensitive(node.expression); } return false; } function isContextSensitiveFunctionLikeDeclaration(node) { var areAllParametersUntyped = !ts.forEach(node.parameters, function (p) { return p.type; }); - var isNullaryArrow = node.kind === 179 /* ArrowFunction */ && !node.parameters.length; + var isNullaryArrow = node.kind === 180 /* ArrowFunction */ && !node.parameters.length; return !node.typeParameters && areAllParametersUntyped && !isNullaryArrow; } + function isContextSensitiveFunctionOrObjectLiteralMethod(func) { + return (isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) && isContextSensitiveFunctionLikeDeclaration(func); + } function getTypeWithoutSignatures(type) { if (type.flags & 80896 /* ObjectType */) { var resolved = resolveStructuredTypeMembers(type); @@ -20142,33 +20718,35 @@ var ts; if (relation === identityRelation) { return isIdenticalTo(source, target); } - if (isTypeAny(target)) - return -1 /* True */; - if (source.flags & 32 /* Undefined */) { - if (!strictNullChecks || target.flags & (32 /* Undefined */ | 16 /* Void */) || source === emptyArrayElementType) + if (!(target.flags & 134217728 /* Never */)) { + if (target.flags & 1 /* Any */) return -1 /* True */; - } - if (source.flags & 64 /* Null */) { - if (!strictNullChecks || target.flags & 64 /* Null */) - return -1 /* True */; - } - if (source.flags & 128 /* Enum */ && target === numberType) - return -1 /* True */; - if (source.flags & 128 /* Enum */ && target.flags & 128 /* Enum */) { - if (result = enumRelatedTo(source, target, reportErrors)) { - return result; + if (source.flags & 32 /* Undefined */) { + if (!strictNullChecks || target.flags & (32 /* Undefined */ | 16 /* Void */) || source === emptyArrayElementType) + return -1 /* True */; } - } - if (source.flags & 256 /* StringLiteral */ && target === stringType) - return -1 /* True */; - if (relation === assignableRelation || relation === comparableRelation) { - if (isTypeAny(source)) + if (source.flags & 64 /* Null */) { + if (!strictNullChecks || target.flags & 64 /* Null */) + return -1 /* True */; + } + if (source.flags & 128 /* Enum */ && target === numberType) return -1 /* True */; - if (source === numberType && target.flags & 128 /* Enum */) + if (source.flags & 128 /* Enum */ && target.flags & 128 /* Enum */) { + if (result = enumRelatedTo(source, target, reportErrors)) { + return result; + } + } + if (source.flags & 256 /* StringLiteral */ && target === stringType) return -1 /* True */; - } - if (source.flags & 8 /* Boolean */ && target.flags & 8 /* Boolean */) { - return -1 /* True */; + if (relation === assignableRelation || relation === comparableRelation) { + if (source.flags & (1 /* Any */ | 134217728 /* Never */)) + return -1 /* True */; + if (source === numberType && target.flags & 128 /* Enum */) + return -1 /* True */; + } + if (source.flags & 8 /* Boolean */ && target.flags & 8 /* Boolean */) { + return -1 /* True */; + } } if (source.flags & 1048576 /* FreshObjectLiteral */) { if (hasExcessProperties(source, target, reportErrors)) { @@ -20237,6 +20815,8 @@ var ts; if (!constraint || constraint.flags & 1 /* Any */) { constraint = emptyObjectType; } + // The constraint may need to be further instantiated with its 'this' type. + constraint = getTypeWithThisArgument(constraint, source); // Report constraint errors only if the constraint is not the empty object type var reportConstraintErrors = reportErrors && constraint !== emptyObjectType; if (result = isRelatedTo(constraint, target, reportConstraintErrors)) { @@ -20300,7 +20880,7 @@ var ts; if (type.flags & 80896 /* ObjectType */) { var resolved = resolveStructuredTypeMembers(type); if ((relation === assignableRelation || relation === comparableRelation) && - (type === globalObjectType || resolved.properties.length === 0) || + (type === globalObjectType || isEmptyObjectType(resolved)) || resolved.stringIndexInfo || resolved.numberIndexInfo || getPropertyOfType(type, name)) { return true; } @@ -20315,6 +20895,13 @@ var ts; } return false; } + function isEmptyObjectType(t) { + return t.properties.length === 0 && + t.callSignatures.length === 0 && + t.constructSignatures.length === 0 && + !t.stringIndexInfo && + !t.numberIndexInfo; + } function hasExcessProperties(source, target, reportErrors) { if (!(target.flags & 67108864 /* ObjectLiteralPatternWithComputedProperties */) && maybeTypeOfKind(target, 80896 /* ObjectType */)) { for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) { @@ -21022,10 +21609,6 @@ var ts; } return flags & 96 /* Nullable */; } - function getNullableTypeOfKind(kind) { - return kind & 64 /* Null */ ? kind & 32 /* Undefined */ ? - getUnionType([nullType, undefinedType]) : nullType : undefinedType; - } function addNullableKind(type, kind) { if ((getNullableKind(type) & kind) !== kind) { var types = [type]; @@ -21039,32 +21622,8 @@ var ts; } return type; } - function removeNullableKind(type, kind) { - if (type.flags & 16384 /* Union */ && getNullableKind(type) & kind) { - var firstType = void 0; - var types = void 0; - for (var _i = 0, _a = type.types; _i < _a.length; _i++) { - var t = _a[_i]; - if (!(t.flags & kind)) { - if (!firstType) { - firstType = t; - } - else { - if (!types) { - types = [firstType]; - } - types.push(t); - } - } - } - if (firstType) { - type = types ? getUnionType(types) : firstType; - } - } - return type; - } function getNonNullableType(type) { - return strictNullChecks ? removeNullableKind(type, 96 /* Nullable */) : type; + return strictNullChecks ? getTypeWithFacts(type, 524288 /* NEUndefinedOrNull */) : type; } /** * Return true if type was inferred from an object literal or written as an object type literal @@ -21188,25 +21747,25 @@ var ts; var typeAsString = typeToString(getWidenedType(type)); var diagnostic; switch (declaration.kind) { - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type; break; - case 141 /* Parameter */: + case 142 /* Parameter */: diagnostic = declaration.dotDotDotToken ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type; break; - case 168 /* BindingElement */: + case 169 /* BindingElement */: diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type; break; - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: if (!declaration.name) { error(declaration, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString); return; @@ -21538,18 +22097,7 @@ var ts; return context.inferredTypes; } // EXPRESSION TYPE CHECKING - function createTransientIdentifier(symbol, location) { - var result = ts.createNode(69 /* Identifier */); - result.text = symbol.name; - result.resolvedSymbol = symbol; - result.parent = location; - result.id = -1; - return result; - } function getResolvedSymbol(node) { - if (node.id === -1) { - return node.resolvedSymbol; - } var links = getNodeLinks(node); if (!links.resolvedSymbol) { links.resolvedSymbol = !ts.nodeIsMissing(node) && resolveName(node, node.text, 107455 /* Value */ | 1048576 /* ExportValue */, ts.Diagnostics.Cannot_find_name_0, node) || unknownSymbol; @@ -21562,10 +22110,10 @@ var ts; // The expression is restricted to a single identifier or a sequence of identifiers separated by periods while (node) { switch (node.kind) { - case 157 /* TypeQuery */: + case 158 /* TypeQuery */: return true; case 69 /* Identifier */: - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: node = node.parent; continue; default: @@ -21574,11 +22122,11 @@ var ts; } ts.Debug.fail("should not get here"); } - // Return the assignment key for a "dotted name" (i.e. a sequence of identifiers + // Return the flow cache key for a "dotted name" (i.e. a sequence of identifiers // separated by dots). The key consists of the id of the symbol referenced by the // leftmost identifier followed by zero or more property names separated by dots. // The result is undefined if the reference isn't a dotted name. - function getAssignmentKey(node) { + function getFlowCacheKey(node) { if (node.kind === 69 /* Identifier */) { var symbol = getResolvedSymbol(node); return symbol !== unknownSymbol ? "" + getSymbolId(symbol) : undefined; @@ -21586,118 +22134,12 @@ var ts; if (node.kind === 97 /* ThisKeyword */) { return "0"; } - if (node.kind === 171 /* PropertyAccessExpression */) { - var key = getAssignmentKey(node.expression); + if (node.kind === 172 /* PropertyAccessExpression */) { + var key = getFlowCacheKey(node.expression); return key && key + "." + node.name.text; } return undefined; } - function hasInitializer(node) { - return !!(node.initializer || ts.isBindingPattern(node.parent) && hasInitializer(node.parent.parent)); - } - // For a given node compute a map of which dotted names are assigned within - // the node. - function getAssignmentMap(node) { - var assignmentMap = {}; - visit(node); - return assignmentMap; - function visitReference(node) { - if (isAssignmentTarget(node) || isCompoundAssignmentTarget(node)) { - var key = getAssignmentKey(node); - if (key) { - assignmentMap[key] = true; - } - } - ts.forEachChild(node, visit); - } - function visitVariableDeclaration(node) { - if (!ts.isBindingPattern(node.name) && hasInitializer(node)) { - assignmentMap[getSymbolId(getSymbolOfNode(node))] = true; - } - ts.forEachChild(node, visit); - } - function visit(node) { - switch (node.kind) { - case 69 /* Identifier */: - case 171 /* PropertyAccessExpression */: - visitReference(node); - break; - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: - visitVariableDeclaration(node); - break; - case 186 /* BinaryExpression */: - case 166 /* ObjectBindingPattern */: - case 167 /* ArrayBindingPattern */: - case 169 /* ArrayLiteralExpression */: - case 170 /* ObjectLiteralExpression */: - case 172 /* ElementAccessExpression */: - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 176 /* TypeAssertionExpression */: - case 194 /* AsExpression */: - case 195 /* NonNullExpression */: - case 177 /* ParenthesizedExpression */: - case 184 /* PrefixUnaryExpression */: - case 180 /* DeleteExpression */: - case 183 /* AwaitExpression */: - case 181 /* TypeOfExpression */: - case 182 /* VoidExpression */: - case 185 /* PostfixUnaryExpression */: - case 189 /* YieldExpression */: - case 187 /* ConditionalExpression */: - case 190 /* SpreadElementExpression */: - case 198 /* Block */: - case 199 /* VariableStatement */: - case 201 /* ExpressionStatement */: - case 202 /* IfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 210 /* ReturnStatement */: - case 211 /* WithStatement */: - case 212 /* SwitchStatement */: - case 226 /* CaseBlock */: - case 248 /* CaseClause */: - case 249 /* DefaultClause */: - case 213 /* LabeledStatement */: - case 214 /* ThrowStatement */: - case 215 /* TryStatement */: - case 251 /* CatchClause */: - case 240 /* JsxElement */: - case 241 /* JsxSelfClosingElement */: - case 245 /* JsxAttribute */: - case 246 /* JsxSpreadAttribute */: - case 242 /* JsxOpeningElement */: - case 247 /* JsxExpression */: - ts.forEachChild(node, visit); - break; - } - } - } - function isReferenceAssignedWithin(reference, node) { - if (reference.kind !== 97 /* ThisKeyword */) { - var key = getAssignmentKey(reference); - if (key) { - var links = getNodeLinks(node); - return (links.assignmentMap || (links.assignmentMap = getAssignmentMap(node)))[key]; - } - } - return false; - } - function isAnyPartOfReferenceAssignedWithin(reference, node) { - while (true) { - if (isReferenceAssignedWithin(reference, node)) { - return true; - } - if (reference.kind !== 171 /* PropertyAccessExpression */) { - return false; - } - reference = reference.expression; - } - } function isNullOrUndefinedLiteral(node) { return node.kind === 93 /* NullKeyword */ || node.kind === 69 /* Identifier */ && getResolvedSymbol(node) === undefinedSymbol; @@ -21707,7 +22149,7 @@ var ts; case 69 /* Identifier */: case 97 /* ThisKeyword */: return node; - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return getLeftmostIdentifierOrThis(node.expression); } return undefined; @@ -21719,101 +22161,407 @@ var ts; return getResolvedSymbol(source) === getResolvedSymbol(target); case 97 /* ThisKeyword */: return true; - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return source.name.text === target.name.text && isMatchingReference(source.expression, target.expression); } } return false; } - // Get the narrowed type of a given symbol at a given location - function getNarrowedTypeOfReference(type, reference) { - if (!(type.flags & (1 /* Any */ | 80896 /* ObjectType */ | 16384 /* Union */ | 512 /* TypeParameter */))) { - return type; - } - var leftmostNode = getLeftmostIdentifierOrThis(reference); - if (!leftmostNode) { - return type; - } - var top; - if (leftmostNode.kind === 69 /* Identifier */) { - var leftmostSymbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(leftmostNode)); - if (!leftmostSymbol) { - return type; + function containsMatchingReference(source, target) { + while (source.kind === 172 /* PropertyAccessExpression */) { + source = source.expression; + if (isMatchingReference(source, target)) { + return true; } - var declaration = leftmostSymbol.valueDeclaration; - if (!declaration || declaration.kind !== 217 /* VariableDeclaration */ && declaration.kind !== 141 /* Parameter */ && declaration.kind !== 168 /* BindingElement */) { - return type; - } - top = getDeclarationContainer(declaration); } - var originalType = type; - var nodeStack = []; - var node = reference; - loop: while (node.parent) { - var child = node; - node = node.parent; - switch (node.kind) { - case 202 /* IfStatement */: - case 187 /* ConditionalExpression */: - case 186 /* BinaryExpression */: - nodeStack.push({ node: node, child: child }); - break; - case 255 /* SourceFile */: - case 224 /* ModuleDeclaration */: - break loop; - default: - if (node === top || ts.isFunctionLikeKind(node.kind)) { - break loop; + return false; + } + 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 === 172 /* PropertyAccessExpression */ && + 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 & 16384 /* Union */)) { + 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; + } + // Remove those constituent types of declaredType to which no constituent type of assignedType is assignable. + // For example, when a variable of type number | string | boolean is assigned a value of type number | boolean, + // we remove type string. + function getAssignmentReducedType(declaredType, assignedType) { + if (declaredType !== assignedType && declaredType.flags & 16384 /* Union */) { + var reducedTypes = ts.filter(declaredType.types, function (t) { return typeMaybeAssignableTo(assignedType, t); }); + if (reducedTypes.length) { + return reducedTypes.length === 1 ? reducedTypes[0] : getUnionType(reducedTypes); + } + } + return declaredType; + } + function getTypeFacts(type) { + var flags = type.flags; + if (flags & 258 /* StringLike */) { + return strictNullChecks ? 4079361 /* StringStrictFacts */ : 4194049 /* StringFacts */; + } + if (flags & 132 /* NumberLike */) { + return strictNullChecks ? 4079234 /* NumberStrictFacts */ : 4193922 /* NumberFacts */; + } + if (flags & 8 /* Boolean */) { + return strictNullChecks ? 4078980 /* BooleanStrictFacts */ : 4193668 /* BooleanFacts */; + } + if (flags & 80896 /* ObjectType */) { + var resolved = resolveStructuredTypeMembers(type); + return resolved.callSignatures.length || resolved.constructSignatures.length || isTypeSubtypeOf(type, globalFunctionType) ? + strictNullChecks ? 1970144 /* FunctionStrictFacts */ : 4181984 /* FunctionFacts */ : + strictNullChecks ? 1972176 /* ObjectStrictFacts */ : 4184016 /* ObjectFacts */; + } + if (flags & (16 /* Void */ | 32 /* Undefined */)) { + return 2457472 /* UndefinedFacts */; + } + if (flags & 64 /* Null */) { + return 2340752 /* NullFacts */; + } + if (flags & 16777216 /* ESSymbol */) { + return strictNullChecks ? 1981320 /* SymbolStrictFacts */ : 4193160 /* SymbolFacts */; + } + if (flags & 512 /* TypeParameter */) { + var constraint = getConstraintOfTypeParameter(type); + return constraint ? getTypeFacts(constraint) : 4194303 /* All */; + } + if (flags & 32768 /* Intersection */) { + return ts.reduceLeft(type.types, function (flags, type) { return flags |= getTypeFacts(type); }, 0 /* None */); + } + return 4194303 /* All */; + } + function getTypeWithFacts(type, include) { + if (!(type.flags & 16384 /* Union */)) { + return getTypeFacts(type) & include ? type : neverType; + } + var firstType; + var types; + for (var _i = 0, _a = type.types; _i < _a.length; _i++) { + var t = _a[_i]; + if (getTypeFacts(t) & include) { + if (!firstType) { + firstType = t; + } + else { + if (!types) { + types = [firstType]; } - break; + types.push(t); + } } } - var nodes; - while (nodes = nodeStack.pop()) { - var node_1 = nodes.node, child = nodes.child; - switch (node_1.kind) { - case 202 /* IfStatement */: - // In a branch of an if statement, narrow based on controlling expression - if (child !== node_1.expression) { - type = narrowType(type, node_1.expression, /*assumeTrue*/ child === node_1.thenStatement); - } - break; - case 187 /* ConditionalExpression */: - // In a branch of a conditional expression, narrow based on controlling condition - if (child !== node_1.condition) { - type = narrowType(type, node_1.condition, /*assumeTrue*/ child === node_1.whenTrue); - } - break; - case 186 /* BinaryExpression */: - // In the right operand of an && or ||, narrow based on left operand - if (child === node_1.right) { - if (node_1.operatorToken.kind === 51 /* AmpersandAmpersandToken */) { - type = narrowType(type, node_1.left, /*assumeTrue*/ true); - } - else if (node_1.operatorToken.kind === 52 /* BarBarToken */) { - type = narrowType(type, node_1.left, /*assumeTrue*/ false); - } - } - break; - default: - ts.Debug.fail("Unreachable!"); - } - // Use original type if construct contains assignments to variable - if (type !== originalType && isAnyPartOfReferenceAssignedWithin(reference, node_1)) { - type = originalType; - } - } - // Preserve old top-level behavior - if the branch is really an empty set, revert to prior type - if (type === emptyUnionType) { - type = originalType; + return firstType ? types ? getUnionType(types, /*noSubtypeReduction*/ true) : firstType : neverType; + } + function getTypeWithDefault(type, defaultExpression) { + if (defaultExpression) { + var defaultType = checkExpression(defaultExpression); + return getUnionType([getTypeWithFacts(type, 131072 /* NEUndefined */), defaultType]); } return type; + } + function getTypeOfDestructuredProperty(type, name) { + var text = getTextOfPropertyName(name); + return getTypeOfPropertyOfType(type, text) || + isNumericLiteralName(text) && getIndexTypeOfType(type, 1 /* Number */) || + getIndexTypeOfType(type, 0 /* String */) || + unknownType; + } + function getTypeOfDestructuredArrayElement(type, index) { + return isTupleLikeType(type) && getTypeOfPropertyOfType(type, "" + index) || + checkIteratedTypeOrElementType(type, /*errorNode*/ undefined, /*allowStringInput*/ false) || + unknownType; + } + function getTypeOfDestructuredSpreadElement(type) { + return createArrayType(checkIteratedTypeOrElementType(type, /*errorNode*/ undefined, /*allowStringInput*/ false) || unknownType); + } + function getAssignedTypeOfBinaryExpression(node) { + return node.parent.kind === 170 /* ArrayLiteralExpression */ || node.parent.kind === 253 /* PropertyAssignment */ ? + getTypeWithDefault(getAssignedType(node), node.right) : + checkExpression(node.right); + } + function getAssignedTypeOfArrayLiteralElement(node, element) { + return getTypeOfDestructuredArrayElement(getAssignedType(node), ts.indexOf(node.elements, element)); + } + function getAssignedTypeOfSpreadElement(node) { + return getTypeOfDestructuredSpreadElement(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 207 /* ForInStatement */: + return stringType; + case 208 /* ForOfStatement */: + return checkRightHandSideOfForOf(parent.expression) || unknownType; + case 187 /* BinaryExpression */: + return getAssignedTypeOfBinaryExpression(parent); + case 181 /* DeleteExpression */: + return undefinedType; + case 170 /* ArrayLiteralExpression */: + return getAssignedTypeOfArrayLiteralElement(parent, node); + case 191 /* SpreadElementExpression */: + return getAssignedTypeOfSpreadElement(parent); + case 253 /* PropertyAssignment */: + return getAssignedTypeOfPropertyAssignment(parent); + case 254 /* ShorthandPropertyAssignment */: + return getAssignedTypeOfShorthandPropertyAssignment(parent); + } + return unknownType; + } + function getInitialTypeOfBindingElement(node) { + var pattern = node.parent; + var parentType = getInitialType(pattern.parent); + var type = pattern.kind === 167 /* ObjectBindingPattern */ ? + getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) : + !node.dotDotDotToken ? + getTypeOfDestructuredArrayElement(parentType, ts.indexOf(pattern.elements, node)) : + getTypeOfDestructuredSpreadElement(parentType); + return getTypeWithDefault(type, node.initializer); + } + function getTypeOfInitializer(node) { + // Return the cached type if one is available. If the type of the variable was inferred + // from its initializer, we'll already have cached the type. Otherwise we compute it now + // without caching such that transient types are reflected. + var links = getNodeLinks(node); + return links.resolvedType || checkExpression(node); + } + function getInitialTypeOfVariableDeclaration(node) { + if (node.initializer) { + return getTypeOfInitializer(node.initializer); + } + if (node.parent.parent.kind === 207 /* ForInStatement */) { + return stringType; + } + if (node.parent.parent.kind === 208 /* ForOfStatement */) { + return checkRightHandSideOfForOf(node.parent.parent.expression) || unknownType; + } + return unknownType; + } + function getInitialType(node) { + return node.kind === 218 /* VariableDeclaration */ ? + getInitialTypeOfVariableDeclaration(node) : + getInitialTypeOfBindingElement(node); + } + function getFlowTypeOfReference(reference, declaredType, assumeInitialized) { + var key; + if (!reference.flowNode || assumeInitialized && !(declaredType.flags & 97793 /* Narrowable */)) { + return declaredType; + } + var initialType = assumeInitialized ? declaredType : addNullableKind(declaredType, 32 /* Undefined */); + var visitedFlowStart = visitedFlowCount; + var result = getTypeAtFlowNode(reference.flowNode); + visitedFlowCount = visitedFlowStart; + if (reference.parent.kind === 196 /* NonNullExpression */ && getTypeWithFacts(result, 524288 /* NEUndefinedOrNull */) === neverType) { + return declaredType; + } + return result; + function getTypeAtFlowNode(flow) { + while (true) { + if (flow.flags & 256 /* Shared */) { + // We cache results of flow type resolution for shared nodes that were previously visited in + // the same getFlowTypeOfReference invocation. A node is considered shared when it is the + // antecedent of more than one node. + for (var i = visitedFlowStart; i < visitedFlowCount; i++) { + if (visitedFlowNodes[i] === flow) { + return visitedFlowTypes[i]; + } + } + } + var type = void 0; + if (flow.flags & 16 /* Assignment */) { + type = getTypeAtFlowAssignment(flow); + if (!type) { + flow = flow.antecedent; + continue; + } + } + else if (flow.flags & 96 /* Condition */) { + type = getTypeAtFlowCondition(flow); + } + else if (flow.flags & 12 /* Label */) { + if (flow.antecedents.length === 1) { + flow = flow.antecedents[0]; + continue; + } + type = flow.flags & 4 /* BranchLabel */ ? + getTypeAtFlowBranchLabel(flow) : + getTypeAtFlowLoopLabel(flow); + } + else if (flow.flags & 1 /* Unreachable */) { + // Unreachable code errors are reported in the binding phase. Here we + // simply return the declared type to reduce follow-on errors. + type = declaredType; + } + else { + // At the top of the flow we have the initial type. + type = initialType; + } + if (flow.flags & 256 /* Shared */) { + // Record visited node and the associated type in the cache. + visitedFlowNodes[visitedFlowCount] = flow; + visitedFlowTypes[visitedFlowCount] = type; + visitedFlowCount++; + } + return type; + } + } + function getTypeAtFlowAssignment(flow) { + var node = flow.node; + // Assignments only narrow the computed type if the declared type is a union type. Thus, we + // only need to evaluate the assigned type if the declared type is a union type. + if ((node.kind === 218 /* VariableDeclaration */ || node.kind === 169 /* BindingElement */) && + reference.kind === 69 /* Identifier */ && + getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(reference)) === getSymbolOfNode(node)) { + return declaredType.flags & 16384 /* Union */ ? + getAssignmentReducedType(declaredType, getInitialType(node)) : + declaredType; + } + // If the node is not a variable declaration or binding element, it is an identifier + // or a dotted name that is the target of an assignment. If we have a match, reduce + // the declared type by the assigned type. + if (isMatchingReference(reference, node)) { + return declaredType.flags & 16384 /* Union */ ? + getAssignmentReducedType(declaredType, getAssignedType(node)) : + declaredType; + } + // We didn't have a direct match. However, if the reference is a dotted name, this + // may be an assignment to a left hand part of the reference. For example, for a + // reference 'x.y.z', we may be at an assignment to 'x.y' or 'x'. In that case, + // return the declared type. + if (containsMatchingReference(reference, node)) { + return declaredType; + } + // Assignment doesn't affect reference + return undefined; + } + function getTypeAtFlowCondition(flow) { + var type = getTypeAtFlowNode(flow.antecedent); + if (type !== neverType) { + // If we have an antecedent type (meaning we're reachable in some way), we first + // attempt to narrow the antecedent type. If that produces the nothing type, then + // we take the type guard as an indication that control could reach here in a + // manner not understood by the control flow analyzer (e.g. a function argument + // has an invalid type, or a nested function has possibly made an assignment to a + // captured variable). We proceed by reverting to the declared type and then + // narrow that. + var assumeTrue = (flow.flags & 32 /* TrueCondition */) !== 0; + type = narrowType(type, flow.expression, assumeTrue); + if (type === neverType) { + type = narrowType(declaredType, flow.expression, assumeTrue); + } + } + return type; + } + function getTypeAtFlowBranchLabel(flow) { + var antecedentTypes = []; + for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { + var antecedent = _a[_i]; + var type = getTypeAtFlowNode(antecedent); + // If the type at a particular antecedent path is the declared type and the + // reference is known to always be assigned (i.e. when declared and initial types + // are the same), there is no reason to process more antecedents since the only + // possible outcome is subtypes that will be removed in the final union type anyway. + if (type === declaredType && declaredType === initialType) { + return type; + } + if (!ts.contains(antecedentTypes, type)) { + antecedentTypes.push(type); + } + } + return getUnionType(antecedentTypes); + } + function getTypeAtFlowLoopLabel(flow) { + // If we have previously computed the control flow type for the reference at + // this flow loop junction, return the cached type. + var id = getFlowNodeId(flow); + var cache = flowLoopCaches[id] || (flowLoopCaches[id] = {}); + if (!key) { + key = getFlowCacheKey(reference); + } + if (cache[key]) { + return cache[key]; + } + // If this flow loop junction and reference are already being processed, return + // the union of the types computed for each branch so far. We should never see + // an empty array here because the first antecedent of a loop junction is always + // the non-looping control flow path that leads to the top. + for (var i = flowLoopStart; i < flowLoopCount; i++) { + if (flowLoopNodes[i] === flow && flowLoopKeys[i] === key) { + return getUnionType(flowLoopTypes[i]); + } + } + // Add the flow loop junction and reference to the in-process stack and analyze + // each antecedent code path. + var antecedentTypes = []; + 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 type = getTypeAtFlowNode(antecedent); + flowLoopCount--; + // If we see a value appear in the cache it is a sign that control flow analysis + // was restarted and completed by checkExpressionCached. We can simply pick up + // the resulting type and bail out. + if (cache[key]) { + return cache[key]; + } + if (!ts.contains(antecedentTypes, type)) { + antecedentTypes.push(type); + } + // If the type at a particular antecedent path is the declared type there is no + // reason to process more antecedents since the only possible outcome is subtypes + // that will be removed in the final union type anyway. + if (type === declaredType) { + break; + } + } + return cache[key] = getUnionType(antecedentTypes); + } function narrowTypeByTruthiness(type, expr, assumeTrue) { - return strictNullChecks && assumeTrue && isMatchingReference(expr, reference) ? getNonNullableType(type) : type; + return isMatchingReference(reference, expr) ? getTypeWithFacts(type, assumeTrue ? 1048576 /* Truthy */ : 2097152 /* Falsy */) : type; } function narrowTypeByBinaryExpression(type, expr, assumeTrue) { switch (expr.operatorToken.kind) { + case 56 /* EqualsToken */: + return narrowTypeByTruthiness(type, expr.left, assumeTrue); case 30 /* EqualsEqualsToken */: case 31 /* ExclamationEqualsToken */: case 32 /* EqualsEqualsEqualsToken */: @@ -21821,16 +22569,14 @@ var ts; if (isNullOrUndefinedLiteral(expr.right)) { return narrowTypeByNullCheck(type, expr, assumeTrue); } - if (expr.left.kind === 181 /* TypeOfExpression */ && expr.right.kind === 9 /* StringLiteral */) { + if (expr.left.kind === 182 /* TypeOfExpression */ && expr.right.kind === 9 /* StringLiteral */) { return narrowTypeByTypeof(type, expr, assumeTrue); } break; - case 51 /* AmpersandAmpersandToken */: - return narrowTypeByAnd(type, expr, assumeTrue); - case 52 /* BarBarToken */: - return narrowTypeByOr(type, expr, assumeTrue); case 91 /* InstanceOfKeyword */: return narrowTypeByInstanceof(type, expr, assumeTrue); + case 24 /* CommaToken */: + return narrowType(type, expr.right, assumeTrue); } return type; } @@ -21840,88 +22586,59 @@ var ts; if (operator === 31 /* ExclamationEqualsToken */ || operator === 33 /* ExclamationEqualsEqualsToken */) { assumeTrue = !assumeTrue; } - if (!strictNullChecks || !isMatchingReference(expr.left, reference)) { + if (!strictNullChecks || !isMatchingReference(reference, expr.left)) { return type; } var doubleEquals = operator === 30 /* EqualsEqualsToken */ || operator === 31 /* ExclamationEqualsToken */; - var exprNullableKind = doubleEquals ? 96 /* Nullable */ : - expr.right.kind === 93 /* NullKeyword */ ? 64 /* Null */ : 32 /* Undefined */; - if (assumeTrue) { - var nullableKind = getNullableKind(type) & exprNullableKind; - return nullableKind ? getNullableTypeOfKind(nullableKind) : type; - } - return removeNullableKind(type, exprNullableKind); + var facts = doubleEquals ? + assumeTrue ? 65536 /* EQUndefinedOrNull */ : 524288 /* NEUndefinedOrNull */ : + expr.right.kind === 93 /* NullKeyword */ ? + assumeTrue ? 32768 /* EQNull */ : 262144 /* NENull */ : + assumeTrue ? 16384 /* EQUndefined */ : 131072 /* NEUndefined */; + return getTypeWithFacts(type, facts); } function narrowTypeByTypeof(type, expr, assumeTrue) { // We have '==', '!=', '====', or !==' operator with 'typeof xxx' on the left // and string literal on the right var left = expr.left; var right = expr.right; - if (!isMatchingReference(left.expression, reference)) { + if (!isMatchingReference(reference, left.expression)) { + // For a reference of the form 'x.y', a 'typeof x === ...' type guard resets the + // narrowed type of 'y' to its declared type. + if (containsMatchingReference(reference, left.expression)) { + return declaredType; + } return type; } if (expr.operatorToken.kind === 31 /* ExclamationEqualsToken */ || expr.operatorToken.kind === 33 /* ExclamationEqualsEqualsToken */) { assumeTrue = !assumeTrue; } - var typeInfo = primitiveTypeInfo[right.text]; - // Don't narrow `undefined` - if (typeInfo && typeInfo.type === undefinedType) { - return type; - } - var flags; - if (typeInfo) { - flags = typeInfo.flags; - } - else { - assumeTrue = !assumeTrue; - flags = 132 /* NumberLike */ | 258 /* StringLike */ | 16777216 /* ESSymbol */ | 8 /* Boolean */; - } - // At this point we can bail if it's not a union - if (!(type.flags & 16384 /* Union */)) { - // If we're on the true branch and the type is a subtype, we should return the primitive type - if (assumeTrue && typeInfo && isTypeSubtypeOf(typeInfo.type, type)) { - return typeInfo.type; + if (assumeTrue && !(type.flags & 16384 /* Union */)) { + // We narrow a non-union type to an exact primitive type if the non-union type + // is a supertype of that primtive type. For example, type 'any' can be narrowed + // to one of the primitive types. + var targetType = ts.getProperty(typeofTypesByName, right.text); + if (targetType && isTypeSubtypeOf(targetType, type)) { + return targetType; } - // If the active non-union type would be removed from a union by this type guard, return an empty union - return filterUnion(type) ? type : emptyUnionType; - } - return getUnionType(ts.filter(type.types, filterUnion), /*noSubtypeReduction*/ true); - function filterUnion(type) { - return assumeTrue === !!(type.flags & flags); - } - } - function narrowTypeByAnd(type, expr, assumeTrue) { - if (assumeTrue) { - // The assumed result is true, therefore we narrow assuming each operand to be true. - return narrowType(narrowType(type, expr.left, /*assumeTrue*/ true), expr.right, /*assumeTrue*/ true); - } - else { - // The assumed result is false. This means either the first operand was false, or the first operand was true - // and the second operand was false. We narrow with those assumptions and union the two resulting types. - return getUnionType([ - narrowType(type, expr.left, /*assumeTrue*/ false), - narrowType(type, expr.right, /*assumeTrue*/ false) - ]); - } - } - function narrowTypeByOr(type, expr, assumeTrue) { - if (assumeTrue) { - // The assumed result is true. This means either the first operand was true, or the first operand was false - // and the second operand was true. We narrow with those assumptions and union the two resulting types. - return getUnionType([ - narrowType(type, expr.left, /*assumeTrue*/ true), - narrowType(type, expr.right, /*assumeTrue*/ true) - ]); - } - else { - // The assumed result is false, therefore we narrow assuming each operand to be false. - return narrowType(narrowType(type, expr.left, /*assumeTrue*/ false), expr.right, /*assumeTrue*/ false); } + var facts = assumeTrue ? + ts.getProperty(typeofEQFacts, right.text) || 64 /* TypeofEQHostObject */ : + ts.getProperty(typeofNEFacts, right.text) || 8192 /* TypeofNEHostObject */; + return getTypeWithFacts(type, facts); } function narrowTypeByInstanceof(type, expr, assumeTrue) { - // Check that type is not any, assumed result is true, and we have variable symbol on the left - if (isTypeAny(type) || !isMatchingReference(expr.left, reference)) { + if (!isMatchingReference(reference, expr.left)) { + // For a reference of the form 'x.y', an 'x instanceof T' type guard resets the + // narrowed type of 'y' to its declared type. + if (containsMatchingReference(reference, expr.left)) { + return declaredType; + } + return type; + } + // We never narrow type any in an instanceof guard + if (isTypeAny(type)) { return type; } // Check that right operand is a function type with a prototype property @@ -21956,30 +22673,30 @@ var ts; } return type; } - function getNarrowedType(originalType, narrowedTypeCandidate, assumeTrue) { + function getNarrowedType(type, candidate, assumeTrue) { if (!assumeTrue) { - if (originalType.flags & 16384 /* Union */) { - return getUnionType(ts.filter(originalType.types, function (t) { return !isTypeSubtypeOf(t, narrowedTypeCandidate); })); - } - return originalType; + return type.flags & 16384 /* Union */ ? + getUnionType(ts.filter(type.types, function (t) { return !isTypeSubtypeOf(t, candidate); })) : + type; } - // If the current type is a union type, remove all constituents that aren't assignable to target. If that produces - // 0 candidates, fall back to the assignability check - if (originalType.flags & 16384 /* Union */) { - var assignableConstituents = ts.filter(originalType.types, function (t) { return isTypeAssignableTo(t, narrowedTypeCandidate); }); + // If the current type is a union type, remove all constituents that aren't assignable to + // the candidate type. If one or more constituents remain, return a union of those. + if (type.flags & 16384 /* Union */) { + var assignableConstituents = ts.filter(type.types, function (t) { return isTypeAssignableTo(t, candidate); }); if (assignableConstituents.length) { return getUnionType(assignableConstituents); } } - var targetType = originalType.flags & 512 /* TypeParameter */ ? getApparentType(originalType) : originalType; - if (isTypeAssignableTo(narrowedTypeCandidate, targetType)) { - // Narrow to the target type if it's assignable to the current type - return narrowedTypeCandidate; - } - return originalType; + // If the candidate type is assignable to the target type, narrow to the candidate type. + // Otherwise, if the current type is assignable to the candidate, keep the current type. + // Otherwise, the types are completely unrelated, so narrow to the empty type. + var targetType = type.flags & 512 /* TypeParameter */ ? getApparentType(type) : type; + return isTypeAssignableTo(candidate, targetType) ? candidate : + isTypeAssignableTo(type, candidate) ? type : + neverType; } function narrowTypeByTypePredicate(type, callExpression, assumeTrue) { - if (type.flags & 1 /* Any */) { + if (type.flags & 1 /* Any */ || !hasMatchingArgument(callExpression, reference)) { return type; } var signature = getResolvedSignature(callExpression); @@ -21989,18 +22706,26 @@ var ts; } if (ts.isIdentifierTypePredicate(predicate)) { var predicateArgument = callExpression.arguments[predicate.parameterIndex]; - if (predicateArgument && isMatchingReference(predicateArgument, reference)) { - return getNarrowedType(type, predicate.type, assumeTrue); + if (predicateArgument) { + if (isMatchingReference(reference, predicateArgument)) { + return getNarrowedType(type, predicate.type, assumeTrue); + } + if (containsMatchingReference(reference, predicateArgument)) { + return declaredType; + } } } else { var invokedExpression = skipParenthesizedNodes(callExpression.expression); - if (invokedExpression.kind === 172 /* ElementAccessExpression */ || invokedExpression.kind === 171 /* PropertyAccessExpression */) { + if (invokedExpression.kind === 173 /* ElementAccessExpression */ || invokedExpression.kind === 172 /* PropertyAccessExpression */) { var accessExpression = invokedExpression; var possibleReference = skipParenthesizedNodes(accessExpression.expression); - if (isMatchingReference(possibleReference, reference)) { + if (isMatchingReference(reference, possibleReference)) { return getNarrowedType(type, predicate.type, assumeTrue); } + if (containsMatchingReference(reference, possibleReference)) { + return declaredType; + } } } return type; @@ -22011,15 +22736,15 @@ var ts; switch (expr.kind) { case 69 /* Identifier */: case 97 /* ThisKeyword */: - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return narrowTypeByTruthiness(type, expr, assumeTrue); - case 173 /* CallExpression */: + case 174 /* CallExpression */: return narrowTypeByTypePredicate(type, expr, assumeTrue); - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return narrowType(type, expr.expression, assumeTrue); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return narrowTypeByBinaryExpression(type, expr, assumeTrue); - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: if (expr.operator === 49 /* ExclamationToken */) { return narrowType(type, expr.operand, !assumeTrue); } @@ -22029,123 +22754,34 @@ var ts; } } function getTypeOfSymbolAtLocation(symbol, location) { - // The language service will always care about the narrowed type of a symbol, because that is - // the type the language says the symbol should have. - var type = getTypeOfSymbol(symbol); + // If we have an identifier or a property access at the given location, if the location is + // an dotted name expression, and if the location is not an assignment target, obtain the type + // of the expression (which will reflect control flow analysis). If the expression indeed + // resolved to the given symbol, return the narrowed type. if (location.kind === 69 /* Identifier */) { if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) { location = location.parent; } - // If location is an identifier or property access that references the given - // symbol, use the location as the reference with respect to which we narrow. - if (ts.isExpression(location)) { - checkExpression(location); - if (getNodeLinks(location).resolvedSymbol === symbol) { - return getNarrowedTypeOfReference(type, location); + if (ts.isExpression(location) && !ts.isAssignmentTarget(location)) { + var type = checkExpression(location); + if (getExportSymbolOfValueSymbolIfExported(getNodeLinks(location).resolvedSymbol) === symbol) { + return type; } } } // The location isn't a reference to the given symbol, meaning we're being asked // a hypothetical question of what type the symbol would have if there was a reference - // to it at the given location. To answer that question we manufacture a transient - // identifier at the location and narrow with respect to that identifier. - return getNarrowedTypeOfReference(type, createTransientIdentifier(symbol, location)); + // to it at the given location. Since we have no control flow information for the + // hypotherical reference (control flow information is created and attached by the + // binder), we simply return the declared type of the symbol. + return getTypeOfSymbol(symbol); } function skipParenthesizedNodes(expression) { - while (expression.kind === 177 /* ParenthesizedExpression */) { + while (expression.kind === 178 /* ParenthesizedExpression */) { expression = expression.expression; } return expression; } - function findFirstAssignment(symbol, container) { - return visit(ts.isFunctionLike(container) ? container.body : container); - function visit(node) { - switch (node.kind) { - case 69 /* Identifier */: - var assignment = getAssignmentRoot(node); - return assignment && getResolvedSymbol(node) === symbol ? assignment : undefined; - case 186 /* BinaryExpression */: - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: - case 166 /* ObjectBindingPattern */: - case 167 /* ArrayBindingPattern */: - case 169 /* ArrayLiteralExpression */: - case 170 /* ObjectLiteralExpression */: - case 171 /* PropertyAccessExpression */: - case 172 /* ElementAccessExpression */: - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 176 /* TypeAssertionExpression */: - case 194 /* AsExpression */: - case 195 /* NonNullExpression */: - case 177 /* ParenthesizedExpression */: - case 184 /* PrefixUnaryExpression */: - case 180 /* DeleteExpression */: - case 183 /* AwaitExpression */: - case 181 /* TypeOfExpression */: - case 182 /* VoidExpression */: - case 185 /* PostfixUnaryExpression */: - case 189 /* YieldExpression */: - case 187 /* ConditionalExpression */: - case 190 /* SpreadElementExpression */: - case 199 /* VariableStatement */: - case 201 /* ExpressionStatement */: - case 202 /* IfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 210 /* ReturnStatement */: - case 211 /* WithStatement */: - case 212 /* SwitchStatement */: - case 226 /* CaseBlock */: - case 248 /* CaseClause */: - case 249 /* DefaultClause */: - case 213 /* LabeledStatement */: - case 214 /* ThrowStatement */: - case 215 /* TryStatement */: - case 251 /* CatchClause */: - case 240 /* JsxElement */: - case 241 /* JsxSelfClosingElement */: - case 245 /* JsxAttribute */: - case 246 /* JsxSpreadAttribute */: - case 242 /* JsxOpeningElement */: - case 247 /* JsxExpression */: - case 198 /* Block */: - case 255 /* SourceFile */: - return ts.forEachChild(node, visit); - } - return undefined; - } - } - function checkVariableAssignedBefore(symbol, reference) { - if (!(symbol.flags & 3 /* Variable */)) { - return; - } - var declaration = symbol.valueDeclaration; - if (!declaration || declaration.kind !== 217 /* VariableDeclaration */ || declaration.initializer || ts.isInAmbientContext(declaration)) { - return; - } - var parentParentKind = declaration.parent.parent.kind; - if (parentParentKind === 207 /* ForOfStatement */ || parentParentKind === 206 /* ForInStatement */) { - return; - } - var declarationContainer = ts.getContainingFunction(declaration) || ts.getSourceFileOfNode(declaration); - var referenceContainer = ts.getContainingFunction(reference) || ts.getSourceFileOfNode(reference); - if (declarationContainer !== referenceContainer) { - return; - } - var links = getSymbolLinks(symbol); - if (!links.firstAssignmentChecked) { - links.firstAssignmentChecked = true; - links.firstAssignment = findFirstAssignment(symbol, declarationContainer); - } - if (links.firstAssignment && links.firstAssignment.end <= reference.pos) { - return; - } - error(reference, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); - } function checkIdentifier(node) { var symbol = getResolvedSymbol(node); // As noted in ECMAScript 6 language spec, arrow functions never have an arguments objects. @@ -22156,7 +22792,7 @@ var ts; // can explicitly bound arguments objects if (symbol === argumentsSymbol) { var container = ts.getContainingFunction(node); - if (container.kind === 179 /* ArrowFunction */) { + if (container.kind === 180 /* ArrowFunction */) { if (languageVersion < 2 /* ES6 */) { error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression); } @@ -22174,7 +22810,7 @@ var ts; // behavior of class names in ES6. if (languageVersion === 2 /* ES6 */ && localOrExportSymbol.flags & 32 /* Class */ - && localOrExportSymbol.valueDeclaration.kind === 220 /* ClassDeclaration */ + && localOrExportSymbol.valueDeclaration.kind === 221 /* ClassDeclaration */ && ts.nodeIsDecorated(localOrExportSymbol.valueDeclaration)) { var container = ts.getContainingClass(node); while (container !== undefined) { @@ -22190,10 +22826,20 @@ var ts; checkCollisionWithCapturedThisVariable(node, node); checkNestedBlockScopedBinding(node, symbol); var type = getTypeOfSymbol(localOrExportSymbol); - if (strictNullChecks && !isAssignmentTarget(node) && !(type.flags & 1 /* Any */) && !(getNullableKind(type) & 32 /* Undefined */)) { - checkVariableAssignedBefore(symbol, node); + if (!(localOrExportSymbol.flags & 3 /* Variable */) || ts.isAssignmentTarget(node)) { + return type; } - return getNarrowedTypeOfReference(type, node); + var declaration = localOrExportSymbol.valueDeclaration; + var assumeInitialized = !strictNullChecks || (type.flags & 1 /* Any */) !== 0 || !declaration || + ts.getRootDeclaration(declaration).kind === 142 /* Parameter */ || ts.isInAmbientContext(declaration) || + ts.getContainingFunctionOrModule(declaration) !== ts.getContainingFunctionOrModule(node); + var flowType = getFlowTypeOfReference(node, type, assumeInitialized); + if (!assumeInitialized && !(getNullableKind(type) & 32 /* Undefined */) && getNullableKind(flowType) & 32 /* Undefined */) { + error(node, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); + // Return the declared type to reduce follow-on errors + return type; + } + return flowType; } function isInsideFunction(node, threshold) { var current = node; @@ -22208,7 +22854,7 @@ var ts; function checkNestedBlockScopedBinding(node, symbol) { if (languageVersion >= 2 /* ES6 */ || (symbol.flags & (2 /* BlockScopedVariable */ | 32 /* Class */)) === 0 || - symbol.valueDeclaration.parent.kind === 251 /* CatchClause */) { + symbol.valueDeclaration.parent.kind === 252 /* CatchClause */) { return; } // 1. walk from the use site up to the declaration and check @@ -22233,8 +22879,8 @@ var ts; } // mark variables that are declared in loop initializer and reassigned inside the body of ForStatement. // if body of ForStatement will be converted to function then we'll need a extra machinery to propagate reassigned values back. - if (container.kind === 205 /* ForStatement */ && - ts.getAncestor(symbol.valueDeclaration, 218 /* VariableDeclarationList */).parent === container && + if (container.kind === 206 /* ForStatement */ && + ts.getAncestor(symbol.valueDeclaration, 219 /* VariableDeclarationList */).parent === container && isAssignedInBodyOfForStatement(node, container)) { getNodeLinks(symbol.valueDeclaration).flags |= 2097152 /* NeedsLoopOutParameter */; } @@ -22248,15 +22894,15 @@ var ts; function isAssignedInBodyOfForStatement(node, container) { var current = node; // skip parenthesized nodes - while (current.parent.kind === 177 /* ParenthesizedExpression */) { + while (current.parent.kind === 178 /* ParenthesizedExpression */) { current = current.parent; } // check if node is used as LHS in some assignment expression var isAssigned = false; - if (isAssignmentTarget(current)) { + if (ts.isAssignmentTarget(current)) { isAssigned = true; } - else if ((current.parent.kind === 184 /* PrefixUnaryExpression */ || current.parent.kind === 185 /* PostfixUnaryExpression */)) { + else if ((current.parent.kind === 185 /* PrefixUnaryExpression */ || current.parent.kind === 186 /* PostfixUnaryExpression */)) { var expr = current.parent; isAssigned = expr.operator === 41 /* PlusPlusToken */ || expr.operator === 42 /* MinusMinusToken */; } @@ -22277,7 +22923,7 @@ var ts; } function captureLexicalThis(node, container) { getNodeLinks(node).flags |= 2 /* LexicalThis */; - if (container.kind === 144 /* PropertyDeclaration */ || container.kind === 147 /* Constructor */) { + if (container.kind === 145 /* PropertyDeclaration */ || container.kind === 148 /* Constructor */) { var classNode = container.parent; getNodeLinks(classNode).flags |= 4 /* CaptureThis */; } @@ -22325,7 +22971,7 @@ var ts; // tell whether 'this' needs to be captured. var container = ts.getThisContainer(node, /* includeArrowFunctions */ true); var needToCaptureLexicalThis = false; - if (container.kind === 147 /* Constructor */) { + if (container.kind === 148 /* Constructor */) { var containingClassDecl = container.parent; var baseTypeNode = ts.getClassExtendsHeritageClauseElement(containingClassDecl); // If a containing class does not have extends clause or the class extends null @@ -22346,32 +22992,32 @@ var ts; } } // Now skip arrow functions to get the "real" owner of 'this'. - if (container.kind === 179 /* ArrowFunction */) { + if (container.kind === 180 /* ArrowFunction */) { container = ts.getThisContainer(container, /* includeArrowFunctions */ false); // When targeting es6, arrow function lexically bind "this" so we do not need to do the work of binding "this" in emitted code needToCaptureLexicalThis = (languageVersion < 2 /* ES6 */); } switch (container.kind) { - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body); // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks break; - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location); // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks break; - case 147 /* Constructor */: + case 148 /* Constructor */: if (isInConstructorArgumentInitializer(node, container)) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments); } break; - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: if (container.flags & 32 /* Static */) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); } break; - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name); break; } @@ -22379,6 +23025,21 @@ var ts; captureLexicalThis(node, container); } if (ts.isFunctionLike(container)) { + // If this is a function in a JS file, it might be a class method. Check if it's the RHS + // of a x.prototype.y = function [name]() { .... } + if (container.kind === 179 /* FunctionExpression */ && + ts.isInJavaScriptFile(container.parent) && + ts.getSpecialPropertyAssignmentKind(container.parent) === 3 /* PrototypeProperty */) { + // Get the 'x' of 'x.prototype.y = f' (here, 'f' is 'container') + var className = container.parent // x.prototype.y = f + .left // x.prototype.y + .expression // x.prototype + .expression; // x + var classSymbol = checkExpression(className).symbol; + if (classSymbol && classSymbol.members && (classSymbol.flags & 16 /* Function */)) { + return getInferredClassType(classSymbol); + } + } var type = getContextuallyTypedThisType(container); if (type) { return type; @@ -22387,40 +23048,17 @@ var ts; if (signature.thisType) { return signature.thisType; } - if (container.parent && container.parent.kind === 170 /* ObjectLiteralExpression */) { - // Note: this works because object literal methods are deferred, - // which means that the type of the containing object literal is already known. - var type_1 = checkExpressionCached(container.parent); - if (type_1) { - return type_1; - } - } } if (ts.isClassLike(container.parent)) { var symbol = getSymbolOfNode(container.parent); var type = container.flags & 32 /* Static */ ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType; - return getNarrowedTypeOfReference(type, node); + return getFlowTypeOfReference(node, type, /*assumeInitialized*/ true); } if (ts.isInJavaScriptFile(node)) { var type = getTypeForThisExpressionFromJSDoc(container); if (type && type !== unknownType) { return type; } - // If this is a function in a JS file, it might be a class method. Check if it's the RHS - // of a x.prototype.y = function [name]() { .... } - if (container.kind === 178 /* FunctionExpression */) { - if (ts.getSpecialPropertyAssignmentKind(container.parent) === 3 /* PrototypeProperty */) { - // Get the 'x' of 'x.prototype.y = f' (here, 'f' is 'container') - var className = container.parent // x.prototype.y = f - .left // x.prototype.y - .expression // x.prototype - .expression; // x - var classSymbol = checkExpression(className).symbol; - if (classSymbol && classSymbol.members && (classSymbol.flags & 16 /* Function */)) { - return getInferredClassType(classSymbol); - } - } - } } if (compilerOptions.noImplicitThis) { // With noImplicitThis, functions may not reference 'this' if it has type 'any' @@ -22430,28 +23068,28 @@ var ts; } function getTypeForThisExpressionFromJSDoc(node) { var typeTag = ts.getJSDocTypeTag(node); - if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === 268 /* JSDocFunctionType */) { + if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === 269 /* JSDocFunctionType */) { var jsDocFunctionType = typeTag.typeExpression.type; - if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === 271 /* JSDocThisType */) { + if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === 272 /* JSDocThisType */) { return getTypeFromTypeNode(jsDocFunctionType.parameters[0].type); } } } function isInConstructorArgumentInitializer(node, constructorDecl) { for (var n = node; n && n !== constructorDecl; n = n.parent) { - if (n.kind === 141 /* Parameter */) { + if (n.kind === 142 /* Parameter */) { return true; } } return false; } function checkSuperExpression(node) { - var isCallExpression = node.parent.kind === 173 /* CallExpression */ && node.parent.expression === node; + var isCallExpression = node.parent.kind === 174 /* CallExpression */ && node.parent.expression === node; var container = ts.getSuperContainer(node, /*stopOnFunctions*/ true); var needToCaptureLexicalThis = false; if (!isCallExpression) { // adjust the container reference in case if super is used inside arrow functions with arbitrary deep nesting - while (container && container.kind === 179 /* ArrowFunction */) { + while (container && container.kind === 180 /* ArrowFunction */) { container = ts.getSuperContainer(container, /*stopOnFunctions*/ true); needToCaptureLexicalThis = languageVersion < 2 /* ES6 */; } @@ -22465,16 +23103,16 @@ var ts; // [super.foo()]() {} // } var current = node; - while (current && current !== container && current.kind !== 139 /* ComputedPropertyName */) { + while (current && current !== container && current.kind !== 140 /* ComputedPropertyName */) { current = current.parent; } - if (current && current.kind === 139 /* ComputedPropertyName */) { + if (current && current.kind === 140 /* ComputedPropertyName */) { 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 === 170 /* ObjectLiteralExpression */)) { + else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 171 /* ObjectLiteralExpression */)) { error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions); } else { @@ -22545,8 +23183,8 @@ var ts; // This helper creates an object with a "value" property that wraps the `super` property or indexed access for both get and set. // This is required for destructuring assignments, as a call expression cannot be used as the target of a destructuring assignment // while a property access can. - if (container.kind === 146 /* MethodDeclaration */ && container.flags & 256 /* Async */) { - if (ts.isSuperPropertyOrElementAccess(node.parent) && isAssignmentTarget(node.parent)) { + if (container.kind === 147 /* MethodDeclaration */ && container.flags & 256 /* Async */) { + if (ts.isSuperPropertyOrElementAccess(node.parent) && ts.isAssignmentTarget(node.parent)) { getNodeLinks(container).flags |= 4096 /* AsyncMethodWithSuperBinding */; } else { @@ -22559,7 +23197,7 @@ var ts; // in this case they should also use correct lexical this captureLexicalThis(node.parent, container); } - if (container.parent.kind === 170 /* ObjectLiteralExpression */) { + if (container.parent.kind === 171 /* ObjectLiteralExpression */) { if (languageVersion < 2 /* ES6 */) { error(node, ts.Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher); return unknownType; @@ -22579,7 +23217,7 @@ var ts; } return unknownType; } - if (container.kind === 147 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) { + if (container.kind === 148 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) { // issue custom error message for super property access in constructor arguments (to be aligned with old compiler) error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments); return unknownType; @@ -22594,7 +23232,7 @@ var ts; if (isCallExpression) { // TS 1.0 SPEC (April 2014): 4.8.1 // Super calls are only permitted in constructors of derived classes - return container.kind === 147 /* Constructor */; + return container.kind === 148 /* Constructor */; } else { // TS 1.0 SPEC (April 2014) @@ -22602,21 +23240,21 @@ var ts; // - In a constructor, instance member function, instance member accessor, or instance member variable initializer where this references a derived class instance // - In a static member function or static member accessor // topmost container must be something that is directly nested in the class declaration\object literal expression - if (ts.isClassLike(container.parent) || container.parent.kind === 170 /* ObjectLiteralExpression */) { + if (ts.isClassLike(container.parent) || container.parent.kind === 171 /* ObjectLiteralExpression */) { if (container.flags & 32 /* Static */) { - return container.kind === 146 /* MethodDeclaration */ || - container.kind === 145 /* MethodSignature */ || - container.kind === 148 /* GetAccessor */ || - container.kind === 149 /* SetAccessor */; + return container.kind === 147 /* MethodDeclaration */ || + container.kind === 146 /* MethodSignature */ || + container.kind === 149 /* GetAccessor */ || + container.kind === 150 /* SetAccessor */; } else { - return container.kind === 146 /* MethodDeclaration */ || - container.kind === 145 /* MethodSignature */ || - container.kind === 148 /* GetAccessor */ || - container.kind === 149 /* SetAccessor */ || - container.kind === 144 /* PropertyDeclaration */ || - container.kind === 143 /* PropertySignature */ || - container.kind === 147 /* Constructor */; + return container.kind === 147 /* MethodDeclaration */ || + container.kind === 146 /* MethodSignature */ || + container.kind === 149 /* GetAccessor */ || + container.kind === 150 /* SetAccessor */ || + container.kind === 145 /* PropertyDeclaration */ || + container.kind === 144 /* PropertySignature */ || + container.kind === 148 /* Constructor */; } } } @@ -22624,9 +23262,7 @@ var ts; } } function getContextuallyTypedThisType(func) { - if ((isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) && - isContextSensitive(func) && - func.kind !== 179 /* ArrowFunction */) { + if (isContextSensitiveFunctionOrObjectLiteralMethod(func) && func.kind !== 180 /* ArrowFunction */) { var contextualSignature = getContextualSignature(func); if (contextualSignature) { return contextualSignature.thisType; @@ -22637,31 +23273,61 @@ var ts; // Return contextual type of parameter or undefined if no contextual type is available function getContextuallyTypedParameterType(parameter) { var func = parameter.parent; - if (isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) { - if (isContextSensitive(func)) { - 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 (indexOfParameter < len) { - return getTypeAtPosition(contextualSignature, indexOfParameter); - } - // If last parameter is contextually rest parameter get its type - if (funcHasRestParameters && - indexOfParameter === (func.parameters.length - 1) && - isRestParameterIndex(contextualSignature, func.parameters.length - 1)) { - return getTypeOfSymbol(ts.lastOrUndefined(contextualSignature.parameters)); + if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) { + var iife = getImmediatelyInvokedFunctionExpression(func); + if (iife) { + var indexOfParameter = ts.indexOf(func.parameters, parameter); + if (iife.arguments && indexOfParameter < iife.arguments.length) { + if (parameter.dotDotDotToken) { + var restTypes = []; + for (var i = indexOfParameter; i < iife.arguments.length; i++) { + restTypes.push(getTypeOfExpression(iife.arguments[i])); + } + return createArrayType(getUnionType(restTypes)); } + var links = getNodeLinks(iife); + var cached = links.resolvedSignature; + links.resolvedSignature = anySignature; + var type = checkExpression(iife.arguments[indexOfParameter]); + 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 (indexOfParameter < len) { + return getTypeAtPosition(contextualSignature, indexOfParameter); + } + // If last parameter is contextually rest parameter get its type + if (funcHasRestParameters && + indexOfParameter === (func.parameters.length - 1) && + isRestParameterIndex(contextualSignature, func.parameters.length - 1)) { + return getTypeOfSymbol(ts.lastOrUndefined(contextualSignature.parameters)); } } } return undefined; } + function getImmediatelyInvokedFunctionExpression(func) { + if (isFunctionExpressionOrArrowFunction(func)) { + var prev = func; + var parent_8 = func.parent; + while (parent_8.kind === 178 /* ParenthesizedExpression */) { + prev = parent_8; + parent_8 = parent_8.parent; + } + if (parent_8.kind === 174 /* CallExpression */ && parent_8.expression === prev) { + return parent_8; + } + } + } // In a variable, parameter or property declaration with a type annotation, - // the contextual type of an initializer expression is the type of the variable, parameter or property. - // Otherwise, in a parameter declaration of a contextually typed function expression, - // the contextual type of an initializer expression is the contextual type of the parameter. + // the contextual type of an initializer expression is the type of the variable, parameter or property. + // Otherwise, in a parameter declaration of a contextually typed function expression, + // the contextual type of an initializer expression is the contextual type of the parameter. // Otherwise, in a variable or parameter declaration with a binding pattern name, // the contextual type of an initializer expression is the type implied by the binding pattern. // Otherwise, in a binding pattern inside a variable or parameter declaration, @@ -22672,7 +23338,7 @@ var ts; if (declaration.type) { return getTypeFromTypeNode(declaration.type); } - if (declaration.kind === 141 /* Parameter */) { + if (declaration.kind === 142 /* Parameter */) { var type = getContextuallyTypedParameterType(declaration); if (type) { return type; @@ -22717,7 +23383,7 @@ var ts; } function isInParameterInitializerBeforeContainingFunction(node) { while (node.parent && !ts.isFunctionLike(node.parent)) { - if (node.parent.kind === 141 /* Parameter */ && node.parent.initializer === node) { + if (node.parent.kind === 142 /* Parameter */ && node.parent.initializer === node) { return true; } node = node.parent; @@ -22728,8 +23394,8 @@ var ts; // If the containing function has a return type annotation, is a constructor, or is a get accessor whose // corresponding set accessor has a type annotation, return statements in the function are contextually typed if (functionDecl.type || - functionDecl.kind === 147 /* Constructor */ || - functionDecl.kind === 148 /* GetAccessor */ && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(functionDecl.symbol, 149 /* SetAccessor */))) { + functionDecl.kind === 148 /* Constructor */ || + functionDecl.kind === 149 /* GetAccessor */ && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(functionDecl.symbol, 150 /* SetAccessor */))) { return getReturnTypeOfSignature(getSignatureFromDeclaration(functionDecl)); } // Otherwise, if the containing function is contextually typed by a function type with exactly one call signature @@ -22745,13 +23411,13 @@ var ts; var args = getEffectiveCallArguments(callTarget); var argIndex = ts.indexOf(args, arg); if (argIndex >= 0) { - var signature = getResolvedSignature(callTarget); + var signature = getResolvedOrAnySignature(callTarget); return getTypeAtPosition(signature, argIndex); } return undefined; } function getContextualTypeForSubstitutionExpression(template, substitutionExpression) { - if (template.parent.kind === 175 /* TaggedTemplateExpression */) { + if (template.parent.kind === 176 /* TaggedTemplateExpression */) { return getContextualTypeForArgument(template.parent, substitutionExpression); } return undefined; @@ -22878,13 +23544,13 @@ var ts; var kind = attribute.kind; var jsxElement = attribute.parent; var attrsType = getJsxElementAttributesType(jsxElement); - if (attribute.kind === 245 /* JsxAttribute */) { + if (attribute.kind === 246 /* JsxAttribute */) { if (!attrsType || isTypeAny(attrsType)) { return undefined; } return getTypeOfPropertyOfType(attrsType, attribute.name.text); } - else if (attribute.kind === 246 /* JsxSpreadAttribute */) { + else if (attribute.kind === 247 /* JsxSpreadAttribute */) { return attrsType; } ts.Debug.fail("Expected JsxAttribute or JsxSpreadAttribute, got ts.SyntaxKind[" + kind + "]"); @@ -22922,40 +23588,40 @@ var ts; } var parent = node.parent; switch (parent.kind) { - case 217 /* VariableDeclaration */: - case 141 /* Parameter */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 168 /* BindingElement */: + case 218 /* VariableDeclaration */: + case 142 /* Parameter */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 169 /* BindingElement */: return getContextualTypeForInitializerExpression(node); - case 179 /* ArrowFunction */: - case 210 /* ReturnStatement */: + case 180 /* ArrowFunction */: + case 211 /* ReturnStatement */: return getContextualTypeForReturnExpression(node); - case 189 /* YieldExpression */: + case 190 /* YieldExpression */: return getContextualTypeForYieldOperand(parent); - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: return getContextualTypeForArgument(parent, node); - case 176 /* TypeAssertionExpression */: - case 194 /* AsExpression */: + case 177 /* TypeAssertionExpression */: + case 195 /* AsExpression */: return getTypeFromTypeNode(parent.type); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return getContextualTypeForBinaryOperand(node); - case 252 /* PropertyAssignment */: + case 253 /* PropertyAssignment */: return getContextualTypeForObjectLiteralElement(parent); - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: return getContextualTypeForElementExpression(node); - case 187 /* ConditionalExpression */: + case 188 /* ConditionalExpression */: return getContextualTypeForConditionalOperand(node); - case 196 /* TemplateSpan */: - ts.Debug.assert(parent.parent.kind === 188 /* TemplateExpression */); + case 197 /* TemplateSpan */: + ts.Debug.assert(parent.parent.kind === 189 /* TemplateExpression */); return getContextualTypeForSubstitutionExpression(parent.parent, node); - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return getContextualType(parent); - case 247 /* JsxExpression */: + case 248 /* JsxExpression */: return getContextualType(parent); - case 245 /* JsxAttribute */: - case 246 /* JsxSpreadAttribute */: + case 246 /* JsxAttribute */: + case 247 /* JsxSpreadAttribute */: return getContextualTypeForJsxAttribute(parent); } return undefined; @@ -22972,7 +23638,7 @@ var ts; } } function isFunctionExpressionOrArrowFunction(node) { - return node.kind === 178 /* FunctionExpression */ || node.kind === 179 /* ArrowFunction */; + return node.kind === 179 /* FunctionExpression */ || node.kind === 180 /* ArrowFunction */; } function getContextualSignatureForFunctionLikeDeclaration(node) { // Only function expressions, arrow functions, and object literal methods are contextually typed. @@ -22980,16 +23646,19 @@ var ts; ? getContextualSignature(node) : undefined; } + function getContextualTypeForFunctionLikeDeclaration(node) { + return ts.isObjectLiteralMethod(node) ? + getContextualTypeForObjectLiteralMethod(node) : + getApparentTypeOfContextualType(node); + } // Return the contextual signature for a given expression node. A contextual type provides a // contextual signature if it has a single call signature and if that call signature is non-generic. // If the contextual type is a union type, get the signature from each type possible and if they are // all identical ignoring their return type, the result is same signature but with return type as // union type of return types from these signatures function getContextualSignature(node) { - ts.Debug.assert(node.kind !== 146 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); - var type = ts.isObjectLiteralMethod(node) - ? getContextualTypeForObjectLiteralMethod(node) - : getApparentTypeOfContextualType(node); + ts.Debug.assert(node.kind !== 147 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + var type = getContextualTypeForFunctionLikeDeclaration(node); if (!type) { return undefined; } @@ -23044,41 +23713,6 @@ var ts; function isInferentialContext(mapper) { return mapper && mapper.context; } - // Return the root assignment node of an assignment target - function getAssignmentRoot(node) { - while (node.parent.kind === 177 /* ParenthesizedExpression */) { - node = node.parent; - } - while (true) { - if (node.parent.kind === 252 /* PropertyAssignment */) { - node = node.parent.parent; - } - else if (node.parent.kind === 169 /* ArrayLiteralExpression */) { - node = node.parent; - } - else { - break; - } - } - var parent = node.parent; - return parent.kind === 186 /* BinaryExpression */ && - parent.operatorToken.kind === 56 /* EqualsToken */ && - parent.left === node ? parent : undefined; - } - // A node is an assignment target if it is on the left hand side of an '=' token, if it is parented by a property - // assignment in an object literal that is an assignment target, or if it is parented by an array literal that is - // an assignment target. Examples include 'a = xxx', '{ p: a } = xxx', '[{ p: a}] = xxx'. - function isAssignmentTarget(node) { - return !!getAssignmentRoot(node); - } - function isCompoundAssignmentTarget(node) { - var parent = node.parent; - if (parent.kind === 186 /* BinaryExpression */ && parent.left === node) { - var operator = parent.operatorToken.kind; - return operator >= 56 /* FirstAssignment */ && operator <= 68 /* LastAssignment */; - } - return false; - } function checkSpreadElementExpression(node, contextualMapper) { // It is usually not safe to call checkExpressionCached if we can be contextually typing. // You can tell that we are contextually typing because of the contextualMapper parameter. @@ -23090,17 +23724,17 @@ var ts; return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, /*allowStringInput*/ false); } function hasDefaultValue(node) { - return (node.kind === 168 /* BindingElement */ && !!node.initializer) || - (node.kind === 186 /* BinaryExpression */ && node.operatorToken.kind === 56 /* EqualsToken */); + return (node.kind === 169 /* BindingElement */ && !!node.initializer) || + (node.kind === 187 /* BinaryExpression */ && node.operatorToken.kind === 56 /* EqualsToken */); } function checkArrayLiteral(node, contextualMapper) { var elements = node.elements; var hasSpreadElement = false; var elementTypes = []; - var inDestructuringPattern = isAssignmentTarget(node); + var inDestructuringPattern = ts.isAssignmentTarget(node); for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) { var e = elements_1[_i]; - if (inDestructuringPattern && e.kind === 190 /* SpreadElementExpression */) { + if (inDestructuringPattern && e.kind === 191 /* SpreadElementExpression */) { // Given the following situation: // var c: {}; // [...c] = ["", 0]; @@ -23124,7 +23758,7 @@ var ts; var type = checkExpression(e, contextualMapper); elementTypes.push(type); } - hasSpreadElement = hasSpreadElement || e.kind === 190 /* SpreadElementExpression */; + hasSpreadElement = hasSpreadElement || e.kind === 191 /* SpreadElementExpression */; } if (!hasSpreadElement) { // If array literal is actually a destructuring pattern, mark it as an implied type. We do this such @@ -23139,7 +23773,7 @@ var ts; var pattern = contextualType.pattern; // If array literal is contextually typed by a binding pattern or an assignment pattern, pad the resulting // tuple type with the corresponding binding or assignment element types to make the lengths equal. - if (pattern && (pattern.kind === 167 /* ArrayBindingPattern */ || pattern.kind === 169 /* ArrayLiteralExpression */)) { + if (pattern && (pattern.kind === 168 /* ArrayBindingPattern */ || pattern.kind === 170 /* ArrayLiteralExpression */)) { var patternElements = pattern.elements; for (var i = elementTypes.length; i < patternElements.length; i++) { var patternElement = patternElements[i]; @@ -23147,7 +23781,7 @@ var ts; elementTypes.push(contextualType.elementTypes[i]); } else { - if (patternElement.kind !== 192 /* OmittedExpression */) { + if (patternElement.kind !== 193 /* OmittedExpression */) { error(patternElement, ts.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value); } elementTypes.push(unknownType); @@ -23162,7 +23796,7 @@ var ts; return createArrayType(elementTypes.length ? getUnionType(elementTypes) : emptyArrayElementType); } function isNumericName(name) { - return name.kind === 139 /* ComputedPropertyName */ ? isNumericComputedName(name) : isNumericLiteralName(name.text); + return name.kind === 140 /* ComputedPropertyName */ ? isNumericComputedName(name) : isNumericLiteralName(name.text); } function isNumericComputedName(name) { // It seems odd to consider an expression of type Any to result in a numeric name, @@ -23222,14 +23856,14 @@ var ts; return createIndexInfo(unionType, /*isReadonly*/ false); } function checkObjectLiteral(node, contextualMapper) { - var inDestructuringPattern = isAssignmentTarget(node); + var inDestructuringPattern = ts.isAssignmentTarget(node); // Grammar checking checkGrammarObjectLiteralExpression(node, inDestructuringPattern); var propertiesTable = {}; var propertiesArray = []; var contextualType = getApparentTypeOfContextualType(node); var contextualTypeHasPattern = contextualType && contextualType.pattern && - (contextualType.pattern.kind === 166 /* ObjectBindingPattern */ || contextualType.pattern.kind === 170 /* ObjectLiteralExpression */); + (contextualType.pattern.kind === 167 /* ObjectBindingPattern */ || contextualType.pattern.kind === 171 /* ObjectLiteralExpression */); var typeFlags = 0; var patternWithComputedProperties = false; var hasComputedStringProperty = false; @@ -23237,18 +23871,18 @@ var ts; for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { var memberDecl = _a[_i]; var member = memberDecl.symbol; - if (memberDecl.kind === 252 /* PropertyAssignment */ || - memberDecl.kind === 253 /* ShorthandPropertyAssignment */ || + if (memberDecl.kind === 253 /* PropertyAssignment */ || + memberDecl.kind === 254 /* ShorthandPropertyAssignment */ || ts.isObjectLiteralMethod(memberDecl)) { var type = void 0; - if (memberDecl.kind === 252 /* PropertyAssignment */) { + if (memberDecl.kind === 253 /* PropertyAssignment */) { type = checkPropertyAssignment(memberDecl, contextualMapper); } - else if (memberDecl.kind === 146 /* MethodDeclaration */) { + else if (memberDecl.kind === 147 /* MethodDeclaration */) { type = checkObjectLiteralMethod(memberDecl, contextualMapper); } else { - ts.Debug.assert(memberDecl.kind === 253 /* ShorthandPropertyAssignment */); + ts.Debug.assert(memberDecl.kind === 254 /* ShorthandPropertyAssignment */); type = checkExpression(memberDecl.name, contextualMapper); } typeFlags |= type.flags; @@ -23256,8 +23890,8 @@ var ts; if (inDestructuringPattern) { // If object literal is an assignment pattern and if the assignment pattern specifies a default value // for the property, make the property optional. - var isOptional = (memberDecl.kind === 252 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) || - (memberDecl.kind === 253 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer); + var isOptional = (memberDecl.kind === 253 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) || + (memberDecl.kind === 254 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer); if (isOptional) { prop.flags |= 536870912 /* Optional */; } @@ -23291,7 +23925,7 @@ var ts; // an ordinary function declaration(section 6.1) with no parameters. // A set accessor declaration is processed in the same manner // as an ordinary function declaration with a single parameter and a Void return type. - ts.Debug.assert(memberDecl.kind === 148 /* GetAccessor */ || memberDecl.kind === 149 /* SetAccessor */); + ts.Debug.assert(memberDecl.kind === 149 /* GetAccessor */ || memberDecl.kind === 150 /* SetAccessor */); checkAccessorDeclaration(memberDecl); } if (ts.hasDynamicName(memberDecl)) { @@ -23349,13 +23983,13 @@ var ts; for (var _i = 0, _a = node.children; _i < _a.length; _i++) { var child = _a[_i]; switch (child.kind) { - case 247 /* JsxExpression */: + case 248 /* JsxExpression */: checkJsxExpression(child); break; - case 240 /* JsxElement */: + case 241 /* JsxElement */: checkJsxElement(child); break; - case 241 /* JsxSelfClosingElement */: + case 242 /* JsxSelfClosingElement */: checkJsxSelfClosingElement(child); break; } @@ -23373,7 +24007,7 @@ var ts; * Returns true iff React would emit this tag name as a string rather than an identifier or qualified name */ function isJsxIntrinsicIdentifier(tagName) { - if (tagName.kind === 138 /* QualifiedName */) { + if (tagName.kind === 139 /* QualifiedName */) { return false; } else { @@ -23484,13 +24118,13 @@ var ts; * element is not a class element, or the class element type cannot be determined, returns 'undefined'. * For example, in the element , the element instance type is `MyClass` (not `typeof MyClass`). */ - function getJsxElementInstanceType(node) { - var valueType = checkExpression(node.tagName); + function getJsxElementInstanceType(node, valueType) { + ts.Debug.assert(!(valueType.flags & 16384 /* Union */)); if (isTypeAny(valueType)) { // Short-circuit if the class tag is using an element type 'any' return anyType; } - // Resolve the signatures, preferring constructors + // Resolve the signatures, preferring constructor var signatures = getSignaturesOfType(valueType, 1 /* Construct */); if (signatures.length === 0) { // No construct signatures, try call signatures @@ -23535,6 +24169,94 @@ var ts; return undefined; } } + /** + * Given React element instance type and the class type, resolve the Jsx type + * Pass elemType to handle individual type in the union typed element type. + */ + function getResolvedJsxType(node, elemType, elemClassType) { + if (!elemType) { + elemType = checkExpression(node.tagName); + } + if (elemType.flags & 16384 /* Union */) { + var types = elemType.types; + return getUnionType(types.map(function (type) { + return getResolvedJsxType(node, type, elemClassType); + })); + } + // Get the element instance type (the result of newing or invoking this tag) + var elemInstanceType = getJsxElementInstanceType(node, elemType); + if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { + // Is this is a stateless function component? See if its single signature's return type is + // assignable to the JSX Element Type + if (jsxElementType) { + var callSignatures = elemType && getSignaturesOfType(elemType, 0 /* Call */); + var callSignature = callSignatures && callSignatures.length > 0 && callSignatures[0]; + var callReturnType = callSignature && getReturnTypeOfSignature(callSignature); + var paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0])); + if (callReturnType && isTypeAssignableTo(callReturnType, jsxElementType)) { + // Intersect in JSX.IntrinsicAttributes if it exists + var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes); + if (intrinsicAttributes !== unknownType) { + paramType = intersectTypes(intrinsicAttributes, paramType); + } + return paramType; + } + } + } + // Issue an error if this return type isn't assignable to JSX.ElementClass + if (elemClassType) { + checkTypeRelatedTo(elemInstanceType, elemClassType, assignableRelation, node, 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) { + // There is no type ElementAttributesProperty, return 'any' + return anyType; + } + else if (propsName === "") { + // If there is no e.g. 'props' member in ElementAttributesProperty, use the element class type instead + return elemInstanceType; + } + else { + var attributesType = getTypeOfPropertyOfType(elemInstanceType, propsName); + if (!attributesType) { + // There is no property named 'props' on this instance type + return emptyObjectType; + } + else if (isTypeAny(attributesType) || (attributesType === unknownType)) { + // Props is of type 'any' or unknown + return attributesType; + } + else if (attributesType.flags & 16384 /* Union */) { + // Props cannot be a union type + error(node.tagName, ts.Diagnostics.JSX_element_attributes_type_0_may_not_be_a_union_type, typeToString(attributesType)); + return anyType; + } + else { + // Normal case -- add in IntrinsicClassElements and IntrinsicElements + 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; + } + } + } /** * Given an opening/self-closing element, get the 'element attributes type', i.e. the type that tells * us which attributes are valid on a given element. @@ -23550,85 +24272,14 @@ var ts; else if (links.jsxFlags & 2 /* IntrinsicIndexedElement */) { return links.resolvedJsxType = getIndexInfoOfSymbol(symbol, 0 /* String */).type; } + else { + return links.resolvedJsxType = unknownType; + } } else { - // Get the element instance type (the result of newing or invoking this tag) - var elemInstanceType = getJsxElementInstanceType(node); var elemClassType = getJsxGlobalElementClassType(); - if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { - // Is this is a stateless function component? See if its single signature's return type is - // assignable to the JSX Element Type - if (jsxElementType) { - var elemType = checkExpression(node.tagName); - var callSignatures = elemType && getSignaturesOfType(elemType, 0 /* Call */); - var callSignature = callSignatures && callSignatures.length > 0 && callSignatures[0]; - var callReturnType = callSignature && getReturnTypeOfSignature(callSignature); - var paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0])); - if (callReturnType && isTypeAssignableTo(callReturnType, jsxElementType)) { - // Intersect in JSX.IntrinsicAttributes if it exists - var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes); - if (intrinsicAttributes !== unknownType) { - paramType = intersectTypes(intrinsicAttributes, paramType); - } - return links.resolvedJsxType = paramType; - } - } - } - // Issue an error if this return type isn't assignable to JSX.ElementClass - if (elemClassType) { - checkTypeRelatedTo(elemInstanceType, elemClassType, assignableRelation, node, ts.Diagnostics.JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements); - } - if (isTypeAny(elemInstanceType)) { - return links.resolvedJsxType = elemInstanceType; - } - var propsName = getJsxElementPropertiesName(); - if (propsName === undefined) { - // There is no type ElementAttributesProperty, return 'any' - return links.resolvedJsxType = anyType; - } - else if (propsName === "") { - // If there is no e.g. 'props' member in ElementAttributesProperty, use the element class type instead - return links.resolvedJsxType = elemInstanceType; - } - else { - var attributesType = getTypeOfPropertyOfType(elemInstanceType, propsName); - if (!attributesType) { - // There is no property named 'props' on this instance type - return links.resolvedJsxType = emptyObjectType; - } - else if (isTypeAny(attributesType) || (attributesType === unknownType)) { - // Props is of type 'any' or unknown - return links.resolvedJsxType = attributesType; - } - else if (attributesType.flags & 16384 /* Union */) { - // Props cannot be a union type - error(node.tagName, ts.Diagnostics.JSX_element_attributes_type_0_may_not_be_a_union_type, typeToString(attributesType)); - return links.resolvedJsxType = anyType; - } - else { - // Normal case -- add in IntrinsicClassElements and IntrinsicElements - 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 links.resolvedJsxType = apparentAttributesType; - } - } + return links.resolvedJsxType = getResolvedJsxType(node, undefined, elemClassType); } - return links.resolvedJsxType = unknownType; } return links.resolvedJsxType; } @@ -23682,11 +24333,11 @@ var ts; // thus should have their types ignored var sawSpreadedAny = false; for (var i = node.attributes.length - 1; i >= 0; i--) { - if (node.attributes[i].kind === 245 /* JsxAttribute */) { + if (node.attributes[i].kind === 246 /* JsxAttribute */) { checkJsxAttribute((node.attributes[i]), targetAttributesType, nameTable); } else { - ts.Debug.assert(node.attributes[i].kind === 246 /* JsxSpreadAttribute */); + ts.Debug.assert(node.attributes[i].kind === 247 /* JsxSpreadAttribute */); var spreadType = checkJsxSpreadAttribute((node.attributes[i]), targetAttributesType, nameTable); if (isTypeAny(spreadType)) { sawSpreadedAny = true; @@ -23716,7 +24367,7 @@ var ts; // If a symbol is a synthesized symbol with no value declaration, we assume it is a property. Example of this are the synthesized // '.prototype' property as well as synthesized tuple index properties. function getDeclarationKindFromSymbol(s) { - return s.valueDeclaration ? s.valueDeclaration.kind : 144 /* PropertyDeclaration */; + return s.valueDeclaration ? s.valueDeclaration.kind : 145 /* PropertyDeclaration */; } function getDeclarationFlagsFromSymbol(s) { return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : s.flags & 134217728 /* Prototype */ ? 4 /* Public */ | 32 /* Static */ : 0; @@ -23732,7 +24383,7 @@ var ts; function checkClassPropertyAccess(node, left, type, prop) { var flags = getDeclarationFlagsFromSymbol(prop); var declaringClass = getDeclaredTypeOfSymbol(getParentOfSymbol(prop)); - var errorNode = node.kind === 171 /* PropertyAccessExpression */ || node.kind === 217 /* VariableDeclaration */ ? + var errorNode = node.kind === 172 /* PropertyAccessExpression */ || node.kind === 218 /* VariableDeclaration */ ? node.name : node.right; if (left.kind === 95 /* SuperKeyword */) { @@ -23743,7 +24394,7 @@ var ts; // - In a static member function or static member accessor // where this references the constructor function object of a derived class, // a super property access is permitted and must specify a public static member function of the base class. - if (languageVersion < 2 /* ES6 */ && getDeclarationKindFromSymbol(prop) !== 146 /* MethodDeclaration */) { + if (languageVersion < 2 /* ES6 */ && getDeclarationKindFromSymbol(prop) !== 147 /* MethodDeclaration */) { // `prop` refers to a *property* declared in the super class // rather than a *method*, so it does not satisfy the above criteria. error(errorNode, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword); @@ -23805,8 +24456,14 @@ var ts; } function checkNonNullExpression(node) { var type = checkExpression(node); - if (strictNullChecks && getNullableKind(type)) { - error(node, ts.Diagnostics.Object_is_possibly_null_or_undefined); + if (strictNullChecks) { + var kind = getNullableKind(type); + if (kind) { + error(node, kind & 32 /* Undefined */ ? kind & 64 /* Null */ ? + ts.Diagnostics.Object_is_possibly_null_or_undefined : + ts.Diagnostics.Object_is_possibly_undefined : + ts.Diagnostics.Object_is_possibly_null); + } return getNonNullableType(type); } return type; @@ -23839,11 +24496,28 @@ var ts; checkClassPropertyAccess(node, left, apparentType, prop); } var propType = getTypeOfSymbol(prop); - return node.kind === 171 /* PropertyAccessExpression */ && prop.flags & 4 /* Property */ ? - getNarrowedTypeOfReference(propType, node) : propType; + if (node.kind !== 172 /* PropertyAccessExpression */ || ts.isAssignmentTarget(node) || + !(propType.flags & 16384 /* Union */) && !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */))) { + return propType; + } + var leftmostNode = getLeftmostIdentifierOrThis(node); + if (!leftmostNode) { + return propType; + } + if (leftmostNode.kind === 69 /* Identifier */) { + var leftmostSymbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(leftmostNode)); + if (!leftmostSymbol) { + return propType; + } + var declaration = leftmostSymbol.valueDeclaration; + if (!declaration || declaration.kind !== 218 /* VariableDeclaration */ && declaration.kind !== 142 /* Parameter */ && declaration.kind !== 169 /* BindingElement */) { + return propType; + } + } + return getFlowTypeOfReference(node, propType, /*assumeInitialized*/ true); } function isValidPropertyAccess(node, propertyName) { - var left = node.kind === 171 /* PropertyAccessExpression */ + var left = node.kind === 172 /* PropertyAccessExpression */ ? node.expression : node.left; var type = checkExpression(left); @@ -23860,7 +24534,7 @@ var ts; */ function getForInVariableSymbol(node) { var initializer = node.initializer; - if (initializer.kind === 218 /* VariableDeclarationList */) { + if (initializer.kind === 219 /* VariableDeclarationList */) { var variable = initializer.declarations[0]; if (variable && !ts.isBindingPattern(variable.name)) { return getSymbolOfNode(variable); @@ -23889,7 +24563,7 @@ var ts; var child = expr; var node = expr.parent; while (node) { - if (node.kind === 206 /* ForInStatement */ && + if (node.kind === 207 /* ForInStatement */ && child === node.statement && getForInVariableSymbol(node) === symbol && hasNumericPropertyNames(checkExpression(node.expression))) { @@ -23906,7 +24580,7 @@ var ts; // Grammar checking if (!node.argumentExpression) { var sourceFile = ts.getSourceFileOfNode(node); - if (node.parent.kind === 174 /* NewExpression */ && node.parent.expression === node) { + if (node.parent.kind === 175 /* NewExpression */ && 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); @@ -23991,7 +24665,7 @@ var ts; if (indexArgumentExpression.kind === 9 /* StringLiteral */ || indexArgumentExpression.kind === 8 /* NumericLiteral */) { return indexArgumentExpression.text; } - if (indexArgumentExpression.kind === 172 /* ElementAccessExpression */ || indexArgumentExpression.kind === 171 /* PropertyAccessExpression */) { + if (indexArgumentExpression.kind === 173 /* ElementAccessExpression */ || indexArgumentExpression.kind === 172 /* PropertyAccessExpression */) { var value = getConstantValue(indexArgumentExpression); if (value !== undefined) { return value.toString(); @@ -24046,10 +24720,10 @@ var ts; return true; } function resolveUntypedCall(node) { - if (node.kind === 175 /* TaggedTemplateExpression */) { + if (node.kind === 176 /* TaggedTemplateExpression */) { checkExpression(node.template); } - else if (node.kind !== 142 /* Decorator */) { + else if (node.kind !== 143 /* Decorator */) { ts.forEach(node.arguments, function (argument) { checkExpression(argument); }); @@ -24079,13 +24753,13 @@ var ts; for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) { var signature = signatures_2[_i]; var symbol = signature.declaration && getSymbolOfNode(signature.declaration); - var parent_7 = signature.declaration && signature.declaration.parent; + var parent_9 = signature.declaration && signature.declaration.parent; if (!lastSymbol || symbol === lastSymbol) { - if (lastParent && parent_7 === lastParent) { + if (lastParent && parent_9 === lastParent) { index++; } else { - lastParent = parent_7; + lastParent = parent_9; index = cutoffIndex; } } @@ -24093,7 +24767,7 @@ var ts; // current declaration belongs to a different symbol // set cutoffIndex so re-orderings in the future won't change result set from 0 to cutoffIndex index = cutoffIndex = result.length; - lastParent = parent_7; + lastParent = parent_9; } lastSymbol = symbol; // specialized signatures always need to be placed before non-specialized signatures regardless @@ -24115,7 +24789,7 @@ var ts; function getSpreadArgumentIndex(args) { for (var i = 0; i < args.length; i++) { var arg = args[i]; - if (arg && arg.kind === 190 /* SpreadElementExpression */) { + if (arg && arg.kind === 191 /* SpreadElementExpression */) { return i; } } @@ -24127,13 +24801,13 @@ var ts; var callIsIncomplete; // In incomplete call we want to be lenient when we have too few arguments var isDecorator; var spreadArgIndex = -1; - if (node.kind === 175 /* TaggedTemplateExpression */) { + if (node.kind === 176 /* TaggedTemplateExpression */) { var tagExpression = node; // Even if the call is incomplete, we'll have a missing expression as our last argument, // so we can say the count is just the arg list length adjustedArgCount = args.length; typeArguments = undefined; - if (tagExpression.template.kind === 188 /* TemplateExpression */) { + if (tagExpression.template.kind === 189 /* TemplateExpression */) { // If a tagged template expression lacks a tail literal, the call is incomplete. // Specifically, a template only can end in a TemplateTail or a Missing literal. var templateExpression = tagExpression.template; @@ -24150,7 +24824,7 @@ var ts; callIsIncomplete = !!templateLiteral.isUnterminated; } } - else if (node.kind === 142 /* Decorator */) { + else if (node.kind === 143 /* Decorator */) { isDecorator = true; typeArguments = undefined; adjustedArgCount = getEffectiveArgumentCount(node, /*args*/ undefined, signature); @@ -24159,7 +24833,7 @@ var ts; var callExpression = node; if (!callExpression.arguments) { // This only happens when we have something of the form: 'new C' - ts.Debug.assert(callExpression.kind === 174 /* NewExpression */); + ts.Debug.assert(callExpression.kind === 175 /* NewExpression */); return signature.minArgumentCount === 0; } // For IDE scenarios we may have an incomplete call, so a trailing comma is tantamount to adding another argument. @@ -24243,7 +24917,7 @@ var ts; for (var i = 0; i < argCount; i++) { var arg = getEffectiveArgument(node, args, i); // If the effective argument is 'undefined', then it is an argument that is present but is synthetic. - if (arg === undefined || arg.kind !== 192 /* OmittedExpression */) { + if (arg === undefined || arg.kind !== 193 /* OmittedExpression */) { var paramType = getTypeAtPosition(signature, i); var argType = getEffectiveArgumentType(node, i, arg); // If the effective argument type is 'undefined', there is no synthetic type @@ -24299,7 +24973,7 @@ var ts; return typeArgumentsAreAssignable; } function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) { - if (signature.thisType && signature.thisType !== voidType && node.kind !== 174 /* NewExpression */) { + if (signature.thisType && signature.thisType !== voidType && node.kind !== 175 /* NewExpression */) { // If the called expression is not of the form `x.f` or `x["f"]`, then sourceType = voidType // If the signature's 'this' type is voidType, then the check is skipped -- anything is compatible. // If the expression is a new expression, then the check is skipped. @@ -24316,7 +24990,7 @@ var ts; for (var i = 0; i < argCount; i++) { var arg = getEffectiveArgument(node, args, i); // If the effective argument is 'undefined', then it is an argument that is present but is synthetic. - if (arg === undefined || arg.kind !== 192 /* OmittedExpression */) { + if (arg === undefined || arg.kind !== 193 /* OmittedExpression */) { // Check spread elements against rest type (from arity check we know spread argument corresponds to a rest parameter) var paramType = getTypeAtPosition(signature, i); var argType = getEffectiveArgumentType(node, i, arg); @@ -24340,12 +25014,12 @@ var ts; * Returns the this argument in calls like x.f(...) and x[f](...). Undefined otherwise. */ function getThisArgumentOfCall(node) { - if (node.kind === 173 /* CallExpression */) { + if (node.kind === 174 /* CallExpression */) { var callee = node.expression; - if (callee.kind === 171 /* PropertyAccessExpression */) { + if (callee.kind === 172 /* PropertyAccessExpression */) { return callee.expression; } - else if (callee.kind === 172 /* ElementAccessExpression */) { + else if (callee.kind === 173 /* ElementAccessExpression */) { return callee.expression; } } @@ -24361,16 +25035,16 @@ var ts; */ function getEffectiveCallArguments(node) { var args; - if (node.kind === 175 /* TaggedTemplateExpression */) { + if (node.kind === 176 /* TaggedTemplateExpression */) { var template = node.template; args = [undefined]; - if (template.kind === 188 /* TemplateExpression */) { + if (template.kind === 189 /* TemplateExpression */) { ts.forEach(template.templateSpans, function (span) { args.push(span.expression); }); } } - else if (node.kind === 142 /* Decorator */) { + else if (node.kind === 143 /* Decorator */) { // For a decorator, we return undefined as we will determine // the number and types of arguments for a decorator using // `getEffectiveArgumentCount` and `getEffectiveArgumentType` below. @@ -24395,19 +25069,19 @@ var ts; * Otherwise, the argument count is the length of the 'args' array. */ function getEffectiveArgumentCount(node, args, signature) { - if (node.kind === 142 /* Decorator */) { + if (node.kind === 143 /* Decorator */) { switch (node.parent.kind) { - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: // A class decorator will have one argument (see `ClassDecorator` in core.d.ts) return 1; - case 144 /* PropertyDeclaration */: + case 145 /* PropertyDeclaration */: // A property declaration decorator will have two arguments (see // `PropertyDecorator` in core.d.ts) return 2; - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: // A method or accessor declaration decorator will have two or three arguments (see // `PropertyDecorator` and `MethodDecorator` in core.d.ts) // If we are emitting decorators for ES3, we will only pass two arguments. @@ -24417,7 +25091,7 @@ var ts; // If the method decorator signature only accepts a target and a key, we will only // type check those arguments. return signature.parameters.length >= 3 ? 3 : 2; - case 141 /* Parameter */: + case 142 /* Parameter */: // A parameter declaration decorator will have three arguments (see // `ParameterDecorator` in core.d.ts) return 3; @@ -24441,25 +25115,25 @@ var ts; */ function getEffectiveDecoratorFirstArgumentType(node) { // The first argument to a decorator is its `target`. - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { // For a class decorator, the `target` is the type of the class (e.g. the // "static" or "constructor" side of the class) var classSymbol = getSymbolOfNode(node); return getTypeOfSymbol(classSymbol); } - if (node.kind === 141 /* Parameter */) { + if (node.kind === 142 /* Parameter */) { // For a parameter decorator, the `target` is the parent type of the // parameter's containing method. node = node.parent; - if (node.kind === 147 /* Constructor */) { + if (node.kind === 148 /* Constructor */) { var classSymbol = getSymbolOfNode(node); return getTypeOfSymbol(classSymbol); } } - if (node.kind === 144 /* PropertyDeclaration */ || - node.kind === 146 /* MethodDeclaration */ || - node.kind === 148 /* GetAccessor */ || - node.kind === 149 /* SetAccessor */) { + if (node.kind === 145 /* PropertyDeclaration */ || + node.kind === 147 /* MethodDeclaration */ || + node.kind === 149 /* GetAccessor */ || + node.kind === 150 /* SetAccessor */) { // For a property or method decorator, the `target` is the // "static"-side type of the parent of the member if the member is // declared "static"; otherwise, it is the "instance"-side type of the @@ -24486,21 +25160,21 @@ var ts; */ function getEffectiveDecoratorSecondArgumentType(node) { // The second argument to a decorator is its `propertyKey` - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { ts.Debug.fail("Class decorators should not have a second synthetic argument."); return unknownType; } - if (node.kind === 141 /* Parameter */) { + if (node.kind === 142 /* Parameter */) { node = node.parent; - if (node.kind === 147 /* Constructor */) { + if (node.kind === 148 /* Constructor */) { // For a constructor parameter decorator, the `propertyKey` will be `undefined`. return anyType; } } - if (node.kind === 144 /* PropertyDeclaration */ || - node.kind === 146 /* MethodDeclaration */ || - node.kind === 148 /* GetAccessor */ || - node.kind === 149 /* SetAccessor */) { + if (node.kind === 145 /* PropertyDeclaration */ || + node.kind === 147 /* MethodDeclaration */ || + node.kind === 149 /* GetAccessor */ || + node.kind === 150 /* SetAccessor */) { // The `propertyKey` for a property or method decorator will be a // string literal type if the member name is an identifier, number, or string; // otherwise, if the member name is a computed property name it will @@ -24511,7 +25185,7 @@ var ts; case 8 /* NumericLiteral */: case 9 /* StringLiteral */: return getStringLiteralTypeForText(element.name.text); - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: var nameType = checkComputedPropertyName(element.name); if (isTypeOfKind(nameType, 16777216 /* ESSymbol */)) { return nameType; @@ -24537,21 +25211,21 @@ var ts; function getEffectiveDecoratorThirdArgumentType(node) { // The third argument to a decorator is either its `descriptor` for a method decorator // or its `parameterIndex` for a parameter decorator - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { ts.Debug.fail("Class decorators should not have a third synthetic argument."); return unknownType; } - if (node.kind === 141 /* Parameter */) { + if (node.kind === 142 /* Parameter */) { // The `parameterIndex` for a parameter decorator is always a number return numberType; } - if (node.kind === 144 /* PropertyDeclaration */) { + if (node.kind === 145 /* PropertyDeclaration */) { ts.Debug.fail("Property decorators should not have a third synthetic argument."); return unknownType; } - if (node.kind === 146 /* MethodDeclaration */ || - node.kind === 148 /* GetAccessor */ || - node.kind === 149 /* SetAccessor */) { + if (node.kind === 147 /* MethodDeclaration */ || + node.kind === 149 /* GetAccessor */ || + node.kind === 150 /* SetAccessor */) { // The `descriptor` for a method decorator will be a `TypedPropertyDescriptor` // for the type of the member. var propertyType = getTypeOfNode(node); @@ -24583,10 +25257,10 @@ var ts; // Decorators provide special arguments, a tagged template expression provides // a special first argument, and string literals get string literal types // unless we're reporting errors - if (node.kind === 142 /* Decorator */) { + if (node.kind === 143 /* Decorator */) { return getEffectiveDecoratorArgumentType(node, argIndex); } - else if (argIndex === 0 && node.kind === 175 /* TaggedTemplateExpression */) { + else if (argIndex === 0 && node.kind === 176 /* TaggedTemplateExpression */) { return getGlobalTemplateStringsArrayType(); } // This is not a synthetic argument, so we return 'undefined' @@ -24598,8 +25272,8 @@ var ts; */ function getEffectiveArgument(node, args, argIndex) { // For a decorator or the first argument of a tagged template expression we return undefined. - if (node.kind === 142 /* Decorator */ || - (argIndex === 0 && node.kind === 175 /* TaggedTemplateExpression */)) { + if (node.kind === 143 /* Decorator */ || + (argIndex === 0 && node.kind === 176 /* TaggedTemplateExpression */)) { return undefined; } return args[argIndex]; @@ -24608,11 +25282,11 @@ var ts; * Gets the error node to use when reporting errors for an effective argument. */ function getEffectiveArgumentErrorNode(node, argIndex, arg) { - if (node.kind === 142 /* Decorator */) { + if (node.kind === 143 /* Decorator */) { // For a decorator, we use the expression of the decorator for error reporting. return node.expression; } - else if (argIndex === 0 && node.kind === 175 /* TaggedTemplateExpression */) { + else if (argIndex === 0 && node.kind === 176 /* TaggedTemplateExpression */) { // For a the first argument of a tagged template expression, we use the template of the tag for error reporting. return node.template; } @@ -24621,8 +25295,8 @@ var ts; } } function resolveCall(node, signatures, candidatesOutArray, headMessage) { - var isTaggedTemplate = node.kind === 175 /* TaggedTemplateExpression */; - var isDecorator = node.kind === 142 /* Decorator */; + var isTaggedTemplate = node.kind === 176 /* TaggedTemplateExpression */; + var isDecorator = node.kind === 143 /* Decorator */; var typeArguments; if (!isTaggedTemplate && !isDecorator) { typeArguments = node.typeArguments; @@ -25000,16 +25674,16 @@ var ts; */ function getDiagnosticHeadMessageForDecoratorResolution(node) { switch (node.parent.kind) { - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression; - case 141 /* Parameter */: + case 142 /* Parameter */: return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression; - case 144 /* PropertyDeclaration */: + case 145 /* PropertyDeclaration */: return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression; - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression; } } @@ -25036,6 +25710,19 @@ var ts; } return resolveCall(node, callSignatures, candidatesOutArray, headMessage); } + function resolveSignature(node, candidatesOutArray) { + switch (node.kind) { + case 174 /* CallExpression */: + return resolveCallExpression(node, candidatesOutArray); + case 175 /* NewExpression */: + return resolveNewExpression(node, candidatesOutArray); + case 176 /* TaggedTemplateExpression */: + return resolveTaggedTemplateExpression(node, candidatesOutArray); + case 143 /* Decorator */: + return resolveDecorator(node, candidatesOutArray); + } + ts.Debug.fail("Branch in 'resolveSignature' should be unreachable."); + } // candidatesOutArray is passed by signature help in the language service, and collectCandidates // must fill it up with the appropriate candidate signatures function getResolvedSignature(node, candidatesOutArray) { @@ -25044,25 +25731,22 @@ var ts; // However, it is possible that either candidatesOutArray was not passed in the first time, // or that a different candidatesOutArray was passed in. Therefore, we need to redo the work // to correctly fill the candidatesOutArray. - if (!links.resolvedSignature || candidatesOutArray) { - links.resolvedSignature = anySignature; - if (node.kind === 173 /* CallExpression */) { - links.resolvedSignature = resolveCallExpression(node, candidatesOutArray); - } - else if (node.kind === 174 /* NewExpression */) { - links.resolvedSignature = resolveNewExpression(node, candidatesOutArray); - } - else if (node.kind === 175 /* TaggedTemplateExpression */) { - links.resolvedSignature = resolveTaggedTemplateExpression(node, candidatesOutArray); - } - else if (node.kind === 142 /* Decorator */) { - links.resolvedSignature = resolveDecorator(node, candidatesOutArray); - } - else { - ts.Debug.fail("Branch in 'getResolvedSignature' should be unreachable."); - } + var cached = links.resolvedSignature; + if (cached && cached !== anySignature && !candidatesOutArray) { + return cached; } - return links.resolvedSignature; + links.resolvedSignature = anySignature; + var result = resolveSignature(node, candidatesOutArray); + // If signature resolution originated in control flow type analysis (for example to compute the + // assigned type in a flow assignment) we don't cache the result as it may be based on temporary + // types from the control flow analysis. + links.resolvedSignature = flowLoopStart === flowLoopCount ? result : cached; + return result; + } + function getResolvedOrAnySignature(node) { + // If we're already in the process of resolving the given signature, don't resolve again as + // that could cause infinite recursion. Instead, return anySignature. + return getNodeLinks(node).resolvedSignature === anySignature ? anySignature : getResolvedSignature(node); } function getInferredClassType(symbol) { var links = getSymbolLinks(symbol); @@ -25083,12 +25767,12 @@ var ts; if (node.expression.kind === 95 /* SuperKeyword */) { return voidType; } - if (node.kind === 174 /* NewExpression */) { + if (node.kind === 175 /* NewExpression */) { var declaration = signature.declaration; if (declaration && - declaration.kind !== 147 /* Constructor */ && - declaration.kind !== 151 /* ConstructSignature */ && - declaration.kind !== 156 /* ConstructorType */ && + declaration.kind !== 148 /* Constructor */ && + declaration.kind !== 152 /* ConstructSignature */ && + declaration.kind !== 157 /* ConstructorType */ && !ts.isJSDocConstructSignature(declaration)) { // When resolved signature is a call signature (and not a construct signature) the result type is any, unless // the declaring function had members created through 'x.prototype.y = expr' or 'this.y = expr' psuedodeclarations @@ -25160,7 +25844,7 @@ var ts; if (ts.isBindingPattern(node.name)) { for (var _i = 0, _a = node.name.elements; _i < _a.length; _i++) { var element = _a[_i]; - if (element.kind !== 192 /* OmittedExpression */) { + if (element.kind !== 193 /* OmittedExpression */) { if (element.name.kind === 69 /* Identifier */) { getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element); } @@ -25173,6 +25857,12 @@ var ts; var links = getSymbolLinks(parameter); if (!links.type) { links.type = instantiateType(contextualType, mapper); + // if inference didn't come up with anything but {}, fall back to the binding pattern if present. + if (links.type === emptyObjectType && + (parameter.valueDeclaration.name.kind === 167 /* ObjectBindingPattern */ || + parameter.valueDeclaration.name.kind === 168 /* ArrayBindingPattern */)) { + links.type = getTypeFromBindingPattern(parameter.valueDeclaration.name); + } assignBindingElementTypes(parameter.valueDeclaration); } else if (isInferentialContext(mapper)) { @@ -25232,7 +25922,7 @@ var ts; } var isAsync = ts.isAsyncFunctionLike(func); var type; - if (func.body.kind !== 198 /* Block */) { + if (func.body.kind !== 199 /* Block */) { type = checkExpressionCached(func.body, contextualMapper); if (isAsync) { // From within an async function you can return either a non-promise value or a promise. Any @@ -25258,6 +25948,9 @@ var ts; else { var hasImplicitReturn = !!(func.flags & 32768 /* HasImplicitReturn */); types = checkAndAggregateReturnExpressionTypes(func.body, contextualMapper, isAsync, hasImplicitReturn); + if (!types) { + return neverType; + } if (types.length === 0) { if (isAsync) { // For an async function, the return type will not be void, but rather a Promise for void. @@ -25268,9 +25961,7 @@ var ts; } return promiseType; } - else { - return voidType; - } + return voidType; } } // When yield/return statements are contextually typed we allow the return type to be a union type. @@ -25341,7 +26032,7 @@ var ts; // the native Promise type by the caller. type = checkAwaitedType(type, body.parent, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member); } - if (!ts.contains(aggregatedTypes, type)) { + if (type !== neverType && !ts.contains(aggregatedTypes, type)) { aggregatedTypes.push(type); } } @@ -25349,6 +26040,9 @@ var ts; hasOmittedExpressions = true; } }); + if (aggregatedTypes.length === 0 && !hasOmittedExpressions && !hasImplicitReturn) { + return undefined; + } if (strictNullChecks && aggregatedTypes.length && (hasOmittedExpressions || hasImplicitReturn)) { if (!ts.contains(aggregatedTypes, undefinedType)) { aggregatedTypes.push(undefinedType); @@ -25375,11 +26069,14 @@ var ts; } // If all we have is a function signature, or an arrow function with an expression body, then there is nothing to check. // also if HasImplicitReturn flag is not set this means that all codepaths in function body end with return or throw - if (ts.nodeIsMissing(func.body) || func.body.kind !== 198 /* Block */ || !(func.flags & 32768 /* HasImplicitReturn */)) { + if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 /* Block */ || !(func.flags & 32768 /* HasImplicitReturn */)) { return; } var hasExplicitReturn = func.flags & 65536 /* HasExplicitReturn */; - if (returnType && !hasExplicitReturn) { + if (returnType === neverType) { + error(func.type, ts.Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point); + } + else if (returnType && !hasExplicitReturn) { // minimal check: function has syntactic return type annotation and no explicit return statements in the body // this function does not conform to the specification. // NOTE: having returnType !== undefined is a precondition for entering this branch so func.type will always be present @@ -25405,10 +26102,10 @@ var ts; } } function checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper) { - ts.Debug.assert(node.kind !== 146 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 147 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); // Grammar checking var hasGrammarError = checkGrammarFunctionLikeDeclaration(node); - if (!hasGrammarError && node.kind === 178 /* FunctionExpression */) { + if (!hasGrammarError && node.kind === 179 /* FunctionExpression */) { checkGrammarForGenerator(node); } // The identityMapper object is used to indicate that function expressions are wildcards @@ -25449,14 +26146,14 @@ var ts; } } } - if (produceDiagnostics && node.kind !== 146 /* MethodDeclaration */ && node.kind !== 145 /* MethodSignature */) { + if (produceDiagnostics && node.kind !== 147 /* MethodDeclaration */ && node.kind !== 146 /* MethodSignature */) { checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); } return type; } function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) { - ts.Debug.assert(node.kind !== 146 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 147 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); var isAsync = ts.isAsyncFunctionLike(node); var returnOrPromisedType = node.type && (isAsync ? checkAsyncFunctionReturnType(node) : getTypeFromTypeNode(node.type)); if (!node.asteriskToken) { @@ -25472,7 +26169,7 @@ var ts; // checkFunctionExpressionBodies). So it must be done now. getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } - if (node.body.kind === 198 /* Block */) { + if (node.body.kind === 199 /* Block */) { checkSourceElement(node.body); } else { @@ -25516,23 +26213,23 @@ var ts; if (isReadonlySymbol(symbol)) { // Allow assignments to readonly properties within constructors of the same class declaration. if (symbol.flags & 4 /* Property */ && - (expr.kind === 171 /* PropertyAccessExpression */ || expr.kind === 172 /* ElementAccessExpression */) && + (expr.kind === 172 /* PropertyAccessExpression */ || expr.kind === 173 /* ElementAccessExpression */) && expr.expression.kind === 97 /* ThisKeyword */) { var func = ts.getContainingFunction(expr); - return !(func && func.kind === 147 /* Constructor */ && func.parent === symbol.valueDeclaration.parent); + return !(func && func.kind === 148 /* Constructor */ && func.parent === symbol.valueDeclaration.parent); } return true; } return false; } function isReferenceThroughNamespaceImport(expr) { - if (expr.kind === 171 /* PropertyAccessExpression */ || expr.kind === 172 /* ElementAccessExpression */) { + if (expr.kind === 172 /* PropertyAccessExpression */ || expr.kind === 173 /* ElementAccessExpression */) { var node = skipParenthesizedNodes(expr.expression); if (node.kind === 69 /* Identifier */) { var symbol = getNodeLinks(node).resolvedSymbol; if (symbol.flags & 8388608 /* Alias */) { var declaration = getDeclarationOfAliasSymbol(symbol); - return declaration && declaration.kind === 231 /* NamespaceImport */; + return declaration && declaration.kind === 232 /* NamespaceImport */; } } } @@ -25541,7 +26238,7 @@ var ts; function checkReferenceExpression(expr, invalidReferenceMessage, constantVariableMessage) { // References are combinations of identifiers, parentheses, and property accesses. var node = skipParenthesizedNodes(expr); - if (node.kind !== 69 /* Identifier */ && node.kind !== 171 /* PropertyAccessExpression */ && node.kind !== 172 /* ElementAccessExpression */) { + if (node.kind !== 69 /* Identifier */ && node.kind !== 172 /* PropertyAccessExpression */ && node.kind !== 173 /* ElementAccessExpression */) { error(expr, invalidReferenceMessage); return false; } @@ -25564,7 +26261,7 @@ var ts; } } } - else if (node.kind === 172 /* ElementAccessExpression */) { + else if (node.kind === 173 /* ElementAccessExpression */) { if (links.resolvedIndexInfo && links.resolvedIndexInfo.isReadonly) { error(expr, constantVariableMessage); return false; @@ -25712,38 +26409,41 @@ var ts; var properties = node.properties; for (var _i = 0, properties_3 = properties; _i < properties_3.length; _i++) { var p = properties_3[_i]; - if (p.kind === 252 /* PropertyAssignment */ || p.kind === 253 /* ShorthandPropertyAssignment */) { - var name_13 = p.name; - if (name_13.kind === 139 /* ComputedPropertyName */) { - checkComputedPropertyName(name_13); - } - if (isComputedNonLiteralName(name_13)) { - continue; - } - var text = getTextOfPropertyName(name_13); - var type = isTypeAny(sourceType) - ? sourceType - : getTypeOfPropertyOfType(sourceType, text) || - isNumericLiteralName(text) && getIndexTypeOfType(sourceType, 1 /* Number */) || - getIndexTypeOfType(sourceType, 0 /* String */); - if (type) { - if (p.kind === 253 /* ShorthandPropertyAssignment */) { - checkDestructuringAssignment(p, type); - } - else { - // non-shorthand property assignments should always have initializers - checkDestructuringAssignment(p.initializer, type); - } + checkObjectLiteralDestructuringPropertyAssignment(sourceType, p, contextualMapper); + } + return sourceType; + } + function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType, property, contextualMapper) { + if (property.kind === 253 /* PropertyAssignment */ || property.kind === 254 /* ShorthandPropertyAssignment */) { + var name_13 = property.name; + if (name_13.kind === 140 /* ComputedPropertyName */) { + checkComputedPropertyName(name_13); + } + if (isComputedNonLiteralName(name_13)) { + return undefined; + } + var text = getTextOfPropertyName(name_13); + var type = isTypeAny(objectLiteralType) + ? objectLiteralType + : getTypeOfPropertyOfType(objectLiteralType, text) || + isNumericLiteralName(text) && getIndexTypeOfType(objectLiteralType, 1 /* Number */) || + getIndexTypeOfType(objectLiteralType, 0 /* String */); + if (type) { + if (property.kind === 254 /* ShorthandPropertyAssignment */) { + return checkDestructuringAssignment(property, type); } else { - error(name_13, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(sourceType), ts.declarationNameToString(name_13)); + // non-shorthand property assignments should always have initializers + return checkDestructuringAssignment(property.initializer, type); } } else { - error(p, ts.Diagnostics.Property_assignment_expected); + error(name_13, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name_13)); } } - return sourceType; + else { + error(property, ts.Diagnostics.Property_assignment_expected); + } } function checkArrayLiteralAssignment(node, sourceType, contextualMapper) { // This elementType will be used if the specific property corresponding to this index is not @@ -25752,48 +26452,53 @@ var ts; var elementType = checkIteratedTypeOrElementType(sourceType, node, /*allowStringInput*/ false) || unknownType; var elements = node.elements; for (var i = 0; i < elements.length; i++) { - var e = elements[i]; - if (e.kind !== 192 /* OmittedExpression */) { - if (e.kind !== 190 /* SpreadElementExpression */) { - var propName = "" + i; - var type = isTypeAny(sourceType) - ? sourceType - : isTupleLikeType(sourceType) - ? getTypeOfPropertyOfType(sourceType, propName) - : elementType; - if (type) { - checkDestructuringAssignment(e, type, contextualMapper); - } - else { - if (isTupleType(sourceType)) { - error(e, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), sourceType.elementTypes.length, elements.length); - } - else { - error(e, ts.Diagnostics.Type_0_has_no_property_1, typeToString(sourceType), propName); - } - } + checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, elementType, contextualMapper); + } + return sourceType; + } + function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, contextualMapper) { + var elements = node.elements; + var element = elements[elementIndex]; + if (element.kind !== 193 /* OmittedExpression */) { + if (element.kind !== 191 /* SpreadElementExpression */) { + var propName = "" + elementIndex; + var type = isTypeAny(sourceType) + ? sourceType + : isTupleLikeType(sourceType) + ? getTypeOfPropertyOfType(sourceType, propName) + : elementType; + if (type) { + return checkDestructuringAssignment(element, type, contextualMapper); } else { - if (i < elements.length - 1) { - error(e, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern); + if (isTupleType(sourceType)) { + error(element, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), sourceType.elementTypes.length, elements.length); } else { - var restExpression = e.expression; - if (restExpression.kind === 186 /* BinaryExpression */ && restExpression.operatorToken.kind === 56 /* EqualsToken */) { - error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); - } - else { - checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper); - } + 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_an_array_destructuring_pattern); + } + else { + var restExpression = element.expression; + if (restExpression.kind === 187 /* BinaryExpression */ && restExpression.operatorToken.kind === 56 /* EqualsToken */) { + error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); + } + else { + return checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper); } } } } - return sourceType; + return undefined; } function checkDestructuringAssignment(exprOrAssignment, sourceType, contextualMapper) { var target; - if (exprOrAssignment.kind === 253 /* ShorthandPropertyAssignment */) { + if (exprOrAssignment.kind === 254 /* ShorthandPropertyAssignment */) { var prop = exprOrAssignment; if (prop.objectAssignmentInitializer) { checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, contextualMapper); @@ -25803,14 +26508,14 @@ var ts; else { target = exprOrAssignment; } - if (target.kind === 186 /* BinaryExpression */ && target.operatorToken.kind === 56 /* EqualsToken */) { + if (target.kind === 187 /* BinaryExpression */ && target.operatorToken.kind === 56 /* EqualsToken */) { checkBinaryExpression(target, contextualMapper); target = target.left; } - if (target.kind === 170 /* ObjectLiteralExpression */) { + if (target.kind === 171 /* ObjectLiteralExpression */) { return checkObjectLiteralAssignment(target, sourceType, contextualMapper); } - if (target.kind === 169 /* ArrayLiteralExpression */) { + if (target.kind === 170 /* ArrayLiteralExpression */) { return checkArrayLiteralAssignment(target, sourceType, contextualMapper); } return checkReferenceAssignment(target, sourceType, contextualMapper); @@ -25822,12 +26527,15 @@ var ts; } return sourceType; } + function isTypeEqualityComparableTo(source, target) { + return (target.flags & 96 /* Nullable */) !== 0 || isTypeComparableTo(source, target); + } function checkBinaryExpression(node, contextualMapper) { return checkBinaryLikeExpression(node.left, node.operatorToken, node.right, contextualMapper, node); } function checkBinaryLikeExpression(left, operatorToken, right, contextualMapper, errorNode) { var operator = operatorToken.kind; - if (operator === 56 /* EqualsToken */ && (left.kind === 170 /* ObjectLiteralExpression */ || left.kind === 169 /* ArrayLiteralExpression */)) { + if (operator === 56 /* EqualsToken */ && (left.kind === 171 /* ObjectLiteralExpression */ || left.kind === 170 /* ArrayLiteralExpression */)) { return checkDestructuringAssignment(left, checkExpression(right, contextualMapper), contextualMapper); } var leftType = checkExpression(left, contextualMapper); @@ -25929,15 +26637,17 @@ var ts; case 27 /* GreaterThanToken */: case 28 /* LessThanEqualsToken */: case 29 /* GreaterThanEqualsToken */: - if (!checkForDisallowedESSymbolOperand(operator)) { - return booleanType; + if (checkForDisallowedESSymbolOperand(operator)) { + if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) { + reportOperatorError(); + } } - // Fall through + return booleanType; case 30 /* EqualsEqualsToken */: case 31 /* ExclamationEqualsToken */: case 32 /* EqualsEqualsEqualsToken */: case 33 /* ExclamationEqualsEqualsToken */: - if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) { + if (!isTypeEqualityComparableTo(leftType, rightType) && !isTypeEqualityComparableTo(rightType, leftType)) { reportOperatorError(); } return booleanType; @@ -26088,7 +26798,13 @@ var ts; function checkExpressionCached(node, contextualMapper) { var links = getNodeLinks(node); if (!links.resolvedType) { + // When computing a type that we're going to cache, we need to ignore any ongoing control flow + // analysis because variables may have transient types in indeterminable states. Moving flowLoopStart + // to the top of the stack ensures all transient types are computed from a known point. + var saveFlowLoopStart = flowLoopStart; + flowLoopStart = flowLoopCount; links.resolvedType = checkExpression(node, contextualMapper); + flowLoopStart = saveFlowLoopStart; } return links.resolvedType; } @@ -26096,7 +26812,7 @@ var ts; // Do not use hasDynamicName here, because that returns false for well known symbols. // We want to perform checkComputedPropertyName for all computed properties, including // well known symbols. - if (node.name.kind === 139 /* ComputedPropertyName */) { + if (node.name.kind === 140 /* ComputedPropertyName */) { checkComputedPropertyName(node.name); } return checkExpression(node.initializer, contextualMapper); @@ -26107,7 +26823,7 @@ var ts; // Do not use hasDynamicName here, because that returns false for well known symbols. // We want to perform checkComputedPropertyName for all computed properties, including // well known symbols. - if (node.name.kind === 139 /* ComputedPropertyName */) { + if (node.name.kind === 140 /* ComputedPropertyName */) { checkComputedPropertyName(node.name); } var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); @@ -26130,14 +26846,14 @@ var ts; } // Checks an expression and returns its type. The contextualMapper parameter serves two purposes: When // contextualMapper is not undefined and not equal to the identityMapper function object it indicates that the - // expression is being inferentially typed (section 4.12.2 in spec) and provides the type mapper to use in + // expression is being inferentially typed (section 4.15.2 in spec) and provides the type mapper to use in // conjunction with the generic contextual type. When contextualMapper is equal to the identityMapper function // object, it serves as an indicator that all contained function and arrow expressions should be considered to // have the wildcard function type; this form of type check is used during overload resolution to exclude // contextually typed function and arrow expressions in the initial phase. function checkExpression(node, contextualMapper) { var type; - if (node.kind === 138 /* QualifiedName */) { + if (node.kind === 139 /* QualifiedName */) { type = checkQualifiedName(node); } else { @@ -26149,9 +26865,9 @@ var ts; // - 'left' in property access // - 'object' in indexed access // - target in rhs of import statement - var ok = (node.parent.kind === 171 /* PropertyAccessExpression */ && node.parent.expression === node) || - (node.parent.kind === 172 /* ElementAccessExpression */ && node.parent.expression === node) || - ((node.kind === 69 /* Identifier */ || node.kind === 138 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node)); + var ok = (node.parent.kind === 172 /* PropertyAccessExpression */ && node.parent.expression === node) || + (node.parent.kind === 173 /* ElementAccessExpression */ && node.parent.expression === node) || + ((node.kind === 69 /* Identifier */ || node.kind === 139 /* QualifiedName */) && 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); } @@ -26178,7 +26894,7 @@ var ts; return booleanType; case 8 /* NumericLiteral */: return checkNumericLiteral(node); - case 188 /* TemplateExpression */: + case 189 /* TemplateExpression */: return checkTemplateExpression(node); case 9 /* StringLiteral */: return checkStringLiteralExpression(node); @@ -26186,60 +26902,60 @@ var ts; return stringType; case 10 /* RegularExpressionLiteral */: return globalRegExpType; - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: return checkArrayLiteral(node, contextualMapper); - case 170 /* ObjectLiteralExpression */: + case 171 /* ObjectLiteralExpression */: return checkObjectLiteral(node, contextualMapper); - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return checkPropertyAccessExpression(node); - case 172 /* ElementAccessExpression */: + case 173 /* ElementAccessExpression */: return checkIndexedAccess(node); - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: return checkCallExpression(node); - case 175 /* TaggedTemplateExpression */: + case 176 /* TaggedTemplateExpression */: return checkTaggedTemplateExpression(node); - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return checkExpression(node.expression, contextualMapper); - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: return checkClassExpression(node); - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); - case 181 /* TypeOfExpression */: + case 182 /* TypeOfExpression */: return checkTypeOfExpression(node); - case 176 /* TypeAssertionExpression */: - case 194 /* AsExpression */: + case 177 /* TypeAssertionExpression */: + case 195 /* AsExpression */: return checkAssertion(node); - case 195 /* NonNullExpression */: + case 196 /* NonNullExpression */: return checkNonNullAssertion(node); - case 180 /* DeleteExpression */: + case 181 /* DeleteExpression */: return checkDeleteExpression(node); - case 182 /* VoidExpression */: + case 183 /* VoidExpression */: return checkVoidExpression(node); - case 183 /* AwaitExpression */: + case 184 /* AwaitExpression */: return checkAwaitExpression(node); - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: return checkPrefixUnaryExpression(node); - case 185 /* PostfixUnaryExpression */: + case 186 /* PostfixUnaryExpression */: return checkPostfixUnaryExpression(node); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return checkBinaryExpression(node, contextualMapper); - case 187 /* ConditionalExpression */: + case 188 /* ConditionalExpression */: return checkConditionalExpression(node, contextualMapper); - case 190 /* SpreadElementExpression */: + case 191 /* SpreadElementExpression */: return checkSpreadElementExpression(node, contextualMapper); - case 192 /* OmittedExpression */: + case 193 /* OmittedExpression */: return undefinedType; - case 189 /* YieldExpression */: + case 190 /* YieldExpression */: return checkYieldExpression(node); - case 247 /* JsxExpression */: + case 248 /* JsxExpression */: return checkJsxExpression(node); - case 240 /* JsxElement */: + case 241 /* JsxElement */: return checkJsxElement(node); - case 241 /* JsxSelfClosingElement */: + case 242 /* JsxSelfClosingElement */: return checkJsxSelfClosingElement(node); - case 242 /* JsxOpeningElement */: + case 243 /* JsxOpeningElement */: ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement"); } return unknownType; @@ -26265,9 +26981,9 @@ var ts; checkGrammarDecorators(node) || checkGrammarModifiers(node); checkVariableLikeDeclaration(node); var func = ts.getContainingFunction(node); - if (node.flags & 28 /* AccessibilityModifier */) { + if (node.flags & 92 /* ParameterPropertyModifier */) { func = ts.getContainingFunction(node); - if (!(func.kind === 147 /* Constructor */ && ts.nodeIsPresent(func.body))) { + if (!(func.kind === 148 /* Constructor */ && ts.nodeIsPresent(func.body))) { error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); } } @@ -26278,12 +26994,9 @@ var ts; if (ts.indexOf(func.parameters, node) !== 0) { error(node, ts.Diagnostics.A_this_parameter_must_be_the_first_parameter); } - if (func.kind === 147 /* Constructor */ || func.kind === 151 /* ConstructSignature */ || func.kind === 156 /* ConstructorType */) { + if (func.kind === 148 /* Constructor */ || func.kind === 152 /* ConstructSignature */ || func.kind === 157 /* ConstructorType */) { error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter); } - if (func.kind === 149 /* SetAccessor */) { - error(node, ts.Diagnostics.A_setter_cannot_have_a_this_parameter); - } } // Only check rest parameter type if it's not a binding pattern. Since binding patterns are // not allowed in a rest parameter, we already have an error from checkGrammarParameterList. @@ -26295,9 +27008,9 @@ var ts; if (!node.asteriskToken || !node.body) { return false; } - return node.kind === 146 /* MethodDeclaration */ || - node.kind === 219 /* FunctionDeclaration */ || - node.kind === 178 /* FunctionExpression */; + return node.kind === 147 /* MethodDeclaration */ || + node.kind === 220 /* FunctionDeclaration */ || + node.kind === 179 /* FunctionExpression */; } function getTypePredicateParameterIndex(parameterList, parameter) { if (parameterList) { @@ -26355,16 +27068,16 @@ var ts; } function getTypePredicateParent(node) { switch (node.parent.kind) { - case 179 /* ArrowFunction */: - case 150 /* CallSignature */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 155 /* FunctionType */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - var parent_8 = node.parent; - if (node === parent_8.type) { - return parent_8; + case 180 /* ArrowFunction */: + case 151 /* CallSignature */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 156 /* FunctionType */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + var parent_10 = node.parent; + if (node === parent_10.type) { + return parent_10; } } } @@ -26376,8 +27089,8 @@ var ts; error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName); return true; } - else if (name_15.kind === 167 /* ArrayBindingPattern */ || - name_15.kind === 166 /* ObjectBindingPattern */) { + else if (name_15.kind === 168 /* ArrayBindingPattern */ || + name_15.kind === 167 /* ObjectBindingPattern */) { if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_15, predicateVariableNode, predicateVariableName)) { return true; } @@ -26386,12 +27099,12 @@ var ts; } function checkSignatureDeclaration(node) { // Grammar checking - if (node.kind === 152 /* IndexSignature */) { + if (node.kind === 153 /* IndexSignature */) { checkGrammarIndexSignature(node); } - else if (node.kind === 155 /* FunctionType */ || node.kind === 219 /* FunctionDeclaration */ || node.kind === 156 /* ConstructorType */ || - node.kind === 150 /* CallSignature */ || node.kind === 147 /* Constructor */ || - node.kind === 151 /* ConstructSignature */) { + else if (node.kind === 156 /* FunctionType */ || node.kind === 220 /* FunctionDeclaration */ || node.kind === 157 /* ConstructorType */ || + node.kind === 151 /* CallSignature */ || node.kind === 148 /* Constructor */ || + node.kind === 152 /* ConstructSignature */) { checkGrammarFunctionLikeDeclaration(node); } checkTypeParameters(node.typeParameters); @@ -26403,10 +27116,10 @@ var ts; checkCollisionWithArgumentsInGeneratedCode(node); if (compilerOptions.noImplicitAny && !node.type) { switch (node.kind) { - case 151 /* ConstructSignature */: + case 152 /* ConstructSignature */: error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; - case 150 /* CallSignature */: + case 151 /* CallSignature */: error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; } @@ -26436,7 +27149,7 @@ var ts; } } function checkTypeForDuplicateIndexSignatures(node) { - if (node.kind === 221 /* InterfaceDeclaration */) { + if (node.kind === 222 /* InterfaceDeclaration */) { var nodeSymbol = getSymbolOfNode(node); // in case of merging interface declaration it is possible that we'll enter this check procedure several times for every declaration // to prevent this run check only for the first declaration of a given kind @@ -26456,7 +27169,7 @@ var ts; var declaration = decl; if (declaration.parameters.length === 1 && declaration.parameters[0].type) { switch (declaration.parameters[0].type.kind) { - case 131 /* StringKeyword */: + case 132 /* StringKeyword */: if (!seenStringIndexer) { seenStringIndexer = true; } @@ -26464,7 +27177,7 @@ var ts; error(declaration, ts.Diagnostics.Duplicate_string_index_signature); } break; - case 129 /* NumberKeyword */: + case 130 /* NumberKeyword */: if (!seenNumericIndexer) { seenNumericIndexer = true; } @@ -26531,12 +27244,12 @@ var ts; if (n.kind === 97 /* ThisKeyword */) { error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location); } - else if (n.kind !== 178 /* FunctionExpression */ && n.kind !== 219 /* FunctionDeclaration */) { + else if (n.kind !== 179 /* FunctionExpression */ && n.kind !== 220 /* FunctionDeclaration */) { ts.forEachChild(n, markThisReferencesAsErrors); } } function isInstancePropertyWithInitializer(n) { - return n.kind === 144 /* PropertyDeclaration */ && + return n.kind === 145 /* PropertyDeclaration */ && !(n.flags & 32 /* Static */) && !!n.initializer; } @@ -26557,7 +27270,7 @@ var ts; // - The constructor declares parameter properties // or the containing class declares instance member variables with initializers. var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) || - ts.forEach(node.parameters, function (p) { return p.flags & (4 /* Public */ | 8 /* Private */ | 16 /* Protected */); }); + ts.forEach(node.parameters, function (p) { return p.flags & 92 /* ParameterPropertyModifier */; }); // Skip past any prologue directives to find the first statement // to ensure that it was a super call. if (superCallShouldBeFirst) { @@ -26565,7 +27278,7 @@ var ts; var superCallStatement = void 0; for (var _i = 0, statements_2 = statements; _i < statements_2.length; _i++) { var statement = statements_2[_i]; - if (statement.kind === 201 /* ExpressionStatement */ && ts.isSuperCallExpression(statement.expression)) { + if (statement.kind === 202 /* ExpressionStatement */ && ts.isSuperCallExpression(statement.expression)) { superCallStatement = statement; break; } @@ -26589,7 +27302,7 @@ var ts; checkGrammarFunctionLikeDeclaration(node) || checkGrammarAccessor(node) || checkGrammarComputedPropertyName(node.name); checkDecorators(node); checkSignatureDeclaration(node); - if (node.kind === 148 /* GetAccessor */) { + if (node.kind === 149 /* GetAccessor */) { if (!ts.isInAmbientContext(node) && ts.nodeIsPresent(node.body) && (node.flags & 32768 /* HasImplicitReturn */)) { if (node.flags & 65536 /* HasExplicitReturn */) { if (compilerOptions.noImplicitReturns) { @@ -26604,13 +27317,13 @@ var ts; // Do not use hasDynamicName here, because that returns false for well known symbols. // We want to perform checkComputedPropertyName for all computed properties, including // well known symbols. - if (node.name.kind === 139 /* ComputedPropertyName */) { + if (node.name.kind === 140 /* ComputedPropertyName */) { checkComputedPropertyName(node.name); } if (!ts.hasDynamicName(node)) { // TypeScript 1.0 spec (April 2014): 8.4.3 // Accessors for the same member name must specify the same accessibility. - var otherKind = node.kind === 148 /* GetAccessor */ ? 149 /* SetAccessor */ : 148 /* GetAccessor */; + var otherKind = node.kind === 149 /* GetAccessor */ ? 150 /* SetAccessor */ : 149 /* GetAccessor */; var otherAccessor = ts.getDeclarationOfKind(node.symbol, otherKind); if (otherAccessor) { if (((node.flags & 28 /* AccessibilityModifier */) !== (otherAccessor.flags & 28 /* AccessibilityModifier */))) { @@ -26619,26 +27332,28 @@ var ts; if (((node.flags & 128 /* Abstract */) !== (otherAccessor.flags & 128 /* Abstract */))) { error(node.name, ts.Diagnostics.Accessors_must_both_be_abstract_or_non_abstract); } - var currentAccessorType = getAnnotatedAccessorType(node); - var otherAccessorType = getAnnotatedAccessorType(otherAccessor); // TypeScript 1.0 spec (April 2014): 4.5 // If both accessors include type annotations, the specified types must be identical. - if (currentAccessorType && otherAccessorType) { - if (!isTypeIdenticalTo(currentAccessorType, otherAccessorType)) { - error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); - } - } + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getAnnotatedAccessorType, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getAnnotatedAccessorThisType, ts.Diagnostics.get_and_set_accessor_must_have_the_same_this_type); } } getTypeOfAccessors(getSymbolOfNode(node)); } - if (node.parent.kind !== 170 /* ObjectLiteralExpression */) { + if (node.parent.kind !== 171 /* ObjectLiteralExpression */) { checkSourceElement(node.body); } else { checkNodeDeferred(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 checkAccessorDeferred(node) { checkSourceElement(node.body); } @@ -26707,9 +27422,9 @@ var ts; var flags = ts.getCombinedNodeFlags(n); // children of classes (even ambient classes) should not be marked as ambient or export // because those flags have no useful semantics there. - if (n.parent.kind !== 221 /* InterfaceDeclaration */ && - n.parent.kind !== 220 /* ClassDeclaration */ && - n.parent.kind !== 191 /* ClassExpression */ && + if (n.parent.kind !== 222 /* InterfaceDeclaration */ && + n.parent.kind !== 221 /* ClassDeclaration */ && + n.parent.kind !== 192 /* ClassExpression */ && ts.isInAmbientContext(n)) { if (!(flags & 2 /* Ambient */)) { // It is nested in an ambient context, which means it is automatically exported @@ -26797,7 +27512,7 @@ var ts; var errorNode_1 = subsequentNode.name || subsequentNode; // TODO(jfreeman): These are methods, so handle computed name case if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) { - var reportError = (node.kind === 146 /* MethodDeclaration */ || node.kind === 145 /* MethodSignature */) && + var reportError = (node.kind === 147 /* MethodDeclaration */ || node.kind === 146 /* MethodSignature */) && (node.flags & 32 /* Static */) !== (subsequentNode.flags & 32 /* Static */); // we can get here in two cases // 1. mixed static and instance class members @@ -26839,7 +27554,7 @@ var ts; var current = declarations_4[_i]; var node = current; var inAmbientContext = ts.isInAmbientContext(node); - var inAmbientContextOrInterface = node.parent.kind === 221 /* InterfaceDeclaration */ || node.parent.kind === 158 /* TypeLiteral */ || inAmbientContext; + var inAmbientContextOrInterface = node.parent.kind === 222 /* InterfaceDeclaration */ || node.parent.kind === 159 /* TypeLiteral */ || inAmbientContext; if (inAmbientContextOrInterface) { // check if declarations are consecutive only if they are non-ambient // 1. ambient declarations can be interleaved @@ -26850,7 +27565,7 @@ var ts; // 2. mixing ambient and non-ambient declarations is a separate error that will be reported - do not want to report an extra one previousDeclaration = undefined; } - if (node.kind === 219 /* FunctionDeclaration */ || node.kind === 146 /* MethodDeclaration */ || node.kind === 145 /* MethodSignature */ || node.kind === 147 /* Constructor */) { + if (node.kind === 220 /* FunctionDeclaration */ || node.kind === 147 /* MethodDeclaration */ || node.kind === 146 /* MethodSignature */ || node.kind === 148 /* Constructor */) { var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck); someNodeFlags |= currentNodeFlags; allNodeFlags &= currentNodeFlags; @@ -26893,7 +27608,7 @@ var ts; } // Abstract methods can't have an implementation -- in particular, they don't need one. if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && - !(lastSeenNonAmbientDeclaration.flags & 128 /* Abstract */)) { + !(lastSeenNonAmbientDeclaration.flags & 128 /* Abstract */) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } if (hasOverloads) { @@ -26972,16 +27687,16 @@ var ts; } function getDeclarationSpaces(d) { switch (d.kind) { - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return 2097152 /* ExportType */; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0 /* NonInstantiated */ ? 4194304 /* ExportNamespace */ | 1048576 /* ExportValue */ : 4194304 /* ExportNamespace */; - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: return 2097152 /* ExportType */ | 1048576 /* ExportValue */; - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: var result_1 = 0; var target = resolveAlias(getSymbolOfNode(d)); ts.forEach(target.declarations, function (d) { result_1 |= getDeclarationSpaces(d); }); @@ -27037,7 +27752,7 @@ var ts; if (thenSignatures.length === 0) { return undefined; } - var onfulfilledParameterType = getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)); + var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 131072 /* NEUndefined */); if (onfulfilledParameterType.flags & 1 /* Any */) { return undefined; } @@ -27262,22 +27977,22 @@ var ts; var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node); var errorInfo; switch (node.parent.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: var classSymbol = getSymbolOfNode(node.parent); var classConstructorType = getTypeOfSymbol(classSymbol); expectedReturnType = getUnionType([classConstructorType, voidType]); break; - case 141 /* Parameter */: + case 142 /* Parameter */: expectedReturnType = voidType; errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any); break; - case 144 /* PropertyDeclaration */: + case 145 /* PropertyDeclaration */: expectedReturnType = voidType; errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any); break; - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: var methodType = getTypeOfNode(node.parent); var descriptorType = createTypedPropertyDescriptorType(methodType); expectedReturnType = getUnionType([descriptorType, voidType]); @@ -27290,9 +28005,9 @@ var ts; // When we are emitting type metadata for decorators, we need to try to check the type // as if it were an expression so that we can emit the type in a value position when we // serialize the type metadata. - if (node && node.kind === 154 /* TypeReference */) { + if (node && node.kind === 155 /* TypeReference */) { var root = getFirstIdentifier(node.typeName); - var meaning = root.parent.kind === 154 /* TypeReference */ ? 793056 /* Type */ : 1536 /* Namespace */; + var meaning = root.parent.kind === 155 /* TypeReference */ ? 793056 /* Type */ : 1536 /* Namespace */; // Resolve type so we know which symbol is referenced var rootSymbol = resolveName(root, root.text, meaning | 8388608 /* Alias */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined); // Resolved symbol is alias @@ -27339,20 +28054,20 @@ var ts; if (compilerOptions.emitDecoratorMetadata) { // we only need to perform these checks if we are emitting serialized type metadata for the target of a decorator. switch (node.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: var constructor = ts.getFirstConstructorWithBody(node); if (constructor) { checkParameterTypeAnnotationsAsExpressions(constructor); } break; - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: checkParameterTypeAnnotationsAsExpressions(node); checkReturnTypeAnnotationAsExpression(node); break; - case 144 /* PropertyDeclaration */: - case 141 /* Parameter */: + case 145 /* PropertyDeclaration */: + case 142 /* Parameter */: checkTypeAnnotationAsExpression(node); break; } @@ -27375,7 +28090,7 @@ var ts; // Do not use hasDynamicName here, because that returns false for well known symbols. // We want to perform checkComputedPropertyName for all computed properties, including // well known symbols. - if (node.name && node.name.kind === 139 /* ComputedPropertyName */) { + if (node.name && node.name.kind === 140 /* ComputedPropertyName */) { // This check will account for methods in class/interface declarations, // as well as accessors in classes/object literals checkComputedPropertyName(node.name); @@ -27426,14 +28141,14 @@ var ts; } function checkBlock(node) { // Grammar checking for SyntaxKind.Block - if (node.kind === 198 /* Block */) { + if (node.kind === 199 /* Block */) { checkGrammarStatementInAmbientContext(node); } ts.forEach(node.statements, checkSourceElement); } function checkCollisionWithArgumentsInGeneratedCode(node) { // no rest parameters \ declaration context \ overload - no codegen impact - if (!ts.hasRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) { + if (!ts.hasDeclaredRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) { return; } ts.forEach(node.parameters, function (p) { @@ -27446,12 +28161,12 @@ var ts; if (!(identifier && identifier.text === name)) { return false; } - if (node.kind === 144 /* PropertyDeclaration */ || - node.kind === 143 /* PropertySignature */ || - node.kind === 146 /* MethodDeclaration */ || - node.kind === 145 /* MethodSignature */ || - node.kind === 148 /* GetAccessor */ || - node.kind === 149 /* SetAccessor */) { + if (node.kind === 145 /* PropertyDeclaration */ || + node.kind === 144 /* PropertySignature */ || + node.kind === 147 /* MethodDeclaration */ || + node.kind === 146 /* MethodSignature */ || + node.kind === 149 /* GetAccessor */ || + node.kind === 150 /* SetAccessor */) { // it is ok to have member named '_super' or '_this' - member access is always qualified return false; } @@ -27460,7 +28175,7 @@ var ts; return false; } var root = ts.getRootDeclaration(node); - if (root.kind === 141 /* Parameter */ && ts.nodeIsMissing(root.parent.body)) { + if (root.kind === 142 /* Parameter */ && ts.nodeIsMissing(root.parent.body)) { // just an overload - no codegen impact return false; } @@ -27513,12 +28228,12 @@ var ts; return; } // Uninstantiated modules shouldnt do this check - if (node.kind === 224 /* ModuleDeclaration */ && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { + if (node.kind === 225 /* ModuleDeclaration */ && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { return; } // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent var parent = getDeclarationContainer(node); - if (parent.kind === 255 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) { + if (parent.kind === 256 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) { // If the declaration happens to be in external module, report error that require and exports are reserved keywords error(name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name)); } @@ -27528,12 +28243,12 @@ var ts; return; } // Uninstantiated modules shouldnt do this check - if (node.kind === 224 /* ModuleDeclaration */ && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { + if (node.kind === 225 /* ModuleDeclaration */ && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { return; } // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent var parent = getDeclarationContainer(node); - if (parent.kind === 255 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2097152 /* HasAsyncFunctions */) { + if (parent.kind === 256 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2097152 /* HasAsyncFunctions */) { // If the declaration happens to be in external module, report error that Promise is a reserved identifier. 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)); } @@ -27568,7 +28283,7 @@ var ts; // skip variable declarations that don't have initializers // NOTE: in ES6 spec initializer is required in variable declarations where name is binding pattern // so we'll always treat binding elements as initialized - if (node.kind === 217 /* VariableDeclaration */ && !node.initializer) { + if (node.kind === 218 /* VariableDeclaration */ && !node.initializer) { return; } var symbol = getSymbolOfNode(node); @@ -27578,17 +28293,17 @@ var ts; localDeclarationSymbol !== symbol && localDeclarationSymbol.flags & 2 /* BlockScopedVariable */) { if (getDeclarationFlagsFromSymbol(localDeclarationSymbol) & 3072 /* BlockScoped */) { - var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 218 /* VariableDeclarationList */); - var container = varDeclList.parent.kind === 199 /* VariableStatement */ && varDeclList.parent.parent + var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 219 /* VariableDeclarationList */); + var container = varDeclList.parent.kind === 200 /* VariableStatement */ && varDeclList.parent.parent ? varDeclList.parent.parent : undefined; // names of block-scoped and function scoped variables can collide only // if block scoped variable is defined in the function\module\source file scope (because of variable hoisting) var namesShareScope = container && - (container.kind === 198 /* Block */ && ts.isFunctionLike(container.parent) || - container.kind === 225 /* ModuleBlock */ || - container.kind === 224 /* ModuleDeclaration */ || - container.kind === 255 /* SourceFile */); + (container.kind === 199 /* Block */ && ts.isFunctionLike(container.parent) || + container.kind === 226 /* ModuleBlock */ || + container.kind === 225 /* ModuleDeclaration */ || + container.kind === 256 /* SourceFile */); // here we know that function scoped variable is shadowed by block scoped one // if they are defined in the same scope - binder has already reported redeclaration error // otherwise if variable has an initializer - show error that initialization will fail @@ -27603,32 +28318,63 @@ var ts; } // Check that a parameter initializer contains no references to parameters declared to the right of itself function checkParameterInitializer(node) { - if (ts.getRootDeclaration(node).kind !== 141 /* Parameter */) { + if (ts.getRootDeclaration(node).kind !== 142 /* Parameter */) { return; } var func = ts.getContainingFunction(node); visit(node.initializer); function visit(n) { - if (n.kind === 69 /* Identifier */) { - var referencedSymbol = getNodeLinks(n).resolvedSymbol; + if (ts.isTypeNode(n) || ts.isDeclarationName(n)) { + // do not dive in types + // skip declaration names (i.e. in object literal expressions) + return; + } + if (n.kind === 172 /* PropertyAccessExpression */) { + // skip property names in property access expression + return visit(n.expression); + } + else if (n.kind === 69 /* Identifier */) { // check FunctionLikeDeclaration.locals (stores parameters\function local variable) - // if it contains entry with a specified name and if this entry matches the resolved symbol - if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(func.locals, referencedSymbol.name, 107455 /* Value */) === referencedSymbol) { - if (referencedSymbol.valueDeclaration.kind === 141 /* Parameter */) { - if (referencedSymbol.valueDeclaration === node) { - error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.declarationNameToString(node.name)); + // if it contains entry with a specified name + var symbol = resolveName(n, n.text, 107455 /* Value */ | 8388608 /* Alias */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined); + 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; + } + // locals map for function contain both parameters and function locals + // so we need to do a bit of extra work to check if reference is legal + var enclosingContainer = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration); + if (enclosingContainer === func) { + if (symbol.valueDeclaration.kind === 142 /* Parameter */) { + // it is ok to reference parameter in initializer if either + // - parameter is located strictly on the left of current parameter declaration + if (symbol.valueDeclaration.pos < node.pos) { return; } - if (referencedSymbol.valueDeclaration.pos < node.pos) { - // legal case - parameter initializer references some parameter strictly on left of current parameter declaration - return; + // - parameter is wrapped in function-like entity + var current = n; + while (current !== node.initializer) { + if (ts.isFunctionLike(current.parent)) { + return; + } + // computed property names/initializers in instance property declaration of class like entities + // are executed in constructor and thus deferred + if (current.parent.kind === 145 /* PropertyDeclaration */ && + !(current.parent.flags & 32 /* Static */) && + ts.isClassLike(current.parent.parent)) { + return; + } + current = current.parent; } } error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.declarationNameToString(node.name), ts.declarationNameToString(n)); } } else { - ts.forEachChild(n, visit); + return ts.forEachChild(n, visit); } } } @@ -27640,24 +28386,24 @@ var ts; // Do not use hasDynamicName here, because that returns false for well known symbols. // We want to perform checkComputedPropertyName for all computed properties, including // well known symbols. - if (node.name.kind === 139 /* ComputedPropertyName */) { + if (node.name.kind === 140 /* ComputedPropertyName */) { checkComputedPropertyName(node.name); if (node.initializer) { checkExpressionCached(node.initializer); } } - if (node.kind === 168 /* BindingElement */) { + if (node.kind === 169 /* BindingElement */) { // check computed properties inside property names of binding elements - if (node.propertyName && node.propertyName.kind === 139 /* ComputedPropertyName */) { + if (node.propertyName && node.propertyName.kind === 140 /* ComputedPropertyName */) { checkComputedPropertyName(node.propertyName); } // check private/protected variable access - var parent_9 = node.parent.parent; - var parentType = getTypeForBindingElementParent(parent_9); + var parent_11 = node.parent.parent; + var parentType = getTypeForBindingElementParent(parent_11); var name_17 = node.propertyName || node.name; var property = getPropertyOfType(parentType, getTextOfPropertyName(name_17)); - if (parent_9.initializer && property && getParentOfSymbol(property)) { - checkClassPropertyAccess(parent_9, parent_9.initializer, parentType, property); + if (parent_11.initializer && property && getParentOfSymbol(property)) { + checkClassPropertyAccess(parent_11, parent_11.initializer, parentType, property); } } // For a binding pattern, check contained binding elements @@ -27665,14 +28411,14 @@ var ts; ts.forEach(node.name.elements, checkSourceElement); } // For a parameter declaration with an initializer, error and exit if the containing function doesn't have a body - if (node.initializer && ts.getRootDeclaration(node).kind === 141 /* Parameter */ && ts.nodeIsMissing(ts.getContainingFunction(node).body)) { + if (node.initializer && ts.getRootDeclaration(node).kind === 142 /* Parameter */ && ts.nodeIsMissing(ts.getContainingFunction(node).body)) { error(node, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation); return; } // For a binding pattern, validate the initializer and exit if (ts.isBindingPattern(node.name)) { // Don't validate for-in initializer as it is already an error - if (node.initializer && node.parent.parent.kind !== 206 /* ForInStatement */) { + if (node.initializer && node.parent.parent.kind !== 207 /* ForInStatement */) { checkTypeAssignableTo(checkExpressionCached(node.initializer), getWidenedTypeForVariableLikeDeclaration(node), node, /*headMessage*/ undefined); checkParameterInitializer(node); } @@ -27683,7 +28429,7 @@ var ts; if (node === symbol.valueDeclaration) { // Node is the primary declaration of the symbol, just validate the initializer // Don't validate for-in initializer as it is already an error - if (node.initializer && node.parent.parent.kind !== 206 /* ForInStatement */) { + if (node.initializer && node.parent.parent.kind !== 207 /* ForInStatement */) { checkTypeAssignableTo(checkExpressionCached(node.initializer), type, node, /*headMessage*/ undefined); checkParameterInitializer(node); } @@ -27699,10 +28445,10 @@ var ts; checkTypeAssignableTo(checkExpressionCached(node.initializer), declarationType, node, /*headMessage*/ undefined); } } - if (node.kind !== 144 /* PropertyDeclaration */ && node.kind !== 143 /* PropertySignature */) { + if (node.kind !== 145 /* PropertyDeclaration */ && node.kind !== 144 /* PropertySignature */) { // We know we don't have a binding pattern or computed name here checkExportsOnMergedDeclarations(node); - if (node.kind === 217 /* VariableDeclaration */ || node.kind === 168 /* BindingElement */) { + if (node.kind === 218 /* VariableDeclaration */ || node.kind === 169 /* BindingElement */) { checkVarDeclaredNamesNotShadowed(node); } checkCollisionWithCapturedSuperVariable(node, node.name); @@ -27726,7 +28472,7 @@ var ts; } function checkGrammarDisallowedModifiersOnObjectLiteralExpressionMethod(node) { // We only disallow modifier on a method declaration if it is a property of object-literal-expression - if (node.modifiers && node.parent.kind === 170 /* ObjectLiteralExpression */) { + if (node.modifiers && node.parent.kind === 171 /* ObjectLiteralExpression */) { if (ts.isAsyncFunctionLike(node)) { if (node.modifiers.length > 1) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); @@ -27747,7 +28493,7 @@ var ts; checkGrammarStatementInAmbientContext(node); checkExpression(node.expression); checkSourceElement(node.thenStatement); - if (node.thenStatement.kind === 200 /* EmptyStatement */) { + if (node.thenStatement.kind === 201 /* EmptyStatement */) { error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement); } checkSourceElement(node.elseStatement); @@ -27767,12 +28513,12 @@ var ts; function checkForStatement(node) { // Grammar checking if (!checkGrammarStatementInAmbientContext(node)) { - if (node.initializer && node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer && node.initializer.kind === 219 /* VariableDeclarationList */) { checkGrammarVariableDeclarationList(node.initializer); } } if (node.initializer) { - if (node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer.kind === 219 /* VariableDeclarationList */) { ts.forEach(node.initializer.declarations, checkVariableDeclaration); } else { @@ -27792,14 +28538,14 @@ var ts; // via checkRightHandSideOfForOf. // If the LHS is an expression, check the LHS, as a destructuring assignment or as a reference. // Then check that the RHS is assignable to it. - if (node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer.kind === 219 /* VariableDeclarationList */) { checkForInOrForOfVariableDeclaration(node); } else { var varExpr = node.initializer; var iteratedType = checkRightHandSideOfForOf(node.expression); // There may be a destructuring assignment on the left side - if (varExpr.kind === 169 /* ArrayLiteralExpression */ || varExpr.kind === 170 /* ObjectLiteralExpression */) { + if (varExpr.kind === 170 /* ArrayLiteralExpression */ || varExpr.kind === 171 /* ObjectLiteralExpression */) { // iteratedType may be undefined. In this case, we still want to check the structure of // varExpr, in particular making sure it's a valid LeftHandSideExpression. But we'd like // to short circuit the type relation checking as much as possible, so we pass the unknownType. @@ -27828,7 +28574,7 @@ var ts; // for (let VarDecl in Expr) Statement // VarDecl must be a variable declaration without a type annotation that declares a variable of type Any, // and Expr must be an expression of type Any, an object type, or a type parameter type. - if (node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer.kind === 219 /* VariableDeclarationList */) { 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); @@ -27842,7 +28588,7 @@ var ts; // and Expr must be an expression of type Any, an object type, or a type parameter type. var varExpr = node.initializer; var leftType = checkExpression(varExpr); - if (varExpr.kind === 169 /* ArrayLiteralExpression */ || varExpr.kind === 170 /* ObjectLiteralExpression */) { + if (varExpr.kind === 170 /* ArrayLiteralExpression */ || varExpr.kind === 171 /* ObjectLiteralExpression */) { error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern); } else if (!isTypeAnyOrAllConstituentTypesHaveKind(leftType, 258 /* StringLike */)) { @@ -27889,7 +28635,9 @@ var ts; return indexType; } } - error(errorNode, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(inputType)); + if (errorNode) { + error(errorNode, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(inputType)); + } return unknownType; } /** @@ -28043,7 +28791,7 @@ var ts; arrayType = getUnionType(ts.filter(arrayOrStringType.types, function (t) { return !(t.flags & 258 /* StringLike */); })); } else if (arrayOrStringType.flags & 258 /* StringLike */) { - arrayType = emptyUnionType; + arrayType = neverType; } var hasStringConstituent = arrayOrStringType !== arrayType; var reportedError = false; @@ -28054,7 +28802,7 @@ var ts; } // Now that we've removed all the StringLike types, if no constituents remain, then the entire // arrayOrStringType was a string. - if (arrayType === emptyObjectType) { + if (arrayType === neverType) { return stringType; } } @@ -28087,7 +28835,7 @@ var ts; // TODO: Check that target label is valid } function isGetAccessorWithAnnotatedSetAccessor(node) { - return !!(node.kind === 148 /* GetAccessor */ && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 149 /* SetAccessor */))); + return !!(node.kind === 149 /* GetAccessor */ && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 150 /* SetAccessor */))); } function isUnwrappedReturnTypeVoidOrAny(func, returnType) { var unwrappedReturnType = ts.isAsyncFunctionLike(func) ? getPromisedType(returnType) : returnType; @@ -28105,7 +28853,7 @@ var ts; if (func) { var signature = getSignatureFromDeclaration(func); var returnType = getReturnTypeOfSignature(signature); - if (strictNullChecks || node.expression) { + if (strictNullChecks || node.expression || returnType === neverType) { var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType; if (func.asteriskToken) { // A generator does not need its return expressions checked against its return type. @@ -28114,12 +28862,12 @@ var ts; // for generators. return; } - if (func.kind === 149 /* SetAccessor */) { + if (func.kind === 150 /* SetAccessor */) { if (node.expression) { error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value); } } - else if (func.kind === 147 /* Constructor */) { + else if (func.kind === 148 /* Constructor */) { if (node.expression && !checkTypeAssignableTo(exprType, returnType, node.expression)) { error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); } @@ -28140,7 +28888,7 @@ var ts; } } } - else if (func.kind !== 147 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { + else if (func.kind !== 148 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { // The function has a return type, but the return statement doesn't have an expression. error(node, ts.Diagnostics.Not_all_code_paths_return_a_value); } @@ -28164,7 +28912,7 @@ var ts; var expressionType = checkExpression(node.expression); ts.forEach(node.caseBlock.clauses, function (clause) { // Grammar check for duplicate default clauses, skip if we already report duplicate default clause - if (clause.kind === 249 /* DefaultClause */ && !hasDuplicateDefaultClause) { + if (clause.kind === 250 /* DefaultClause */ && !hasDuplicateDefaultClause) { if (firstDefaultClause === undefined) { firstDefaultClause = clause; } @@ -28176,7 +28924,7 @@ var ts; hasDuplicateDefaultClause = true; } } - if (produceDiagnostics && clause.kind === 248 /* CaseClause */) { + if (produceDiagnostics && clause.kind === 249 /* CaseClause */) { var caseClause = clause; // TypeScript 1.0 spec (April 2014): 5.9 // In a 'switch' statement, each 'case' expression must be of a type that is comparable @@ -28198,7 +28946,7 @@ var ts; if (ts.isFunctionLike(current)) { break; } - if (current.kind === 213 /* LabeledStatement */ && current.label.text === node.label.text) { + if (current.kind === 214 /* LabeledStatement */ && current.label.text === node.label.text) { var sourceFile = ts.getSourceFileOfNode(node); grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNodeFromSourceText(sourceFile.text, node.label)); break; @@ -28303,7 +29051,7 @@ var ts; // perform property check if property or indexer is declared in 'type' // this allows to rule out cases when both property and indexer are inherited from the base class var errorNode; - if (prop.valueDeclaration.name.kind === 139 /* ComputedPropertyName */ || prop.parent === containingType.symbol) { + if (prop.valueDeclaration.name.kind === 140 /* ComputedPropertyName */ || prop.parent === containingType.symbol) { errorNode = prop.valueDeclaration; } else if (indexDeclaration) { @@ -28361,7 +29109,7 @@ var ts; var firstDecl; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 220 /* ClassDeclaration */ || declaration.kind === 221 /* InterfaceDeclaration */) { + if (declaration.kind === 221 /* ClassDeclaration */ || declaration.kind === 222 /* InterfaceDeclaration */) { if (!firstDecl) { firstDecl = declaration; } @@ -28517,7 +29265,7 @@ var ts; // If there is no declaration for the derived class (as in the case of class expressions), // then the class cannot be declared abstract. if (baseDeclarationFlags & 128 /* Abstract */ && (!derivedClassDecl || !(derivedClassDecl.flags & 128 /* Abstract */))) { - if (derivedClassDecl.kind === 191 /* ClassExpression */) { + if (derivedClassDecl.kind === 192 /* ClassExpression */) { error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType)); } else { @@ -28565,7 +29313,7 @@ var ts; } } function isAccessor(kind) { - return kind === 148 /* GetAccessor */ || kind === 149 /* SetAccessor */; + return kind === 149 /* GetAccessor */ || kind === 150 /* SetAccessor */; } function areTypeParametersIdentical(list1, list2) { if (!list1 && !list2) { @@ -28637,7 +29385,7 @@ var ts; var symbol = getSymbolOfNode(node); checkTypeParameterListsIdentical(node, symbol); // Only check this symbol once - var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 221 /* InterfaceDeclaration */); + var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 222 /* InterfaceDeclaration */); if (node === firstInterfaceDecl) { var type = getDeclaredTypeOfSymbol(symbol); var typeWithThis = getTypeWithThisArgument(type); @@ -28741,7 +29489,7 @@ var ts; return value; function evalConstant(e) { switch (e.kind) { - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: var value_1 = evalConstant(e.operand); if (value_1 === undefined) { return undefined; @@ -28752,7 +29500,7 @@ var ts; case 50 /* TildeToken */: return ~value_1; } return undefined; - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: var left = evalConstant(e.left); if (left === undefined) { return undefined; @@ -28777,11 +29525,11 @@ var ts; return undefined; case 8 /* NumericLiteral */: return +e.text; - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return evalConstant(e.expression); case 69 /* Identifier */: - case 172 /* ElementAccessExpression */: - case 171 /* PropertyAccessExpression */: + case 173 /* ElementAccessExpression */: + case 172 /* PropertyAccessExpression */: var member = initializer.parent; var currentType = getTypeOfSymbol(getSymbolOfNode(member.parent)); var enumType_1; @@ -28794,7 +29542,7 @@ var ts; } else { var expression = void 0; - if (e.kind === 172 /* ElementAccessExpression */) { + if (e.kind === 173 /* ElementAccessExpression */) { if (e.argumentExpression === undefined || e.argumentExpression.kind !== 9 /* StringLiteral */) { return undefined; @@ -28812,7 +29560,7 @@ var ts; if (current.kind === 69 /* Identifier */) { break; } - else if (current.kind === 171 /* PropertyAccessExpression */) { + else if (current.kind === 172 /* PropertyAccessExpression */) { current = current.expression; } else { @@ -28884,7 +29632,7 @@ var ts; var seenEnumMissingInitialInitializer_1 = false; ts.forEach(enumSymbol.declarations, function (declaration) { // return true if we hit a violation of the rule, false otherwise - if (declaration.kind !== 223 /* EnumDeclaration */) { + if (declaration.kind !== 224 /* EnumDeclaration */) { return false; } var enumDeclaration = declaration; @@ -28907,8 +29655,8 @@ var ts; var declarations = symbol.declarations; for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) { var declaration = declarations_5[_i]; - if ((declaration.kind === 220 /* ClassDeclaration */ || - (declaration.kind === 219 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) && + if ((declaration.kind === 221 /* ClassDeclaration */ || + (declaration.kind === 220 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) && !ts.isInAmbientContext(declaration)) { return declaration; } @@ -28970,7 +29718,7 @@ var ts; } // if the module merges with a class declaration in the same lexical scope, // we need to track this to ensure the correct emit. - var mergedClass = ts.getDeclarationOfKind(symbol, 220 /* ClassDeclaration */); + var mergedClass = ts.getDeclarationOfKind(symbol, 221 /* ClassDeclaration */); if (mergedClass && inSameLexicalScope(node, mergedClass)) { getNodeLinks(node).flags |= 32768 /* LexicalModuleMergesWithClass */; @@ -29016,28 +29764,23 @@ var ts; } function checkModuleAugmentationElement(node, isGlobalAugmentation) { switch (node.kind) { - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: // error each individual name in variable statement instead of marking the entire variable statement for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var decl = _a[_i]; checkModuleAugmentationElement(decl, isGlobalAugmentation); } break; - case 234 /* ExportAssignment */: - case 235 /* ExportDeclaration */: + case 235 /* ExportAssignment */: + case 236 /* ExportDeclaration */: grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations); break; - case 228 /* ImportEqualsDeclaration */: - if (node.moduleReference.kind !== 9 /* StringLiteral */) { - error(node.name, ts.Diagnostics.Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope); - break; - } - // fallthrough - case 229 /* ImportDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 230 /* ImportDeclaration */: grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module); break; - case 168 /* BindingElement */: - case 217 /* VariableDeclaration */: + case 169 /* BindingElement */: + case 218 /* VariableDeclaration */: var name_18 = node.name; if (ts.isBindingPattern(name_18)) { for (var _b = 0, _c = name_18.elements; _b < _c.length; _b++) { @@ -29048,12 +29791,15 @@ var ts; break; } // fallthrough - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: - case 219 /* FunctionDeclaration */: - case 221 /* InterfaceDeclaration */: - case 224 /* ModuleDeclaration */: - case 222 /* TypeAliasDeclaration */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: + case 220 /* FunctionDeclaration */: + case 222 /* InterfaceDeclaration */: + case 225 /* ModuleDeclaration */: + case 223 /* TypeAliasDeclaration */: + if (isGlobalAugmentation) { + return; + } var symbol = getSymbolOfNode(node); if (symbol) { // module augmentations cannot introduce new names on the top level scope of the module @@ -29062,17 +29808,8 @@ var ts; // 2. main check - report error if value declaration of the parent symbol is module augmentation) var reportError = !(symbol.flags & 33554432 /* Merged */); if (!reportError) { - if (isGlobalAugmentation) { - // global symbol should not have parent since it is not explicitly exported - reportError = symbol.parent !== undefined; - } - else { - // symbol should not originate in augmentation - reportError = ts.isExternalModuleAugmentation(symbol.parent.declarations[0]); - } - } - if (reportError) { - error(node, ts.Diagnostics.Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope); + // symbol should not originate in augmentation + reportError = ts.isExternalModuleAugmentation(symbol.parent.declarations[0]); } } break; @@ -29080,10 +29817,10 @@ var ts; } function getFirstIdentifier(node) { while (true) { - if (node.kind === 138 /* QualifiedName */) { + if (node.kind === 139 /* QualifiedName */) { node = node.left; } - else if (node.kind === 171 /* PropertyAccessExpression */) { + else if (node.kind === 172 /* PropertyAccessExpression */) { node = node.expression; } else { @@ -29099,9 +29836,9 @@ var ts; error(moduleName, ts.Diagnostics.String_literal_expected); return false; } - var inAmbientExternalModule = node.parent.kind === 225 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent); - if (node.parent.kind !== 255 /* SourceFile */ && !inAmbientExternalModule) { - error(moduleName, node.kind === 235 /* ExportDeclaration */ ? + var inAmbientExternalModule = node.parent.kind === 226 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent); + if (node.parent.kind !== 256 /* SourceFile */ && !inAmbientExternalModule) { + error(moduleName, node.kind === 236 /* ExportDeclaration */ ? ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace : ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module); return false; @@ -29134,7 +29871,7 @@ var ts; (symbol.flags & 793056 /* Type */ ? 793056 /* Type */ : 0) | (symbol.flags & 1536 /* Namespace */ ? 1536 /* Namespace */ : 0); if (target.flags & excludedMeanings) { - var message = node.kind === 237 /* ExportSpecifier */ ? + var message = node.kind === 238 /* ExportSpecifier */ ? 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)); @@ -29152,7 +29889,7 @@ var ts; // If we hit an import declaration in an illegal context, just bail out to avoid cascading errors. return; } - if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 959 /* Modifier */)) { + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023 /* Modifier */)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_import_declaration_cannot_have_modifiers); } if (checkExternalImportOrExportDeclaration(node)) { @@ -29162,7 +29899,7 @@ var ts; checkImportBinding(importClause); } if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 231 /* NamespaceImport */) { + if (importClause.namedBindings.kind === 232 /* NamespaceImport */) { checkImportBinding(importClause.namedBindings); } else { @@ -29211,7 +29948,7 @@ var ts; // If we hit an export in an illegal context, just bail out to avoid cascading errors. return; } - if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 959 /* Modifier */)) { + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023 /* Modifier */)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_declaration_cannot_have_modifiers); } if (!node.moduleSpecifier || checkExternalImportOrExportDeclaration(node)) { @@ -29219,8 +29956,8 @@ var ts; // export { x, y } // export { x, y } from "foo" ts.forEach(node.exportClause.elements, checkExportSpecifier); - var inAmbientExternalModule = node.parent.kind === 225 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent); - if (node.parent.kind !== 255 /* SourceFile */ && !inAmbientExternalModule) { + var inAmbientExternalModule = node.parent.kind === 226 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent); + if (node.parent.kind !== 256 /* SourceFile */ && !inAmbientExternalModule) { error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace); } } @@ -29234,7 +29971,7 @@ var ts; } } function checkGrammarModuleElementContext(node, errorMessage) { - if (node.parent.kind !== 255 /* SourceFile */ && node.parent.kind !== 225 /* ModuleBlock */ && node.parent.kind !== 224 /* ModuleDeclaration */) { + if (node.parent.kind !== 256 /* SourceFile */ && node.parent.kind !== 226 /* ModuleBlock */ && node.parent.kind !== 225 /* ModuleDeclaration */) { return grammarErrorOnFirstToken(node, errorMessage); } } @@ -29246,7 +29983,7 @@ var ts; var symbol = resolveName(exportedName, exportedName.text, 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */ | 8388608 /* Alias */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined); if (symbol && (symbol === undefinedSymbol || isGlobalSourceFile(getDeclarationContainer(symbol.declarations[0])))) { - error(exportedName, ts.Diagnostics.Cannot_re_export_name_that_is_not_defined_in_the_module); + error(exportedName, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, exportedName.text); } else { markExportAsReferenced(node); @@ -29258,13 +29995,13 @@ var ts; // If we hit an export assignment in an illegal context, just bail out to avoid cascading errors. return; } - var container = node.parent.kind === 255 /* SourceFile */ ? node.parent : node.parent.parent; - if (container.kind === 224 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) { + var container = node.parent.kind === 256 /* SourceFile */ ? node.parent : node.parent.parent; + if (container.kind === 225 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) { error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace); return; } // Grammar checking - if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 959 /* Modifier */)) { + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023 /* Modifier */)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); } if (node.expression.kind === 69 /* Identifier */) { @@ -29334,7 +30071,7 @@ var ts; links.exportsChecked = true; } function isNotOverload(declaration) { - return declaration.kind !== 219 /* FunctionDeclaration */ || !!declaration.body; + return declaration.kind !== 220 /* FunctionDeclaration */ || !!declaration.body; } } function checkSourceElement(node) { @@ -29346,118 +30083,118 @@ var ts; // Only bother checking on a few construct kinds. We don't want to be excessively // hitting the cancellation token on every node we check. switch (kind) { - case 224 /* ModuleDeclaration */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 219 /* FunctionDeclaration */: + case 225 /* ModuleDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 220 /* FunctionDeclaration */: cancellationToken.throwIfCancellationRequested(); } } switch (kind) { - case 140 /* TypeParameter */: + case 141 /* TypeParameter */: return checkTypeParameter(node); - case 141 /* Parameter */: + case 142 /* Parameter */: return checkParameter(node); - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return checkPropertyDeclaration(node); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: return checkSignatureDeclaration(node); - case 152 /* IndexSignature */: + case 153 /* IndexSignature */: return checkSignatureDeclaration(node); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: return checkMethodDeclaration(node); - case 147 /* Constructor */: + case 148 /* Constructor */: return checkConstructorDeclaration(node); - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: return checkAccessorDeclaration(node); - case 154 /* TypeReference */: + case 155 /* TypeReference */: return checkTypeReferenceNode(node); - case 153 /* TypePredicate */: + case 154 /* TypePredicate */: return checkTypePredicate(node); - case 157 /* TypeQuery */: + case 158 /* TypeQuery */: return checkTypeQuery(node); - case 158 /* TypeLiteral */: + case 159 /* TypeLiteral */: return checkTypeLiteral(node); - case 159 /* ArrayType */: + case 160 /* ArrayType */: return checkArrayType(node); - case 160 /* TupleType */: + case 161 /* TupleType */: return checkTupleType(node); - case 161 /* UnionType */: - case 162 /* IntersectionType */: + case 162 /* UnionType */: + case 163 /* IntersectionType */: return checkUnionOrIntersectionType(node); - case 163 /* ParenthesizedType */: + case 164 /* ParenthesizedType */: return checkSourceElement(node.type); - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return checkFunctionDeclaration(node); - case 198 /* Block */: - case 225 /* ModuleBlock */: + case 199 /* Block */: + case 226 /* ModuleBlock */: return checkBlock(node); - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: return checkVariableStatement(node); - case 201 /* ExpressionStatement */: + case 202 /* ExpressionStatement */: return checkExpressionStatement(node); - case 202 /* IfStatement */: + case 203 /* IfStatement */: return checkIfStatement(node); - case 203 /* DoStatement */: + case 204 /* DoStatement */: return checkDoStatement(node); - case 204 /* WhileStatement */: + case 205 /* WhileStatement */: return checkWhileStatement(node); - case 205 /* ForStatement */: + case 206 /* ForStatement */: return checkForStatement(node); - case 206 /* ForInStatement */: + case 207 /* ForInStatement */: return checkForInStatement(node); - case 207 /* ForOfStatement */: + case 208 /* ForOfStatement */: return checkForOfStatement(node); - case 208 /* ContinueStatement */: - case 209 /* BreakStatement */: + case 209 /* ContinueStatement */: + case 210 /* BreakStatement */: return checkBreakOrContinueStatement(node); - case 210 /* ReturnStatement */: + case 211 /* ReturnStatement */: return checkReturnStatement(node); - case 211 /* WithStatement */: + case 212 /* WithStatement */: return checkWithStatement(node); - case 212 /* SwitchStatement */: + case 213 /* SwitchStatement */: return checkSwitchStatement(node); - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: return checkLabeledStatement(node); - case 214 /* ThrowStatement */: + case 215 /* ThrowStatement */: return checkThrowStatement(node); - case 215 /* TryStatement */: + case 216 /* TryStatement */: return checkTryStatement(node); - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: return checkVariableDeclaration(node); - case 168 /* BindingElement */: + case 169 /* BindingElement */: return checkBindingElement(node); - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: return checkClassDeclaration(node); - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return checkInterfaceDeclaration(node); - case 222 /* TypeAliasDeclaration */: + case 223 /* TypeAliasDeclaration */: return checkTypeAliasDeclaration(node); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return checkEnumDeclaration(node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return checkModuleDeclaration(node); - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: return checkImportDeclaration(node); - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: return checkImportEqualsDeclaration(node); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: return checkExportDeclaration(node); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return checkExportAssignment(node); - case 200 /* EmptyStatement */: + case 201 /* EmptyStatement */: checkGrammarStatementInAmbientContext(node); return; - case 216 /* DebuggerStatement */: + case 217 /* DebuggerStatement */: checkGrammarStatementInAmbientContext(node); return; - case 238 /* MissingDeclaration */: + case 239 /* MissingDeclaration */: return checkMissingDeclaration(node); } } @@ -29479,17 +30216,17 @@ var ts; for (var _i = 0, deferredNodes_1 = deferredNodes; _i < deferredNodes_1.length; _i++) { var node = deferredNodes_1[_i]; switch (node.kind) { - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: checkFunctionExpressionOrObjectLiteralMethodDeferred(node); break; - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: checkAccessorDeferred(node); break; - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: checkClassExpressionDeferred(node); break; } @@ -29564,7 +30301,7 @@ var ts; function isInsideWithStatementBody(node) { if (node) { while (node.parent) { - if (node.parent.kind === 211 /* WithStatement */ && node.parent.statement === node) { + if (node.parent.kind === 212 /* WithStatement */ && node.parent.statement === node) { return true; } node = node.parent; @@ -29587,25 +30324,25 @@ var ts; copySymbols(location.locals, meaning); } switch (location.kind) { - case 255 /* SourceFile */: + case 256 /* SourceFile */: if (!ts.isExternalOrCommonJsModule(location)) { break; } - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: copySymbols(getSymbolOfNode(location).exports, meaning & 8914931 /* ModuleMember */); break; - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: copySymbols(getSymbolOfNode(location).exports, meaning & 8 /* EnumMember */); break; - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: var className = location.name; if (className) { copySymbol(location.symbol, meaning); } // fall through; this fall-through is necessary because we would like to handle // type parameter inside class expression similar to how we handle it in classDeclaration and interface Declaration - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: // If we didn't come from static member of class or interface, // add the type parameters into the symbol table // (type parameters of classDeclaration/classExpression and interface are in member property of the symbol. @@ -29614,7 +30351,7 @@ var ts; copySymbols(getSymbolOfNode(location).members, meaning & 793056 /* Type */); } break; - case 178 /* FunctionExpression */: + case 179 /* FunctionExpression */: var funcName = location.name; if (funcName) { copySymbol(location.symbol, meaning); @@ -29663,28 +30400,28 @@ var ts; } function isTypeDeclaration(node) { switch (node.kind) { - case 140 /* TypeParameter */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 223 /* EnumDeclaration */: + case 141 /* TypeParameter */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 224 /* EnumDeclaration */: return true; } } // True if the given identifier is part of a type reference function isTypeReferenceIdentifier(entityName) { var node = entityName; - while (node.parent && node.parent.kind === 138 /* QualifiedName */) { + while (node.parent && node.parent.kind === 139 /* QualifiedName */) { node = node.parent; } - return node.parent && node.parent.kind === 154 /* TypeReference */; + return node.parent && node.parent.kind === 155 /* TypeReference */; } function isHeritageClauseElementIdentifier(entityName) { var node = entityName; - while (node.parent && node.parent.kind === 171 /* PropertyAccessExpression */) { + while (node.parent && node.parent.kind === 172 /* PropertyAccessExpression */) { node = node.parent; } - return node.parent && node.parent.kind === 193 /* ExpressionWithTypeArguments */; + return node.parent && node.parent.kind === 194 /* ExpressionWithTypeArguments */; } function forEachEnclosingClass(node, callback) { var result; @@ -29701,13 +30438,13 @@ var ts; return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; }); } function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) { - while (nodeOnRightSide.parent.kind === 138 /* QualifiedName */) { + while (nodeOnRightSide.parent.kind === 139 /* QualifiedName */) { nodeOnRightSide = nodeOnRightSide.parent; } - if (nodeOnRightSide.parent.kind === 228 /* ImportEqualsDeclaration */) { + if (nodeOnRightSide.parent.kind === 229 /* ImportEqualsDeclaration */) { return nodeOnRightSide.parent.moduleReference === nodeOnRightSide && nodeOnRightSide.parent; } - if (nodeOnRightSide.parent.kind === 234 /* ExportAssignment */) { + if (nodeOnRightSide.parent.kind === 235 /* ExportAssignment */) { return nodeOnRightSide.parent.expression === nodeOnRightSide && nodeOnRightSide.parent; } return undefined; @@ -29719,7 +30456,7 @@ var ts; if (ts.isDeclarationName(entityName)) { return getSymbolOfNode(entityName.parent); } - if (ts.isInJavaScriptFile(entityName) && entityName.parent.kind === 171 /* PropertyAccessExpression */) { + if (ts.isInJavaScriptFile(entityName) && entityName.parent.kind === 172 /* PropertyAccessExpression */) { var specialPropertyAssignmentKind = ts.getSpecialPropertyAssignmentKind(entityName.parent.parent); switch (specialPropertyAssignmentKind) { case 1 /* ExportsProperty */: @@ -29731,11 +30468,11 @@ var ts; default: } } - if (entityName.parent.kind === 234 /* ExportAssignment */) { + if (entityName.parent.kind === 235 /* ExportAssignment */) { return resolveEntityName(entityName, /*all meanings*/ 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */ | 8388608 /* Alias */); } - if (entityName.kind !== 171 /* PropertyAccessExpression */) { + if (entityName.kind !== 172 /* PropertyAccessExpression */) { if (isInRightSideOfImportOrExportAssignment(entityName)) { // Since we already checked for ExportAssignment, this really could only be an Import return getSymbolOfPartOfRightHandSideOfImportEquals(entityName); @@ -29747,7 +30484,7 @@ var ts; if (isHeritageClauseElementIdentifier(entityName)) { var meaning = 0 /* None */; // In an interface or class, we're definitely interested in a type. - if (entityName.parent.kind === 193 /* ExpressionWithTypeArguments */) { + if (entityName.parent.kind === 194 /* ExpressionWithTypeArguments */) { meaning = 793056 /* Type */; // In a class 'extends' clause we are also looking for a value. if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { @@ -29774,14 +30511,14 @@ var ts; var meaning = 107455 /* Value */ | 8388608 /* Alias */; return resolveEntityName(entityName, meaning); } - else if (entityName.kind === 171 /* PropertyAccessExpression */) { + else if (entityName.kind === 172 /* PropertyAccessExpression */) { var symbol = getNodeLinks(entityName).resolvedSymbol; if (!symbol) { checkPropertyAccessExpression(entityName); } return getNodeLinks(entityName).resolvedSymbol; } - else if (entityName.kind === 138 /* QualifiedName */) { + else if (entityName.kind === 139 /* QualifiedName */) { var symbol = getNodeLinks(entityName).resolvedSymbol; if (!symbol) { checkQualifiedName(entityName); @@ -29790,22 +30527,25 @@ var ts; } } else if (isTypeReferenceIdentifier(entityName)) { - var meaning = entityName.parent.kind === 154 /* TypeReference */ ? 793056 /* Type */ : 1536 /* Namespace */; + var meaning = entityName.parent.kind === 155 /* TypeReference */ ? 793056 /* Type */ : 1536 /* Namespace */; // Include aliases in the meaning, this ensures that we do not follow aliases to where they point and instead // return the alias symbol. meaning |= 8388608 /* Alias */; return resolveEntityName(entityName, meaning); } - else if (entityName.parent.kind === 245 /* JsxAttribute */) { + else if (entityName.parent.kind === 246 /* JsxAttribute */) { return getJsxAttributePropertySymbol(entityName.parent); } - if (entityName.parent.kind === 153 /* TypePredicate */) { + if (entityName.parent.kind === 154 /* TypePredicate */) { return resolveEntityName(entityName, /*meaning*/ 1 /* FunctionScopedVariable */); } // Do we want to return undefined here? return undefined; } function getSymbolAtLocation(node) { + if (node.kind === 256 /* SourceFile */) { + return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined; + } if (isInsideWithStatementBody(node)) { // We cannot answer semantic questions within a with block, do not proceed any further return undefined; @@ -29814,14 +30554,17 @@ var ts; // This is a declaration, call getSymbolOfNode return getSymbolOfNode(node.parent); } + else if (ts.isLiteralComputedPropertyDeclarationName(node)) { + return getSymbolOfNode(node.parent.parent); + } if (node.kind === 69 /* Identifier */) { if (isInRightSideOfImportOrExportAssignment(node)) { - return node.parent.kind === 234 /* ExportAssignment */ + return node.parent.kind === 235 /* ExportAssignment */ ? getSymbolOfEntityNameOrPropertyAccessExpression(node) : getSymbolOfPartOfRightHandSideOfImportEquals(node); } - else if (node.parent.kind === 168 /* BindingElement */ && - node.parent.parent.kind === 166 /* ObjectBindingPattern */ && + else if (node.parent.kind === 169 /* BindingElement */ && + node.parent.parent.kind === 167 /* ObjectBindingPattern */ && node === node.parent.propertyName) { var typeOfPattern = getTypeOfNode(node.parent.parent); var propertyDeclaration = typeOfPattern && getPropertyOfType(typeOfPattern, node.text); @@ -29832,19 +30575,19 @@ var ts; } switch (node.kind) { case 69 /* Identifier */: - case 171 /* PropertyAccessExpression */: - case 138 /* QualifiedName */: + case 172 /* PropertyAccessExpression */: + case 139 /* QualifiedName */: return getSymbolOfEntityNameOrPropertyAccessExpression(node); case 97 /* ThisKeyword */: case 95 /* SuperKeyword */: var type = ts.isExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node); return type.symbol; - case 164 /* ThisType */: + case 165 /* ThisType */: return getTypeFromTypeNode(node).symbol; case 121 /* ConstructorKeyword */: // constructor keyword for an overload, should take us to the definition if it exist var constructorDeclaration = node.parent; - if (constructorDeclaration && constructorDeclaration.kind === 147 /* Constructor */) { + if (constructorDeclaration && constructorDeclaration.kind === 148 /* Constructor */) { return constructorDeclaration.parent.symbol; } return undefined; @@ -29852,14 +30595,14 @@ var ts; // External module name in an import declaration if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) || - ((node.parent.kind === 229 /* ImportDeclaration */ || node.parent.kind === 235 /* ExportDeclaration */) && + ((node.parent.kind === 230 /* ImportDeclaration */ || node.parent.kind === 236 /* ExportDeclaration */) && node.parent.moduleSpecifier === node)) { return resolveExternalModuleName(node, node); } // Fall through case 8 /* NumericLiteral */: // index access - if (node.parent.kind === 172 /* ElementAccessExpression */ && node.parent.argumentExpression === node) { + if (node.parent.kind === 173 /* ElementAccessExpression */ && node.parent.argumentExpression === node) { var objectType = checkExpression(node.parent.expression); if (objectType === unknownType) return undefined; @@ -29876,7 +30619,7 @@ var ts; // The function returns a value symbol of an identifier in the short-hand property assignment. // This is necessary as an identifier in short-hand property assignment can contains two meaning: // property name and property value. - if (location && location.kind === 253 /* ShorthandPropertyAssignment */) { + if (location && location.kind === 254 /* ShorthandPropertyAssignment */) { return resolveEntityName(location.name, 107455 /* Value */ | 8388608 /* Alias */); } return undefined; @@ -29931,6 +30674,51 @@ var ts; } return unknownType; } + // Gets the type of object literal or array literal of destructuring assignment. + // { a } from + // for ( { a } of elems) { + // } + // [ a ] from + // [a] = [ some array ...] + function getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr) { + ts.Debug.assert(expr.kind === 171 /* ObjectLiteralExpression */ || expr.kind === 170 /* ArrayLiteralExpression */); + // If this is from "for of" + // for ( { a } of elems) { + // } + if (expr.parent.kind === 208 /* ForOfStatement */) { + var iteratedType = checkRightHandSideOfForOf(expr.parent.expression); + return checkDestructuringAssignment(expr, iteratedType || unknownType); + } + // If this is from "for" initializer + // for ({a } = elems[0];.....) { } + if (expr.parent.kind === 187 /* BinaryExpression */) { + var iteratedType = checkExpression(expr.parent.right); + return checkDestructuringAssignment(expr, iteratedType || unknownType); + } + // If this is from nested object binding pattern + // for ({ skills: { primary, secondary } } = multiRobot, i = 0; i < 1; i++) { + if (expr.parent.kind === 253 /* PropertyAssignment */) { + var typeOfParentObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent.parent); + return checkObjectLiteralDestructuringPropertyAssignment(typeOfParentObjectLiteral || unknownType, expr.parent); + } + // Array literal assignment - array destructuring pattern + ts.Debug.assert(expr.parent.kind === 170 /* ArrayLiteralExpression */); + // [{ property1: p1, property2 }] = elems; + var typeOfArrayLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent); + var elementType = checkIteratedTypeOrElementType(typeOfArrayLiteral || unknownType, expr.parent, /*allowStringInput*/ false) || unknownType; + return checkArrayLiteralDestructuringElementAssignment(expr.parent, typeOfArrayLiteral, ts.indexOf(expr.parent.elements, expr), elementType || unknownType); + } + // Gets the property symbol corresponding to the property in destructuring assignment + // 'property1' from + // for ( { property1: a } of elems) { + // } + // 'property1' at location 'a' from: + // [a] = [ property1, property2 ] + function getPropertySymbolOfDestructuringAssignment(location) { + // Get the type of the object or array literal and then look for property of given name in the type + var typeOfObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(location.parent.parent); + return typeOfObjectLiteral && getPropertyOfType(typeOfObjectLiteral, location.text); + } function getTypeOfExpression(expr) { if (ts.isRightSideOfQualifiedNameOrPropertyAccess(expr)) { expr = expr.parent; @@ -29974,7 +30762,11 @@ var ts; return symbols_3; } else if (symbol.flags & 67108864 /* Transient */) { - var target = getSymbolLinks(symbol).target; + var target = void 0; + var next = symbol; + while (next = getSymbolLinks(next).target) { + target = next; + } if (target) { return [target]; } @@ -30026,11 +30818,11 @@ var ts; } var parentSymbol = getParentOfSymbol(symbol); if (parentSymbol) { - if (parentSymbol.flags & 512 /* ValueModule */ && parentSymbol.valueDeclaration.kind === 255 /* SourceFile */) { + if (parentSymbol.flags & 512 /* ValueModule */ && parentSymbol.valueDeclaration.kind === 256 /* SourceFile */) { return parentSymbol.valueDeclaration; } for (var n = node.parent; n; n = n.parent) { - if ((n.kind === 224 /* ModuleDeclaration */ || n.kind === 223 /* EnumDeclaration */) && getSymbolOfNode(n) === parentSymbol) { + if ((n.kind === 225 /* ModuleDeclaration */ || n.kind === 224 /* EnumDeclaration */) && getSymbolOfNode(n) === parentSymbol) { return n; } } @@ -30072,7 +30864,7 @@ var ts; // they will not collide with anything var isDeclaredInLoop = nodeLinks_1.flags & 262144 /* BlockScopedBindingInLoop */; var inLoopInitializer = ts.isIterationStatement(container, /*lookInLabeledStatements*/ false); - var inLoopBodyBlock = container.kind === 198 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false); + var inLoopBodyBlock = container.kind === 199 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false); links.isDeclarationWithCollidingName = !ts.isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || (!inLoopInitializer && !inLoopBodyBlock)); } else { @@ -30098,22 +30890,22 @@ var ts; } function isValueAliasDeclaration(node) { switch (node.kind) { - case 228 /* ImportEqualsDeclaration */: - case 230 /* ImportClause */: - case 231 /* NamespaceImport */: - case 233 /* ImportSpecifier */: - case 237 /* ExportSpecifier */: + case 229 /* ImportEqualsDeclaration */: + case 231 /* ImportClause */: + case 232 /* NamespaceImport */: + case 234 /* ImportSpecifier */: + case 238 /* ExportSpecifier */: return isAliasResolvedToValue(getSymbolOfNode(node)); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: var exportClause = node.exportClause; return exportClause && ts.forEach(exportClause.elements, isValueAliasDeclaration); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return node.expression && node.expression.kind === 69 /* Identifier */ ? isAliasResolvedToValue(getSymbolOfNode(node)) : true; } return false; } function isTopLevelValueImportEqualsWithEntityName(node) { - if (node.parent.kind !== 255 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) { + if (node.parent.kind !== 256 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) { // parent is not source file or it is not reference to internal module return false; } @@ -30122,14 +30914,12 @@ var ts; } function isAliasResolvedToValue(symbol) { var target = resolveAlias(symbol); - if (target === unknownSymbol && compilerOptions.isolatedModules) { + if (target === unknownSymbol) { return true; } // const enums and modules that contain only const enums are not considered values from the emit perspective // unless 'preserveConstEnums' option is set to true - return target !== unknownSymbol && - target && - target.flags & 107455 /* Value */ && + return target.flags & 107455 /* Value */ && (compilerOptions.preserveConstEnums || !isConstEnumOrConstEnumOnlyModule(target)); } function isConstEnumOrConstEnumOnlyModule(s) { @@ -30175,7 +30965,7 @@ var ts; return getNodeLinks(node).enumMemberValue; } function getConstantValue(node) { - if (node.kind === 254 /* EnumMember */) { + if (node.kind === 255 /* EnumMember */) { return getEnumMemberValue(node); } var symbol = getNodeLinks(node).resolvedSymbol; @@ -30274,6 +31064,25 @@ var ts; return symbol && getExportSymbolOfValueSymbolIfExported(symbol).valueDeclaration; } function createResolver() { + // this variable and functions that use it are deliberately moved here from the outer scope + // to avoid scope pollution + var resolvedTypeReferenceDirectives = host.getResolvedTypeReferenceDirectives(); + var fileToDirective; + if (resolvedTypeReferenceDirectives) { + // populate reverse mapping: file path -> type reference directive that was resolved to this file + fileToDirective = ts.createFileMap(); + for (var key in resolvedTypeReferenceDirectives) { + if (!ts.hasProperty(resolvedTypeReferenceDirectives, key)) { + continue; + } + var resolvedDirective = resolvedTypeReferenceDirectives[key]; + if (!resolvedDirective) { + continue; + } + var file = host.getSourceFile(resolvedDirective.resolvedFileName); + fileToDirective.set(file.path, key); + } + } return { getReferencedExportContainer: getReferencedExportContainer, getReferencedImportDeclaration: getReferencedImportDeclaration, @@ -30299,8 +31108,79 @@ var ts; isOptionalParameter: isOptionalParameter, moduleExportsSomeValue: moduleExportsSomeValue, isArgumentsLocalBinding: isArgumentsLocalBinding, - getExternalModuleFileFromDeclaration: getExternalModuleFileFromDeclaration + getExternalModuleFileFromDeclaration: getExternalModuleFileFromDeclaration, + getTypeReferenceDirectivesForEntityName: getTypeReferenceDirectivesForEntityName, + getTypeReferenceDirectivesForSymbol: getTypeReferenceDirectivesForSymbol }; + // defined here to avoid outer scope pollution + function getTypeReferenceDirectivesForEntityName(node) { + // program does not have any files with type reference directives - bail out + if (!fileToDirective) { + return undefined; + } + // property access can only be used as values + // qualified names can only be used as types\namespaces + // identifiers are treated as values only if they appear in type queries + var meaning = (node.kind === 172 /* PropertyAccessExpression */) || (node.kind === 69 /* Identifier */ && isInTypeQuery(node)) + ? 107455 /* Value */ | 1048576 /* ExportValue */ + : 793056 /* Type */ | 1536 /* Namespace */; + var symbol = resolveEntityName(node, meaning, /*ignoreErrors*/ true); + return symbol && symbol !== unknownSymbol ? getTypeReferenceDirectivesForSymbol(symbol, meaning) : undefined; + } + // defined here to avoid outer scope pollution + function getTypeReferenceDirectivesForSymbol(symbol, meaning) { + // program does not have any files with type reference directives - bail out + if (!fileToDirective) { + return undefined; + } + if (!isSymbolFromTypeDeclarationFile(symbol)) { + return undefined; + } + // check what declarations in the symbol can contribute to the target meaning + var typeReferenceDirectives; + for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { + var decl = _a[_i]; + // check meaning of the local symbol to see if declaration needs to be analyzed further + if (decl.symbol && decl.symbol.flags & meaning) { + var file = ts.getSourceFileOfNode(decl); + var typeReferenceDirective = fileToDirective.get(file.path); + if (typeReferenceDirective) { + (typeReferenceDirectives || (typeReferenceDirectives = [])).push(typeReferenceDirective); + } + } + } + return typeReferenceDirectives; + } + function isSymbolFromTypeDeclarationFile(symbol) { + // bail out if symbol does not have associated declarations (i.e. this is transient symbol created for property in binding pattern) + if (!symbol.declarations) { + return false; + } + // walk the parent chain for symbols to make sure that top level parent symbol is in the global scope + // external modules cannot define or contribute to type declaration files + var current = symbol; + while (true) { + var parent_12 = getParentOfSymbol(current); + if (parent_12) { + current = parent_12; + } + else { + break; + } + } + if (current.valueDeclaration && current.valueDeclaration.kind === 256 /* SourceFile */ && current.flags & 512 /* ValueModule */) { + return false; + } + // check that at least one declaration of top level symbol originates from type declaration file + for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { + var decl = _a[_i]; + var file = ts.getSourceFileOfNode(decl); + if (fileToDirective.contains(file.path)) { + return true; + } + } + return false; + } } function getExternalModuleFileFromDeclaration(declaration) { var specifier = ts.getExternalModuleName(declaration); @@ -30308,7 +31188,7 @@ var ts; if (!moduleSymbol) { return undefined; } - return ts.getDeclarationOfKind(moduleSymbol, 255 /* SourceFile */); + return ts.getDeclarationOfKind(moduleSymbol, 256 /* SourceFile */); } function initializeTypeChecker() { // Bind all source files and propagate errors @@ -30408,14 +31288,14 @@ var ts; return false; } if (!ts.nodeCanBeDecorated(node)) { - if (node.kind === 146 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) { + if (node.kind === 147 /* MethodDeclaration */ && !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 === 148 /* GetAccessor */ || node.kind === 149 /* SetAccessor */) { + else if (node.kind === 149 /* GetAccessor */ || node.kind === 150 /* SetAccessor */) { 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); @@ -30425,38 +31305,38 @@ var ts; } function checkGrammarModifiers(node) { switch (node.kind) { - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 147 /* Constructor */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 152 /* IndexSignature */: - case 224 /* ModuleDeclaration */: - case 229 /* ImportDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 235 /* ExportDeclaration */: - case 234 /* ExportAssignment */: - case 141 /* Parameter */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 148 /* Constructor */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 153 /* IndexSignature */: + case 225 /* ModuleDeclaration */: + case 230 /* ImportDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 236 /* ExportDeclaration */: + case 235 /* ExportAssignment */: + case 142 /* Parameter */: break; - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 118 /* AsyncKeyword */) && - node.parent.kind !== 225 /* ModuleBlock */ && node.parent.kind !== 255 /* SourceFile */) { + node.parent.kind !== 226 /* ModuleBlock */ && node.parent.kind !== 256 /* SourceFile */) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); } break; - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 199 /* VariableStatement */: - case 222 /* TypeAliasDeclaration */: - if (node.modifiers && node.parent.kind !== 225 /* ModuleBlock */ && node.parent.kind !== 255 /* SourceFile */) { + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 200 /* VariableStatement */: + case 223 /* TypeAliasDeclaration */: + if (node.modifiers && node.parent.kind !== 226 /* ModuleBlock */ && node.parent.kind !== 256 /* SourceFile */) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); } break; - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 74 /* ConstKeyword */) && - node.parent.kind !== 225 /* ModuleBlock */ && node.parent.kind !== 255 /* SourceFile */) { + node.parent.kind !== 226 /* ModuleBlock */ && node.parent.kind !== 256 /* SourceFile */) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); } break; @@ -30470,17 +31350,17 @@ var ts; var flags = 0; for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) { var modifier = _a[_i]; - if (modifier.kind !== 127 /* ReadonlyKeyword */) { - if (node.kind === 143 /* PropertySignature */ || node.kind === 145 /* MethodSignature */) { + if (modifier.kind !== 128 /* ReadonlyKeyword */) { + if (node.kind === 144 /* PropertySignature */ || node.kind === 146 /* MethodSignature */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind)); } - if (node.kind === 152 /* IndexSignature */) { + if (node.kind === 153 /* IndexSignature */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind)); } } switch (modifier.kind) { case 74 /* ConstKeyword */: - if (node.kind !== 223 /* EnumDeclaration */ && node.parent.kind === 220 /* ClassDeclaration */) { + if (node.kind !== 224 /* EnumDeclaration */ && node.parent.kind === 221 /* ClassDeclaration */) { return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(74 /* ConstKeyword */)); } break; @@ -30506,7 +31386,7 @@ var ts; else if (flags & 256 /* Async */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async"); } - else if (node.parent.kind === 225 /* ModuleBlock */ || node.parent.kind === 255 /* SourceFile */) { + else if (node.parent.kind === 226 /* ModuleBlock */ || node.parent.kind === 256 /* SourceFile */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text); } else if (flags & 128 /* Abstract */) { @@ -30529,10 +31409,10 @@ var ts; else if (flags & 256 /* Async */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async"); } - else if (node.parent.kind === 225 /* ModuleBlock */ || node.parent.kind === 255 /* SourceFile */) { + else if (node.parent.kind === 226 /* ModuleBlock */ || node.parent.kind === 256 /* SourceFile */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static"); } - else if (node.kind === 141 /* Parameter */) { + else if (node.kind === 142 /* Parameter */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); } else if (flags & 128 /* Abstract */) { @@ -30541,11 +31421,12 @@ var ts; flags |= 32 /* Static */; lastStatic = modifier; break; - case 127 /* ReadonlyKeyword */: + case 128 /* ReadonlyKeyword */: if (flags & 64 /* Readonly */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly"); } - else if (node.kind !== 144 /* PropertyDeclaration */ && node.kind !== 143 /* PropertySignature */ && node.kind !== 152 /* IndexSignature */) { + else if (node.kind !== 145 /* PropertyDeclaration */ && node.kind !== 144 /* PropertySignature */ && node.kind !== 153 /* IndexSignature */ && node.kind !== 142 /* Parameter */) { + // If node.kind === SyntaxKind.Parameter, checkParameter report an error if it's not a parameter property. return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature); } flags |= 64 /* Readonly */; @@ -30564,10 +31445,10 @@ var ts; else if (flags & 256 /* Async */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "async"); } - else if (node.parent.kind === 220 /* ClassDeclaration */) { + else if (node.parent.kind === 221 /* ClassDeclaration */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); } - else if (node.kind === 141 /* Parameter */) { + else if (node.kind === 142 /* Parameter */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); } flags |= 1 /* Export */; @@ -30579,13 +31460,13 @@ var ts; else if (flags & 256 /* Async */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async"); } - else if (node.parent.kind === 220 /* ClassDeclaration */) { + else if (node.parent.kind === 221 /* ClassDeclaration */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); } - else if (node.kind === 141 /* Parameter */) { + else if (node.kind === 142 /* Parameter */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); } - else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 225 /* ModuleBlock */) { + else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 226 /* ModuleBlock */) { return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); } flags |= 2 /* Ambient */; @@ -30595,14 +31476,14 @@ var ts; if (flags & 128 /* Abstract */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract"); } - if (node.kind !== 220 /* ClassDeclaration */) { - if (node.kind !== 146 /* MethodDeclaration */ && - node.kind !== 144 /* PropertyDeclaration */ && - node.kind !== 148 /* GetAccessor */ && - node.kind !== 149 /* SetAccessor */) { + if (node.kind !== 221 /* ClassDeclaration */) { + if (node.kind !== 147 /* MethodDeclaration */ && + node.kind !== 145 /* PropertyDeclaration */ && + node.kind !== 149 /* GetAccessor */ && + node.kind !== 150 /* SetAccessor */) { return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration); } - if (!(node.parent.kind === 220 /* ClassDeclaration */ && node.parent.flags & 128 /* Abstract */)) { + if (!(node.parent.kind === 221 /* ClassDeclaration */ && node.parent.flags & 128 /* Abstract */)) { return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class); } if (flags & 32 /* Static */) { @@ -30621,7 +31502,7 @@ var ts; else if (flags & 2 /* Ambient */ || ts.isInAmbientContext(node.parent)) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async"); } - else if (node.kind === 141 /* Parameter */) { + else if (node.kind === 142 /* Parameter */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async"); } flags |= 256 /* Async */; @@ -30629,7 +31510,7 @@ var ts; break; } } - if (node.kind === 147 /* Constructor */) { + if (node.kind === 148 /* Constructor */) { if (flags & 32 /* Static */) { return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); } @@ -30644,10 +31525,10 @@ var ts; } return; } - else if ((node.kind === 229 /* ImportDeclaration */ || node.kind === 228 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) { + else if ((node.kind === 230 /* ImportDeclaration */ || node.kind === 229 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) { return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare"); } - else if (node.kind === 141 /* Parameter */ && (flags & 28 /* AccessibilityModifier */) && ts.isBindingPattern(node.name)) { + else if (node.kind === 142 /* Parameter */ && (flags & 92 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) { return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_a_binding_pattern); } if (flags & 256 /* Async */) { @@ -30659,10 +31540,10 @@ var ts; return grammarErrorOnNode(asyncModifier, ts.Diagnostics.Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher); } switch (node.kind) { - case 146 /* MethodDeclaration */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: if (!node.asteriskToken) { return false; } @@ -30728,7 +31609,7 @@ var ts; checkGrammarParameterList(node.parameters) || checkGrammarArrowFunction(node, file); } function checkGrammarArrowFunction(node, file) { - if (node.kind === 179 /* ArrowFunction */) { + if (node.kind === 180 /* ArrowFunction */) { var arrowFunction = node; var startLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.pos).line; var endLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.end).line; @@ -30751,7 +31632,7 @@ var ts; if (parameter.dotDotDotToken) { return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); } - if (parameter.flags & 959 /* Modifier */) { + if (parameter.flags & 1023 /* Modifier */) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); } if (parameter.questionToken) { @@ -30763,7 +31644,7 @@ var ts; if (!parameter.type) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); } - if (parameter.type.kind !== 131 /* StringKeyword */ && parameter.type.kind !== 129 /* NumberKeyword */) { + if (parameter.type.kind !== 132 /* StringKeyword */ && parameter.type.kind !== 130 /* NumberKeyword */) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); } if (!node.type) { @@ -30791,7 +31672,7 @@ var ts; var sourceFile = ts.getSourceFileOfNode(node); for (var _i = 0, args_1 = args; _i < args_1.length; _i++) { var arg = args_1[_i]; - if (arg.kind === 192 /* OmittedExpression */) { + if (arg.kind === 193 /* OmittedExpression */) { return grammarErrorAtPos(sourceFile, arg.pos, 0, ts.Diagnostics.Argument_expression_expected); } } @@ -30865,19 +31746,19 @@ var ts; } function checkGrammarComputedPropertyName(node) { // If node is not a computedPropertyName, just skip the grammar checking - if (node.kind !== 139 /* ComputedPropertyName */) { + if (node.kind !== 140 /* ComputedPropertyName */) { return false; } var computedPropertyName = node; - if (computedPropertyName.expression.kind === 186 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 24 /* CommaToken */) { + if (computedPropertyName.expression.kind === 187 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 24 /* CommaToken */) { 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 === 219 /* FunctionDeclaration */ || - node.kind === 178 /* FunctionExpression */ || - node.kind === 146 /* MethodDeclaration */); + ts.Debug.assert(node.kind === 220 /* FunctionDeclaration */ || + node.kind === 179 /* FunctionExpression */ || + node.kind === 147 /* MethodDeclaration */); if (ts.isInAmbientContext(node)) { return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context); } @@ -30902,20 +31783,20 @@ var ts; var GetOrSetAccessor = GetAccessor | SetAccessor; var _loop_1 = function(prop) { var name_20 = prop.name; - if (prop.kind === 192 /* OmittedExpression */ || - name_20.kind === 139 /* ComputedPropertyName */) { + if (prop.kind === 193 /* OmittedExpression */ || + name_20.kind === 140 /* ComputedPropertyName */) { // If the name is not a ComputedPropertyName, the grammar checking will skip it checkGrammarComputedPropertyName(name_20); return "continue"; } - if (prop.kind === 253 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) { + if (prop.kind === 254 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) { // having objectAssignmentInitializer is only valid in ObjectAssignmentPattern // outside of destructuring it is a syntax error return { value: grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment) }; } // Modifiers are never allowed on properties except for 'async' on a method declaration ts.forEach(prop.modifiers, function (mod) { - if (mod.kind !== 118 /* AsyncKeyword */ || prop.kind !== 146 /* MethodDeclaration */) { + if (mod.kind !== 118 /* AsyncKeyword */ || prop.kind !== 147 /* MethodDeclaration */) { grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod)); } }); @@ -30928,7 +31809,7 @@ var ts; // d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields var currentKind = void 0; - if (prop.kind === 252 /* PropertyAssignment */ || prop.kind === 253 /* ShorthandPropertyAssignment */) { + if (prop.kind === 253 /* PropertyAssignment */ || prop.kind === 254 /* ShorthandPropertyAssignment */) { // Grammar checking for computedPropertyName and shorthandPropertyAssignment checkGrammarForInvalidQuestionMark(prop, prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional); if (name_20.kind === 8 /* NumericLiteral */) { @@ -30936,13 +31817,13 @@ var ts; } currentKind = Property; } - else if (prop.kind === 146 /* MethodDeclaration */) { + else if (prop.kind === 147 /* MethodDeclaration */) { currentKind = Property; } - else if (prop.kind === 148 /* GetAccessor */) { + else if (prop.kind === 149 /* GetAccessor */) { currentKind = GetAccessor; } - else if (prop.kind === 149 /* SetAccessor */) { + else if (prop.kind === 150 /* SetAccessor */) { currentKind = SetAccessor; } else { @@ -30979,7 +31860,7 @@ var ts; var seen = {}; for (var _i = 0, _a = node.attributes; _i < _a.length; _i++) { var attr = _a[_i]; - if (attr.kind === 246 /* JsxSpreadAttribute */) { + if (attr.kind === 247 /* JsxSpreadAttribute */) { continue; } var jsxAttr = attr; @@ -30991,7 +31872,7 @@ var ts; return grammarErrorOnNode(name_21, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); } var initializer = jsxAttr.initializer; - if (initializer && initializer.kind === 247 /* JsxExpression */ && !initializer.expression) { + if (initializer && initializer.kind === 248 /* JsxExpression */ && !initializer.expression) { return grammarErrorOnNode(jsxAttr.initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression); } } @@ -31000,7 +31881,7 @@ var ts; if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) { return true; } - if (forInOrOfStatement.initializer.kind === 218 /* VariableDeclarationList */) { + if (forInOrOfStatement.initializer.kind === 219 /* VariableDeclarationList */) { var variableList = forInOrOfStatement.initializer; if (!checkGrammarVariableDeclarationList(variableList)) { var declarations = variableList.declarations; @@ -31015,20 +31896,20 @@ var ts; return false; } if (declarations.length > 1) { - var diagnostic = forInOrOfStatement.kind === 206 /* ForInStatement */ + var diagnostic = forInOrOfStatement.kind === 207 /* ForInStatement */ ? 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 === 206 /* ForInStatement */ + var diagnostic = forInOrOfStatement.kind === 207 /* ForInStatement */ ? 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 === 206 /* ForInStatement */ + var diagnostic = forInOrOfStatement.kind === 207 /* ForInStatement */ ? 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); @@ -31051,24 +31932,20 @@ var ts; else if (accessor.typeParameters) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); } - else if (kind === 148 /* GetAccessor */ && accessor.parameters.length) { - return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters); + else if (!doesAccessorHaveCorrectParameterCount(accessor)) { + return grammarErrorOnNode(accessor.name, kind === 149 /* GetAccessor */ ? + ts.Diagnostics.A_get_accessor_cannot_have_parameters : + ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); } - else if (kind === 149 /* SetAccessor */) { + else if (kind === 150 /* SetAccessor */) { if (accessor.type) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); } - else if (accessor.parameters.length !== 1) { - return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); - } 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.flags & 959 /* Modifier */) { - return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); - } else if (parameter.questionToken) { return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); } @@ -31078,6 +31955,20 @@ var ts; } } } + /** Does the accessor have the right number of parameters? + + A get accessor has no parameters or a single `this` parameter. + A set accessor has one parameter or a `this` parameter and one more parameter */ + function doesAccessorHaveCorrectParameterCount(accessor) { + return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 149 /* GetAccessor */ ? 0 : 1); + } + function getAccessorThisParameter(accessor) { + if (accessor.parameters.length === (accessor.kind === 149 /* GetAccessor */ ? 1 : 2) && + accessor.parameters[0].name.kind === 69 /* Identifier */ && + accessor.parameters[0].name.originalKeywordKind === 97 /* ThisKeyword */) { + return accessor.parameters[0]; + } + } function checkGrammarForNonSymbolComputedProperty(node, message) { if (ts.isDynamicName(node)) { return grammarErrorOnNode(node, message); @@ -31089,8 +31980,8 @@ var ts; checkGrammarForGenerator(node)) { return true; } - if (node.parent.kind === 170 /* ObjectLiteralExpression */) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) { + if (node.parent.kind === 171 /* ObjectLiteralExpression */) { + if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) { return true; } else if (node.body === undefined) { @@ -31098,9 +31989,6 @@ var ts; } } if (ts.isClassLike(node.parent)) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) { - return true; - } // Technically, computed properties in ambient contexts is disallowed // for property declarations and accessors too, not just methods. // However, property declarations disallow computed names in general, @@ -31113,10 +32001,10 @@ var ts; 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 === 221 /* InterfaceDeclaration */) { + else if (node.parent.kind === 222 /* InterfaceDeclaration */) { 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 === 158 /* TypeLiteral */) { + else if (node.parent.kind === 159 /* TypeLiteral */) { return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol); } } @@ -31127,11 +32015,11 @@ var ts; return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); } switch (current.kind) { - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: if (node.label && current.label.text === node.label.text) { // found matching label - verify that label usage is correct // continue can only target labels that are on iteration statements - var isMisplacedContinueLabel = node.kind === 208 /* ContinueStatement */ + var isMisplacedContinueLabel = node.kind === 209 /* ContinueStatement */ && !ts.isIterationStatement(current.statement, /*lookInLabeledStatement*/ true); if (isMisplacedContinueLabel) { return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); @@ -31139,8 +32027,8 @@ var ts; return false; } break; - case 212 /* SwitchStatement */: - if (node.kind === 209 /* BreakStatement */ && !node.label) { + case 213 /* SwitchStatement */: + if (node.kind === 210 /* BreakStatement */ && !node.label) { // unlabeled break within switch statement - ok return false; } @@ -31155,13 +32043,13 @@ var ts; current = current.parent; } if (node.label) { - var message = node.kind === 209 /* BreakStatement */ + var message = node.kind === 210 /* BreakStatement */ ? 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 === 209 /* BreakStatement */ + var message = node.kind === 210 /* BreakStatement */ ? 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); @@ -31173,7 +32061,7 @@ var ts; if (node !== ts.lastOrUndefined(elements)) { return grammarErrorOnNode(node, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern); } - if (node.name.kind === 167 /* ArrayBindingPattern */ || node.name.kind === 166 /* ObjectBindingPattern */) { + if (node.name.kind === 168 /* ArrayBindingPattern */ || node.name.kind === 167 /* ObjectBindingPattern */) { return grammarErrorOnNode(node.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern); } if (node.initializer) { @@ -31183,7 +32071,7 @@ var ts; } } function checkGrammarVariableDeclaration(node) { - if (node.parent.parent.kind !== 206 /* ForInStatement */ && node.parent.parent.kind !== 207 /* ForOfStatement */) { + if (node.parent.parent.kind !== 207 /* ForInStatement */ && node.parent.parent.kind !== 208 /* ForOfStatement */) { if (ts.isInAmbientContext(node)) { if (node.initializer) { // Error on equals token which immediate precedes the initializer @@ -31219,7 +32107,7 @@ var ts; var elements = name.elements; for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) { var element = elements_2[_i]; - if (element.kind !== 192 /* OmittedExpression */) { + if (element.kind !== 193 /* OmittedExpression */) { checkGrammarNameInLetOrConstDeclarations(element.name); } } @@ -31236,15 +32124,15 @@ var ts; } function allowLetAndConstDeclarations(parent) { switch (parent.kind) { - case 202 /* IfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: - case 211 /* WithStatement */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: + case 203 /* IfStatement */: + case 204 /* DoStatement */: + case 205 /* WhileStatement */: + case 212 /* WithStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: return false; - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: return allowLetAndConstDeclarations(parent.parent); } return true; @@ -31295,12 +32183,11 @@ var ts; } function checkGrammarProperty(node) { if (ts.isClassLike(node.parent)) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional) || - checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol)) { + 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 === 221 /* InterfaceDeclaration */) { + else if (node.parent.kind === 222 /* InterfaceDeclaration */) { if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol)) { return true; } @@ -31308,7 +32195,7 @@ var ts; return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer); } } - else if (node.parent.kind === 158 /* TypeLiteral */) { + else if (node.parent.kind === 159 /* TypeLiteral */) { if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol)) { return true; } @@ -31333,12 +32220,12 @@ var ts; // export_opt AmbientDeclaration // // TODO: The spec needs to be amended to reflect this grammar. - if (node.kind === 221 /* InterfaceDeclaration */ || - node.kind === 222 /* TypeAliasDeclaration */ || - node.kind === 229 /* ImportDeclaration */ || - node.kind === 228 /* ImportEqualsDeclaration */ || - node.kind === 235 /* ExportDeclaration */ || - node.kind === 234 /* ExportAssignment */ || + if (node.kind === 222 /* InterfaceDeclaration */ || + node.kind === 223 /* TypeAliasDeclaration */ || + node.kind === 230 /* ImportDeclaration */ || + node.kind === 229 /* ImportEqualsDeclaration */ || + node.kind === 236 /* ExportDeclaration */ || + node.kind === 235 /* ExportAssignment */ || (node.flags & 2 /* Ambient */) || (node.flags & (1 /* Export */ | 512 /* Default */))) { return false; @@ -31348,7 +32235,7 @@ var ts; function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) { for (var _i = 0, _a = file.statements; _i < _a.length; _i++) { var decl = _a[_i]; - if (ts.isDeclaration(decl) || decl.kind === 199 /* VariableStatement */) { + if (ts.isDeclaration(decl) || decl.kind === 200 /* VariableStatement */) { if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) { return true; } @@ -31374,7 +32261,7 @@ var ts; // to prevent noisiness. So use a bit on the block to indicate if // this has already been reported, and don't report if it has. // - if (node.parent.kind === 198 /* Block */ || node.parent.kind === 225 /* ModuleBlock */ || node.parent.kind === 255 /* SourceFile */) { + if (node.parent.kind === 199 /* Block */ || node.parent.kind === 226 /* ModuleBlock */ || node.parent.kind === 256 /* SourceFile */) { var links_1 = getNodeLinks(node.parent); // Check if the containing block ever report this error if (!links_1.hasReportedStatementInAmbientContext) { @@ -31763,7 +32650,8 @@ var ts; // Contains the reference paths that needs to go in the declaration file. // Collecting this separately because reference paths need to be first thing in the declaration file // and we could be collecting these paths from multiple files into single one with --out option - var referencePathsOutput = ""; + var referencesOutput = ""; + var usedTypeDirectiveReferences; // Emit references corresponding to each file var emittedReferencedFiles = []; var addedGlobalFileReference = false; @@ -31810,7 +32698,7 @@ var ts; var oldWriter = writer; ts.forEach(moduleElementDeclarationEmitInfo, function (aliasEmitInfo) { if (aliasEmitInfo.isVisible && !aliasEmitInfo.asynchronousOutput) { - ts.Debug.assert(aliasEmitInfo.node.kind === 229 /* ImportDeclaration */); + ts.Debug.assert(aliasEmitInfo.node.kind === 230 /* ImportDeclaration */); createAndSetNewTextWriterWithSymbolWriter(); ts.Debug.assert(aliasEmitInfo.indent === 0 || (aliasEmitInfo.indent === 1 && isBundledEmit)); for (var i = 0; i < aliasEmitInfo.indent; i++) { @@ -31835,11 +32723,18 @@ var ts; writeLine(); } }); + if (usedTypeDirectiveReferences) { + for (var directive in usedTypeDirectiveReferences) { + if (ts.hasProperty(usedTypeDirectiveReferences, directive)) { + referencesOutput += "/// " + newLine; + } + } + } return { reportedDeclarationError: reportedDeclarationError, moduleElementDeclarationEmitInfo: allSourcesModuleElementDeclarationEmitInfo, synchronousDeclarationOutput: writer.getText(), - referencePathsOutput: referencePathsOutput + referencesOutput: referencesOutput }; function hasInternalAnnotation(range) { var comment = currentText.substring(range.pos, range.end); @@ -31879,10 +32774,10 @@ var ts; var oldWriter = writer; ts.forEach(nodes, function (declaration) { var nodeToCheck; - if (declaration.kind === 217 /* VariableDeclaration */) { + if (declaration.kind === 218 /* VariableDeclaration */) { nodeToCheck = declaration.parent.parent; } - else if (declaration.kind === 232 /* NamedImports */ || declaration.kind === 233 /* ImportSpecifier */ || declaration.kind === 230 /* ImportClause */) { + else if (declaration.kind === 233 /* NamedImports */ || declaration.kind === 234 /* ImportSpecifier */ || declaration.kind === 231 /* ImportClause */) { ts.Debug.fail("We should be getting ImportDeclaration instead to write"); } else { @@ -31900,7 +32795,7 @@ var ts; // Writing of function bar would mark alias declaration foo as visible but we haven't yet visited that declaration so do nothing, // we would write alias foo declaration when we visit it since it would now be marked as visible if (moduleElementEmitInfo) { - if (moduleElementEmitInfo.node.kind === 229 /* ImportDeclaration */) { + if (moduleElementEmitInfo.node.kind === 230 /* ImportDeclaration */) { // we have to create asynchronous output only after we have collected complete information // because it is possible to enable multiple bindings as asynchronously visible moduleElementEmitInfo.isVisible = true; @@ -31910,12 +32805,12 @@ var ts; for (var declarationIndent = moduleElementEmitInfo.indent; declarationIndent; declarationIndent--) { increaseIndent(); } - if (nodeToCheck.kind === 224 /* ModuleDeclaration */) { + if (nodeToCheck.kind === 225 /* ModuleDeclaration */) { ts.Debug.assert(asynchronousSubModuleDeclarationEmitInfo === undefined); asynchronousSubModuleDeclarationEmitInfo = []; } writeModuleElement(nodeToCheck); - if (nodeToCheck.kind === 224 /* ModuleDeclaration */) { + if (nodeToCheck.kind === 225 /* ModuleDeclaration */) { moduleElementEmitInfo.subModuleElementDeclarationEmitInfo = asynchronousSubModuleDeclarationEmitInfo; asynchronousSubModuleDeclarationEmitInfo = undefined; } @@ -31925,6 +32820,20 @@ var ts; }); setWriter(oldWriter); } + function recordTypeReferenceDirectivesIfNecessary(typeReferenceDirectives) { + if (!typeReferenceDirectives) { + return; + } + if (!usedTypeDirectiveReferences) { + usedTypeDirectiveReferences = {}; + } + for (var _i = 0, typeReferenceDirectives_1 = typeReferenceDirectives; _i < typeReferenceDirectives_1.length; _i++) { + var directive = typeReferenceDirectives_1[_i]; + if (!ts.hasProperty(usedTypeDirectiveReferences, directive)) { + usedTypeDirectiveReferences[directive] = directive; + } + } + } function handleSymbolAccessibilityError(symbolAccessibilityResult) { if (symbolAccessibilityResult.accessibility === 0 /* Accessible */) { // write the aliases @@ -31948,6 +32857,7 @@ var ts; } function trackSymbol(symbol, enclosingDeclaration, meaning) { handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning)); + recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning)); } function reportInaccessibleThisError() { if (errorNameNode) { @@ -32018,42 +32928,43 @@ var ts; function emitType(type) { switch (type.kind) { case 117 /* AnyKeyword */: - case 131 /* StringKeyword */: - case 129 /* NumberKeyword */: + case 132 /* StringKeyword */: + case 130 /* NumberKeyword */: case 120 /* BooleanKeyword */: - case 132 /* SymbolKeyword */: + case 133 /* SymbolKeyword */: case 103 /* VoidKeyword */: - case 134 /* UndefinedKeyword */: + case 135 /* UndefinedKeyword */: case 93 /* NullKeyword */: - case 164 /* ThisType */: - case 165 /* StringLiteralType */: + case 127 /* NeverKeyword */: + case 165 /* ThisType */: + case 166 /* StringLiteralType */: return writeTextOfNode(currentText, type); - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: return emitExpressionWithTypeArguments(type); - case 154 /* TypeReference */: + case 155 /* TypeReference */: return emitTypeReference(type); - case 157 /* TypeQuery */: + case 158 /* TypeQuery */: return emitTypeQuery(type); - case 159 /* ArrayType */: + case 160 /* ArrayType */: return emitArrayType(type); - case 160 /* TupleType */: + case 161 /* TupleType */: return emitTupleType(type); - case 161 /* UnionType */: + case 162 /* UnionType */: return emitUnionType(type); - case 162 /* IntersectionType */: + case 163 /* IntersectionType */: return emitIntersectionType(type); - case 163 /* ParenthesizedType */: + case 164 /* ParenthesizedType */: return emitParenType(type); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: return emitSignatureDeclarationWithJsDocComments(type); - case 158 /* TypeLiteral */: + case 159 /* TypeLiteral */: return emitTypeLiteral(type); case 69 /* Identifier */: return emitEntityName(type); - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: return emitEntityName(type); - case 153 /* TypePredicate */: + case 154 /* TypePredicate */: return emitTypePredicate(type); } function writeEntityName(entityName) { @@ -32061,8 +32972,8 @@ var ts; writeTextOfNode(currentText, entityName); } else { - var left = entityName.kind === 138 /* QualifiedName */ ? entityName.left : entityName.expression; - var right = entityName.kind === 138 /* QualifiedName */ ? entityName.right : entityName.name; + var left = entityName.kind === 139 /* QualifiedName */ ? entityName.left : entityName.expression; + var right = entityName.kind === 139 /* QualifiedName */ ? entityName.right : entityName.name; writeEntityName(left); write("."); writeTextOfNode(currentText, right); @@ -32071,13 +32982,14 @@ var ts; function emitEntityName(entityName) { var visibilityResult = resolver.isEntityNameVisible(entityName, // Aliases can be written asynchronously so use correct enclosing declaration - entityName.parent.kind === 228 /* ImportEqualsDeclaration */ ? entityName.parent : enclosingDeclaration); + entityName.parent.kind === 229 /* ImportEqualsDeclaration */ ? entityName.parent : enclosingDeclaration); handleSymbolAccessibilityError(visibilityResult); + recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForEntityName(entityName)); writeEntityName(entityName); } function emitExpressionWithTypeArguments(node) { if (ts.isSupportedExpressionWithTypeArguments(node)) { - ts.Debug.assert(node.expression.kind === 69 /* Identifier */ || node.expression.kind === 171 /* PropertyAccessExpression */); + ts.Debug.assert(node.expression.kind === 69 /* Identifier */ || node.expression.kind === 172 /* PropertyAccessExpression */); emitEntityName(node.expression); if (node.typeArguments) { write("<"); @@ -32205,10 +33117,10 @@ var ts; if (isModuleElementVisible) { writeModuleElement(node); } - else if (node.kind === 228 /* ImportEqualsDeclaration */ || - (node.parent.kind === 255 /* SourceFile */ && isCurrentFileExternalModule)) { + else if (node.kind === 229 /* ImportEqualsDeclaration */ || + (node.parent.kind === 256 /* SourceFile */ && isCurrentFileExternalModule)) { var isVisible = void 0; - if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 255 /* SourceFile */) { + if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 256 /* SourceFile */) { // Import declaration of another module that is visited async so lets put it in right spot asynchronousSubModuleDeclarationEmitInfo.push({ node: node, @@ -32218,7 +33130,7 @@ var ts; }); } else { - if (node.kind === 229 /* ImportDeclaration */) { + if (node.kind === 230 /* ImportDeclaration */) { var importDeclaration = node; if (importDeclaration.importClause) { isVisible = (importDeclaration.importClause.name && resolver.isDeclarationVisible(importDeclaration.importClause)) || @@ -32236,23 +33148,23 @@ var ts; } function writeModuleElement(node) { switch (node.kind) { - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return writeFunctionDeclaration(node); - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: return writeVariableStatement(node); - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return writeInterfaceDeclaration(node); - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: return writeClassDeclaration(node); - case 222 /* TypeAliasDeclaration */: + case 223 /* TypeAliasDeclaration */: return writeTypeAliasDeclaration(node); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return writeEnumDeclaration(node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return writeModuleDeclaration(node); - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: return writeImportEqualsDeclaration(node); - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: return writeImportDeclaration(node); default: ts.Debug.fail("Unknown symbol kind"); @@ -32260,7 +33172,7 @@ var ts; } function emitModuleElementDeclarationFlags(node) { // If the node is parented in the current source file we need to emit export declare or just export - if (node.parent.kind === 255 /* SourceFile */) { + if (node.parent.kind === 256 /* SourceFile */) { // If the node is exported if (node.flags & 1 /* Export */) { write("export "); @@ -32268,7 +33180,7 @@ var ts; if (node.flags & 512 /* Default */) { write("default "); } - else if (node.kind !== 221 /* InterfaceDeclaration */ && !noDeclare) { + else if (node.kind !== 222 /* InterfaceDeclaration */ && !noDeclare) { write("declare "); } } @@ -32320,7 +33232,7 @@ var ts; } function isVisibleNamedBinding(namedBindings) { if (namedBindings) { - if (namedBindings.kind === 231 /* NamespaceImport */) { + if (namedBindings.kind === 232 /* NamespaceImport */) { return resolver.isDeclarationVisible(namedBindings); } else { @@ -32344,7 +33256,7 @@ var ts; // If the default binding was emitted, write the separated write(", "); } - if (node.importClause.namedBindings.kind === 231 /* NamespaceImport */) { + if (node.importClause.namedBindings.kind === 232 /* NamespaceImport */) { write("* as "); writeTextOfNode(currentText, node.importClause.namedBindings.name); } @@ -32365,13 +33277,13 @@ var ts; // the only case when it is not true is when we call it to emit correct name for module augmentation - d.ts files with just module augmentations are not considered // external modules since they are indistinguishable from script files with ambient modules. To fix this in such d.ts files we'll emit top level 'export {}' // so compiler will treat them as external modules. - resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || parent.kind !== 224 /* ModuleDeclaration */; + resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || parent.kind !== 225 /* ModuleDeclaration */; var moduleSpecifier; - if (parent.kind === 228 /* ImportEqualsDeclaration */) { + if (parent.kind === 229 /* ImportEqualsDeclaration */) { var node = parent; moduleSpecifier = ts.getExternalModuleImportEqualsDeclarationExpression(node); } - else if (parent.kind === 224 /* ModuleDeclaration */) { + else if (parent.kind === 225 /* ModuleDeclaration */) { moduleSpecifier = parent.name; } else { @@ -32441,7 +33353,7 @@ var ts; writeTextOfNode(currentText, node.name); } } - while (node.body.kind !== 225 /* ModuleBlock */) { + while (node.body.kind !== 226 /* ModuleBlock */) { node = node.body; write("."); writeTextOfNode(currentText, node.name); @@ -32506,7 +33418,7 @@ var ts; writeLine(); } function isPrivateMethodTypeParameter(node) { - return node.parent.kind === 146 /* MethodDeclaration */ && (node.parent.flags & 8 /* Private */); + return node.parent.kind === 147 /* MethodDeclaration */ && (node.parent.flags & 8 /* Private */); } function emitTypeParameters(typeParameters) { function emitTypeParameter(node) { @@ -32517,15 +33429,15 @@ var ts; // If there is constraint present and this is not a type parameter of the private method emit the constraint if (node.constraint && !isPrivateMethodTypeParameter(node)) { write(" extends "); - if (node.parent.kind === 155 /* FunctionType */ || - node.parent.kind === 156 /* ConstructorType */ || - (node.parent.parent && node.parent.parent.kind === 158 /* TypeLiteral */)) { - ts.Debug.assert(node.parent.kind === 146 /* MethodDeclaration */ || - node.parent.kind === 145 /* MethodSignature */ || - node.parent.kind === 155 /* FunctionType */ || - node.parent.kind === 156 /* ConstructorType */ || - node.parent.kind === 150 /* CallSignature */ || - node.parent.kind === 151 /* ConstructSignature */); + if (node.parent.kind === 156 /* FunctionType */ || + node.parent.kind === 157 /* ConstructorType */ || + (node.parent.parent && node.parent.parent.kind === 159 /* TypeLiteral */)) { + ts.Debug.assert(node.parent.kind === 147 /* MethodDeclaration */ || + node.parent.kind === 146 /* MethodSignature */ || + node.parent.kind === 156 /* FunctionType */ || + node.parent.kind === 157 /* ConstructorType */ || + node.parent.kind === 151 /* CallSignature */ || + node.parent.kind === 152 /* ConstructSignature */); emitType(node.constraint); } else { @@ -32536,31 +33448,31 @@ var ts; // Type parameter constraints are named by user so we should always be able to name it var diagnosticMessage; switch (node.parent.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; break; - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; break; - case 151 /* ConstructSignature */: + case 152 /* ConstructSignature */: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; break; - case 150 /* CallSignature */: + case 151 /* CallSignature */: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; break; - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: if (node.parent.flags & 32 /* Static */) { 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 === 220 /* ClassDeclaration */) { + else if (node.parent.parent.kind === 221 /* ClassDeclaration */) { 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 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; break; default: @@ -32598,7 +33510,7 @@ var ts; function getHeritageClauseVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; // Heritage clause is written by user so it can always be named - if (node.parent.parent.kind === 220 /* ClassDeclaration */) { + if (node.parent.parent.kind === 221 /* ClassDeclaration */) { // Class or Interface implemented/extended is inaccessible diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : @@ -32620,7 +33532,7 @@ var ts; function emitParameterProperties(constructorDeclaration) { if (constructorDeclaration) { ts.forEach(constructorDeclaration.parameters, function (param) { - if (param.flags & 28 /* AccessibilityModifier */) { + if (param.flags & 92 /* ParameterPropertyModifier */) { emitPropertyDeclaration(param); } }); @@ -32682,7 +33594,7 @@ var ts; function emitVariableDeclaration(node) { // If we are emitting property it isn't moduleElement and hence we already know it needs to be emitted // so there is no check needed to see if declaration is visible - if (node.kind !== 217 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) { + if (node.kind !== 218 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) { if (ts.isBindingPattern(node.name)) { emitBindingPattern(node.name); } @@ -32692,10 +33604,10 @@ var ts; // what we want, namely the name expression enclosed in brackets. writeTextOfNode(currentText, node.name); // If optional property emit ? - if ((node.kind === 144 /* PropertyDeclaration */ || node.kind === 143 /* PropertySignature */) && ts.hasQuestionToken(node)) { + if ((node.kind === 145 /* PropertyDeclaration */ || node.kind === 144 /* PropertySignature */ || node.kind === 142 /* Parameter */) && ts.hasQuestionToken(node)) { write("?"); } - if ((node.kind === 144 /* PropertyDeclaration */ || node.kind === 143 /* PropertySignature */) && node.parent.kind === 158 /* TypeLiteral */) { + if ((node.kind === 145 /* PropertyDeclaration */ || node.kind === 144 /* PropertySignature */) && node.parent.kind === 159 /* TypeLiteral */) { emitTypeOfVariableDeclarationFromTypeLiteral(node); } else if (!(node.flags & 8 /* Private */)) { @@ -32704,14 +33616,14 @@ var ts; } } function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { - if (node.kind === 217 /* VariableDeclaration */) { + if (node.kind === 218 /* VariableDeclaration */) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? 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 === 144 /* PropertyDeclaration */ || node.kind === 143 /* PropertySignature */) { + else if (node.kind === 145 /* PropertyDeclaration */ || node.kind === 144 /* PropertySignature */) { // TODO(jfreeman): Deal with computed properties in error reporting. if (node.flags & 32 /* Static */) { return symbolAccessibilityResult.errorModuleName ? @@ -32720,7 +33632,7 @@ var ts; 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 === 220 /* ClassDeclaration */) { + else if (node.parent.kind === 221 /* ClassDeclaration */) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : @@ -32752,7 +33664,7 @@ var ts; var elements = []; for (var _i = 0, _a = bindingPattern.elements; _i < _a.length; _i++) { var element = _a[_i]; - if (element.kind !== 192 /* OmittedExpression */) { + if (element.kind !== 193 /* OmittedExpression */) { elements.push(element); } } @@ -32822,7 +33734,7 @@ var ts; var type = getTypeAnnotationFromAccessor(node); if (!type) { // couldn't get type for the first accessor, try the another one - var anotherAccessor = node.kind === 148 /* GetAccessor */ ? accessors.setAccessor : accessors.getAccessor; + var anotherAccessor = node.kind === 149 /* GetAccessor */ ? accessors.setAccessor : accessors.getAccessor; type = getTypeAnnotationFromAccessor(anotherAccessor); if (type) { accessorWithTypeAnnotation = anotherAccessor; @@ -32835,7 +33747,7 @@ var ts; } function getTypeAnnotationFromAccessor(accessor) { if (accessor) { - return accessor.kind === 148 /* GetAccessor */ + return accessor.kind === 149 /* GetAccessor */ ? accessor.type // Getter - return type : accessor.parameters.length > 0 ? accessor.parameters[0].type // Setter parameter type @@ -32844,7 +33756,7 @@ var ts; } function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; - if (accessorWithTypeAnnotation.kind === 149 /* SetAccessor */) { + if (accessorWithTypeAnnotation.kind === 150 /* SetAccessor */) { // Setters have to have type named and cannot infer it so, the type should always be named if (accessorWithTypeAnnotation.parent.flags & 32 /* Static */) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? @@ -32894,17 +33806,17 @@ var ts; // so no need to verify if the declaration is visible if (!resolver.isImplementationOfOverload(node)) { emitJsDocComments(node); - if (node.kind === 219 /* FunctionDeclaration */) { + if (node.kind === 220 /* FunctionDeclaration */) { emitModuleElementDeclarationFlags(node); } - else if (node.kind === 146 /* MethodDeclaration */ || node.kind === 147 /* Constructor */) { + else if (node.kind === 147 /* MethodDeclaration */ || node.kind === 148 /* Constructor */) { emitClassMemberDeclarationFlags(node.flags); } - if (node.kind === 219 /* FunctionDeclaration */) { + if (node.kind === 220 /* FunctionDeclaration */) { write("function "); writeTextOfNode(currentText, node.name); } - else if (node.kind === 147 /* Constructor */) { + else if (node.kind === 148 /* Constructor */) { write("constructor"); } else { @@ -32923,37 +33835,48 @@ var ts; function emitSignatureDeclaration(node) { var prevEnclosingDeclaration = enclosingDeclaration; enclosingDeclaration = node; - if (node.kind === 152 /* IndexSignature */) { + var closeParenthesizedFunctionType = false; + if (node.kind === 153 /* IndexSignature */) { // Index signature can have readonly modifier emitClassMemberDeclarationFlags(node.flags); write("["); } else { // Construct signature or constructor type write new Signature - if (node.kind === 151 /* ConstructSignature */ || node.kind === 156 /* ConstructorType */) { + if (node.kind === 152 /* ConstructSignature */ || node.kind === 157 /* ConstructorType */) { write("new "); } + else if (node.kind === 156 /* FunctionType */) { + var currentOutput = writer.getText(); + // Do not generate incorrect type when function type with type parameters is type argument + // This could happen if user used space between two '<' making it error free + // e.g var x: A< (a: Tany)=>Tany>; + if (node.typeParameters && currentOutput.charAt(currentOutput.length - 1) === "<") { + closeParenthesizedFunctionType = true; + write("("); + } + } emitTypeParameters(node.typeParameters); write("("); } // Parameters emitCommaList(node.parameters, emitParameterDeclaration); - if (node.kind === 152 /* IndexSignature */) { + if (node.kind === 153 /* IndexSignature */) { write("]"); } else { write(")"); } // If this is not a constructor and is not private, emit the return type - var isFunctionTypeOrConstructorType = node.kind === 155 /* FunctionType */ || node.kind === 156 /* ConstructorType */; - if (isFunctionTypeOrConstructorType || node.parent.kind === 158 /* TypeLiteral */) { + var isFunctionTypeOrConstructorType = node.kind === 156 /* FunctionType */ || node.kind === 157 /* ConstructorType */; + if (isFunctionTypeOrConstructorType || node.parent.kind === 159 /* TypeLiteral */) { // Emit type literal signature return type only if specified if (node.type) { write(isFunctionTypeOrConstructorType ? " => " : ": "); emitType(node.type); } } - else if (node.kind !== 147 /* Constructor */ && !(node.flags & 8 /* Private */)) { + else if (node.kind !== 148 /* Constructor */ && !(node.flags & 8 /* Private */)) { writeReturnTypeAtSignature(node, getReturnTypeVisibilityError); } enclosingDeclaration = prevEnclosingDeclaration; @@ -32961,29 +33884,32 @@ var ts; write(";"); writeLine(); } + else if (closeParenthesizedFunctionType) { + write(")"); + } function getReturnTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; switch (node.kind) { - case 151 /* ConstructSignature */: + case 152 /* ConstructSignature */: // Interfaces cannot have return types that cannot be named 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 150 /* CallSignature */: + case 151 /* CallSignature */: // Interfaces cannot have return types that cannot be named 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 152 /* IndexSignature */: + case 153 /* IndexSignature */: // Interfaces cannot have return types that cannot be named 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 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: if (node.flags & 32 /* Static */) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? @@ -32991,7 +33917,7 @@ var ts; 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 === 220 /* ClassDeclaration */) { + else if (node.parent.kind === 221 /* ClassDeclaration */) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : @@ -33005,7 +33931,7 @@ var ts; ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; } break; - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : @@ -33040,9 +33966,9 @@ var ts; write("?"); } decreaseIndent(); - if (node.parent.kind === 155 /* FunctionType */ || - node.parent.kind === 156 /* ConstructorType */ || - node.parent.parent.kind === 158 /* TypeLiteral */) { + if (node.parent.kind === 156 /* FunctionType */ || + node.parent.kind === 157 /* ConstructorType */ || + node.parent.parent.kind === 159 /* TypeLiteral */) { emitTypeOfVariableDeclarationFromTypeLiteral(node); } else if (!(node.parent.flags & 8 /* Private */)) { @@ -33058,24 +33984,24 @@ var ts; } function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { switch (node.parent.kind) { - case 147 /* Constructor */: + case 148 /* Constructor */: return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? 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 151 /* ConstructSignature */: + case 152 /* ConstructSignature */: // Interfaces cannot have parameter types that cannot be named 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 150 /* CallSignature */: + case 151 /* CallSignature */: // Interfaces cannot have parameter types that cannot be named 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 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: if (node.parent.flags & 32 /* Static */) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? @@ -33083,7 +34009,7 @@ var ts; 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 === 220 /* ClassDeclaration */) { + else if (node.parent.parent.kind === 221 /* ClassDeclaration */) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : @@ -33096,7 +34022,7 @@ var ts; 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 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : @@ -33108,12 +34034,12 @@ var ts; } function emitBindingPattern(bindingPattern) { // We have to explicitly emit square bracket and bracket because these tokens are not store inside the node. - if (bindingPattern.kind === 166 /* ObjectBindingPattern */) { + if (bindingPattern.kind === 167 /* ObjectBindingPattern */) { write("{"); emitCommaList(bindingPattern.elements, emitBindingElement); write("}"); } - else if (bindingPattern.kind === 167 /* ArrayBindingPattern */) { + else if (bindingPattern.kind === 168 /* ArrayBindingPattern */) { write("["); var elements = bindingPattern.elements; emitCommaList(elements, emitBindingElement); @@ -33124,7 +34050,7 @@ var ts; } } function emitBindingElement(bindingElement) { - if (bindingElement.kind === 192 /* OmittedExpression */) { + if (bindingElement.kind === 193 /* OmittedExpression */) { // If bindingElement is an omittedExpression (i.e. containing elision), // we will emit blank space (although this may differ from users' original code, // it allows emitSeparatedList to write separator appropriately) @@ -33133,7 +34059,7 @@ var ts; // emit : function foo([ , x, , ]) {} write(" "); } - else if (bindingElement.kind === 168 /* BindingElement */) { + else if (bindingElement.kind === 169 /* BindingElement */) { if (bindingElement.propertyName) { // bindingElement has propertyName property in the following case: // { y: [a,b,c] ...} -> bindingPattern will have a property called propertyName for "y" @@ -33172,40 +34098,40 @@ var ts; } function emitNode(node) { switch (node.kind) { - case 219 /* FunctionDeclaration */: - case 224 /* ModuleDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 221 /* InterfaceDeclaration */: - case 220 /* ClassDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 223 /* EnumDeclaration */: + case 220 /* FunctionDeclaration */: + case 225 /* ModuleDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 222 /* InterfaceDeclaration */: + case 221 /* ClassDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 224 /* EnumDeclaration */: return emitModuleElement(node, isModuleElementVisible(node)); - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: return emitModuleElement(node, isVariableStatementVisible(node)); - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: // Import declaration without import clause is visible, otherwise it is not visible return emitModuleElement(node, /*isModuleElementVisible*/ !node.importClause); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: return emitExportDeclaration(node); - case 147 /* Constructor */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 148 /* Constructor */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: return writeFunctionDeclaration(node); - case 151 /* ConstructSignature */: - case 150 /* CallSignature */: - case 152 /* IndexSignature */: + case 152 /* ConstructSignature */: + case 151 /* CallSignature */: + case 153 /* IndexSignature */: return emitSignatureDeclarationWithJsDocComments(node); - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: return emitAccessorDeclaration(node); - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return emitPropertyDeclaration(node); - case 254 /* EnumMember */: + case 255 /* EnumMember */: return emitEnumMemberDeclaration(node); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return emitExportAssignment(node); - case 255 /* SourceFile */: + case 256 /* SourceFile */: return emitSourceFile(node); } } @@ -33228,7 +34154,7 @@ var ts; if (declFileName) { declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(declarationFilePath)), declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, /*isAbsolutePathAnUrl*/ false); - referencePathsOutput += '/// ' + newLine; + referencesOutput += "/// " + newLine; } return addedBundledEmitReference; function getDeclFileName(emitFileNames, sourceFiles, isBundledEmit) { @@ -33247,9 +34173,9 @@ var ts; var emitDeclarationResult = emitDeclarations(host, resolver, emitterDiagnostics, declarationFilePath, sourceFiles, isBundledEmit); var emitSkipped = emitDeclarationResult.reportedDeclarationError || host.isEmitBlocked(declarationFilePath) || host.getCompilerOptions().noEmit; if (!emitSkipped) { - var declarationOutput = emitDeclarationResult.referencePathsOutput + var declarationOutput = emitDeclarationResult.referencesOutput + getDeclarationOutput(emitDeclarationResult.synchronousDeclarationOutput, emitDeclarationResult.moduleElementDeclarationEmitInfo); - ts.writeFile(host, emitterDiagnostics, declarationFilePath, declarationOutput, host.getCompilerOptions().emitBOM); + ts.writeFile(host, emitterDiagnostics, declarationFilePath, declarationOutput, host.getCompilerOptions().emitBOM, sourceFiles); } return emitSkipped; function getDeclarationOutput(synchronousDeclarationOutput, moduleElementDeclarationEmitInfo) { @@ -33821,17 +34747,17 @@ var ts; switch (node.kind) { case 69 /* Identifier */: return makeUniqueName(node.text); - case 224 /* ModuleDeclaration */: - case 223 /* EnumDeclaration */: + case 225 /* ModuleDeclaration */: + case 224 /* EnumDeclaration */: return generateNameForModuleOrEnum(node); - case 229 /* ImportDeclaration */: - case 235 /* ExportDeclaration */: + case 230 /* ImportDeclaration */: + case 236 /* ExportDeclaration */: return generateNameForImportOrExportDeclaration(node); - case 219 /* FunctionDeclaration */: - case 220 /* ClassDeclaration */: - case 234 /* ExportAssignment */: + case 220 /* FunctionDeclaration */: + case 221 /* ClassDeclaration */: + case 235 /* ExportAssignment */: return generateNameForExportDefault(); - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: return generateNameForClassExpression(); } } @@ -34101,10 +35027,10 @@ var ts; write("("); emit(tempVariable); // Now we emit the expressions - if (node.template.kind === 188 /* TemplateExpression */) { + if (node.template.kind === 189 /* TemplateExpression */) { ts.forEach(node.template.templateSpans, function (templateSpan) { write(", "); - var needsParens = templateSpan.expression.kind === 186 /* BinaryExpression */ + var needsParens = templateSpan.expression.kind === 187 /* BinaryExpression */ && templateSpan.expression.operatorToken.kind === 24 /* CommaToken */; emitParenthesizedIf(templateSpan.expression, needsParens); }); @@ -34139,7 +35065,7 @@ var ts; // ("abc" + 1) << (2 + "") // rather than // "abc" + (1 << 2) + "" - var needsParens = templateSpan.expression.kind !== 177 /* ParenthesizedExpression */ + var needsParens = templateSpan.expression.kind !== 178 /* ParenthesizedExpression */ && comparePrecedenceToBinaryPlus(templateSpan.expression) !== 1 /* GreaterThan */; if (i > 0 || headEmitted) { // If this is the first span and the head was not emitted, then this templateSpan's @@ -34181,11 +35107,11 @@ var ts; } function templateNeedsParens(template, parent) { switch (parent.kind) { - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: return parent.expression === template; - case 175 /* TaggedTemplateExpression */: - case 177 /* ParenthesizedExpression */: + case 176 /* TaggedTemplateExpression */: + case 178 /* ParenthesizedExpression */: return false; default: return comparePrecedenceToBinaryPlus(parent) !== -1 /* LessThan */; @@ -34206,7 +35132,7 @@ var ts; // TODO (drosen): Note that we need to account for the upcoming 'yield' and // spread ('...') unary operators that are anticipated for ES6. switch (expression.kind) { - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: switch (expression.operatorToken.kind) { case 37 /* AsteriskToken */: case 39 /* SlashToken */: @@ -34218,8 +35144,8 @@ var ts; default: return -1 /* LessThan */; } - case 189 /* YieldExpression */: - case 187 /* ConditionalExpression */: + case 190 /* YieldExpression */: + case 188 /* ConditionalExpression */: return -1 /* LessThan */; default: return 1 /* GreaterThan */; @@ -34286,11 +35212,11 @@ var ts; // Either emit one big object literal (no spread attribs), or // a call to the __assign helper var attrs = openingNode.attributes; - if (ts.forEach(attrs, function (attr) { return attr.kind === 246 /* JsxSpreadAttribute */; })) { + if (ts.forEach(attrs, function (attr) { return attr.kind === 247 /* JsxSpreadAttribute */; })) { write("__assign("); var haveOpenedObjectLiteral = false; for (var i = 0; i < attrs.length; i++) { - if (attrs[i].kind === 246 /* JsxSpreadAttribute */) { + if (attrs[i].kind === 247 /* JsxSpreadAttribute */) { // If this is the first argument, we need to emit a {} as the first argument if (i === 0) { write("{}, "); @@ -34305,7 +35231,7 @@ var ts; emit(attrs[i].expression); } else { - ts.Debug.assert(attrs[i].kind === 245 /* JsxAttribute */); + ts.Debug.assert(attrs[i].kind === 246 /* JsxAttribute */); if (haveOpenedObjectLiteral) { write(", "); } @@ -34366,7 +35292,7 @@ var ts; decreaseIndent(); } else if (firstChild) { - if (firstChild.kind !== 240 /* JsxElement */ && firstChild.kind !== 241 /* JsxSelfClosingElement */) { + if (firstChild.kind !== 241 /* JsxElement */ && firstChild.kind !== 242 /* JsxSelfClosingElement */) { emit(firstChild); } else { @@ -34383,11 +35309,11 @@ var ts; write(")"); // closes "React.createElement(" emitTrailingComments(openingNode); } - if (node.kind === 240 /* JsxElement */) { + if (node.kind === 241 /* JsxElement */) { emitJsxElement(node.openingElement, node.children); } else { - ts.Debug.assert(node.kind === 241 /* JsxSelfClosingElement */); + ts.Debug.assert(node.kind === 242 /* JsxSelfClosingElement */); emitJsxElement(node); } } @@ -34409,11 +35335,11 @@ var ts; if (i > 0) { write(" "); } - if (attribs[i].kind === 246 /* JsxSpreadAttribute */) { + if (attribs[i].kind === 247 /* JsxSpreadAttribute */) { emitJsxSpreadAttribute(attribs[i]); } else { - ts.Debug.assert(attribs[i].kind === 245 /* JsxAttribute */); + ts.Debug.assert(attribs[i].kind === 246 /* JsxAttribute */); emitJsxAttribute(attribs[i]); } } @@ -34421,11 +35347,11 @@ var ts; function emitJsxOpeningOrSelfClosingElement(node) { write("<"); emit(node.tagName); - if (node.attributes.length > 0 || (node.kind === 241 /* JsxSelfClosingElement */)) { + if (node.attributes.length > 0 || (node.kind === 242 /* JsxSelfClosingElement */)) { write(" "); } emitAttributes(node.attributes); - if (node.kind === 241 /* JsxSelfClosingElement */) { + if (node.kind === 242 /* JsxSelfClosingElement */) { write("/>"); } else { @@ -34444,11 +35370,11 @@ var ts; } emitJsxClosingElement(node.closingElement); } - if (node.kind === 240 /* JsxElement */) { + if (node.kind === 241 /* JsxElement */) { emitJsxElement(node); } else { - ts.Debug.assert(node.kind === 241 /* JsxSelfClosingElement */); + ts.Debug.assert(node.kind === 242 /* JsxSelfClosingElement */); emitJsxOpeningOrSelfClosingElement(node); } } @@ -34456,11 +35382,11 @@ var ts; // In a sense, it does not actually emit identifiers as much as it declares a name for a specific property. // For example, this is utilized when feeding in a result to Object.defineProperty. function emitExpressionForPropertyName(node) { - ts.Debug.assert(node.kind !== 168 /* BindingElement */); + ts.Debug.assert(node.kind !== 169 /* BindingElement */); if (node.kind === 9 /* StringLiteral */) { emitLiteral(node); } - else if (node.kind === 139 /* ComputedPropertyName */) { + else if (node.kind === 140 /* ComputedPropertyName */) { // if this is a decorated computed property, we will need to capture the result // of the property expression so that we can apply decorators later. This is to ensure // we don't introduce unintended side effects: @@ -34504,63 +35430,64 @@ var ts; function isExpressionIdentifier(node) { var parent = node.parent; switch (parent.kind) { - case 169 /* ArrayLiteralExpression */: - case 194 /* AsExpression */: - case 186 /* BinaryExpression */: - case 173 /* CallExpression */: - case 248 /* CaseClause */: - case 139 /* ComputedPropertyName */: - case 187 /* ConditionalExpression */: - case 142 /* Decorator */: - case 180 /* DeleteExpression */: - case 203 /* DoStatement */: - case 172 /* ElementAccessExpression */: - case 234 /* ExportAssignment */: - case 201 /* ExpressionStatement */: - case 193 /* ExpressionWithTypeArguments */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 202 /* IfStatement */: - case 244 /* JsxClosingElement */: - case 241 /* JsxSelfClosingElement */: - case 242 /* JsxOpeningElement */: - case 246 /* JsxSpreadAttribute */: - case 247 /* JsxExpression */: - case 174 /* NewExpression */: - case 195 /* NonNullExpression */: - case 177 /* ParenthesizedExpression */: - case 185 /* PostfixUnaryExpression */: - case 184 /* PrefixUnaryExpression */: - case 210 /* ReturnStatement */: - case 253 /* ShorthandPropertyAssignment */: - case 190 /* SpreadElementExpression */: - case 212 /* SwitchStatement */: - case 175 /* TaggedTemplateExpression */: - case 196 /* TemplateSpan */: - case 214 /* ThrowStatement */: - case 176 /* TypeAssertionExpression */: - case 181 /* TypeOfExpression */: - case 182 /* VoidExpression */: - case 204 /* WhileStatement */: - case 211 /* WithStatement */: - case 189 /* YieldExpression */: + case 170 /* ArrayLiteralExpression */: + case 195 /* AsExpression */: + case 184 /* AwaitExpression */: + case 187 /* BinaryExpression */: + case 174 /* CallExpression */: + case 249 /* CaseClause */: + case 140 /* ComputedPropertyName */: + case 188 /* ConditionalExpression */: + case 143 /* Decorator */: + case 181 /* DeleteExpression */: + case 204 /* DoStatement */: + case 173 /* ElementAccessExpression */: + case 235 /* ExportAssignment */: + case 202 /* ExpressionStatement */: + case 194 /* ExpressionWithTypeArguments */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 203 /* IfStatement */: + case 245 /* JsxClosingElement */: + case 242 /* JsxSelfClosingElement */: + case 243 /* JsxOpeningElement */: + case 247 /* JsxSpreadAttribute */: + case 248 /* JsxExpression */: + case 175 /* NewExpression */: + case 196 /* NonNullExpression */: + case 178 /* ParenthesizedExpression */: + case 186 /* PostfixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: + case 211 /* ReturnStatement */: + case 254 /* ShorthandPropertyAssignment */: + case 191 /* SpreadElementExpression */: + case 213 /* SwitchStatement */: + case 176 /* TaggedTemplateExpression */: + case 197 /* TemplateSpan */: + case 215 /* ThrowStatement */: + case 177 /* TypeAssertionExpression */: + case 182 /* TypeOfExpression */: + case 183 /* VoidExpression */: + case 205 /* WhileStatement */: + case 212 /* WithStatement */: + case 190 /* YieldExpression */: return true; - case 168 /* BindingElement */: - case 254 /* EnumMember */: - case 141 /* Parameter */: - case 252 /* PropertyAssignment */: - case 144 /* PropertyDeclaration */: - case 217 /* VariableDeclaration */: + case 169 /* BindingElement */: + case 255 /* EnumMember */: + case 142 /* Parameter */: + case 253 /* PropertyAssignment */: + case 145 /* PropertyDeclaration */: + case 218 /* VariableDeclaration */: return parent.initializer === node; - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return parent.expression === node; - case 179 /* ArrowFunction */: - case 178 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 179 /* FunctionExpression */: return parent.body === node; - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: return parent.moduleReference === node; - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: return parent.left === node; } return false; @@ -34568,7 +35495,7 @@ var ts; function emitExpressionIdentifier(node) { var container = resolver.getReferencedExportContainer(node); if (container) { - if (container.kind === 255 /* SourceFile */) { + if (container.kind === 256 /* SourceFile */) { // Identifier references module export if (modulekind !== ts.ModuleKind.ES6 && modulekind !== ts.ModuleKind.System) { write("exports."); @@ -34584,13 +35511,13 @@ var ts; if (modulekind !== ts.ModuleKind.ES6) { var declaration = resolver.getReferencedImportDeclaration(node); if (declaration) { - if (declaration.kind === 230 /* ImportClause */) { + if (declaration.kind === 231 /* ImportClause */) { // Identifier references default import write(getGeneratedNameForNode(declaration.parent)); write(languageVersion === 0 /* ES3 */ ? '["default"]' : ".default"); return; } - else if (declaration.kind === 233 /* ImportSpecifier */) { + else if (declaration.kind === 234 /* ImportSpecifier */) { // Identifier references named import write(getGeneratedNameForNode(declaration.parent.parent.parent)); var name_25 = declaration.propertyName || declaration.name; @@ -34636,13 +35563,13 @@ var ts; } function isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(node) { if (languageVersion < 2 /* ES6 */) { - var parent_10 = node.parent; - switch (parent_10.kind) { - case 168 /* BindingElement */: - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: - case 217 /* VariableDeclaration */: - return parent_10.name === node && resolver.isDeclarationWithCollidingName(parent_10); + var parent_13 = node.parent; + switch (parent_13.kind) { + case 169 /* BindingElement */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: + case 218 /* VariableDeclaration */: + return parent_13.name === node && resolver.isDeclarationWithCollidingName(parent_13); } } return false; @@ -34752,10 +35679,10 @@ var ts; } } function needsParenthesisForAwaitExpressionAsYield(node) { - if (node.parent.kind === 186 /* BinaryExpression */ && !ts.isAssignmentOperator(node.parent.operatorToken.kind)) { + if (node.parent.kind === 187 /* BinaryExpression */ && !ts.isAssignmentOperator(node.parent.operatorToken.kind)) { return true; } - else if (node.parent.kind === 187 /* ConditionalExpression */ && node.parent.condition === node) { + else if (node.parent.kind === 188 /* ConditionalExpression */ && node.parent.condition === node) { return true; } return false; @@ -34763,11 +35690,11 @@ var ts; function needsParenthesisForPropertyAccessOrInvocation(node) { switch (node.kind) { case 69 /* Identifier */: - case 169 /* ArrayLiteralExpression */: - case 171 /* PropertyAccessExpression */: - case 172 /* ElementAccessExpression */: - case 173 /* CallExpression */: - case 177 /* ParenthesizedExpression */: + case 170 /* ArrayLiteralExpression */: + case 172 /* PropertyAccessExpression */: + case 173 /* ElementAccessExpression */: + case 174 /* CallExpression */: + case 178 /* ParenthesizedExpression */: // This list is not exhaustive and only includes those cases that are relevant // to the check in emitArrayLiteral. More cases can be added as needed. return false; @@ -34787,17 +35714,17 @@ var ts; write(", "); } var e = elements[pos]; - if (e.kind === 190 /* SpreadElementExpression */) { + if (e.kind === 191 /* SpreadElementExpression */) { e = e.expression; emitParenthesizedIf(e, /*parenthesized*/ group === 0 && needsParenthesisForPropertyAccessOrInvocation(e)); pos++; - if (pos === length && group === 0 && needsUniqueCopy && e.kind !== 169 /* ArrayLiteralExpression */) { + if (pos === length && group === 0 && needsUniqueCopy && e.kind !== 170 /* ArrayLiteralExpression */) { write(".slice()"); } } else { var i = pos; - while (i < length && elements[i].kind !== 190 /* SpreadElementExpression */) { + while (i < length && elements[i].kind !== 191 /* SpreadElementExpression */) { i++; } write("["); @@ -34820,7 +35747,7 @@ var ts; } } function isSpreadElementExpression(node) { - return node.kind === 190 /* SpreadElementExpression */; + return node.kind === 191 /* SpreadElementExpression */; } function emitArrayLiteral(node) { var elements = node.elements; @@ -34890,7 +35817,7 @@ var ts; writeComma(); var property = properties[i]; emitStart(property); - if (property.kind === 148 /* GetAccessor */ || property.kind === 149 /* SetAccessor */) { + if (property.kind === 149 /* GetAccessor */ || property.kind === 150 /* SetAccessor */) { // TODO (drosen): Reconcile with 'emitMemberFunctions'. var accessors = ts.getAllAccessorDeclarations(node.properties, property); if (property !== accessors.firstAccessor) { @@ -34899,7 +35826,7 @@ var ts; write("Object.defineProperty("); emit(tempVar); write(", "); - emitStart(node.name); + emitStart(property.name); emitExpressionForPropertyName(property.name); emitEnd(property.name); write(", {"); @@ -34942,13 +35869,13 @@ var ts; emitMemberAccessForPropertyName(property.name); emitEnd(property.name); write(" = "); - if (property.kind === 252 /* PropertyAssignment */) { + if (property.kind === 253 /* PropertyAssignment */) { emit(property.initializer); } - else if (property.kind === 253 /* ShorthandPropertyAssignment */) { + else if (property.kind === 254 /* ShorthandPropertyAssignment */) { emitExpressionIdentifier(property.name); } - else if (property.kind === 146 /* MethodDeclaration */) { + else if (property.kind === 147 /* MethodDeclaration */) { emitFunctionDeclaration(property); } else { @@ -34982,7 +35909,7 @@ var ts; // Everything until that point can be emitted as part of the initial object literal. var numInitialNonComputedProperties = numProperties; for (var i = 0, n = properties.length; i < n; i++) { - if (properties[i].name.kind === 139 /* ComputedPropertyName */) { + if (properties[i].name.kind === 140 /* ComputedPropertyName */) { numInitialNonComputedProperties = i; break; } @@ -34998,21 +35925,21 @@ var ts; emitObjectLiteralBody(node, properties.length); } function createBinaryExpression(left, operator, right, startsOnNewLine) { - var result = ts.createSynthesizedNode(186 /* BinaryExpression */, startsOnNewLine); + var result = ts.createSynthesizedNode(187 /* BinaryExpression */, startsOnNewLine); result.operatorToken = ts.createSynthesizedNode(operator); result.left = left; result.right = right; return result; } function createPropertyAccessExpression(expression, name) { - var result = ts.createSynthesizedNode(171 /* PropertyAccessExpression */); + var result = ts.createSynthesizedNode(172 /* PropertyAccessExpression */); result.expression = parenthesizeForAccess(expression); result.dotToken = ts.createSynthesizedNode(21 /* DotToken */); result.name = name; return result; } function createElementAccessExpression(expression, argumentExpression) { - var result = ts.createSynthesizedNode(172 /* ElementAccessExpression */); + var result = ts.createSynthesizedNode(173 /* ElementAccessExpression */); result.expression = parenthesizeForAccess(expression); result.argumentExpression = argumentExpression; return result; @@ -35020,9 +35947,9 @@ var ts; function parenthesizeForAccess(expr) { // When diagnosing whether the expression needs parentheses, the decision should be based // on the innermost expression in a chain of nested type assertions. - while (expr.kind === 176 /* TypeAssertionExpression */ || - expr.kind === 194 /* AsExpression */ || - expr.kind === 195 /* NonNullExpression */) { + while (expr.kind === 177 /* TypeAssertionExpression */ || + expr.kind === 195 /* AsExpression */ || + expr.kind === 196 /* NonNullExpression */) { expr = expr.expression; } // isLeftHandSideExpression is almost the correct criterion for when it is not necessary @@ -35034,11 +35961,11 @@ var ts; // 1.x -> not the same as (1).x // if (ts.isLeftHandSideExpression(expr) && - expr.kind !== 174 /* NewExpression */ && + expr.kind !== 175 /* NewExpression */ && expr.kind !== 8 /* NumericLiteral */) { return expr; } - var node = ts.createSynthesizedNode(177 /* ParenthesizedExpression */); + var node = ts.createSynthesizedNode(178 /* ParenthesizedExpression */); node.expression = expr; return node; } @@ -35073,12 +36000,12 @@ var ts; // Return true if identifier resolves to an exported member of a namespace function isNamespaceExportReference(node) { var container = resolver.getReferencedExportContainer(node); - return container && container.kind !== 255 /* SourceFile */; + return container && container.kind !== 256 /* SourceFile */; } // Return true if identifier resolves to an imported identifier function isImportedReference(node) { var declaration = resolver.getReferencedImportDeclaration(node); - return declaration && (declaration.kind === 230 /* ImportClause */ || declaration.kind === 233 /* ImportSpecifier */); + return declaration && (declaration.kind === 231 /* ImportClause */ || declaration.kind === 234 /* ImportSpecifier */); } function emitShorthandPropertyAssignment(node) { // The name property of a short-hand property assignment is considered an expression position, so here @@ -35119,7 +36046,7 @@ var ts; if (constantValue !== undefined) { write(constantValue.toString()); if (!compilerOptions.removeComments) { - var propertyName = node.kind === 171 /* PropertyAccessExpression */ ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); + var propertyName = node.kind === 172 /* PropertyAccessExpression */ ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); write(" /* " + propertyName + " */"); } return true; @@ -35130,7 +36057,7 @@ var ts; if (compilerOptions.isolatedModules) { return undefined; } - return node.kind === 171 /* PropertyAccessExpression */ || node.kind === 172 /* ElementAccessExpression */ + return node.kind === 172 /* PropertyAccessExpression */ || node.kind === 173 /* ElementAccessExpression */ ? resolver.getConstantValue(node) : undefined; } @@ -35227,7 +36154,7 @@ var ts; } emitExpressionIdentifier(node); break; - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: emitQualifiedNameAsExpression(node, useFallback); break; default: @@ -35251,13 +36178,13 @@ var ts; write("]"); } function hasSpreadElement(elements) { - return ts.forEach(elements, function (e) { return e.kind === 190 /* SpreadElementExpression */; }); + return ts.forEach(elements, function (e) { return e.kind === 191 /* SpreadElementExpression */; }); } function skipParentheses(node) { - while (node.kind === 177 /* ParenthesizedExpression */ || - node.kind === 176 /* TypeAssertionExpression */ || - node.kind === 194 /* AsExpression */ || - node.kind === 195 /* NonNullExpression */) { + while (node.kind === 178 /* ParenthesizedExpression */ || + node.kind === 177 /* TypeAssertionExpression */ || + node.kind === 195 /* AsExpression */ || + node.kind === 196 /* NonNullExpression */) { node = node.expression; } return node; @@ -35278,13 +36205,13 @@ var ts; function emitCallWithSpread(node) { var target; var expr = skipParentheses(node.expression); - if (expr.kind === 171 /* PropertyAccessExpression */) { + if (expr.kind === 172 /* PropertyAccessExpression */) { // Target will be emitted as "this" argument target = emitCallTarget(expr.expression); write("."); emit(expr.name); } - else if (expr.kind === 172 /* ElementAccessExpression */) { + else if (expr.kind === 173 /* ElementAccessExpression */) { // Target will be emitted as "this" argument target = emitCallTarget(expr.expression); write("["); @@ -35417,16 +36344,16 @@ var ts; // If the node is synthesized, it means the emitter put the parentheses there, // not the user. If we didn't want them, the emitter would not have put them // there. - if (!ts.nodeIsSynthesized(node) && node.parent.kind !== 179 /* ArrowFunction */) { - if (node.expression.kind === 176 /* TypeAssertionExpression */ || - node.expression.kind === 194 /* AsExpression */ || - node.expression.kind === 195 /* NonNullExpression */) { + if (!ts.nodeIsSynthesized(node) && node.parent.kind !== 180 /* ArrowFunction */) { + if (node.expression.kind === 177 /* TypeAssertionExpression */ || + node.expression.kind === 195 /* AsExpression */ || + node.expression.kind === 196 /* NonNullExpression */) { var operand = node.expression.expression; // Make sure we consider all nested cast expressions, e.g.: // (-A).x; - while (operand.kind === 176 /* TypeAssertionExpression */ || - operand.kind === 194 /* AsExpression */ || - operand.kind === 195 /* NonNullExpression */) { + while (operand.kind === 177 /* TypeAssertionExpression */ || + operand.kind === 195 /* AsExpression */ || + operand.kind === 196 /* NonNullExpression */) { operand = operand.expression; } // We have an expression of the form: (SubExpr) @@ -35437,15 +36364,15 @@ var ts; // (typeof A).toString() should be emitted as (typeof A).toString() and not typeof A.toString() // new (A()) should be emitted as new (A()) and not new A() // (function foo() { })() should be emitted as an IIF (function foo(){})() and not declaration function foo(){} () - if (operand.kind !== 184 /* PrefixUnaryExpression */ && - operand.kind !== 182 /* VoidExpression */ && - operand.kind !== 181 /* TypeOfExpression */ && - operand.kind !== 180 /* DeleteExpression */ && - operand.kind !== 185 /* PostfixUnaryExpression */ && - operand.kind !== 174 /* NewExpression */ && - !(operand.kind === 173 /* CallExpression */ && node.parent.kind === 174 /* NewExpression */) && - !(operand.kind === 178 /* FunctionExpression */ && node.parent.kind === 173 /* CallExpression */) && - !(operand.kind === 8 /* NumericLiteral */ && node.parent.kind === 171 /* PropertyAccessExpression */)) { + if (operand.kind !== 185 /* PrefixUnaryExpression */ && + operand.kind !== 183 /* VoidExpression */ && + operand.kind !== 182 /* TypeOfExpression */ && + operand.kind !== 181 /* DeleteExpression */ && + operand.kind !== 186 /* PostfixUnaryExpression */ && + operand.kind !== 175 /* NewExpression */ && + !(operand.kind === 174 /* CallExpression */ && node.parent.kind === 175 /* NewExpression */) && + !(operand.kind === 179 /* FunctionExpression */ && node.parent.kind === 174 /* CallExpression */) && + !(operand.kind === 8 /* NumericLiteral */ && node.parent.kind === 172 /* PropertyAccessExpression */)) { emit(operand); return; } @@ -35474,7 +36401,7 @@ var ts; if (!isCurrentFileSystemExternalModule() || node.kind !== 69 /* Identifier */ || ts.nodeIsSynthesized(node)) { return false; } - var isVariableDeclarationOrBindingElement = node.parent && (node.parent.kind === 217 /* VariableDeclaration */ || node.parent.kind === 168 /* BindingElement */); + var isVariableDeclarationOrBindingElement = node.parent && (node.parent.kind === 218 /* VariableDeclaration */ || node.parent.kind === 169 /* BindingElement */); var targetDeclaration = isVariableDeclarationOrBindingElement ? node.parent : resolver.getReferencedValueDeclaration(node); @@ -35505,7 +36432,7 @@ var ts; // the resulting expression a prefix increment operation. And in the second, it will make the resulting // expression a prefix increment whose operand is a plus expression - (++(+x)) // The same is true of minus of course. - if (node.operand.kind === 184 /* PrefixUnaryExpression */) { + if (node.operand.kind === 185 /* PrefixUnaryExpression */) { var operand = node.operand; if (node.operator === 35 /* PlusToken */ && (operand.operator === 35 /* PlusToken */ || operand.operator === 41 /* PlusPlusToken */)) { write(" "); @@ -35561,7 +36488,7 @@ var ts; } var current = ts.getRootDeclaration(node).parent; while (current) { - if (current.kind === 255 /* SourceFile */) { + if (current.kind === 256 /* SourceFile */) { return !isExported || ((ts.getCombinedNodeFlags(node) & 1 /* Export */) !== 0); } else if (ts.isDeclaration(current)) { @@ -35584,7 +36511,7 @@ var ts; if (ts.isElementAccessExpression(leftHandSideExpression)) { shouldEmitParentheses = true; write("("); - synthesizedLHS = ts.createSynthesizedNode(172 /* ElementAccessExpression */, /*startsOnNewLine*/ false); + synthesizedLHS = ts.createSynthesizedNode(173 /* ElementAccessExpression */, /*startsOnNewLine*/ false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, /*canDefineTempVariablesInPlace*/ false, /*shouldEmitCommaBeforeAssignment*/ false); synthesizedLHS.expression = identifier; if (leftHandSideExpression.argumentExpression.kind !== 8 /* NumericLiteral */ && @@ -35601,7 +36528,7 @@ var ts; else if (ts.isPropertyAccessExpression(leftHandSideExpression)) { shouldEmitParentheses = true; write("("); - synthesizedLHS = ts.createSynthesizedNode(171 /* PropertyAccessExpression */, /*startsOnNewLine*/ false); + synthesizedLHS = ts.createSynthesizedNode(172 /* PropertyAccessExpression */, /*startsOnNewLine*/ false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, /*canDefineTempVariablesInPlace*/ false, /*shouldEmitCommaBeforeAssignment*/ false); synthesizedLHS.expression = identifier; synthesizedLHS.dotToken = leftHandSideExpression.dotToken; @@ -35629,8 +36556,8 @@ var ts; } function emitBinaryExpression(node) { if (languageVersion < 2 /* ES6 */ && node.operatorToken.kind === 56 /* EqualsToken */ && - (node.left.kind === 170 /* ObjectLiteralExpression */ || node.left.kind === 169 /* ArrayLiteralExpression */)) { - emitDestructuring(node, node.parent.kind === 201 /* ExpressionStatement */); + (node.left.kind === 171 /* ObjectLiteralExpression */ || node.left.kind === 170 /* ArrayLiteralExpression */)) { + emitDestructuring(node, node.parent.kind === 202 /* ExpressionStatement */); } else { var exportChanged = node.operatorToken.kind >= 56 /* FirstAssignment */ && @@ -35695,7 +36622,7 @@ var ts; } } function isSingleLineEmptyBlock(node) { - if (node && node.kind === 198 /* Block */) { + if (node && node.kind === 199 /* Block */) { var block = node; return block.statements.length === 0 && nodeEndIsOnSameLineAsNodeStart(block, block); } @@ -35709,12 +36636,12 @@ var ts; } emitToken(15 /* OpenBraceToken */, node.pos); increaseIndent(); - if (node.kind === 225 /* ModuleBlock */) { - ts.Debug.assert(node.parent.kind === 224 /* ModuleDeclaration */); + if (node.kind === 226 /* ModuleBlock */) { + ts.Debug.assert(node.parent.kind === 225 /* ModuleDeclaration */); emitCaptureThisForNodeIfNecessary(node.parent); } emitLines(node.statements); - if (node.kind === 225 /* ModuleBlock */) { + if (node.kind === 226 /* ModuleBlock */) { emitTempDeclarations(/*newLine*/ true); } decreaseIndent(); @@ -35722,7 +36649,7 @@ var ts; emitToken(16 /* CloseBraceToken */, node.statements.end); } function emitEmbeddedStatement(node) { - if (node.kind === 198 /* Block */) { + if (node.kind === 199 /* Block */) { write(" "); emit(node); } @@ -35734,7 +36661,7 @@ var ts; } } function emitExpressionStatement(node) { - emitParenthesizedIf(node.expression, /*parenthesized*/ node.expression.kind === 179 /* ArrowFunction */); + emitParenthesizedIf(node.expression, /*parenthesized*/ node.expression.kind === 180 /* ArrowFunction */); write(";"); } function emitIfStatement(node) { @@ -35747,7 +36674,7 @@ var ts; if (node.elseStatement) { writeLine(); emitToken(80 /* ElseKeyword */, node.thenStatement.end); - if (node.elseStatement.kind === 202 /* IfStatement */) { + if (node.elseStatement.kind === 203 /* IfStatement */) { write(" "); emit(node.elseStatement); } @@ -35767,7 +36694,7 @@ var ts; else { emitNormalLoopBody(node, /*emitAsEmbeddedStatement*/ true); } - if (node.statement.kind === 198 /* Block */) { + if (node.statement.kind === 199 /* Block */) { write(" "); } else { @@ -35857,7 +36784,7 @@ var ts; } else { var loop = convertLoopBody(node); - if (node.parent.kind === 213 /* LabeledStatement */) { + if (node.parent.kind === 214 /* LabeledStatement */) { // if parent of the loop was labeled statement - attach the label to loop skipping converted loop body emitLabelAndColon(node.parent); } @@ -35868,11 +36795,11 @@ var ts; var functionName = makeUniqueName("_loop"); var loopInitializer; switch (node.kind) { - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: var initializer = node.initializer; - if (initializer && initializer.kind === 218 /* VariableDeclarationList */) { + if (initializer && initializer.kind === 219 /* VariableDeclarationList */) { loopInitializer = node.initializer; } break; @@ -35887,7 +36814,7 @@ var ts; processVariableDeclaration(varDeclaration.name); } } - var bodyIsBlock = node.statement.kind === 198 /* Block */; + var bodyIsBlock = node.statement.kind === 199 /* Block */; var paramList = loopParameters ? loopParameters.join(", ") : ""; writeLine(); write("var " + functionName + " = function(" + paramList + ")"); @@ -36029,7 +36956,7 @@ var ts; if (emitAsEmbeddedStatement) { emitEmbeddedStatement(node.statement); } - else if (node.statement.kind === 198 /* Block */) { + else if (node.statement.kind === 199 /* Block */) { emitLines(node.statement.statements); } else { @@ -36160,7 +37087,7 @@ var ts; var endPos = emitToken(86 /* ForKeyword */, node.pos); write(" "); endPos = emitToken(17 /* OpenParenToken */, endPos); - if (node.initializer && node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer && node.initializer.kind === 219 /* VariableDeclarationList */) { var variableDeclarationList = node.initializer; var startIsEmitted = tryEmitStartOfVariableDeclarationList(variableDeclarationList); if (startIsEmitted) { @@ -36186,7 +37113,7 @@ var ts; } } function emitForInOrForOfStatement(node) { - if (languageVersion < 2 /* ES6 */ && node.kind === 207 /* ForOfStatement */) { + if (languageVersion < 2 /* ES6 */ && node.kind === 208 /* ForOfStatement */) { emitLoop(node, emitDownLevelForOfStatementWorker); } else { @@ -36197,7 +37124,7 @@ var ts; var endPos = emitToken(86 /* ForKeyword */, node.pos); write(" "); endPos = emitToken(17 /* OpenParenToken */, endPos); - if (node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer.kind === 219 /* VariableDeclarationList */) { var variableDeclarationList = node.initializer; if (variableDeclarationList.declarations.length >= 1) { tryEmitStartOfVariableDeclarationList(variableDeclarationList); @@ -36207,7 +37134,7 @@ var ts; else { emit(node.initializer); } - if (node.kind === 206 /* ForInStatement */) { + if (node.kind === 207 /* ForInStatement */) { write(" in "); } else { @@ -36297,7 +37224,7 @@ var ts; // let v = _a[_i]; var rhsIterationValue = createElementAccessExpression(rhsReference, counter); emitStart(node.initializer); - if (node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer.kind === 219 /* VariableDeclarationList */) { write("var "); var variableDeclarationList = node.initializer; if (variableDeclarationList.declarations.length > 0) { @@ -36327,7 +37254,7 @@ var ts; // Initializer is an expression. Emit the expression in the body, so that it's // evaluated on every iteration. var assignmentExpression = createBinaryExpression(node.initializer, 56 /* EqualsToken */, rhsIterationValue, /*startsOnNewLine*/ false); - if (node.initializer.kind === 169 /* ArrayLiteralExpression */ || node.initializer.kind === 170 /* ObjectLiteralExpression */) { + if (node.initializer.kind === 170 /* ArrayLiteralExpression */ || node.initializer.kind === 171 /* ObjectLiteralExpression */) { // This is a destructuring pattern, so call emitDestructuring instead of emit. Calling emit will not work, because it will cause // the BinaryExpression to be passed in instead of the expression statement, which will cause emitDestructuring to crash. emitDestructuring(assignmentExpression, /*isAssignmentExpressionStatement*/ true, /*value*/ undefined); @@ -36355,7 +37282,7 @@ var ts; // it is possible if either // - break\continue is statement labeled and label is located inside the converted loop // - break\continue is non-labeled and located in non-converted loop\switch statement - var jump = node.kind === 209 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */; + var jump = node.kind === 210 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */; var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels[node.label.text]) || (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump)); if (!canUseBreakOrContinue) { @@ -36363,7 +37290,7 @@ var ts; // explicit exit from loop -> copy out parameters copyLoopOutParameters(convertedLoopState, 1 /* ToOutParameter */, /*emitAsStatements*/ false); if (!node.label) { - if (node.kind === 209 /* BreakStatement */) { + if (node.kind === 210 /* BreakStatement */) { convertedLoopState.nonLocalJumps |= 2 /* Break */; write("\"break\";"); } @@ -36375,7 +37302,7 @@ var ts; } else { var labelMarker = void 0; - if (node.kind === 209 /* BreakStatement */) { + if (node.kind === 210 /* BreakStatement */) { labelMarker = "break-" + node.label.text; setLabeledJump(convertedLoopState, /*isBreak*/ true, node.label.text, labelMarker); } @@ -36388,7 +37315,7 @@ var ts; return; } } - emitToken(node.kind === 209 /* BreakStatement */ ? 70 /* BreakKeyword */ : 75 /* ContinueKeyword */, node.pos); + emitToken(node.kind === 210 /* BreakStatement */ ? 70 /* BreakKeyword */ : 75 /* ContinueKeyword */, node.pos); emitOptional(" ", node.label); write(";"); } @@ -36454,7 +37381,7 @@ var ts; ts.getLineOfLocalPositionFromLineMap(currentLineMap, ts.skipTrivia(currentText, node2.pos)); } function emitCaseOrDefaultClause(node) { - if (node.kind === 248 /* CaseClause */) { + if (node.kind === 249 /* CaseClause */) { write("case "); emit(node.expression); write(":"); @@ -36523,7 +37450,7 @@ var ts; function getContainingModule(node) { do { node = node.parent; - } while (node && node.kind !== 224 /* ModuleDeclaration */); + } while (node && node.kind !== 225 /* ModuleDeclaration */); return node; } function emitContainingModuleName(node) { @@ -36548,13 +37475,13 @@ var ts; function createVoidZero() { var zero = ts.createSynthesizedNode(8 /* NumericLiteral */); zero.text = "0"; - var result = ts.createSynthesizedNode(182 /* VoidExpression */); + var result = ts.createSynthesizedNode(183 /* VoidExpression */); result.expression = zero; return result; } function emitEs6ExportDefaultCompat(node) { - if (node.parent.kind === 255 /* SourceFile */) { - ts.Debug.assert(!!(node.flags & 512 /* Default */) || node.kind === 234 /* ExportAssignment */); + if (node.parent.kind === 256 /* SourceFile */) { + ts.Debug.assert(!!(node.flags & 512 /* Default */) || node.kind === 235 /* ExportAssignment */); // only allow export default at a source file level if (modulekind === ts.ModuleKind.CommonJS || modulekind === ts.ModuleKind.AMD || modulekind === ts.ModuleKind.UMD) { if (!isEs6Module) { @@ -36660,7 +37587,7 @@ var ts; emitNodeWithCommentsAndWithoutSourcemap(name); write("\", "); } - var isVariableDeclarationOrBindingElement = name.parent && (name.parent.kind === 217 /* VariableDeclaration */ || name.parent.kind === 168 /* BindingElement */); + var isVariableDeclarationOrBindingElement = name.parent && (name.parent.kind === 218 /* VariableDeclaration */ || name.parent.kind === 169 /* BindingElement */); // If this is first var declaration, we need to start at var/let/const keyword instead // otherwise use nodeForSourceMap as the start position emitStart(isFirstVariableDeclaration(nodeForSourceMap) ? nodeForSourceMap.parent : nodeForSourceMap); @@ -36694,8 +37621,8 @@ var ts; return identifier; } function isFirstVariableDeclaration(root) { - return root.kind === 217 /* VariableDeclaration */ && - root.parent.kind === 218 /* VariableDeclarationList */ && + return root.kind === 218 /* VariableDeclaration */ && + root.parent.kind === 219 /* VariableDeclarationList */ && root.parent.declarations[0] === root; } function emitDestructuring(root, isAssignmentExpressionStatement, value) { @@ -36705,15 +37632,15 @@ var ts; // Also temporary variables should be explicitly allocated for source level declarations when module target is system // because actual variable declarations are hoisted var canDefineTempVariablesInPlace = false; - if (root.kind === 217 /* VariableDeclaration */) { + if (root.kind === 218 /* VariableDeclaration */) { var isExported = ts.getCombinedNodeFlags(root) & 1 /* Export */; var isSourceLevelForSystemModuleKind = shouldHoistDeclarationInSystemJsModule(root); canDefineTempVariablesInPlace = !isExported && !isSourceLevelForSystemModuleKind; } - else if (root.kind === 141 /* Parameter */) { + else if (root.kind === 142 /* Parameter */) { canDefineTempVariablesInPlace = true; } - if (root.kind === 186 /* BinaryExpression */) { + if (root.kind === 187 /* BinaryExpression */) { emitAssignmentExpression(root); } else { @@ -36748,14 +37675,14 @@ var ts; // If the temporary variable needs to be emitted use the source Map node for assignment of that statement value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ true, sourceMapNode); // Return the expression 'value === void 0 ? defaultValue : value' - var equals = ts.createSynthesizedNode(186 /* BinaryExpression */); + var equals = ts.createSynthesizedNode(187 /* BinaryExpression */); equals.left = value; equals.operatorToken = ts.createSynthesizedNode(32 /* EqualsEqualsEqualsToken */); equals.right = createVoidZero(); return createConditionalExpression(equals, defaultValue, value); } function createConditionalExpression(condition, whenTrue, whenFalse) { - var cond = ts.createSynthesizedNode(187 /* ConditionalExpression */); + var cond = ts.createSynthesizedNode(188 /* ConditionalExpression */); cond.condition = condition; cond.questionToken = ts.createSynthesizedNode(53 /* QuestionToken */); cond.whenTrue = whenTrue; @@ -36770,7 +37697,7 @@ var ts; } function createPropertyAccessForDestructuringProperty(object, propName) { var index; - var nameIsComputed = propName.kind === 139 /* ComputedPropertyName */; + var nameIsComputed = propName.kind === 140 /* ComputedPropertyName */; if (nameIsComputed) { // TODO to handle when we look into sourcemaps for computed properties, for now use propName index = ensureIdentifier(propName.expression, /*reuseIdentifierExpressions*/ false, propName); @@ -36790,7 +37717,7 @@ var ts; : createElementAccessExpression(object, index); } function createSliceCall(value, sliceIndex) { - var call = ts.createSynthesizedNode(173 /* CallExpression */); + var call = ts.createSynthesizedNode(174 /* CallExpression */); var sliceIdentifier = ts.createSynthesizedNode(69 /* Identifier */); sliceIdentifier.text = "slice"; call.expression = createPropertyAccessExpression(value, sliceIdentifier); @@ -36808,9 +37735,9 @@ var ts; } for (var _a = 0, properties_5 = properties; _a < properties_5.length; _a++) { var p = properties_5[_a]; - if (p.kind === 252 /* PropertyAssignment */ || p.kind === 253 /* ShorthandPropertyAssignment */) { + if (p.kind === 253 /* PropertyAssignment */ || p.kind === 254 /* ShorthandPropertyAssignment */) { var propName = p.name; - var target_1 = p.kind === 253 /* ShorthandPropertyAssignment */ ? p : p.initializer || propName; + var target_1 = p.kind === 254 /* ShorthandPropertyAssignment */ ? p : p.initializer || propName; // Assignment for target = value.propName should highlight whole property, hence use p as source map node emitDestructuringAssignment(target_1, createPropertyAccessForDestructuringProperty(value, propName), p); } @@ -36826,9 +37753,9 @@ var ts; } for (var i = 0; i < elements.length; i++) { var e = elements[i]; - if (e.kind !== 192 /* OmittedExpression */) { + if (e.kind !== 193 /* OmittedExpression */) { // Assignment for target = value.propName should highlight whole property, hence use e as source map node - if (e.kind !== 190 /* SpreadElementExpression */) { + if (e.kind !== 191 /* SpreadElementExpression */) { emitDestructuringAssignment(e, createElementAccessExpression(value, createNumericLiteral(i)), e); } else if (i === elements.length - 1) { @@ -36839,20 +37766,20 @@ var ts; } function emitDestructuringAssignment(target, value, sourceMapNode) { // When emitting target = value use source map node to highlight, including any temporary assignments needed for this - if (target.kind === 253 /* ShorthandPropertyAssignment */) { + if (target.kind === 254 /* ShorthandPropertyAssignment */) { if (target.objectAssignmentInitializer) { value = createDefaultValueCheck(value, target.objectAssignmentInitializer, sourceMapNode); } target = target.name; } - else if (target.kind === 186 /* BinaryExpression */ && target.operatorToken.kind === 56 /* EqualsToken */) { + else if (target.kind === 187 /* BinaryExpression */ && target.operatorToken.kind === 56 /* EqualsToken */) { value = createDefaultValueCheck(value, target.right, sourceMapNode); target = target.left; } - if (target.kind === 170 /* ObjectLiteralExpression */) { + if (target.kind === 171 /* ObjectLiteralExpression */) { emitObjectLiteralAssignment(target, value, sourceMapNode); } - else if (target.kind === 169 /* ArrayLiteralExpression */) { + else if (target.kind === 170 /* ArrayLiteralExpression */) { emitArrayLiteralAssignment(target, value, sourceMapNode); } else { @@ -36874,7 +37801,7 @@ var ts; emitDestructuringAssignment(target, value, ts.nodeIsSynthesized(root) ? target : root); } else { - if (root.parent.kind !== 177 /* ParenthesizedExpression */) { + if (root.parent.kind !== 178 /* ParenthesizedExpression */) { write("("); } // Temporary assignment needed to emit root should highlight whole binary expression @@ -36883,7 +37810,7 @@ var ts; emitDestructuringAssignment(target, value, root); write(", "); emit(value); - if (root.parent.kind !== 177 /* ParenthesizedExpression */) { + if (root.parent.kind !== 178 /* ParenthesizedExpression */) { write(")"); } } @@ -36911,12 +37838,12 @@ var ts; } for (var i = 0; i < numElements; i++) { var element = elements[i]; - if (pattern.kind === 166 /* ObjectBindingPattern */) { + if (pattern.kind === 167 /* ObjectBindingPattern */) { // Rewrite element to a declaration with an initializer that fetches property var propName = element.propertyName || element.name; emitBindingElement(element, createPropertyAccessForDestructuringProperty(value, propName)); } - else if (element.kind !== 192 /* OmittedExpression */) { + else if (element.kind !== 193 /* OmittedExpression */) { if (!element.dotDotDotToken) { // Rewrite element to a declaration that accesses array element at index i emitBindingElement(element, createElementAccessExpression(value, createNumericLiteral(i))); @@ -36990,12 +37917,12 @@ var ts; var isCapturedInFunction = flags & 131072 /* CapturedBlockScopedBinding */; var isDeclaredInLoop = flags & 262144 /* BlockScopedBindingInLoop */; var emittedAsTopLevel = ts.isBlockScopedContainerTopLevel(container) || - (isCapturedInFunction && isDeclaredInLoop && container.kind === 198 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false)); + (isCapturedInFunction && isDeclaredInLoop && container.kind === 199 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false)); var emittedAsNestedLetDeclaration = ts.getCombinedNodeFlags(node) & 1024 /* Let */ && !emittedAsTopLevel; var emitExplicitInitializer = emittedAsNestedLetDeclaration && - container.kind !== 206 /* ForInStatement */ && - container.kind !== 207 /* ForOfStatement */ && + container.kind !== 207 /* ForInStatement */ && + container.kind !== 208 /* ForOfStatement */ && (!resolver.isDeclarationWithCollidingName(node) || (isDeclaredInLoop && !isCapturedInFunction && !ts.isIterationStatement(container, /*lookInLabeledStatements*/ false))); if (emitExplicitInitializer) { @@ -37016,7 +37943,7 @@ var ts; } } function emitExportVariableAssignments(node) { - if (node.kind === 192 /* OmittedExpression */) { + if (node.kind === 193 /* OmittedExpression */) { return; } var name = node.name; @@ -37030,7 +37957,7 @@ var ts; function isES6ExportedDeclaration(node) { return !!(node.flags & 1 /* Export */) && modulekind === ts.ModuleKind.ES6 && - node.parent.kind === 255 /* SourceFile */; + node.parent.kind === 256 /* SourceFile */; } function emitVariableStatement(node) { var startIsEmitted = false; @@ -37149,7 +38076,7 @@ var ts; } } function emitRestParameter(node) { - if (languageVersion < 2 /* ES6 */ && ts.hasRestParameter(node)) { + if (languageVersion < 2 /* ES6 */ && ts.hasDeclaredRestParameter(node)) { var restIndex = node.parameters.length - 1; var restParam = node.parameters[restIndex]; // A rest parameter cannot have a binding pattern, so let's just ignore it if it does. @@ -37191,12 +38118,12 @@ var ts; } } function emitAccessor(node) { - write(node.kind === 148 /* GetAccessor */ ? "get " : "set "); + write(node.kind === 149 /* GetAccessor */ ? "get " : "set "); emit(node.name); emitSignatureAndBody(node); } function shouldEmitAsArrowFunction(node) { - return node.kind === 179 /* ArrowFunction */ && languageVersion >= 2 /* ES6 */; + return node.kind === 180 /* ArrowFunction */ && languageVersion >= 2 /* ES6 */; } function emitDeclarationName(node) { if (node.name) { @@ -37207,11 +38134,11 @@ var ts; } } function shouldEmitFunctionName(node) { - if (node.kind === 178 /* FunctionExpression */) { + if (node.kind === 179 /* FunctionExpression */) { // Emit name if one is present return !!node.name; } - if (node.kind === 219 /* FunctionDeclaration */) { + if (node.kind === 220 /* FunctionDeclaration */) { // Emit name if one is present, or emit generated name in down-level case (for export default case) return !!node.name || modulekind !== ts.ModuleKind.ES6; } @@ -37223,12 +38150,12 @@ var ts; // TODO (yuisu) : we should not have special cases to condition emitting comments // but have one place to fix check for these conditions. var kind = node.kind, parent = node.parent; - if (kind !== 146 /* MethodDeclaration */ && - kind !== 145 /* MethodSignature */ && + if (kind !== 147 /* MethodDeclaration */ && + kind !== 146 /* MethodSignature */ && parent && - parent.kind !== 252 /* PropertyAssignment */ && - parent.kind !== 173 /* CallExpression */ && - parent.kind !== 169 /* ArrayLiteralExpression */) { + parent.kind !== 253 /* PropertyAssignment */ && + parent.kind !== 174 /* CallExpression */ && + parent.kind !== 170 /* ArrayLiteralExpression */) { // 1. Methods will emit comments at their assignment declaration sites. // // 2. If the function is a property of object literal, emitting leading-comments @@ -37267,13 +38194,13 @@ var ts; emitDeclarationName(node); } emitSignatureAndBody(node); - if (modulekind !== ts.ModuleKind.ES6 && kind === 219 /* FunctionDeclaration */ && parent === currentSourceFile && node.name) { + if (modulekind !== ts.ModuleKind.ES6 && kind === 220 /* FunctionDeclaration */ && parent === currentSourceFile && node.name) { emitExportMemberAssignments(node.name); } emitEnd(node); - if (kind !== 146 /* MethodDeclaration */ && - kind !== 145 /* MethodSignature */ && - kind !== 179 /* ArrowFunction */) { + if (kind !== 147 /* MethodDeclaration */ && + kind !== 146 /* MethodSignature */ && + kind !== 180 /* ArrowFunction */) { emitTrailingComments(node); } } @@ -37291,7 +38218,7 @@ var ts; if (node) { var parameters = node.parameters; var skipCount = node.parameters.length && node.parameters[0].name.text === "this" ? 1 : 0; - var omitCount = languageVersion < 2 /* ES6 */ && ts.hasRestParameter(node) ? 1 : 0; + var omitCount = languageVersion < 2 /* ES6 */ && ts.hasDeclaredRestParameter(node) ? 1 : 0; emitList(parameters, skipCount, parameters.length - omitCount - skipCount, /*multiLine*/ false, /*trailingComma*/ false); } write(")"); @@ -37307,7 +38234,7 @@ var ts; } function emitAsyncFunctionBodyForES6(node) { var promiseConstructor = ts.getEntityNameFromTypeNode(node.type); - var isArrowFunction = node.kind === 179 /* ArrowFunction */; + var isArrowFunction = node.kind === 180 /* ArrowFunction */; var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192 /* CaptureArguments */) !== 0; // An async function is emit as an outer function that calls an inner // generator function. To preserve lexical bindings, we pass the current @@ -37429,7 +38356,7 @@ var ts; write(" { }"); } else { - if (node.body.kind === 198 /* Block */) { + if (node.body.kind === 199 /* Block */) { emitBlockFunctionBody(node, node.body); } else { @@ -37488,10 +38415,10 @@ var ts; write(" "); // Unwrap all type assertions. var current = body; - while (current.kind === 176 /* TypeAssertionExpression */) { + while (current.kind === 177 /* TypeAssertionExpression */) { current = current.expression; } - emitParenthesizedIf(body, current.kind === 170 /* ObjectLiteralExpression */); + emitParenthesizedIf(body, current.kind === 171 /* ObjectLiteralExpression */); } function emitDownLevelExpressionFunctionBody(node, body) { write(" {"); @@ -37576,13 +38503,13 @@ var ts; return undefined; } var statement = statements[index]; - if (statement.kind === 201 /* ExpressionStatement */) { + if (statement.kind === 202 /* ExpressionStatement */) { return ts.isSuperCallExpression(statement.expression) ? statement : undefined; } } function emitParameterPropertyAssignments(node) { ts.forEach(node.parameters, function (param) { - if (param.flags & 28 /* AccessibilityModifier */) { + if (param.flags & 92 /* ParameterPropertyModifier */) { writeLine(); emitStart(param); emitStart(param.name); @@ -37605,7 +38532,7 @@ var ts; emitNodeWithCommentsAndWithoutSourcemap(memberName); write("]"); } - else if (memberName.kind === 139 /* ComputedPropertyName */) { + else if (memberName.kind === 140 /* ComputedPropertyName */) { emitComputedPropertyName(memberName); } else { @@ -37617,7 +38544,7 @@ var ts; var properties = []; for (var _a = 0, _b = node.members; _a < _b.length; _a++) { var member = _b[_a]; - if (member.kind === 144 /* PropertyDeclaration */ && isStatic === ((member.flags & 32 /* Static */) !== 0) && member.initializer) { + if (member.kind === 145 /* PropertyDeclaration */ && isStatic === ((member.flags & 32 /* Static */) !== 0) && member.initializer) { properties.push(member); } } @@ -37657,11 +38584,11 @@ var ts; } function emitMemberFunctionsForES5AndLower(node) { ts.forEach(node.members, function (member) { - if (member.kind === 197 /* SemicolonClassElement */) { + if (member.kind === 198 /* SemicolonClassElement */) { writeLine(); write(";"); } - else if (member.kind === 146 /* MethodDeclaration */ || node.kind === 145 /* MethodSignature */) { + else if (member.kind === 147 /* MethodDeclaration */ || node.kind === 146 /* MethodSignature */) { if (!member.body) { return emitCommentsOnNotEmittedNode(member); } @@ -37678,7 +38605,7 @@ var ts; write(";"); emitTrailingComments(member); } - else if (member.kind === 148 /* GetAccessor */ || member.kind === 149 /* SetAccessor */) { + else if (member.kind === 149 /* GetAccessor */ || member.kind === 150 /* SetAccessor */) { var accessors = ts.getAllAccessorDeclarations(node.members, member); if (member === accessors.firstAccessor) { writeLine(); @@ -37728,22 +38655,22 @@ var ts; function emitMemberFunctionsForES6AndHigher(node) { for (var _a = 0, _b = node.members; _a < _b.length; _a++) { var member = _b[_a]; - if ((member.kind === 146 /* MethodDeclaration */ || node.kind === 145 /* MethodSignature */) && !member.body) { + if ((member.kind === 147 /* MethodDeclaration */ || node.kind === 146 /* MethodSignature */) && !member.body) { emitCommentsOnNotEmittedNode(member); } - else if (member.kind === 146 /* MethodDeclaration */ || - member.kind === 148 /* GetAccessor */ || - member.kind === 149 /* SetAccessor */) { + else if (member.kind === 147 /* MethodDeclaration */ || + member.kind === 149 /* GetAccessor */ || + member.kind === 150 /* SetAccessor */) { writeLine(); emitLeadingComments(member); emitStart(member); if (member.flags & 32 /* Static */) { write("static "); } - if (member.kind === 148 /* GetAccessor */) { + if (member.kind === 149 /* GetAccessor */) { write("get "); } - else if (member.kind === 149 /* SetAccessor */) { + else if (member.kind === 150 /* SetAccessor */) { write("set "); } if (member.asteriskToken) { @@ -37754,7 +38681,7 @@ var ts; emitEnd(member); emitTrailingComments(member); } - else if (member.kind === 197 /* SemicolonClassElement */) { + else if (member.kind === 198 /* SemicolonClassElement */) { writeLine(); write(";"); } @@ -37783,11 +38710,11 @@ var ts; var hasInstancePropertyWithInitializer = false; // Emit the constructor overload pinned comments ts.forEach(node.members, function (member) { - if (member.kind === 147 /* Constructor */ && !member.body) { + if (member.kind === 148 /* Constructor */ && !member.body) { emitCommentsOnNotEmittedNode(member); } // Check if there is any non-static property assignment - if (member.kind === 144 /* PropertyDeclaration */ && member.initializer && (member.flags & 32 /* Static */) === 0) { + if (member.kind === 145 /* PropertyDeclaration */ && member.initializer && (member.flags & 32 /* Static */) === 0) { hasInstancePropertyWithInitializer = true; } }); @@ -37904,7 +38831,7 @@ var ts; var isHoistedDeclarationInSystemModule = shouldHoistDeclarationInSystemJsModule(node); var isDecorated = ts.nodeIsDecorated(node); var rewriteAsClassExpression = isDecorated || isHoistedDeclarationInSystemModule; - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { if (rewriteAsClassExpression) { // When we emit an ES6 class that has a class decorator, we must tailor the // emit to certain specific cases. @@ -38025,7 +38952,7 @@ var ts; // This keeps the expression as an expression, while ensuring that the static parts // of it have been initialized by the time it is used. var staticProperties = getInitializedProperties(node, /*isStatic*/ true); - var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 191 /* ClassExpression */; + var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 192 /* ClassExpression */; var tempVariable; if (isClassExpressionWithStaticProperties) { tempVariable = createAndRecordTempVariable(0 /* Auto */); @@ -38100,7 +39027,7 @@ var ts; write(";"); } } - else if (node.parent.kind !== 255 /* SourceFile */) { + else if (node.parent.kind !== 256 /* SourceFile */) { writeLine(); emitStart(node); emitModuleMemberName(node); @@ -38112,7 +39039,7 @@ var ts; } } function emitClassLikeDeclarationBelowES6(node) { - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { // source file level classes in system modules are hoisted so 'var's for them are already defined if (!shouldHoistDeclarationInSystemJsModule(node)) { write("var "); @@ -38173,11 +39100,11 @@ var ts; emit(baseTypeNode.expression); } write("))"); - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { write(";"); } emitEnd(node); - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { emitExportMemberAssignment(node); } } @@ -38264,7 +39191,7 @@ var ts; else { decorators = member.decorators; // we only decorate the parameters here if this is a method - if (member.kind === 146 /* MethodDeclaration */) { + if (member.kind === 147 /* MethodDeclaration */) { functionLikeMember = member; } } @@ -38321,7 +39248,7 @@ var ts; write(", "); emitExpressionForPropertyName(member.name); if (languageVersion > 0 /* ES3 */) { - if (member.kind !== 144 /* PropertyDeclaration */) { + if (member.kind !== 145 /* PropertyDeclaration */) { // We emit `null` here to indicate to `__decorate` that it can invoke `Object.getOwnPropertyDescriptor` directly. // We have this extra argument here so that we can inject an explicit property descriptor at a later date. write(", null"); @@ -38363,10 +39290,10 @@ var ts; // The caller should have already tested whether the node has decorators and whether the emitDecoratorMetadata // compiler option is set. switch (node.kind) { - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 144 /* PropertyDeclaration */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 145 /* PropertyDeclaration */: return true; } return false; @@ -38376,7 +39303,7 @@ var ts; // The caller should have already tested whether the node has decorators and whether the emitDecoratorMetadata // compiler option is set. switch (node.kind) { - case 146 /* MethodDeclaration */: + case 147 /* MethodDeclaration */: return true; } return false; @@ -38386,9 +39313,9 @@ var ts; // The caller should have already tested whether the node has decorators and whether the emitDecoratorMetadata // compiler option is set. switch (node.kind) { - case 220 /* ClassDeclaration */: - case 146 /* MethodDeclaration */: - case 149 /* SetAccessor */: + case 221 /* ClassDeclaration */: + case 147 /* MethodDeclaration */: + case 150 /* SetAccessor */: return true; } return false; @@ -38406,19 +39333,19 @@ var ts; // // For rules on serializing type annotations, see `serializeTypeNode`. switch (node.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: write("Function"); return; - case 144 /* PropertyDeclaration */: + case 145 /* PropertyDeclaration */: emitSerializedTypeNode(node.type); return; - case 141 /* Parameter */: + case 142 /* Parameter */: emitSerializedTypeNode(node.type); return; - case 148 /* GetAccessor */: + case 149 /* GetAccessor */: emitSerializedTypeNode(node.type); return; - case 149 /* SetAccessor */: + case 150 /* SetAccessor */: emitSerializedTypeNode(ts.getSetAccessorTypeAnnotationNode(node)); return; } @@ -38434,40 +39361,40 @@ var ts; case 103 /* VoidKeyword */: write("void 0"); return; - case 163 /* ParenthesizedType */: + case 164 /* ParenthesizedType */: emitSerializedTypeNode(node.type); return; - case 155 /* FunctionType */: - case 156 /* ConstructorType */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: write("Function"); return; - case 159 /* ArrayType */: - case 160 /* TupleType */: + case 160 /* ArrayType */: + case 161 /* TupleType */: write("Array"); return; - case 153 /* TypePredicate */: + case 154 /* TypePredicate */: case 120 /* BooleanKeyword */: write("Boolean"); return; - case 131 /* StringKeyword */: - case 165 /* StringLiteralType */: + case 132 /* StringKeyword */: + case 166 /* StringLiteralType */: write("String"); return; - case 129 /* NumberKeyword */: + case 130 /* NumberKeyword */: write("Number"); return; - case 132 /* SymbolKeyword */: + case 133 /* SymbolKeyword */: write("Symbol"); return; - case 154 /* TypeReference */: + case 155 /* TypeReference */: emitSerializedTypeReferenceNode(node); return; - case 157 /* TypeQuery */: - case 158 /* TypeLiteral */: - case 161 /* UnionType */: - case 162 /* IntersectionType */: + case 158 /* TypeQuery */: + case 159 /* TypeLiteral */: + case 162 /* UnionType */: + case 163 /* IntersectionType */: case 117 /* AnyKeyword */: - case 164 /* ThisType */: + case 165 /* ThisType */: break; default: ts.Debug.fail("Cannot serialize unexpected type node."); @@ -38540,7 +39467,7 @@ var ts; // For the rules on serializing the type of each parameter declaration, see `serializeTypeOfDeclaration`. if (node) { var valueDeclaration = void 0; - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { valueDeclaration = ts.getFirstConstructorWithBody(node); } else if (ts.isFunctionLike(node) && ts.nodeIsPresent(node.body)) { @@ -38556,10 +39483,10 @@ var ts; } if (parameters[i].dotDotDotToken) { var parameterType = parameters[i].type; - if (parameterType.kind === 159 /* ArrayType */) { + if (parameterType.kind === 160 /* ArrayType */) { parameterType = parameterType.elementType; } - else if (parameterType.kind === 154 /* TypeReference */ && parameterType.typeArguments && parameterType.typeArguments.length === 1) { + else if (parameterType.kind === 155 /* TypeReference */ && parameterType.typeArguments && parameterType.typeArguments.length === 1) { parameterType = parameterType.typeArguments[0]; } else { @@ -38636,7 +39563,7 @@ var ts; if (!shouldHoistDeclarationInSystemJsModule(node)) { // do not emit var if variable was already hoisted var isES6ExportedEnum = isES6ExportedDeclaration(node); - if (!(node.flags & 1 /* Export */) || (isES6ExportedEnum && isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 223 /* EnumDeclaration */))) { + if (!(node.flags & 1 /* Export */) || (isES6ExportedEnum && isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 224 /* EnumDeclaration */))) { emitStart(node); if (isES6ExportedEnum) { write("export "); @@ -38718,7 +39645,7 @@ var ts; } } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { - if (moduleDeclaration.body.kind === 224 /* ModuleDeclaration */) { + if (moduleDeclaration.body.kind === 225 /* ModuleDeclaration */) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); return recursiveInnerModule || moduleDeclaration.body; } @@ -38742,7 +39669,7 @@ var ts; var emitVarForModule = !hoistedInDeclarationScope && !isModuleMergedWithES6Class(node); if (emitVarForModule) { var isES6ExportedNamespace = isES6ExportedDeclaration(node); - if (!isES6ExportedNamespace || isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 224 /* ModuleDeclaration */)) { + if (!isES6ExportedNamespace || isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 225 /* ModuleDeclaration */)) { emitStart(node); if (isES6ExportedNamespace) { write("export "); @@ -38760,7 +39687,7 @@ var ts; write(getGeneratedNameForNode(node)); emitEnd(node.name); write(") "); - if (node.body.kind === 225 /* ModuleBlock */) { + if (node.body.kind === 226 /* ModuleBlock */) { var saveConvertedLoopState = convertedLoopState; var saveTempFlags = tempFlags; var saveTempVariables = tempVariables; @@ -38836,16 +39763,16 @@ var ts; } } function getNamespaceDeclarationNode(node) { - if (node.kind === 228 /* ImportEqualsDeclaration */) { + if (node.kind === 229 /* ImportEqualsDeclaration */) { return node; } var importClause = node.importClause; - if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 231 /* NamespaceImport */) { + if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 232 /* NamespaceImport */) { return importClause.namedBindings; } } function isDefaultImport(node) { - return node.kind === 229 /* ImportDeclaration */ && node.importClause && !!node.importClause.name; + return node.kind === 230 /* ImportDeclaration */ && node.importClause && !!node.importClause.name; } function emitExportImportAssignments(node) { if (ts.isAliasSymbolDeclaration(node) && resolver.isValueAliasDeclaration(node)) { @@ -38873,7 +39800,7 @@ var ts; if (shouldEmitNamedBindings) { emitLeadingComments(node.importClause.namedBindings); emitStart(node.importClause.namedBindings); - if (node.importClause.namedBindings.kind === 231 /* NamespaceImport */) { + if (node.importClause.namedBindings.kind === 232 /* NamespaceImport */) { write("* as "); emit(node.importClause.namedBindings.name); } @@ -38899,7 +39826,7 @@ var ts; } function emitExternalImportDeclaration(node) { if (ts.contains(externalImports, node)) { - var isExportedImport = node.kind === 228 /* ImportEqualsDeclaration */ && (node.flags & 1 /* Export */) !== 0; + var isExportedImport = node.kind === 229 /* ImportEqualsDeclaration */ && (node.flags & 1 /* Export */) !== 0; var namespaceDeclaration = getNamespaceDeclarationNode(node); var varOrConst = (languageVersion <= 1 /* ES5 */) ? "var " : "const "; if (modulekind !== ts.ModuleKind.AMD) { @@ -38921,7 +39848,7 @@ var ts; // import { x, y } from "foo" // import d, * as x from "foo" // import d, { x, y } from "foo" - var isNakedImport = 229 /* ImportDeclaration */ && !node.importClause; + var isNakedImport = 230 /* ImportDeclaration */ && !node.importClause; if (!isNakedImport) { write(varOrConst); write(getGeneratedNameForNode(node)); @@ -39100,8 +40027,8 @@ var ts; write("export default "); var expression = node.expression; emit(expression); - if (expression.kind !== 219 /* FunctionDeclaration */ && - expression.kind !== 220 /* ClassDeclaration */) { + if (expression.kind !== 220 /* FunctionDeclaration */ && + expression.kind !== 221 /* ClassDeclaration */) { write(";"); } emitEnd(node); @@ -39138,7 +40065,7 @@ var ts; for (var _a = 0, _b = sourceFile.statements; _a < _b.length; _a++) { var node = _b[_a]; switch (node.kind) { - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: if (!node.importClause || resolver.isReferencedAliasDeclaration(node.importClause, /*checkChildren*/ true)) { // import "mod" @@ -39148,13 +40075,13 @@ var ts; externalImports.push(node); } break; - case 228 /* ImportEqualsDeclaration */: - if (node.moduleReference.kind === 239 /* ExternalModuleReference */ && resolver.isReferencedAliasDeclaration(node)) { + case 229 /* ImportEqualsDeclaration */: + if (node.moduleReference.kind === 240 /* ExternalModuleReference */ && resolver.isReferencedAliasDeclaration(node)) { // import x = require("mod") where x is referenced externalImports.push(node); } break; - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: if (node.moduleSpecifier) { if (!node.exportClause) { // export * from "mod" @@ -39177,7 +40104,7 @@ var ts; } } break; - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: if (node.isExportEquals && !exportEquals) { // export = x exportEquals = node; @@ -39203,10 +40130,10 @@ var ts; if (namespaceDeclaration && !isDefaultImport(node)) { return ts.getTextOfNodeFromSourceText(currentText, namespaceDeclaration.name); } - if (node.kind === 229 /* ImportDeclaration */ && node.importClause) { + if (node.kind === 230 /* ImportDeclaration */ && node.importClause) { return getGeneratedNameForNode(node); } - if (node.kind === 235 /* ExportDeclaration */ && node.moduleSpecifier) { + if (node.kind === 236 /* ExportDeclaration */ && node.moduleSpecifier) { return getGeneratedNameForNode(node); } } @@ -39232,8 +40159,8 @@ var ts; for (var _a = 0, externalImports_1 = externalImports; _a < externalImports_1.length; _a++) { var importNode = externalImports_1[_a]; // do not create variable declaration for exports and imports that lack import clause - var skipNode = importNode.kind === 235 /* ExportDeclaration */ || - (importNode.kind === 229 /* ImportDeclaration */ && !importNode.importClause); + var skipNode = importNode.kind === 236 /* ExportDeclaration */ || + (importNode.kind === 230 /* ImportDeclaration */ && !importNode.importClause); if (skipNode) { continue; } @@ -39266,7 +40193,7 @@ var ts; var hasExportDeclarationWithExportClause = false; for (var _a = 0, externalImports_2 = externalImports; _a < externalImports_2.length; _a++) { var externalImport = externalImports_2[_a]; - if (externalImport.kind === 235 /* ExportDeclaration */ && externalImport.exportClause) { + if (externalImport.kind === 236 /* ExportDeclaration */ && externalImport.exportClause) { hasExportDeclarationWithExportClause = true; break; } @@ -39298,7 +40225,7 @@ var ts; } for (var _d = 0, externalImports_3 = externalImports; _d < externalImports_3.length; _d++) { var externalImport = externalImports_3[_d]; - if (externalImport.kind !== 235 /* ExportDeclaration */) { + if (externalImport.kind !== 236 /* ExportDeclaration */) { continue; } var exportDecl = externalImport; @@ -39402,7 +40329,7 @@ var ts; if (i !== 0) { write(", "); } - if (local.kind === 220 /* ClassDeclaration */ || local.kind === 224 /* ModuleDeclaration */ || local.kind === 223 /* EnumDeclaration */) { + if (local.kind === 221 /* ClassDeclaration */ || local.kind === 225 /* ModuleDeclaration */ || local.kind === 224 /* EnumDeclaration */) { emitDeclarationName(local); } else { @@ -39436,21 +40363,21 @@ var ts; if (node.flags & 2 /* Ambient */) { return; } - if (node.kind === 219 /* FunctionDeclaration */) { + if (node.kind === 220 /* FunctionDeclaration */) { if (!hoistedFunctionDeclarations) { hoistedFunctionDeclarations = []; } hoistedFunctionDeclarations.push(node); return; } - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { if (!hoistedVars) { hoistedVars = []; } hoistedVars.push(node); return; } - if (node.kind === 223 /* EnumDeclaration */) { + if (node.kind === 224 /* EnumDeclaration */) { if (shouldEmitEnumDeclaration(node)) { if (!hoistedVars) { hoistedVars = []; @@ -39459,7 +40386,7 @@ var ts; } return; } - if (node.kind === 224 /* ModuleDeclaration */) { + if (node.kind === 225 /* ModuleDeclaration */) { if (shouldEmitModuleDeclaration(node)) { if (!hoistedVars) { hoistedVars = []; @@ -39468,7 +40395,7 @@ var ts; } return; } - if (node.kind === 217 /* VariableDeclaration */ || node.kind === 168 /* BindingElement */) { + if (node.kind === 218 /* VariableDeclaration */ || node.kind === 169 /* BindingElement */) { if (shouldHoistVariable(node, /*checkIfSourceFileLevelDecl*/ false)) { var name_32 = node.name; if (name_32.kind === 69 /* Identifier */) { @@ -39509,7 +40436,7 @@ var ts; // if block scoped variables are nested in some another block then // no other functions can use them except ones that are defined at least in the same block return (ts.getCombinedNodeFlags(node) & 3072 /* BlockScoped */) === 0 || - ts.getEnclosingBlockScopeContainer(node).kind === 255 /* SourceFile */; + ts.getEnclosingBlockScopeContainer(node).kind === 256 /* SourceFile */; } function isCurrentFileSystemExternalModule() { return modulekind === ts.ModuleKind.System && isCurrentFileExternalModule; @@ -39584,21 +40511,21 @@ var ts; var entry = group_1[_a]; var importVariableName = getLocalNameForExternalImport(entry) || ""; switch (entry.kind) { - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: if (!entry.importClause) { // 'import "..."' case // module is imported only for side-effects, no emit required break; } // fall-through - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: ts.Debug.assert(importVariableName !== ""); writeLine(); // save import into the local write(importVariableName + " = " + parameterName + ";"); writeLine(); break; - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: ts.Debug.assert(importVariableName !== ""); if (entry.exportClause) { // export {a, b as c} from 'foo' @@ -39657,10 +40584,10 @@ var ts; // - import declarations are not emitted since they are already handled in setters // - export declarations with module specifiers are not emitted since they were already written in setters // - export declarations without module specifiers are emitted preserving the order - case 219 /* FunctionDeclaration */: - case 229 /* ImportDeclaration */: + case 220 /* FunctionDeclaration */: + case 230 /* ImportDeclaration */: continue; - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: if (!statement.moduleSpecifier) { for (var _a = 0, _b = statement.exportClause.elements; _a < _b.length; _a++) { var element = _b[_a]; @@ -39669,7 +40596,7 @@ var ts; } } continue; - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: if (!ts.isInternalModuleImportEqualsDeclaration(statement)) { // - import equals declarations that import external modules are not emitted continue; @@ -39949,11 +40876,11 @@ var ts; return result; } function isJsxChildEmittable(child) { - if (child.kind === 247 /* JsxExpression */) { + if (child.kind === 248 /* JsxExpression */) { // Don't emit empty expressions return !!child.expression; } - else if (child.kind === 243 /* JsxText */) { + else if (child.kind === 244 /* JsxText */) { // Don't emit empty strings return !!getTextToEmit(child); } @@ -40157,24 +41084,24 @@ var ts; switch (node.kind) { // All of these entities are emitted in a specialized fashion. As such, we allow // the specialized methods for each to handle the comments on the nodes. - case 221 /* InterfaceDeclaration */: - case 219 /* FunctionDeclaration */: - case 229 /* ImportDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 234 /* ExportAssignment */: + case 222 /* InterfaceDeclaration */: + case 220 /* FunctionDeclaration */: + case 230 /* ImportDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 235 /* ExportAssignment */: return true; } } function shouldEmitLeadingAndTrailingComments(node) { switch (node.kind) { - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: return shouldEmitLeadingAndTrailingCommentsForVariableStatement(node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: // Only emit the leading/trailing comments for a module if we're actually // emitting the module as well. return shouldEmitModuleDeclaration(node); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: // Only emit the leading/trailing comments for an enum if we're actually // emitting the module as well. return shouldEmitEnumDeclaration(node); @@ -40186,11 +41113,11 @@ var ts; // then we don't want to emit comments when we emit the body. It will have already // been taken care of when we emitted the 'return' statement for the function // expression body. - if (node.kind !== 198 /* Block */ && + if (node.kind !== 199 /* Block */ && node.parent && - node.parent.kind === 179 /* ArrowFunction */ && + node.parent.kind === 180 /* ArrowFunction */ && node.parent.body === node && - compilerOptions.target <= 1 /* ES5 */) { + languageVersion <= 1 /* ES5 */) { return false; } // Emit comments for everything else. @@ -40201,13 +41128,13 @@ var ts; switch (node.kind) { case 69 /* Identifier */: return emitIdentifier(node); - case 141 /* Parameter */: + case 142 /* Parameter */: return emitParameter(node); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: return emitMethod(node); - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: return emitAccessor(node); case 97 /* ThisKeyword */: return emitThis(node); @@ -40227,142 +41154,142 @@ var ts; case 13 /* TemplateMiddle */: case 14 /* TemplateTail */: return emitLiteral(node); - case 188 /* TemplateExpression */: + case 189 /* TemplateExpression */: return emitTemplateExpression(node); - case 196 /* TemplateSpan */: + case 197 /* TemplateSpan */: return emitTemplateSpan(node); - case 240 /* JsxElement */: - case 241 /* JsxSelfClosingElement */: + case 241 /* JsxElement */: + case 242 /* JsxSelfClosingElement */: return emitJsxElement(node); - case 243 /* JsxText */: + case 244 /* JsxText */: return emitJsxText(node); - case 247 /* JsxExpression */: + case 248 /* JsxExpression */: return emitJsxExpression(node); - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: return emitQualifiedName(node); - case 166 /* ObjectBindingPattern */: + case 167 /* ObjectBindingPattern */: return emitObjectBindingPattern(node); - case 167 /* ArrayBindingPattern */: + case 168 /* ArrayBindingPattern */: return emitArrayBindingPattern(node); - case 168 /* BindingElement */: + case 169 /* BindingElement */: return emitBindingElement(node); - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: return emitArrayLiteral(node); - case 170 /* ObjectLiteralExpression */: + case 171 /* ObjectLiteralExpression */: return emitObjectLiteral(node); - case 252 /* PropertyAssignment */: + case 253 /* PropertyAssignment */: return emitPropertyAssignment(node); - case 253 /* ShorthandPropertyAssignment */: + case 254 /* ShorthandPropertyAssignment */: return emitShorthandPropertyAssignment(node); - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: return emitComputedPropertyName(node); - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return emitPropertyAccess(node); - case 172 /* ElementAccessExpression */: + case 173 /* ElementAccessExpression */: return emitIndexedAccess(node); - case 173 /* CallExpression */: + case 174 /* CallExpression */: return emitCallExpression(node); - case 174 /* NewExpression */: + case 175 /* NewExpression */: return emitNewExpression(node); - case 175 /* TaggedTemplateExpression */: + case 176 /* TaggedTemplateExpression */: return emitTaggedTemplateExpression(node); - case 176 /* TypeAssertionExpression */: - case 194 /* AsExpression */: - case 195 /* NonNullExpression */: + case 177 /* TypeAssertionExpression */: + case 195 /* AsExpression */: + case 196 /* NonNullExpression */: return emit(node.expression); - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return emitParenExpression(node); - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return emitFunctionDeclaration(node); - case 180 /* DeleteExpression */: + case 181 /* DeleteExpression */: return emitDeleteExpression(node); - case 181 /* TypeOfExpression */: + case 182 /* TypeOfExpression */: return emitTypeOfExpression(node); - case 182 /* VoidExpression */: + case 183 /* VoidExpression */: return emitVoidExpression(node); - case 183 /* AwaitExpression */: + case 184 /* AwaitExpression */: return emitAwaitExpression(node); - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: return emitPrefixUnaryExpression(node); - case 185 /* PostfixUnaryExpression */: + case 186 /* PostfixUnaryExpression */: return emitPostfixUnaryExpression(node); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return emitBinaryExpression(node); - case 187 /* ConditionalExpression */: + case 188 /* ConditionalExpression */: return emitConditionalExpression(node); - case 190 /* SpreadElementExpression */: + case 191 /* SpreadElementExpression */: return emitSpreadElementExpression(node); - case 189 /* YieldExpression */: + case 190 /* YieldExpression */: return emitYieldExpression(node); - case 192 /* OmittedExpression */: + case 193 /* OmittedExpression */: return; - case 198 /* Block */: - case 225 /* ModuleBlock */: + case 199 /* Block */: + case 226 /* ModuleBlock */: return emitBlock(node); - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: return emitVariableStatement(node); - case 200 /* EmptyStatement */: + case 201 /* EmptyStatement */: return write(";"); - case 201 /* ExpressionStatement */: + case 202 /* ExpressionStatement */: return emitExpressionStatement(node); - case 202 /* IfStatement */: + case 203 /* IfStatement */: return emitIfStatement(node); - case 203 /* DoStatement */: + case 204 /* DoStatement */: return emitDoStatement(node); - case 204 /* WhileStatement */: + case 205 /* WhileStatement */: return emitWhileStatement(node); - case 205 /* ForStatement */: + case 206 /* ForStatement */: return emitForStatement(node); - case 207 /* ForOfStatement */: - case 206 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 207 /* ForInStatement */: return emitForInOrForOfStatement(node); - case 208 /* ContinueStatement */: - case 209 /* BreakStatement */: + case 209 /* ContinueStatement */: + case 210 /* BreakStatement */: return emitBreakOrContinueStatement(node); - case 210 /* ReturnStatement */: + case 211 /* ReturnStatement */: return emitReturnStatement(node); - case 211 /* WithStatement */: + case 212 /* WithStatement */: return emitWithStatement(node); - case 212 /* SwitchStatement */: + case 213 /* SwitchStatement */: return emitSwitchStatement(node); - case 248 /* CaseClause */: - case 249 /* DefaultClause */: + case 249 /* CaseClause */: + case 250 /* DefaultClause */: return emitCaseOrDefaultClause(node); - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: return emitLabeledStatement(node); - case 214 /* ThrowStatement */: + case 215 /* ThrowStatement */: return emitThrowStatement(node); - case 215 /* TryStatement */: + case 216 /* TryStatement */: return emitTryStatement(node); - case 251 /* CatchClause */: + case 252 /* CatchClause */: return emitCatchClause(node); - case 216 /* DebuggerStatement */: + case 217 /* DebuggerStatement */: return emitDebuggerStatement(node); - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: return emitVariableDeclaration(node); - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: return emitClassExpression(node); - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: return emitClassDeclaration(node); - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return emitInterfaceDeclaration(node); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return emitEnumDeclaration(node); - case 254 /* EnumMember */: + case 255 /* EnumMember */: return emitEnumMember(node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return emitModuleDeclaration(node); - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: return emitImportDeclaration(node); - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: return emitImportEqualsDeclaration(node); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: return emitExportDeclaration(node); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return emitExportAssignment(node); - case 255 /* SourceFile */: + case 256 /* SourceFile */: return emitSourceFileNode(node); } } @@ -40401,7 +41328,7 @@ var ts; function getLeadingCommentsToEmit(node) { // Emit the leading comments only if the parent's pos doesn't match because parent should take care of emitting these comments if (node.parent) { - if (node.parent.kind === 255 /* SourceFile */ || node.pos !== node.parent.pos) { + if (node.parent.kind === 256 /* SourceFile */ || node.pos !== node.parent.pos) { if (hasDetachedComments(node.pos)) { // get comments without detached comments return getLeadingCommentsWithoutDetachedComments(); @@ -40416,7 +41343,7 @@ var ts; function getTrailingCommentsToEmit(node) { // Emit the trailing comments only if the parent's pos doesn't match because parent should take care of emitting these comments if (node.parent) { - if (node.parent.kind === 255 /* SourceFile */ || node.end !== node.parent.end) { + if (node.parent.kind === 256 /* SourceFile */ || node.end !== node.parent.end) { return ts.getTrailingCommentRanges(currentText, node.end); } } @@ -41041,20 +41968,26 @@ var ts; var failedLookupLocations = []; var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled, skipTsx: false }; var resolvedFileName = tryLoadModuleUsingOptionalResolutionSettings(moduleName, containingDirectory, nodeLoadModuleByRelativeName, failedLookupLocations, supportedExtensions, state); - if (resolvedFileName) { - return createResolvedModule(resolvedFileName, /*isExternalLibraryImport*/ false, failedLookupLocations); - } var isExternalLibraryImport = false; - if (moduleHasNonRelativeName(moduleName)) { - if (traceEnabled) { - trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder, moduleName); + if (!resolvedFileName) { + if (moduleHasNonRelativeName(moduleName)) { + if (traceEnabled) { + trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder, moduleName); + } + resolvedFileName = loadModuleFromNodeModules(moduleName, containingDirectory, failedLookupLocations, state); + isExternalLibraryImport = resolvedFileName !== undefined; + } + else { + var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); + resolvedFileName = nodeLoadModuleByRelativeName(candidate, supportedExtensions, failedLookupLocations, /*onlyRecordFailures*/ false, state); } - resolvedFileName = loadModuleFromNodeModules(moduleName, containingDirectory, failedLookupLocations, state); - isExternalLibraryImport = resolvedFileName !== undefined; } - else { - var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); - resolvedFileName = nodeLoadModuleByRelativeName(candidate, supportedExtensions, failedLookupLocations, /*onlyRecordFailures*/ false, state); + if (resolvedFileName && host.realpath) { + var originalFileName = resolvedFileName; + resolvedFileName = ts.normalizePath(host.realpath(resolvedFileName)); + if (traceEnabled) { + trace(host, ts.Diagnostics.Resolving_real_path_for_0_result_1, originalFileName, resolvedFileName); + } } return createResolvedModule(resolvedFileName, isExternalLibraryImport, failedLookupLocations); } @@ -41300,6 +42233,7 @@ var ts; 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, @@ -41312,7 +42246,8 @@ var ts; 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); } + directoryExists: function (directoryName) { return ts.sys.directoryExists(directoryName); }, + realpath: realpath }; } ts.createCompilerHost = createCompilerHost; @@ -41436,6 +42371,7 @@ var ts; program = { getRootFileNames: function () { return rootNames; }, getSourceFile: getSourceFile, + getSourceFileByPath: getSourceFileByPath, getSourceFiles: function () { return files; }, getCompilerOptions: function () { return options; }, getSyntacticDiagnostics: getSyntacticDiagnostics, @@ -41454,7 +42390,7 @@ var ts; getSymbolCount: function () { return getDiagnosticsProducingTypeChecker().getSymbolCount(); }, getTypeCount: function () { return getDiagnosticsProducingTypeChecker().getTypeCount(); }, getFileProcessingDiagnostics: function () { return fileProcessingDiagnostics; }, - resolvedTypeReferenceDirectives: resolvedTypeReferenceDirectives + getResolvedTypeReferenceDirectives: function () { return resolvedTypeReferenceDirectives; } }; verifyCompilerOptions(); ts.programTime += new Date().getTime() - start; @@ -41504,7 +42440,11 @@ var ts; (oldOptions.allowJs !== options.allowJs) || (oldOptions.rootDir !== options.rootDir) || (oldOptions.typesSearchPaths !== options.typesSearchPaths) || - (oldOptions.configFilePath !== options.configFilePath)) { + (oldOptions.configFilePath !== options.configFilePath) || + (oldOptions.baseUrl !== options.baseUrl) || + (oldOptions.typesRoot !== options.typesRoot) || + !ts.arrayIsEqualTo(oldOptions.rootDirs, options.rootDirs) || + !ts.mapIsEqualTo(oldOptions.paths, options.paths)) { return false; } ts.Debug.assert(!oldProgram.structureIsReused); @@ -41522,7 +42462,9 @@ var ts; var modifiedSourceFiles = []; for (var _i = 0, _a = oldProgram.getSourceFiles(); _i < _a.length; _i++) { var oldSourceFile = _a[_i]; - var newSourceFile = host.getSourceFile(oldSourceFile.fileName, options.target); + var newSourceFile = host.getSourceFileByPath + ? host.getSourceFileByPath(oldSourceFile.fileName, oldSourceFile.path, options.target) + : host.getSourceFile(oldSourceFile.fileName, options.target); if (!newSourceFile) { return false; } @@ -41594,7 +42536,7 @@ var ts; var modifiedFile = modifiedSourceFiles_1[_b]; fileProcessingDiagnostics.reattachFileDiagnostics(modifiedFile); } - resolvedTypeReferenceDirectives = oldProgram.resolvedTypeReferenceDirectives; + resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives(); oldProgram.structureIsReused = true; return true; } @@ -41606,6 +42548,7 @@ var ts; getCurrentDirectory: function () { return currentDirectory; }, getNewLine: function () { return host.getNewLine(); }, getSourceFile: program.getSourceFile, + getSourceFileByPath: program.getSourceFileByPath, getSourceFiles: program.getSourceFiles, writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }), isEmitBlocked: isEmitBlocked @@ -41661,7 +42604,10 @@ var ts; return emitResult; } function getSourceFile(fileName) { - return filesByName.get(ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + return getSourceFileByPath(ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + } + function getSourceFileByPath(path) { + return filesByName.get(path); } function getDiagnosticsHelper(sourceFile, getDiagnostics, cancellationToken) { if (sourceFile) { @@ -41742,47 +42688,47 @@ var ts; return false; } switch (node.kind) { - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_a_ts_file)); return true; - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: if (node.isExportEquals) { diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_a_ts_file)); return true; } break; - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: var classDeclaration = node; if (checkModifiers(classDeclaration.modifiers) || checkTypeParameters(classDeclaration.typeParameters)) { return true; } break; - case 250 /* HeritageClause */: + case 251 /* HeritageClause */: var heritageClause = node; if (heritageClause.token === 106 /* ImplementsKeyword */) { diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_a_ts_file)); return true; } break; - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.interface_declarations_can_only_be_used_in_a_ts_file)); return true; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.module_declarations_can_only_be_used_in_a_ts_file)); return true; - case 222 /* TypeAliasDeclaration */: + case 223 /* TypeAliasDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.type_aliases_can_only_be_used_in_a_ts_file)); return true; - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 178 /* FunctionExpression */: - case 219 /* FunctionDeclaration */: - case 179 /* ArrowFunction */: - case 219 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 179 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: + case 180 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: var functionDeclaration = node; if (checkModifiers(functionDeclaration.modifiers) || checkTypeParameters(functionDeclaration.typeParameters) || @@ -41790,20 +42736,20 @@ var ts; return true; } break; - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: var variableStatement = node; if (checkModifiers(variableStatement.modifiers)) { return true; } break; - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: var variableDeclaration = node; if (checkTypeAnnotation(variableDeclaration.type)) { return true; } break; - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: var expression = node; if (expression.typeArguments && expression.typeArguments.length > 0) { var start_2 = expression.typeArguments.pos; @@ -41811,7 +42757,7 @@ var ts; return true; } break; - case 141 /* Parameter */: + case 142 /* Parameter */: var parameter = node; if (parameter.modifiers) { var start_3 = parameter.modifiers.pos; @@ -41827,17 +42773,17 @@ var ts; return true; } break; - case 144 /* PropertyDeclaration */: + case 145 /* PropertyDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.property_declarations_can_only_be_used_in_a_ts_file)); return true; - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); return true; - case 176 /* TypeAssertionExpression */: + case 177 /* TypeAssertionExpression */: var typeAssertionExpression = node; diagnostics.push(ts.createDiagnosticForNode(typeAssertionExpression.type, ts.Diagnostics.type_assertion_expressions_can_only_be_used_in_a_ts_file)); return true; - case 142 /* Decorator */: + case 143 /* Decorator */: if (!options.experimentalDecorators) { diagnostics.push(ts.createDiagnosticForNode(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)); } @@ -41868,7 +42814,7 @@ var ts; case 112 /* PublicKeyword */: case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: - case 127 /* ReadonlyKeyword */: + case 128 /* ReadonlyKeyword */: case 122 /* DeclareKeyword */: diagnostics.push(ts.createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind))); return true; @@ -41942,9 +42888,9 @@ var ts; return; function collectModuleReferences(node, inAmbientModule) { switch (node.kind) { - case 229 /* ImportDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 235 /* ExportDeclaration */: + case 230 /* ImportDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 236 /* ExportDeclaration */: var moduleNameExpr = ts.getExternalModuleName(node); if (!moduleNameExpr || moduleNameExpr.kind !== 9 /* StringLiteral */) { break; @@ -41959,7 +42905,7 @@ var ts; (imports || (imports = [])).push(moduleNameExpr); } break; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: if (ts.isAmbientModule(node) && (inAmbientModule || node.flags & 2 /* Ambient */ || ts.isDeclarationFile(file))) { var moduleName = node.name; // Ambient module declarations can be interpreted as augmentations for some existing external modules. @@ -42178,7 +43124,7 @@ var ts; // add file to program only if: // - resolution was successful // - noResolve is falsy - // - module name come from the list fo imports + // - module name comes from the list of imports var shouldAddFile = resolution && !options.noResolve && i < file.imports.length; @@ -42266,12 +43212,23 @@ var ts; if (!hasZeroOrOneAsteriskCharacter(key)) { programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, key)); } - for (var _i = 0, _a = options.paths[key]; _i < _a.length; _i++) { - var subst = _a[_i]; - if (!hasZeroOrOneAsteriskCharacter(subst)) { - programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character, subst, key)); + if (ts.isArray(options.paths[key])) { + for (var _i = 0, _a = options.paths[key]; _i < _a.length; _i++) { + var subst = _a[_i]; + var typeOfSubst = typeof subst; + if (typeOfSubst === "string") { + if (!hasZeroOrOneAsteriskCharacter(subst)) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character, subst, key)); + } + } + else { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2, subst, key, typeOfSubst)); + } } } + else { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substututions_for_pattern_0_should_be_an_array, key)); + } } } if (options.inlineSources) { @@ -42765,6 +43722,7 @@ var ts; "es2015": "lib.es2015.d.ts", "es7": "lib.es2016.d.ts", "es2016": "lib.es2016.d.ts", + "es2017": "lib.es2017.d.ts", // Host only "dom": "lib.dom.d.ts", "webworker": "lib.webworker.d.ts", @@ -42779,7 +43737,8 @@ var 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" + "es2016.array.include": "lib.es2016.array.include.d.ts", + "es2017.object": "lib.es2017.object.d.ts" } }, description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon @@ -42842,7 +43801,7 @@ var ts; ts.createCompilerDiagnosticForInvalidCustomType = createCompilerDiagnosticForInvalidCustomType; /* @internal */ function parseCustomTypeOption(opt, value, errors) { - var key = (value || "").trim().toLowerCase(); + var key = trimString((value || "")).toLowerCase(); var map = opt.type; if (ts.hasProperty(map, key)) { return map[key]; @@ -42854,7 +43813,7 @@ var ts; ts.parseCustomTypeOption = parseCustomTypeOption; /* @internal */ function parseListTypeOption(opt, value, errors) { - var values = (value || "").trim().split(","); + var values = trimString((value || "")).split(","); switch (opt.element.type) { case "number": return ts.map(values, parseInt); @@ -43024,6 +43983,9 @@ var ts; } return output; } + // Skip over any minified JavaScript files (ending in ".min.js") + // Skip over dotted files and folders as well + var IgnoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; /** * Parse the contents of a config file (tsconfig.json). * @param json The contents of the config file to parse @@ -43043,6 +44005,7 @@ var ts; options: options, fileNames: fileNames, typingOptions: typingOptions, + raw: json, errors: errors }; function getFileNames(errors) { @@ -43063,11 +44026,11 @@ var ts; } else { // by default exclude node_modules, and any specificied output directory - exclude = ["node_modules"]; - var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; - if (outDir) { - exclude.push(outDir); - } + exclude = ["node_modules", "bower_components", "jspm_packages"]; + } + var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + exclude.push(outDir); } exclude = ts.map(exclude, ts.normalizeSlashes); var supportedExtensions = ts.getSupportedExtensions(options); @@ -43083,8 +44046,7 @@ var ts; if (extension === ".ts" && ts.fileExtensionIs(fileName, ".d.ts")) { continue; } - // Skip over any minified JavaScript files (ending in ".min.js") - if (/\.min\.js$/.test(fileName)) { + if (IgnoreFileNamePattern.test(fileName)) { continue; } // If this is one of the output extension (which would be .d.ts and .js if we are allowing compilation of js files) @@ -43182,6 +44144,9 @@ var ts; 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, ""); + } })(ts || (ts = {})); /* @internal */ var ts; @@ -43255,7 +44220,7 @@ var ts; } } function autoCollapse(node) { - return ts.isFunctionBlock(node) && node.parent.kind !== 179 /* ArrowFunction */; + return ts.isFunctionBlock(node) && node.parent.kind !== 180 /* ArrowFunction */; } var depth = 0; var maxDepth = 20; @@ -43267,30 +44232,30 @@ var ts; addOutliningForLeadingCommentsForNode(n); } switch (n.kind) { - case 198 /* Block */: + case 199 /* Block */: if (!ts.isFunctionBlock(n)) { - var parent_11 = n.parent; + var parent_14 = n.parent; var openBrace = ts.findChildOfKind(n, 15 /* OpenBraceToken */, sourceFile); var closeBrace = ts.findChildOfKind(n, 16 /* CloseBraceToken */, sourceFile); // Check if the block is standalone, or 'attached' to some parent statement. // If the latter, we want to collapse the block, but consider its hint span // to be the entire span of the parent. - if (parent_11.kind === 203 /* DoStatement */ || - parent_11.kind === 206 /* ForInStatement */ || - parent_11.kind === 207 /* ForOfStatement */ || - parent_11.kind === 205 /* ForStatement */ || - parent_11.kind === 202 /* IfStatement */ || - parent_11.kind === 204 /* WhileStatement */ || - parent_11.kind === 211 /* WithStatement */ || - parent_11.kind === 251 /* CatchClause */) { - addOutliningSpan(parent_11, openBrace, closeBrace, autoCollapse(n)); + if (parent_14.kind === 204 /* DoStatement */ || + parent_14.kind === 207 /* ForInStatement */ || + parent_14.kind === 208 /* ForOfStatement */ || + parent_14.kind === 206 /* ForStatement */ || + parent_14.kind === 203 /* IfStatement */ || + parent_14.kind === 205 /* WhileStatement */ || + parent_14.kind === 212 /* WithStatement */ || + parent_14.kind === 252 /* CatchClause */) { + addOutliningSpan(parent_14, openBrace, closeBrace, autoCollapse(n)); break; } - if (parent_11.kind === 215 /* TryStatement */) { + if (parent_14.kind === 216 /* TryStatement */) { // Could be the try-block, or the finally-block. - var tryStatement = parent_11; + var tryStatement = parent_14; if (tryStatement.tryBlock === n) { - addOutliningSpan(parent_11, openBrace, closeBrace, autoCollapse(n)); + addOutliningSpan(parent_14, openBrace, closeBrace, autoCollapse(n)); break; } else if (tryStatement.finallyBlock === n) { @@ -43313,23 +44278,23 @@ var ts; break; } // Fallthrough. - case 225 /* ModuleBlock */: { + case 226 /* ModuleBlock */: { var openBrace = ts.findChildOfKind(n, 15 /* OpenBraceToken */, sourceFile); var closeBrace = ts.findChildOfKind(n, 16 /* CloseBraceToken */, sourceFile); addOutliningSpan(n.parent, openBrace, closeBrace, autoCollapse(n)); break; } - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 170 /* ObjectLiteralExpression */: - case 226 /* CaseBlock */: { + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 171 /* ObjectLiteralExpression */: + case 227 /* CaseBlock */: { var openBrace = ts.findChildOfKind(n, 15 /* OpenBraceToken */, sourceFile); var closeBrace = ts.findChildOfKind(n, 16 /* CloseBraceToken */, sourceFile); addOutliningSpan(n, openBrace, closeBrace, autoCollapse(n)); break; } - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: var openBracket = ts.findChildOfKind(n, 19 /* OpenBracketToken */, sourceFile); var closeBracket = ts.findChildOfKind(n, 20 /* CloseBracketToken */, sourceFile); addOutliningSpan(n, openBracket, closeBracket, autoCollapse(n)); @@ -43422,7 +44387,7 @@ var ts; if (text !== undefined) { containers.unshift(text); } - else if (declaration.name.kind === 139 /* ComputedPropertyName */) { + else if (declaration.name.kind === 140 /* ComputedPropertyName */) { return tryAddComputedPropertyName(declaration.name.expression, containers, /*includeLastPortion*/ true); } else { @@ -43443,7 +44408,7 @@ var ts; } return true; } - if (expression.kind === 171 /* PropertyAccessExpression */) { + if (expression.kind === 172 /* PropertyAccessExpression */) { var propertyAccess = expression; if (includeLastPortion) { containers.unshift(propertyAccess.name.text); @@ -43456,7 +44421,7 @@ var ts; var containers = []; // First, if we started with a computed property name, then add all but the last // portion into the container array. - if (declaration.name.kind === 139 /* ComputedPropertyName */) { + if (declaration.name.kind === 140 /* ComputedPropertyName */) { if (!tryAddComputedPropertyName(declaration.name.expression, containers, /*includeLastPortion*/ false)) { return undefined; } @@ -43535,17 +44500,17 @@ var ts; var current = node.parent; while (current) { switch (current.kind) { - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: // If we have a module declared as A.B.C, it is more "intuitive" // to say it only has a single layer of depth do { current = current.parent; - } while (current.kind === 224 /* ModuleDeclaration */); + } while (current.kind === 225 /* ModuleDeclaration */); // fall through - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: - case 221 /* InterfaceDeclaration */: - case 219 /* FunctionDeclaration */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: + case 222 /* InterfaceDeclaration */: + case 220 /* FunctionDeclaration */: indent++; } current = current.parent; @@ -43556,21 +44521,21 @@ var ts; var childNodes = []; function visit(node) { switch (node.kind) { - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: ts.forEach(node.declarationList.declarations, visit); break; - case 166 /* ObjectBindingPattern */: - case 167 /* ArrayBindingPattern */: + case 167 /* ObjectBindingPattern */: + case 168 /* ArrayBindingPattern */: ts.forEach(node.elements, visit); break; - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: // Handle named exports case e.g.: // export {a, b as B} from "mod"; if (node.exportClause) { ts.forEach(node.exportClause.elements, visit); } break; - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: var importClause = node.importClause; if (importClause) { // Handle default import case e.g.: @@ -43582,7 +44547,7 @@ var ts; // import * as NS from "mod"; // import {a, b as B} from "mod"; if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 231 /* NamespaceImport */) { + if (importClause.namedBindings.kind === 232 /* NamespaceImport */) { childNodes.push(importClause.namedBindings); } else { @@ -43591,26 +44556,26 @@ var ts; } } break; - case 168 /* BindingElement */: - case 217 /* VariableDeclaration */: + case 169 /* BindingElement */: + case 218 /* VariableDeclaration */: if (ts.isBindingPattern(node.name)) { visit(node.name); break; } // Fall through - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: - case 221 /* InterfaceDeclaration */: - case 224 /* ModuleDeclaration */: - case 219 /* FunctionDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 233 /* ImportSpecifier */: - case 237 /* ExportSpecifier */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: + case 222 /* InterfaceDeclaration */: + case 225 /* ModuleDeclaration */: + case 220 /* FunctionDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 234 /* ImportSpecifier */: + case 238 /* ExportSpecifier */: childNodes.push(node); break; } } - //for (let i = 0, n = nodes.length; i < n; i++) { + // for (let i = 0, n = nodes.length; i < n; i++) { // let node = nodes[i]; // if (node.kind === SyntaxKind.ClassDeclaration || // node.kind === SyntaxKind.EnumDeclaration || @@ -43622,7 +44587,7 @@ var ts; // else if (node.kind === SyntaxKind.VariableStatement) { // childNodes.push.apply(childNodes, (node).declarations); // } - //} + // } ts.forEach(nodes, visit); return sortNodes(childNodes); } @@ -43653,11 +44618,11 @@ var ts; for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) { var node = nodes_4[_i]; switch (node.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: topLevelNodes.push(node); for (var _a = 0, _b = node.members; _a < _b.length; _a++) { var member = _b[_a]; - if (member.kind === 146 /* MethodDeclaration */ || member.kind === 147 /* Constructor */) { + if (member.kind === 147 /* MethodDeclaration */ || member.kind === 148 /* Constructor */) { if (member.body) { // We do not include methods that does not have child functions in it, because of duplications. if (hasNamedFunctionDeclarations(member.body.statements)) { @@ -43668,16 +44633,17 @@ var ts; } } break; - case 223 /* EnumDeclaration */: - case 221 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: topLevelNodes.push(node); break; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: var moduleDeclaration = node; topLevelNodes.push(node); addTopLevelNodes(getInnermostModule(moduleDeclaration).body.statements, topLevelNodes); break; - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: var functionDeclaration = node; if (isTopLevelFunctionDeclaration(functionDeclaration)) { topLevelNodes.push(node); @@ -43690,17 +44656,17 @@ var ts; function hasNamedFunctionDeclarations(nodes) { for (var _i = 0, nodes_5 = nodes; _i < nodes_5.length; _i++) { var s = nodes_5[_i]; - if (s.kind === 219 /* FunctionDeclaration */ && !isEmpty(s.name.text)) { + if (s.kind === 220 /* FunctionDeclaration */ && !isEmpty(s.name.text)) { return true; } } return false; } function isTopLevelFunctionDeclaration(functionDeclaration) { - if (functionDeclaration.kind === 219 /* FunctionDeclaration */) { + if (functionDeclaration.kind === 220 /* FunctionDeclaration */) { // A function declaration is 'top level' if it contains any function declarations // within it. - if (functionDeclaration.body && functionDeclaration.body.kind === 198 /* Block */) { + if (functionDeclaration.body && functionDeclaration.body.kind === 199 /* Block */) { // Proper function declarations can only have identifier names if (hasNamedFunctionDeclarations(functionDeclaration.body.statements)) { return true; @@ -43712,8 +44678,8 @@ var ts; else { // We have made sure that a grand parent node exists with 'isFunctionBlock()' above. var grandParentKind = functionDeclaration.parent.parent.kind; - if (grandParentKind === 146 /* MethodDeclaration */ || - grandParentKind === 147 /* Constructor */) { + if (grandParentKind === 147 /* MethodDeclaration */ || + grandParentKind === 148 /* Constructor */) { return true; } } @@ -43769,44 +44735,44 @@ var ts; } function createChildItem(node) { switch (node.kind) { - case 141 /* Parameter */: + case 142 /* Parameter */: if (ts.isBindingPattern(node.name)) { break; } - if ((node.flags & 959 /* Modifier */) === 0) { + if ((node.flags & 1023 /* Modifier */) === 0) { return undefined; } return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberFunctionElement); - case 148 /* GetAccessor */: + case 149 /* GetAccessor */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberGetAccessorElement); - case 149 /* SetAccessor */: + case 150 /* SetAccessor */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberSetAccessorElement); - case 152 /* IndexSignature */: + case 153 /* IndexSignature */: return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); - case 254 /* EnumMember */: + case 255 /* EnumMember */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 150 /* CallSignature */: + case 151 /* CallSignature */: return createItem(node, "()", ts.ScriptElementKind.callSignatureElement); - case 151 /* ConstructSignature */: + case 152 /* ConstructSignature */: return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.functionElement); - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: var variableDeclarationNode = void 0; var name_35; - if (node.kind === 168 /* BindingElement */) { + if (node.kind === 169 /* BindingElement */) { name_35 = node.name; variableDeclarationNode = node; // binding elements are added only for variable declarations // bubble up to the containing variable declaration - while (variableDeclarationNode && variableDeclarationNode.kind !== 217 /* VariableDeclaration */) { + while (variableDeclarationNode && variableDeclarationNode.kind !== 218 /* VariableDeclaration */) { variableDeclarationNode = variableDeclarationNode.parent; } ts.Debug.assert(variableDeclarationNode !== undefined); @@ -43825,13 +44791,13 @@ var ts; else { return createItem(node, getTextOfNode(name_35), ts.ScriptElementKind.variableElement); } - case 147 /* Constructor */: + case 148 /* Constructor */: return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); - case 237 /* ExportSpecifier */: - case 233 /* ImportSpecifier */: - case 228 /* ImportEqualsDeclaration */: - case 230 /* ImportClause */: - case 231 /* NamespaceImport */: + case 238 /* ExportSpecifier */: + case 234 /* ImportSpecifier */: + case 229 /* ImportEqualsDeclaration */: + case 231 /* ImportClause */: + case 232 /* NamespaceImport */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.alias); } return undefined; @@ -43861,21 +44827,23 @@ var ts; } function createTopLevelItem(node) { switch (node.kind) { - case 255 /* SourceFile */: + case 256 /* SourceFile */: return createSourceFileItem(node); - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: return createClassItem(node); - case 146 /* MethodDeclaration */: - case 147 /* Constructor */: + case 147 /* MethodDeclaration */: + case 148 /* Constructor */: return createMemberFunctionLikeItem(node); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return createEnumItem(node); - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return createInterfaceItem(node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return createModuleItem(node); - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return createFunctionItem(node); + case 223 /* TypeAliasDeclaration */: + return createTypeAliasItem(node); } return undefined; function getModuleName(moduleDeclaration) { @@ -43886,7 +44854,7 @@ var ts; // Otherwise, we need to aggregate each identifier to build up the qualified name. var result = []; result.push(moduleDeclaration.name.text); - while (moduleDeclaration.body && moduleDeclaration.body.kind === 224 /* ModuleDeclaration */) { + while (moduleDeclaration.body && moduleDeclaration.body.kind === 225 /* ModuleDeclaration */) { moduleDeclaration = moduleDeclaration.body; result.push(moduleDeclaration.name.text); } @@ -43898,18 +44866,21 @@ var ts; return getNavigationBarItem(moduleName, ts.ScriptElementKind.moduleElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); } function createFunctionItem(node) { - if (node.body && node.body.kind === 198 /* Block */) { + if (node.body && node.body.kind === 199 /* Block */) { var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem); return getNavigationBarItem(!node.name ? "default" : node.name.text, ts.ScriptElementKind.functionElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); } return undefined; } + function createTypeAliasItem(node) { + return getNavigationBarItem(node.name.text, ts.ScriptElementKind.typeElement, ts.getNodeModifiers(node), [getNodeSpan(node)], [], getIndent(node)); + } function createMemberFunctionLikeItem(node) { - if (node.body && node.body.kind === 198 /* Block */) { + if (node.body && node.body.kind === 199 /* Block */) { var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem); var scriptElementKind = void 0; var memberFunctionName = void 0; - if (node.kind === 146 /* MethodDeclaration */) { + if (node.kind === 147 /* MethodDeclaration */) { memberFunctionName = ts.getPropertyNameForPropertyNameNode(node.name); scriptElementKind = ts.ScriptElementKind.memberFunctionElement; } @@ -43936,7 +44907,7 @@ var ts; var childItems; if (node.members) { var constructor = ts.forEach(node.members, function (member) { - return member.kind === 147 /* Constructor */ && member; + return member.kind === 148 /* Constructor */ && member; }); // Add the constructor parameters in as children of the class (for property parameters). // Note that *all non-binding pattern named* parameters will be added to the nodes array, but parameters that @@ -43960,7 +44931,7 @@ var ts; } } function removeComputedProperties(node) { - return ts.filter(node.members, function (member) { return member.name === undefined || member.name.kind !== 139 /* ComputedPropertyName */; }); + return ts.filter(node.members, function (member) { return member.name === undefined || member.name.kind !== 140 /* ComputedPropertyName */; }); } /** * Like removeComputedProperties, but retains the properties with well known symbol names @@ -43969,13 +44940,13 @@ var ts; return ts.filter(node.members, function (member) { return !ts.hasDynamicName(member); }); } function getInnermostModule(node) { - while (node.body.kind === 224 /* ModuleDeclaration */) { + while (node.body.kind === 225 /* ModuleDeclaration */) { node = node.body; } return node; } function getNodeSpan(node) { - return node.kind === 255 /* SourceFile */ + return node.kind === 256 /* SourceFile */ ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); } @@ -44020,52 +44991,52 @@ var ts; } function createNavBarItem(node) { switch (node.kind) { - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: // Only add to the navbar if at the top-level of the file // Note: "const" and "let" are also SyntaxKind.VariableDeclarations if (node.parent /*VariableDeclarationList*/.parent /*VariableStatement*/ - .parent /*SourceFile*/.kind !== 255 /* SourceFile */) { + .parent /*SourceFile*/.kind !== 256 /* SourceFile */) { return undefined; } // If it is initialized with a function expression, handle it when we reach the function expression node var varDecl = node; - if (varDecl.initializer && (varDecl.initializer.kind === 178 /* FunctionExpression */ || - varDecl.initializer.kind === 179 /* ArrowFunction */ || - varDecl.initializer.kind === 191 /* ClassExpression */)) { + if (varDecl.initializer && (varDecl.initializer.kind === 179 /* FunctionExpression */ || + varDecl.initializer.kind === 180 /* ArrowFunction */ || + varDecl.initializer.kind === 192 /* ClassExpression */)) { return undefined; } // Fall through - case 219 /* FunctionDeclaration */: - case 220 /* ClassDeclaration */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 221 /* ClassDeclaration */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: // "export default function().." looks just like a regular function/class declaration, except with the 'default' flag var name_36 = node.flags && (node.flags & 512 /* Default */) && !node.name ? "default" : - node.kind === 147 /* Constructor */ ? "constructor" : + node.kind === 148 /* Constructor */ ? "constructor" : ts.declarationNameToString(node.name); return getNavBarItem(name_36, getScriptKindForElementKind(node.kind), [getNodeSpan(node)]); - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 191 /* ClassExpression */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 192 /* ClassExpression */: return getDefineModuleItem(node) || getFunctionOrClassExpressionItem(node); - case 146 /* MethodDeclaration */: + case 147 /* MethodDeclaration */: var methodDecl = node; return getNavBarItem(ts.declarationNameToString(methodDecl.name), ts.ScriptElementKind.memberFunctionElement, [getNodeSpan(node)]); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: // e.g. "export default " return getNavBarItem("default", ts.ScriptElementKind.variableElement, [getNodeSpan(node)]); - case 230 /* ImportClause */: + case 231 /* ImportClause */: if (!node.name) { // No default import (this node is still a parent of named & namespace imports, which are handled below) return undefined; } // fall through - case 233 /* ImportSpecifier */: // e.g. 'id' in: import {id} from 'mod' (in NamedImports, in ImportClause) - case 231 /* NamespaceImport */: // e.g. '* as ns' in: import * as ns from 'mod' (in ImportClause) - case 237 /* ExportSpecifier */: + case 234 /* ImportSpecifier */: // e.g. 'id' in: import {id} from 'mod' (in NamedImports, in ImportClause) + case 232 /* NamespaceImport */: // e.g. '* as ns' in: import * as ns from 'mod' (in ImportClause) + case 238 /* ExportSpecifier */: // Export specifiers are only interesting if they are reexports from another module, or renamed, else they are already globals - if (node.kind === 237 /* ExportSpecifier */) { + if (node.kind === 238 /* ExportSpecifier */) { if (!node.parent.parent.moduleSpecifier && !node.propertyName) { return undefined; } @@ -44087,15 +45058,15 @@ var ts; }; } function getDefineModuleItem(node) { - if (node.kind !== 178 /* FunctionExpression */ && node.kind !== 179 /* ArrowFunction */) { + if (node.kind !== 179 /* FunctionExpression */ && node.kind !== 180 /* ArrowFunction */) { return undefined; } // No match if this is not a call expression to an identifier named 'define' - if (node.parent.kind !== 173 /* CallExpression */) { + if (node.parent.kind !== 174 /* CallExpression */) { return undefined; } var callExpr = node.parent; - if (callExpr.expression.kind !== 69 /* Identifier */ || callExpr.expression.getText() !== 'define') { + if (callExpr.expression.kind !== 69 /* Identifier */ || callExpr.expression.getText() !== "define") { return undefined; } // Return a module of either the given text in the first argument, or of the source file path @@ -44106,9 +45077,9 @@ var ts; return getNavBarItem(defaultName, ts.ScriptElementKind.moduleElement, [getNodeSpan(node.parent)]); } function getFunctionOrClassExpressionItem(node) { - if (node.kind !== 178 /* FunctionExpression */ && - node.kind !== 179 /* ArrowFunction */ && - node.kind !== 191 /* ClassExpression */) { + if (node.kind !== 179 /* FunctionExpression */ && + node.kind !== 180 /* ArrowFunction */ && + node.kind !== 192 /* ClassExpression */) { return undefined; } var fnExpr = node; @@ -44119,45 +45090,42 @@ var ts; } else { // See if it is a var initializer. If so, use the var name. - if (fnExpr.parent.kind === 217 /* VariableDeclaration */) { + if (fnExpr.parent.kind === 218 /* VariableDeclaration */) { fnName = ts.declarationNameToString(fnExpr.parent.name); } - else if (fnExpr.parent.kind === 186 /* BinaryExpression */ && + else if (fnExpr.parent.kind === 187 /* BinaryExpression */ && fnExpr.parent.operatorToken.kind === 56 /* EqualsToken */) { fnName = fnExpr.parent.left.getText(); - if (fnName.length > 20) { - fnName = fnName.substring(0, 17) + "..."; - } } - else if (fnExpr.parent.kind === 252 /* PropertyAssignment */ && + else if (fnExpr.parent.kind === 253 /* PropertyAssignment */ && fnExpr.parent.name) { fnName = fnExpr.parent.name.getText(); } else { - fnName = node.kind === 191 /* ClassExpression */ ? anonClassText : anonFnText; + fnName = node.kind === 192 /* ClassExpression */ ? anonClassText : anonFnText; } } - var scriptKind = node.kind === 191 /* ClassExpression */ ? ts.ScriptElementKind.classElement : ts.ScriptElementKind.functionElement; + var scriptKind = node.kind === 192 /* ClassExpression */ ? ts.ScriptElementKind.classElement : ts.ScriptElementKind.functionElement; return getNavBarItem(fnName, scriptKind, [getNodeSpan(node)]); } function getNodeSpan(node) { - return node.kind === 255 /* SourceFile */ + return node.kind === 256 /* SourceFile */ ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); } function getScriptKindForElementKind(kind) { switch (kind) { - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: return ts.ScriptElementKind.variableElement; - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return ts.ScriptElementKind.functionElement; - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: return ts.ScriptElementKind.classElement; - case 147 /* Constructor */: + case 148 /* Constructor */: return ts.ScriptElementKind.constructorImplementationElement; - case 148 /* GetAccessor */: + case 149 /* GetAccessor */: return ts.ScriptElementKind.memberGetAccessorElement; - case 149 /* SetAccessor */: + case 150 /* SetAccessor */: return ts.ScriptElementKind.memberSetAccessorElement; default: return "unknown"; @@ -44908,7 +45876,7 @@ var ts; } return createSignatureHelpItems(candidates, resolvedSignature, argumentInfo); function createJavaScriptSignatureHelpItems(argumentInfo) { - if (argumentInfo.invocation.kind !== 173 /* CallExpression */) { + if (argumentInfo.invocation.kind !== 174 /* CallExpression */) { return undefined; } // See if we can find some symbol with the call expression name that has call signatures. @@ -44916,7 +45884,7 @@ var ts; var expression = callExpression.expression; var name = expression.kind === 69 /* Identifier */ ? expression - : expression.kind === 171 /* PropertyAccessExpression */ + : expression.kind === 172 /* PropertyAccessExpression */ ? expression.name : undefined; if (!name || !name.text) { @@ -44949,7 +45917,7 @@ var ts; * in the argument of an invocation; returns undefined otherwise. */ function getImmediatelyContainingArgumentInfo(node) { - if (node.parent.kind === 173 /* CallExpression */ || node.parent.kind === 174 /* NewExpression */) { + if (node.parent.kind === 174 /* CallExpression */ || node.parent.kind === 175 /* NewExpression */) { var callExpression = node.parent; // There are 3 cases to handle: // 1. The token introduces a list, and should begin a sig help session @@ -45002,25 +45970,25 @@ var ts; }; } } - else if (node.kind === 11 /* NoSubstitutionTemplateLiteral */ && node.parent.kind === 175 /* TaggedTemplateExpression */) { + else if (node.kind === 11 /* NoSubstitutionTemplateLiteral */ && node.parent.kind === 176 /* TaggedTemplateExpression */) { // Check if we're actually inside the template; // otherwise we'll fall out and return undefined. if (ts.isInsideTemplateLiteral(node, position)) { return getArgumentListInfoForTemplate(node.parent, /*argumentIndex*/ 0); } } - else if (node.kind === 12 /* TemplateHead */ && node.parent.parent.kind === 175 /* TaggedTemplateExpression */) { + else if (node.kind === 12 /* TemplateHead */ && node.parent.parent.kind === 176 /* TaggedTemplateExpression */) { var templateExpression = node.parent; var tagExpression = templateExpression.parent; - ts.Debug.assert(templateExpression.kind === 188 /* TemplateExpression */); + ts.Debug.assert(templateExpression.kind === 189 /* TemplateExpression */); var argumentIndex = ts.isInsideTemplateLiteral(node, position) ? 0 : 1; return getArgumentListInfoForTemplate(tagExpression, argumentIndex); } - else if (node.parent.kind === 196 /* TemplateSpan */ && node.parent.parent.parent.kind === 175 /* TaggedTemplateExpression */) { + else if (node.parent.kind === 197 /* TemplateSpan */ && node.parent.parent.parent.kind === 176 /* TaggedTemplateExpression */) { var templateSpan = node.parent; var templateExpression = templateSpan.parent; var tagExpression = templateExpression.parent; - ts.Debug.assert(templateExpression.kind === 188 /* TemplateExpression */); + ts.Debug.assert(templateExpression.kind === 189 /* TemplateExpression */); // If we're just after a template tail, don't show signature help. if (node.kind === 14 /* TemplateTail */ && !ts.isInsideTemplateLiteral(node, position)) { return undefined; @@ -45138,7 +46106,7 @@ var ts; // // This is because a Missing node has no width. However, what we actually want is to include trivia // leading up to the next token in case the user is about to type in a TemplateMiddle or TemplateTail. - if (template.kind === 188 /* TemplateExpression */) { + if (template.kind === 189 /* TemplateExpression */) { var lastSpan = ts.lastOrUndefined(template.templateSpans); if (lastSpan.literal.getFullWidth() === 0) { applicableSpanEnd = ts.skipTrivia(sourceFile.text, applicableSpanEnd, /*stopAfterLineBreak*/ false); @@ -45147,7 +46115,7 @@ var ts; return ts.createTextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); } function getContainingArgumentInfo(node) { - for (var n = node; n.kind !== 255 /* SourceFile */; n = n.parent) { + for (var n = node; n.kind !== 256 /* SourceFile */; n = n.parent) { if (ts.isFunctionBlock(n)) { return undefined; } @@ -45322,40 +46290,40 @@ var ts; return false; } switch (n.kind) { - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 170 /* ObjectLiteralExpression */: - case 166 /* ObjectBindingPattern */: - case 158 /* TypeLiteral */: - case 198 /* Block */: - case 225 /* ModuleBlock */: - case 226 /* CaseBlock */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 171 /* ObjectLiteralExpression */: + case 167 /* ObjectBindingPattern */: + case 159 /* TypeLiteral */: + case 199 /* Block */: + case 226 /* ModuleBlock */: + case 227 /* CaseBlock */: return nodeEndsWith(n, 16 /* CloseBraceToken */, sourceFile); - case 251 /* CatchClause */: + case 252 /* CatchClause */: return isCompletedNode(n.block, sourceFile); - case 174 /* NewExpression */: + case 175 /* NewExpression */: if (!n.arguments) { return true; } // fall through - case 173 /* CallExpression */: - case 177 /* ParenthesizedExpression */: - case 163 /* ParenthesizedType */: + case 174 /* CallExpression */: + case 178 /* ParenthesizedExpression */: + case 164 /* ParenthesizedType */: return nodeEndsWith(n, 18 /* CloseParenToken */, sourceFile); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: return isCompletedNode(n.type, sourceFile); - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 151 /* ConstructSignature */: - case 150 /* CallSignature */: - case 179 /* ArrowFunction */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 152 /* ConstructSignature */: + case 151 /* CallSignature */: + case 180 /* ArrowFunction */: if (n.body) { return isCompletedNode(n.body, sourceFile); } @@ -45365,64 +46333,64 @@ var ts; // Even though type parameters can be unclosed, we can get away with // having at least a closing paren. return hasChildOfKind(n, 18 /* CloseParenToken */, sourceFile); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return n.body && isCompletedNode(n.body, sourceFile); - case 202 /* IfStatement */: + case 203 /* IfStatement */: if (n.elseStatement) { return isCompletedNode(n.elseStatement, sourceFile); } return isCompletedNode(n.thenStatement, sourceFile); - case 201 /* ExpressionStatement */: + case 202 /* ExpressionStatement */: return isCompletedNode(n.expression, sourceFile) || hasChildOfKind(n, 23 /* SemicolonToken */); - case 169 /* ArrayLiteralExpression */: - case 167 /* ArrayBindingPattern */: - case 172 /* ElementAccessExpression */: - case 139 /* ComputedPropertyName */: - case 160 /* TupleType */: + case 170 /* ArrayLiteralExpression */: + case 168 /* ArrayBindingPattern */: + case 173 /* ElementAccessExpression */: + case 140 /* ComputedPropertyName */: + case 161 /* TupleType */: return nodeEndsWith(n, 20 /* CloseBracketToken */, sourceFile); - case 152 /* IndexSignature */: + case 153 /* IndexSignature */: if (n.type) { return isCompletedNode(n.type, sourceFile); } return hasChildOfKind(n, 20 /* CloseBracketToken */, sourceFile); - case 248 /* CaseClause */: - case 249 /* DefaultClause */: + case 249 /* CaseClause */: + case 250 /* DefaultClause */: // there is no such thing as terminator token for CaseClause/DefaultClause so for simplicity always consider them non-completed return false; - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 204 /* WhileStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 205 /* WhileStatement */: return isCompletedNode(n.statement, sourceFile); - case 203 /* DoStatement */: + case 204 /* DoStatement */: // rough approximation: if DoStatement has While keyword - then if node is completed is checking the presence of ')'; var hasWhileKeyword = findChildOfKind(n, 104 /* WhileKeyword */, sourceFile); if (hasWhileKeyword) { return nodeEndsWith(n, 18 /* CloseParenToken */, sourceFile); } return isCompletedNode(n.statement, sourceFile); - case 157 /* TypeQuery */: + case 158 /* TypeQuery */: return isCompletedNode(n.exprName, sourceFile); - case 181 /* TypeOfExpression */: - case 180 /* DeleteExpression */: - case 182 /* VoidExpression */: - case 189 /* YieldExpression */: - case 190 /* SpreadElementExpression */: + case 182 /* TypeOfExpression */: + case 181 /* DeleteExpression */: + case 183 /* VoidExpression */: + case 190 /* YieldExpression */: + case 191 /* SpreadElementExpression */: var unaryWordExpression = n; return isCompletedNode(unaryWordExpression.expression, sourceFile); - case 175 /* TaggedTemplateExpression */: + case 176 /* TaggedTemplateExpression */: return isCompletedNode(n.template, sourceFile); - case 188 /* TemplateExpression */: + case 189 /* TemplateExpression */: var lastSpan = ts.lastOrUndefined(n.templateSpans); return isCompletedNode(lastSpan, sourceFile); - case 196 /* TemplateSpan */: + case 197 /* TemplateSpan */: return ts.nodeIsPresent(n.literal); - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: return isCompletedNode(n.operand, sourceFile); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return isCompletedNode(n.right, sourceFile); - case 187 /* ConditionalExpression */: + case 188 /* ConditionalExpression */: return isCompletedNode(n.whenFalse, sourceFile); default: return true; @@ -45478,7 +46446,7 @@ var ts; // for the position of the relevant node (or comma). var syntaxList = ts.forEach(node.parent.getChildren(), function (c) { // find syntax list that covers the span of the node - if (c.kind === 278 /* SyntaxList */ && c.pos <= node.pos && c.end >= node.end) { + if (c.kind === 279 /* SyntaxList */ && c.pos <= node.pos && c.end >= node.end) { return c; } }); @@ -45584,7 +46552,7 @@ var ts; function findPrecedingToken(position, sourceFile, startNode) { return find(startNode || sourceFile); function findRightmostToken(n) { - if (isToken(n) || n.kind === 243 /* JsxText */) { + if (isToken(n) || n.kind === 244 /* JsxText */) { return n; } var children = n.getChildren(); @@ -45592,7 +46560,7 @@ var ts; return candidate && findRightmostToken(candidate); } function find(n) { - if (isToken(n) || n.kind === 243 /* JsxText */) { + if (isToken(n) || n.kind === 244 /* JsxText */) { return n; } var children = n.getChildren(); @@ -45606,10 +46574,10 @@ var ts; // if no - position is in the node itself so we should recurse in it. // NOTE: JsxText is a weird kind of node that can contain only whitespaces (since they are not counted as trivia). // if this is the case - then we should assume that token in question is located in previous child. - if (position < child.end && (nodeHasTokens(child) || child.kind === 243 /* JsxText */)) { + if (position < child.end && (nodeHasTokens(child) || child.kind === 244 /* JsxText */)) { var start = child.getStart(sourceFile); var lookInPreviousChild = (start >= position) || - (child.kind === 243 /* JsxText */ && start === child.end); // whitespace only JsxText + (child.kind === 244 /* JsxText */ && start === child.end); // whitespace only JsxText if (lookInPreviousChild) { // actual start of the node is past the position - previous token should be at the end of previous child var candidate = findRightmostChildNodeWithTokens(children, /*exclusiveStartPosition*/ i); @@ -45621,7 +46589,7 @@ var ts; } } } - ts.Debug.assert(startNode !== undefined || n.kind === 255 /* SourceFile */); + ts.Debug.assert(startNode !== undefined || n.kind === 256 /* SourceFile */); // Here we know that none of child token nodes embrace the position, // the only known case is when position is at the end of the file. // Try to find the rightmost token in the file without filtering. @@ -45643,20 +46611,54 @@ var ts; ts.findPrecedingToken = findPrecedingToken; function isInString(sourceFile, position) { var token = getTokenAtPosition(sourceFile, position); - return token && (token.kind === 9 /* StringLiteral */ || token.kind === 165 /* StringLiteralType */) && position > token.getStart(); + return token && (token.kind === 9 /* StringLiteral */ || token.kind === 166 /* StringLiteralType */) && position > token.getStart(sourceFile); } ts.isInString = isInString; function isInComment(sourceFile, position) { return isInCommentHelper(sourceFile, position, /*predicate*/ undefined); } ts.isInComment = isInComment; + /** + * returns true if the position is in between the open and close elements of an JSX expression. + */ + function isInsideJsxElementOrAttribute(sourceFile, position) { + var token = getTokenAtPosition(sourceFile, position); + if (!token) { + return false; + } + //
Hello |
+ if (token.kind === 25 /* LessThanToken */ && token.parent.kind === 244 /* JsxText */) { + return true; + } + //
{ |
or
+ if (token.kind === 25 /* LessThanToken */ && token.parent.kind === 248 /* JsxExpression */) { + return true; + } + //
{ + // | + // } < /div> + if (token && token.kind === 16 /* CloseBraceToken */ && token.parent.kind === 248 /* JsxExpression */) { + return true; + } + //
|
+ if (token.kind === 25 /* LessThanToken */ && token.parent.kind === 245 /* JsxClosingElement */) { + return true; + } + return false; + } + ts.isInsideJsxElementOrAttribute = isInsideJsxElementOrAttribute; + function isInTemplateString(sourceFile, position) { + var token = getTokenAtPosition(sourceFile, position); + return ts.isTemplateLiteralKind(token.kind) && position > token.getStart(sourceFile); + } + ts.isInTemplateString = isInTemplateString; /** * Returns true if the cursor at position in sourceFile is within a comment that additionally * satisfies predicate, and false otherwise. */ function isInCommentHelper(sourceFile, position, predicate) { var token = getTokenAtPosition(sourceFile, position); - if (token && position <= token.getStart()) { + if (token && position <= token.getStart(sourceFile)) { var commentRanges = ts.getLeadingCommentRanges(sourceFile.text, token.pos); // The end marker of a single-line comment does not include the newline character. // In the following case, we are inside a comment (^ denotes the cursor position): @@ -45685,7 +46687,7 @@ var ts; return ts.forEach(commentRanges, jsDocPrefix); function jsDocPrefix(c) { var text = sourceFile.text; - return text.length >= c.pos + 3 && text[c.pos] === '/' && text[c.pos + 1] === '*' && text[c.pos + 2] === '*'; + return text.length >= c.pos + 3 && text[c.pos] === "/" && text[c.pos + 1] === "*" && text[c.pos + 2] === "*"; } } ts.hasDocComment = hasDocComment; @@ -45743,21 +46745,21 @@ var ts; result.push(ts.ScriptElementKindModifier.exportedModifier); if (ts.isInAmbientContext(node)) result.push(ts.ScriptElementKindModifier.ambientModifier); - return result.length > 0 ? result.join(',') : ts.ScriptElementKindModifier.none; + return result.length > 0 ? result.join(",") : ts.ScriptElementKindModifier.none; } ts.getNodeModifiers = getNodeModifiers; function getTypeArgumentOrTypeParameterList(node) { - if (node.kind === 154 /* TypeReference */ || node.kind === 173 /* CallExpression */) { + if (node.kind === 155 /* TypeReference */ || node.kind === 174 /* CallExpression */) { return node.typeArguments; } - if (ts.isFunctionLike(node) || node.kind === 220 /* ClassDeclaration */ || node.kind === 221 /* InterfaceDeclaration */) { + if (ts.isFunctionLike(node) || node.kind === 221 /* ClassDeclaration */ || node.kind === 222 /* InterfaceDeclaration */) { return node.typeParameters; } return undefined; } ts.getTypeArgumentOrTypeParameterList = getTypeArgumentOrTypeParameterList; function isToken(n) { - return n.kind >= 0 /* FirstToken */ && n.kind <= 137 /* LastToken */; + return n.kind >= 0 /* FirstToken */ && n.kind <= 138 /* LastToken */; } ts.isToken = isToken; function isWord(kind) { @@ -45773,7 +46775,7 @@ var ts; ts.isComment = isComment; function isStringOrRegularExpressionOrTemplateLiteral(kind) { if (kind === 9 /* StringLiteral */ - || kind === 165 /* StringLiteralType */ + || kind === 166 /* StringLiteralType */ || kind === 10 /* RegularExpressionLiteral */ || ts.isTemplateLiteralKind(kind)) { return true; @@ -45817,18 +46819,18 @@ var ts; } ts.compareDataObjects = compareDataObjects; function isArrayLiteralOrObjectLiteralDestructuringPattern(node) { - if (node.kind === 169 /* ArrayLiteralExpression */ || - node.kind === 170 /* ObjectLiteralExpression */) { + if (node.kind === 170 /* ArrayLiteralExpression */ || + node.kind === 171 /* ObjectLiteralExpression */) { // [a,b,c] from: // [a, b, c] = someExpression; - if (node.parent.kind === 186 /* BinaryExpression */ && + if (node.parent.kind === 187 /* BinaryExpression */ && node.parent.left === node && node.parent.operatorToken.kind === 56 /* EqualsToken */) { return true; } // [a, b, c] from: // for([a, b, c] of expression) - if (node.parent.kind === 207 /* ForOfStatement */ && + if (node.parent.kind === 208 /* ForOfStatement */ && node.parent.initializer === node) { return true; } @@ -45836,7 +46838,7 @@ var ts; // [x, [a, b, c] ] = someExpression // or // {x, a: {a, b, c} } = someExpression - if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 252 /* PropertyAssignment */ ? node.parent.parent : node.parent)) { + if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 253 /* PropertyAssignment */ ? node.parent.parent : node.parent)) { return true; } } @@ -45849,7 +46851,7 @@ var ts; var ts; (function (ts) { function isFirstDeclarationOfSymbolParameter(symbol) { - return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 141 /* Parameter */; + return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 142 /* Parameter */; } ts.isFirstDeclarationOfSymbolParameter = isFirstDeclarationOfSymbolParameter; var displayPartWriter = getDisplayPartWriter(); @@ -46028,6 +47030,10 @@ var ts; if (isImportOrExportSpecifierName(location)) { return location.getText(); } + else if (ts.isStringOrNumericLiteral(location.kind) && + location.parent.kind === 140 /* ComputedPropertyName */) { + return location.text; + } // Try to get the local symbol if we're dealing with an 'export default' // since that symbol has the "true" name. var localExportDefaultSymbol = ts.getLocalSymbolForExportDefault(symbol); @@ -46037,7 +47043,7 @@ var ts; ts.getDeclaredName = getDeclaredName; function isImportOrExportSpecifierName(location) { return location.parent && - (location.parent.kind === 233 /* ImportSpecifier */ || location.parent.kind === 237 /* ExportSpecifier */) && + (location.parent.kind === 234 /* ImportSpecifier */ || location.parent.kind === 238 /* ExportSpecifier */) && location.parent.propertyName === location; } ts.isImportOrExportSpecifierName = isImportOrExportSpecifierName; @@ -46067,12 +47073,15 @@ var ts; } ts.scriptKindIs = scriptKindIs; function getScriptKind(fileName, host) { - // First check to see if the script kind can be determined from the file name - var scriptKind = ts.getScriptKindFromFileName(fileName); - if (scriptKind === 0 /* Unknown */ && host && host.getScriptKind) { - // Next check to see if the host can resolve the script kind + // First check to see if the script kind was specified by the host. Chances are the host + // may override the default script kind for the file extension. + var scriptKind; + if (host && host.getScriptKind) { scriptKind = host.getScriptKind(fileName); } + if (!scriptKind || scriptKind === 0 /* Unknown */) { + scriptKind = ts.getScriptKindFromFileName(fileName); + } return ts.ensureScriptKind(fileName, scriptKind); } ts.getScriptKind = getScriptKind; @@ -46367,10 +47376,10 @@ var ts; function shouldRescanJsxIdentifier(node) { if (node.parent) { switch (node.parent.kind) { - case 245 /* JsxAttribute */: - case 242 /* JsxOpeningElement */: - case 244 /* JsxClosingElement */: - case 241 /* JsxSelfClosingElement */: + case 246 /* JsxAttribute */: + case 243 /* JsxOpeningElement */: + case 245 /* JsxClosingElement */: + case 242 /* JsxSelfClosingElement */: return node.kind === 69 /* Identifier */; } } @@ -46829,7 +47838,7 @@ var ts; this.SpaceAfterTryFinally = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([100 /* TryKeyword */, 85 /* FinallyKeyword */]), 15 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); // get x() {} // set x(val) {} - this.SpaceAfterGetSetInMember = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([123 /* GetKeyword */, 130 /* SetKeyword */]), 69 /* Identifier */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2 /* Space */)); + this.SpaceAfterGetSetInMember = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([123 /* GetKeyword */, 131 /* SetKeyword */]), 69 /* Identifier */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2 /* Space */)); // Special case for binary operators (that are keywords). For these we have to add a space and shouldn't follow any user options. this.SpaceBeforeBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryKeywordOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); this.SpaceAfterBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryKeywordOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); @@ -46837,9 +47846,9 @@ var ts; // Treat constructor as an identifier in a function declaration, and remove spaces between constructor and following left parentheses this.NoSpaceAfterConstructor = new formatting.Rule(formatting.RuleDescriptor.create1(121 /* ConstructorKeyword */, 17 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); // Use of module as a function call. e.g.: import m2 = module("m2"); - this.NoSpaceAfterModuleImport = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([125 /* ModuleKeyword */, 128 /* RequireKeyword */]), 17 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); + this.NoSpaceAfterModuleImport = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([125 /* ModuleKeyword */, 129 /* RequireKeyword */]), 17 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); // Add a space around certain TypeScript keywords - this.SpaceAfterCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([115 /* AbstractKeyword */, 73 /* ClassKeyword */, 122 /* DeclareKeyword */, 77 /* DefaultKeyword */, 81 /* EnumKeyword */, 82 /* ExportKeyword */, 83 /* ExtendsKeyword */, 123 /* GetKeyword */, 106 /* ImplementsKeyword */, 89 /* ImportKeyword */, 107 /* InterfaceKeyword */, 125 /* ModuleKeyword */, 126 /* NamespaceKeyword */, 110 /* PrivateKeyword */, 112 /* PublicKeyword */, 111 /* ProtectedKeyword */, 130 /* SetKeyword */, 113 /* StaticKeyword */, 133 /* TypeKeyword */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); + this.SpaceAfterCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([115 /* AbstractKeyword */, 73 /* ClassKeyword */, 122 /* DeclareKeyword */, 77 /* DefaultKeyword */, 81 /* EnumKeyword */, 82 /* ExportKeyword */, 83 /* ExtendsKeyword */, 123 /* GetKeyword */, 106 /* ImplementsKeyword */, 89 /* ImportKeyword */, 107 /* InterfaceKeyword */, 125 /* ModuleKeyword */, 126 /* NamespaceKeyword */, 110 /* PrivateKeyword */, 112 /* PublicKeyword */, 111 /* ProtectedKeyword */, 131 /* SetKeyword */, 113 /* StaticKeyword */, 134 /* TypeKeyword */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); this.SpaceBeforeCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([83 /* ExtendsKeyword */, 106 /* ImplementsKeyword */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); // Treat string literals in module names as identifiers, and add a space between the literal and the opening Brace braces, e.g.: module "m2" { this.SpaceAfterModuleName = new formatting.Rule(formatting.RuleDescriptor.create1(9 /* StringLiteral */, 15 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsModuleDeclContext), 2 /* Space */)); @@ -46861,7 +47870,7 @@ var ts; // decorators this.SpaceBeforeAt = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 55 /* AtToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); this.NoSpaceAfterAt = new formatting.Rule(formatting.RuleDescriptor.create3(55 /* AtToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); - this.SpaceAfterDecorator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([115 /* AbstractKeyword */, 69 /* Identifier */, 82 /* ExportKeyword */, 77 /* DefaultKeyword */, 73 /* ClassKeyword */, 113 /* StaticKeyword */, 112 /* PublicKeyword */, 110 /* PrivateKeyword */, 111 /* ProtectedKeyword */, 123 /* GetKeyword */, 130 /* SetKeyword */, 19 /* OpenBracketToken */, 37 /* AsteriskToken */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsEndOfDecoratorContextOnSameLine), 2 /* Space */)); + this.SpaceAfterDecorator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([115 /* AbstractKeyword */, 69 /* Identifier */, 82 /* ExportKeyword */, 77 /* DefaultKeyword */, 73 /* ClassKeyword */, 113 /* StaticKeyword */, 112 /* PublicKeyword */, 110 /* PrivateKeyword */, 111 /* ProtectedKeyword */, 123 /* GetKeyword */, 131 /* SetKeyword */, 19 /* OpenBracketToken */, 37 /* AsteriskToken */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsEndOfDecoratorContextOnSameLine), 2 /* Space */)); this.NoSpaceBetweenFunctionKeywordAndStar = new formatting.Rule(formatting.RuleDescriptor.create1(87 /* FunctionKeyword */, 37 /* AsteriskToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclarationOrFunctionExpressionContext), 8 /* Delete */)); this.SpaceAfterStarInGeneratorDeclaration = new formatting.Rule(formatting.RuleDescriptor.create3(37 /* AsteriskToken */, formatting.Shared.TokenRange.FromTokens([69 /* Identifier */, 17 /* OpenParenToken */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclarationOrFunctionExpressionContext), 2 /* Space */)); this.NoSpaceBetweenYieldKeywordAndStar = new formatting.Rule(formatting.RuleDescriptor.create1(114 /* YieldKeyword */, 37 /* AsteriskToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsYieldOrYieldStarWithOperand), 8 /* Delete */)); @@ -46985,40 +47994,40 @@ var ts; /// Contexts /// Rules.IsForContext = function (context) { - return context.contextNode.kind === 205 /* ForStatement */; + return context.contextNode.kind === 206 /* ForStatement */; }; Rules.IsNotForContext = function (context) { return !Rules.IsForContext(context); }; Rules.IsBinaryOpContext = function (context) { switch (context.contextNode.kind) { - case 186 /* BinaryExpression */: - case 187 /* ConditionalExpression */: - case 194 /* AsExpression */: - case 153 /* TypePredicate */: - case 161 /* UnionType */: - case 162 /* IntersectionType */: + case 187 /* BinaryExpression */: + case 188 /* ConditionalExpression */: + case 195 /* AsExpression */: + case 154 /* TypePredicate */: + case 162 /* UnionType */: + case 163 /* IntersectionType */: return true; // equals in binding elements: function foo([[x, y] = [1, 2]]) - case 168 /* BindingElement */: + case 169 /* BindingElement */: // equals in type X = ... - case 222 /* TypeAliasDeclaration */: + case 223 /* TypeAliasDeclaration */: // equal in import a = module('a'); - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: // equal in let a = 0; - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: // equal in p = 0; - case 141 /* Parameter */: - case 254 /* EnumMember */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 142 /* Parameter */: + case 255 /* EnumMember */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return context.currentTokenSpan.kind === 56 /* EqualsToken */ || context.nextTokenSpan.kind === 56 /* EqualsToken */; // "in" keyword in for (let x in []) { } - case 206 /* ForInStatement */: + case 207 /* ForInStatement */: return context.currentTokenSpan.kind === 90 /* InKeyword */ || context.nextTokenSpan.kind === 90 /* InKeyword */; // Technically, "of" is not a binary operator, but format it the same way as "in" - case 207 /* ForOfStatement */: - return context.currentTokenSpan.kind === 137 /* OfKeyword */ || context.nextTokenSpan.kind === 137 /* OfKeyword */; + case 208 /* ForOfStatement */: + return context.currentTokenSpan.kind === 138 /* OfKeyword */ || context.nextTokenSpan.kind === 138 /* OfKeyword */; } return false; }; @@ -47026,7 +48035,7 @@ var ts; return !Rules.IsBinaryOpContext(context); }; Rules.IsConditionalOperatorContext = function (context) { - return context.contextNode.kind === 187 /* ConditionalExpression */; + return context.contextNode.kind === 188 /* ConditionalExpression */; }; Rules.IsSameLineTokenOrBeforeMultilineBlockContext = function (context) { //// This check is mainly used inside SpaceBeforeOpenBraceInControl and SpaceBeforeOpenBraceInFunction. @@ -47070,93 +48079,93 @@ var ts; return true; } switch (node.kind) { - case 198 /* Block */: - case 226 /* CaseBlock */: - case 170 /* ObjectLiteralExpression */: - case 225 /* ModuleBlock */: + case 199 /* Block */: + case 227 /* CaseBlock */: + case 171 /* ObjectLiteralExpression */: + case 226 /* ModuleBlock */: return true; } return false; }; Rules.IsFunctionDeclContext = function (context) { switch (context.contextNode.kind) { - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: //case SyntaxKind.MemberFunctionDeclaration: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: ///case SyntaxKind.MethodSignature: - case 150 /* CallSignature */: - case 178 /* FunctionExpression */: - case 147 /* Constructor */: - case 179 /* ArrowFunction */: + case 151 /* CallSignature */: + case 179 /* FunctionExpression */: + case 148 /* Constructor */: + case 180 /* ArrowFunction */: //case SyntaxKind.ConstructorDeclaration: //case SyntaxKind.SimpleArrowFunctionExpression: //case SyntaxKind.ParenthesizedArrowFunctionExpression: - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return true; } return false; }; Rules.IsFunctionDeclarationOrFunctionExpressionContext = function (context) { - return context.contextNode.kind === 219 /* FunctionDeclaration */ || context.contextNode.kind === 178 /* FunctionExpression */; + return context.contextNode.kind === 220 /* FunctionDeclaration */ || context.contextNode.kind === 179 /* FunctionExpression */; }; Rules.IsTypeScriptDeclWithBlockContext = function (context) { return Rules.NodeIsTypeScriptDeclWithBlockContext(context.contextNode); }; Rules.NodeIsTypeScriptDeclWithBlockContext = function (node) { switch (node.kind) { - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 158 /* TypeLiteral */: - case 224 /* ModuleDeclaration */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 159 /* TypeLiteral */: + case 225 /* ModuleDeclaration */: return true; } return false; }; Rules.IsAfterCodeBlockContext = function (context) { switch (context.currentTokenParent.kind) { - case 220 /* ClassDeclaration */: - case 224 /* ModuleDeclaration */: - case 223 /* EnumDeclaration */: - case 198 /* Block */: - case 251 /* CatchClause */: - case 225 /* ModuleBlock */: - case 212 /* SwitchStatement */: + case 221 /* ClassDeclaration */: + case 225 /* ModuleDeclaration */: + case 224 /* EnumDeclaration */: + case 199 /* Block */: + case 252 /* CatchClause */: + case 226 /* ModuleBlock */: + case 213 /* SwitchStatement */: return true; } return false; }; Rules.IsControlDeclContext = function (context) { switch (context.contextNode.kind) { - case 202 /* IfStatement */: - case 212 /* SwitchStatement */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 204 /* WhileStatement */: - case 215 /* TryStatement */: - case 203 /* DoStatement */: - case 211 /* WithStatement */: + case 203 /* IfStatement */: + case 213 /* SwitchStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 205 /* WhileStatement */: + case 216 /* TryStatement */: + case 204 /* DoStatement */: + case 212 /* WithStatement */: // TODO // case SyntaxKind.ElseClause: - case 251 /* CatchClause */: + case 252 /* CatchClause */: return true; default: return false; } }; Rules.IsObjectContext = function (context) { - return context.contextNode.kind === 170 /* ObjectLiteralExpression */; + return context.contextNode.kind === 171 /* ObjectLiteralExpression */; }; Rules.IsFunctionCallContext = function (context) { - return context.contextNode.kind === 173 /* CallExpression */; + return context.contextNode.kind === 174 /* CallExpression */; }; Rules.IsNewContext = function (context) { - return context.contextNode.kind === 174 /* NewExpression */; + return context.contextNode.kind === 175 /* NewExpression */; }; Rules.IsFunctionCallOrNewContext = function (context) { return Rules.IsFunctionCallContext(context) || Rules.IsNewContext(context); @@ -47168,10 +48177,10 @@ var ts; return context.nextTokenSpan.kind !== 20 /* CloseBracketToken */; }; Rules.IsArrowFunctionContext = function (context) { - return context.contextNode.kind === 179 /* ArrowFunction */; + return context.contextNode.kind === 180 /* ArrowFunction */; }; Rules.IsNonJsxSameLineTokenContext = function (context) { - return context.TokensAreOnSameLine() && context.contextNode.kind !== 243 /* JsxText */; + return context.TokensAreOnSameLine() && context.contextNode.kind !== 244 /* JsxText */; }; Rules.IsNotBeforeBlockInFunctionDeclarationContext = function (context) { return !Rules.IsFunctionDeclContext(context) && !Rules.IsBeforeBlockContext(context); @@ -47186,41 +48195,41 @@ var ts; while (ts.isExpression(node)) { node = node.parent; } - return node.kind === 142 /* Decorator */; + return node.kind === 143 /* Decorator */; }; Rules.IsStartOfVariableDeclarationList = function (context) { - return context.currentTokenParent.kind === 218 /* VariableDeclarationList */ && + return context.currentTokenParent.kind === 219 /* VariableDeclarationList */ && context.currentTokenParent.getStart(context.sourceFile) === context.currentTokenSpan.pos; }; Rules.IsNotFormatOnEnter = function (context) { return context.formattingRequestKind !== 2 /* FormatOnEnter */; }; Rules.IsModuleDeclContext = function (context) { - return context.contextNode.kind === 224 /* ModuleDeclaration */; + return context.contextNode.kind === 225 /* ModuleDeclaration */; }; Rules.IsObjectTypeContext = function (context) { - return context.contextNode.kind === 158 /* TypeLiteral */; // && context.contextNode.parent.kind !== SyntaxKind.InterfaceDeclaration; + return context.contextNode.kind === 159 /* TypeLiteral */; // && context.contextNode.parent.kind !== SyntaxKind.InterfaceDeclaration; }; Rules.IsTypeArgumentOrParameterOrAssertion = function (token, parent) { if (token.kind !== 25 /* LessThanToken */ && token.kind !== 27 /* GreaterThanToken */) { return false; } switch (parent.kind) { - case 154 /* TypeReference */: - case 176 /* TypeAssertionExpression */: - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 221 /* InterfaceDeclaration */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 193 /* ExpressionWithTypeArguments */: + case 155 /* TypeReference */: + case 177 /* TypeAssertionExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: + case 194 /* ExpressionWithTypeArguments */: return true; default: return false; @@ -47231,13 +48240,13 @@ var ts; Rules.IsTypeArgumentOrParameterOrAssertion(context.nextTokenSpan, context.nextTokenParent); }; Rules.IsTypeAssertionContext = function (context) { - return context.contextNode.kind === 176 /* TypeAssertionExpression */; + return context.contextNode.kind === 177 /* TypeAssertionExpression */; }; Rules.IsVoidOpContext = function (context) { - return context.currentTokenSpan.kind === 103 /* VoidKeyword */ && context.currentTokenParent.kind === 182 /* VoidExpression */; + return context.currentTokenSpan.kind === 103 /* VoidKeyword */ && context.currentTokenParent.kind === 183 /* VoidExpression */; }; Rules.IsYieldOrYieldStarWithOperand = function (context) { - return context.contextNode.kind === 189 /* YieldExpression */ && context.contextNode.expression !== undefined; + return context.contextNode.kind === 190 /* YieldExpression */ && context.contextNode.expression !== undefined; }; return Rules; }()); @@ -47261,7 +48270,7 @@ var ts; return result; }; RulesMap.prototype.Initialize = function (rules) { - this.mapRowLength = 137 /* LastToken */ + 1; + this.mapRowLength = 138 /* LastToken */ + 1; this.map = new Array(this.mapRowLength * this.mapRowLength); //new Array(this.mapRowLength * this.mapRowLength); // This array is used only during construction of the rulesbucket in the map var rulesBucketConstructionStateList = new Array(this.map.length); //new Array(this.map.length); @@ -47456,7 +48465,7 @@ var ts; } TokenAllAccess.prototype.GetTokens = function () { var result = []; - for (var token = 0 /* FirstToken */; token <= 137 /* LastToken */; token++) { + for (var token = 0 /* FirstToken */; token <= 138 /* LastToken */; token++) { result.push(token); } return result; @@ -47498,9 +48507,9 @@ var ts; }; TokenRange.Any = TokenRange.AllTokens(); TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([3 /* MultiLineCommentTrivia */])); - TokenRange.Keywords = TokenRange.FromRange(70 /* FirstKeyword */, 137 /* LastKeyword */); + TokenRange.Keywords = TokenRange.FromRange(70 /* FirstKeyword */, 138 /* LastKeyword */); TokenRange.BinaryOperators = TokenRange.FromRange(25 /* FirstBinaryOperator */, 68 /* LastBinaryOperator */); - TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([90 /* InKeyword */, 91 /* InstanceOfKeyword */, 137 /* OfKeyword */, 116 /* AsKeyword */, 124 /* IsKeyword */]); + TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([90 /* InKeyword */, 91 /* InstanceOfKeyword */, 138 /* OfKeyword */, 116 /* AsKeyword */, 124 /* IsKeyword */]); TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([41 /* PlusPlusToken */, 42 /* MinusMinusToken */, 50 /* TildeToken */, 49 /* ExclamationToken */]); TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([8 /* NumericLiteral */, 69 /* Identifier */, 17 /* OpenParenToken */, 19 /* OpenBracketToken */, 15 /* OpenBraceToken */, 97 /* ThisKeyword */, 92 /* NewKeyword */]); TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([69 /* Identifier */, 17 /* OpenParenToken */, 97 /* ThisKeyword */, 92 /* NewKeyword */]); @@ -47508,7 +48517,7 @@ var ts; TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([69 /* Identifier */, 17 /* OpenParenToken */, 97 /* ThisKeyword */, 92 /* NewKeyword */]); TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([69 /* Identifier */, 18 /* CloseParenToken */, 20 /* CloseBracketToken */, 92 /* NewKeyword */]); TokenRange.Comments = TokenRange.FromTokens([2 /* SingleLineCommentTrivia */, 3 /* MultiLineCommentTrivia */]); - TokenRange.TypeNames = TokenRange.FromTokens([69 /* Identifier */, 129 /* NumberKeyword */, 131 /* StringKeyword */, 120 /* BooleanKeyword */, 132 /* SymbolKeyword */, 103 /* VoidKeyword */, 117 /* AnyKeyword */]); + TokenRange.TypeNames = TokenRange.FromTokens([69 /* Identifier */, 130 /* NumberKeyword */, 132 /* StringKeyword */, 120 /* BooleanKeyword */, 133 /* SymbolKeyword */, 103 /* VoidKeyword */, 117 /* AnyKeyword */]); return TokenRange; }()); Shared.TokenRange = TokenRange; @@ -47707,9 +48716,9 @@ var ts; } function findOutermostParent(position, expectedTokenKind, sourceFile) { var precedingToken = ts.findPrecedingToken(position, sourceFile); - // when it is claimed that trigger character was typed at given position + // when it is claimed that trigger character was typed at given position // we verify that there is a token with a matching kind whose end is equal to position (because the character was just typed). - // If this condition is not hold - then trigger character was typed in some other context, + // If this condition is not hold - then trigger character was typed in some other context, // i.e.in comment and thus should not trigger autoformatting if (!precedingToken || precedingToken.kind !== expectedTokenKind || @@ -47718,12 +48727,12 @@ var ts; } // walk up and search for the parent node that ends at the same position with precedingToken. // for cases like this - // + // // let x = 1; // while (true) { - // } + // } // after typing close curly in while statement we want to reformat just the while statement. - // However if we just walk upwards searching for the parent that has the same end value - + // However if we just walk upwards searching for the parent that has the same end value - // we'll end up with the whole source file. isListElement allows to stop on the list element level var current = precedingToken; while (current && @@ -47738,17 +48747,17 @@ var ts; // i.e. parent is class declaration with the list of members and node is one of members. function isListElement(parent, node) { switch (parent.kind) { - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: return ts.rangeContainsRange(parent.members, node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: var body = parent.body; - return body && body.kind === 198 /* Block */ && ts.rangeContainsRange(body.statements, node); - case 255 /* SourceFile */: - case 198 /* Block */: - case 225 /* ModuleBlock */: + return body && body.kind === 199 /* Block */ && ts.rangeContainsRange(body.statements, node); + case 256 /* SourceFile */: + case 199 /* Block */: + case 226 /* ModuleBlock */: return ts.rangeContainsRange(parent.statements, node); - case 251 /* CatchClause */: + case 252 /* CatchClause */: return ts.rangeContainsRange(parent.block.statements, node); } return false; @@ -47788,7 +48797,7 @@ var ts; // 'index' tracks the index of the most recent error that was checked. while (true) { if (index >= sorted.length) { - // all errors in the range were already checked -> no error in specified range + // all errors in the range were already checked -> no error in specified range return false; } var error = sorted[index]; @@ -47950,19 +48959,19 @@ var ts; return node.modifiers[0].kind; } switch (node.kind) { - case 220 /* ClassDeclaration */: return 73 /* ClassKeyword */; - case 221 /* InterfaceDeclaration */: return 107 /* InterfaceKeyword */; - case 219 /* FunctionDeclaration */: return 87 /* FunctionKeyword */; - case 223 /* EnumDeclaration */: return 223 /* EnumDeclaration */; - case 148 /* GetAccessor */: return 123 /* GetKeyword */; - case 149 /* SetAccessor */: return 130 /* SetKeyword */; - case 146 /* MethodDeclaration */: + case 221 /* ClassDeclaration */: return 73 /* ClassKeyword */; + case 222 /* InterfaceDeclaration */: return 107 /* InterfaceKeyword */; + case 220 /* FunctionDeclaration */: return 87 /* FunctionKeyword */; + case 224 /* EnumDeclaration */: return 224 /* EnumDeclaration */; + case 149 /* GetAccessor */: return 123 /* GetKeyword */; + case 150 /* SetAccessor */: return 131 /* SetKeyword */; + case 147 /* MethodDeclaration */: if (node.asteriskToken) { return 37 /* AsteriskToken */; } // fall-through - case 144 /* PropertyDeclaration */: - case 141 /* Parameter */: + case 145 /* PropertyDeclaration */: + case 142 /* Parameter */: return node.name.kind; } } @@ -48037,12 +49046,12 @@ var ts; // a useful observations when tracking context node // / // [a] - // / | \ + // / | \ // [b] [c] [d] - // node 'a' is a context node for nodes 'b', 'c', 'd' + // node 'a' is a context node for nodes 'b', 'c', 'd' // except for the leftmost leaf token in [b] - in this case context node ('e') is located somewhere above 'a' // this rule can be applied recursively to child nodes of 'a'. - // + // // context node is set to parent node value after processing every child node // context node is set to parent of the token after processing every token var childContextNode = contextNode; @@ -48061,7 +49070,7 @@ var ts; } consumeTokenAndAdvanceScanner(tokenInfo, node, nodeDynamicIndentation); } - function processChildNode(child, inheritedIndentation, parent, parentDynamicIndentation, parentStartLine, undecoratedParentStartLine, isListItem) { + function processChildNode(child, inheritedIndentation, parent, parentDynamicIndentation, parentStartLine, undecoratedParentStartLine, isListItem, isFirstListItem) { var childStartPos = child.getStart(sourceFile); var childStartLine = sourceFile.getLineAndCharacterOfPosition(childStartPos).line; var undecoratedChildStartLine = childStartLine; @@ -48102,10 +49111,13 @@ var ts; consumeTokenAndAdvanceScanner(tokenInfo, node, parentDynamicIndentation, child); return inheritedIndentation; } - var effectiveParentStartLine = child.kind === 142 /* Decorator */ ? childStartLine : undecoratedParentStartLine; + var effectiveParentStartLine = child.kind === 143 /* Decorator */ ? childStartLine : undecoratedParentStartLine; var childIndentation = computeIndentation(child, childStartLine, childIndentationAmount, node, parentDynamicIndentation, effectiveParentStartLine); processNode(child, childContextNode, childStartLine, undecoratedChildStartLine, childIndentation.indentation, childIndentation.delta); childContextNode = node; + if (isFirstListItem && parent.kind === 170 /* ArrayLiteralExpression */ && inheritedIndentation === -1 /* Unknown */) { + inheritedIndentation = childIndentation.indentation; + } return inheritedIndentation; } function processChildNodes(nodes, parent, parentStartLine, parentDynamicIndentation) { @@ -48135,16 +49147,16 @@ var ts; } } var inheritedIndentation = -1 /* Unknown */; - for (var _i = 0, nodes_7 = nodes; _i < nodes_7.length; _i++) { - var child = nodes_7[_i]; - inheritedIndentation = processChildNode(child, inheritedIndentation, node, listDynamicIndentation, startLine, startLine, /*isListElement*/ true); + for (var i = 0; i < nodes.length; i++) { + var child = nodes[i]; + inheritedIndentation = processChildNode(child, inheritedIndentation, node, listDynamicIndentation, startLine, startLine, /*isListElement*/ true, /*isFirstListItem*/ i === 0); } if (listEndToken !== 0 /* Unknown */) { if (formattingScanner.isOnToken()) { var tokenInfo = formattingScanner.readTokenInfo(parent); // consume the list end token only if it is still belong to the parent // there might be the case when current token matches end token but does not considered as one - // function (x: function) <-- + // function (x: function) <-- // without this check close paren will be interpreted as list end token for function expression which is wrong if (tokenInfo.token.kind === listEndToken && ts.rangeContainsRange(parent, tokenInfo.token)) { // consume list end token @@ -48190,24 +49202,24 @@ var ts; var tokenIndentation = (isTokenInRange && !rangeContainsError(currentTokenInfo.token)) ? dynamicIndentation.getIndentationForToken(tokenStart.line, currentTokenInfo.token.kind, container) : -1 /* Unknown */; + var indentNextTokenOrTrivia = true; if (currentTokenInfo.leadingTrivia) { var commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind, tokenIndentation, container); - var indentNextTokenOrTrivia = true; for (var _i = 0, _a = currentTokenInfo.leadingTrivia; _i < _a.length; _i++) { var triviaItem = _a[_i]; - if (!ts.rangeContainsRange(originalRange, triviaItem)) { - continue; - } + var triviaInRange = ts.rangeContainsRange(originalRange, triviaItem); switch (triviaItem.kind) { case 3 /* MultiLineCommentTrivia */: - indentMultilineComment(triviaItem, commentIndentation, /*firstLineIsIndented*/ !indentNextTokenOrTrivia); + if (triviaInRange) { + indentMultilineComment(triviaItem, commentIndentation, /*firstLineIsIndented*/ !indentNextTokenOrTrivia); + } indentNextTokenOrTrivia = false; break; case 2 /* SingleLineCommentTrivia */: - if (indentNextTokenOrTrivia) { + if (indentNextTokenOrTrivia && triviaInRange) { insertIndentation(triviaItem.pos, commentIndentation, /*lineAdded*/ false); - indentNextTokenOrTrivia = false; } + indentNextTokenOrTrivia = false; break; case 4 /* NewLineTrivia */: indentNextTokenOrTrivia = true; @@ -48216,7 +49228,7 @@ var ts; } } // indent token only if is it is in target range and does not overlap with any error ranges - if (tokenIndentation !== -1 /* Unknown */) { + if (tokenIndentation !== -1 /* Unknown */ && indentNextTokenOrTrivia) { insertIndentation(currentTokenInfo.token.pos, tokenIndentation, lineAdded); lastIndentedLine = tokenStart.line; indentationOnLastIndentedLine = tokenIndentation; @@ -48264,7 +49276,7 @@ var ts; applyRuleEdits(rule, previousItem, previousStartLine, currentItem, currentStartLine); if (rule.Operation.Action & (2 /* Space */ | 8 /* Delete */) && currentStartLine !== previousStartLine) { lineAdded = false; - // Handle the case where the next line is moved to be the end of this line. + // Handle the case where the next line is moved to be the end of this line. // In this case we don't indent the next line in the next pass. if (currentParent.getStart(sourceFile) === currentItem.pos) { dynamicIndentation.recomputeIndentation(/*lineAdded*/ false); @@ -48272,7 +49284,7 @@ var ts; } else if (rule.Operation.Action & 4 /* NewLine */ && currentStartLine === previousStartLine) { lineAdded = true; - // Handle the case where token2 is moved to the new line. + // Handle the case where token2 is moved to the new line. // In this case we indent token2 in the next pass but we set // sameLineIndent flag to notify the indenter that the indentation is within the line. if (currentParent.getStart(sourceFile) === currentItem.pos) { @@ -48300,12 +49312,15 @@ var ts; } else { var tokenStart = sourceFile.getLineAndCharacterOfPosition(pos); - if (indentation !== tokenStart.character) { - var startLinePosition = ts.getStartPositionOfLine(tokenStart.line, sourceFile); + var startLinePosition = ts.getStartPositionOfLine(tokenStart.line, sourceFile); + if (indentation !== tokenStart.character || indentationIsDifferent(indentationString, startLinePosition)) { recordReplace(startLinePosition, tokenStart.character, indentationString); } } } + function indentationIsDifferent(indentationString, startLinePosition) { + return indentationString !== sourceFile.text.substr(startLinePosition, indentationString.length); + } function indentMultilineComment(commentRange, indentation, firstLineIsIndented) { // split comment in lines var startLine = sourceFile.getLineAndCharacterOfPosition(commentRange.pos).line; @@ -48446,20 +49461,20 @@ var ts; } function isSomeBlock(kind) { switch (kind) { - case 198 /* Block */: - case 225 /* ModuleBlock */: + case 199 /* Block */: + case 226 /* ModuleBlock */: return true; } return false; } function getOpenTokenForList(node, list) { switch (node.kind) { - case 147 /* Constructor */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 179 /* ArrowFunction */: + case 148 /* Constructor */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 180 /* ArrowFunction */: if (node.typeParameters === list) { return 25 /* LessThanToken */; } @@ -48467,8 +49482,8 @@ var ts; return 17 /* OpenParenToken */; } break; - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: if (node.typeArguments === list) { return 25 /* LessThanToken */; } @@ -48476,7 +49491,7 @@ var ts; return 17 /* OpenParenToken */; } break; - case 154 /* TypeReference */: + case 155 /* TypeReference */: if (node.typeArguments === list) { return 25 /* LessThanToken */; } @@ -48592,7 +49607,7 @@ var ts; var lineStart = ts.getLineStartPositionForPosition(current_1, sourceFile); return SmartIndenter.findFirstNonWhitespaceColumn(lineStart, current_1, sourceFile, options); } - if (precedingToken.kind === 24 /* CommaToken */ && precedingToken.parent.kind !== 186 /* BinaryExpression */) { + if (precedingToken.kind === 24 /* CommaToken */ && precedingToken.parent.kind !== 187 /* BinaryExpression */) { // previous token is comma that separates items in list - find the previous item and try to derive indentation from it var actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options); if (actualIndentation !== -1 /* Unknown */) { @@ -48711,7 +49726,7 @@ var ts; // - parent is SourceFile - by default immediate children of SourceFile are not indented except when user indents them manually // - parent and child are not on the same line var useActualIndentation = (ts.isDeclaration(current) || ts.isStatement(current)) && - (parent.kind === 255 /* SourceFile */ || !parentAndChildShareLine); + (parent.kind === 256 /* SourceFile */ || !parentAndChildShareLine); if (!useActualIndentation) { return -1 /* Unknown */; } @@ -48744,7 +49759,7 @@ var ts; return sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); } function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) { - if (parent.kind === 202 /* IfStatement */ && parent.elseStatement === child) { + if (parent.kind === 203 /* IfStatement */ && parent.elseStatement === child) { var elseKeyword = ts.findChildOfKind(parent, 80 /* ElseKeyword */, sourceFile); ts.Debug.assert(elseKeyword !== undefined); var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line; @@ -48756,23 +49771,23 @@ var ts; function getContainingList(node, sourceFile) { if (node.parent) { switch (node.parent.kind) { - case 154 /* TypeReference */: + case 155 /* TypeReference */: if (node.parent.typeArguments && ts.rangeContainsStartEnd(node.parent.typeArguments, node.getStart(sourceFile), node.getEnd())) { return node.parent.typeArguments; } break; - case 170 /* ObjectLiteralExpression */: + case 171 /* ObjectLiteralExpression */: return node.parent.properties; - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: return node.parent.elements; - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: { + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: { var start = node.getStart(sourceFile); if (node.parent.typeParameters && ts.rangeContainsStartEnd(node.parent.typeParameters, start, node.getEnd())) { @@ -48783,8 +49798,8 @@ var ts; } break; } - case 174 /* NewExpression */: - case 173 /* CallExpression */: { + case 175 /* NewExpression */: + case 174 /* CallExpression */: { var start = node.getStart(sourceFile); if (node.parent.typeArguments && ts.rangeContainsStartEnd(node.parent.typeArguments, start, node.getEnd())) { @@ -48814,8 +49829,8 @@ var ts; if (node.kind === 18 /* CloseParenToken */) { return -1 /* Unknown */; } - if (node.parent && (node.parent.kind === 173 /* CallExpression */ || - node.parent.kind === 174 /* NewExpression */) && + if (node.parent && (node.parent.kind === 174 /* CallExpression */ || + node.parent.kind === 175 /* NewExpression */) && node.parent.expression !== node) { var fullCallOrNewExpression = node.parent.expression; var startingExpression = getStartingExpression(fullCallOrNewExpression); @@ -48833,10 +49848,10 @@ var ts; function getStartingExpression(node) { while (true) { switch (node.kind) { - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 171 /* PropertyAccessExpression */: - case 172 /* ElementAccessExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: + case 172 /* PropertyAccessExpression */: + case 173 /* ElementAccessExpression */: node = node.expression; break; default: @@ -48900,45 +49915,45 @@ var ts; SmartIndenter.findFirstNonWhitespaceColumn = findFirstNonWhitespaceColumn; function nodeContentIsAlwaysIndented(kind) { switch (kind) { - case 201 /* ExpressionStatement */: - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 169 /* ArrayLiteralExpression */: - case 198 /* Block */: - case 225 /* ModuleBlock */: - case 170 /* ObjectLiteralExpression */: - case 158 /* TypeLiteral */: - case 160 /* TupleType */: - case 226 /* CaseBlock */: - case 249 /* DefaultClause */: - case 248 /* CaseClause */: - case 177 /* ParenthesizedExpression */: - case 171 /* PropertyAccessExpression */: - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 199 /* VariableStatement */: - case 217 /* VariableDeclaration */: - case 234 /* ExportAssignment */: - case 210 /* ReturnStatement */: - case 187 /* ConditionalExpression */: - case 167 /* ArrayBindingPattern */: - case 166 /* ObjectBindingPattern */: - case 242 /* JsxOpeningElement */: - case 241 /* JsxSelfClosingElement */: - case 247 /* JsxExpression */: - case 145 /* MethodSignature */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 141 /* Parameter */: - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 163 /* ParenthesizedType */: - case 175 /* TaggedTemplateExpression */: - case 183 /* AwaitExpression */: - case 232 /* NamedImports */: + case 202 /* ExpressionStatement */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 170 /* ArrayLiteralExpression */: + case 199 /* Block */: + case 226 /* ModuleBlock */: + case 171 /* ObjectLiteralExpression */: + case 159 /* TypeLiteral */: + case 161 /* TupleType */: + case 227 /* CaseBlock */: + case 250 /* DefaultClause */: + case 249 /* CaseClause */: + case 178 /* ParenthesizedExpression */: + case 172 /* PropertyAccessExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: + case 200 /* VariableStatement */: + case 218 /* VariableDeclaration */: + case 235 /* ExportAssignment */: + case 211 /* ReturnStatement */: + case 188 /* ConditionalExpression */: + case 168 /* ArrayBindingPattern */: + case 167 /* ObjectBindingPattern */: + case 243 /* JsxOpeningElement */: + case 242 /* JsxSelfClosingElement */: + case 248 /* JsxExpression */: + case 146 /* MethodSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 142 /* Parameter */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 164 /* ParenthesizedType */: + case 176 /* TaggedTemplateExpression */: + case 184 /* AwaitExpression */: + case 233 /* NamedImports */: return true; } return false; @@ -48947,22 +49962,22 @@ var ts; function nodeWillIndentChild(parent, child, indentByDefault) { var childKind = child ? child.kind : 0 /* Unknown */; switch (parent.kind) { - case 203 /* DoStatement */: - case 204 /* WhileStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 205 /* ForStatement */: - case 202 /* IfStatement */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 146 /* MethodDeclaration */: - case 179 /* ArrowFunction */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - return childKind !== 198 /* Block */; - case 240 /* JsxElement */: - return childKind !== 244 /* JsxClosingElement */; + case 204 /* DoStatement */: + case 205 /* WhileStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 206 /* ForStatement */: + case 203 /* IfStatement */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 147 /* MethodDeclaration */: + case 180 /* ArrowFunction */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + return childKind !== 199 /* Block */; + case 241 /* JsxElement */: + return childKind !== 245 /* JsxClosingElement */; } // No explicit rule for given nodes so the result will follow the default value argument return indentByDefault; @@ -48992,7 +50007,7 @@ var ts; var ts; (function (ts) { /** The version of the language service API */ - ts.servicesVersion = "0.4"; + ts.servicesVersion = "0.5"; var ScriptSnapshot; (function (ScriptSnapshot) { var StringScriptSnapshot = (function () { @@ -49110,11 +50125,11 @@ var ts; return pos; }; NodeObject.prototype.createSyntaxList = function (nodes) { - var list = createNode(278 /* SyntaxList */, nodes.pos, nodes.end, 0, this); + var list = createNode(279 /* SyntaxList */, nodes.pos, nodes.end, 0, this); list._children = []; var pos = nodes.pos; - for (var _i = 0, nodes_8 = nodes; _i < nodes_8.length; _i++) { - var node = nodes_8[_i]; + for (var _i = 0, nodes_7 = nodes; _i < nodes_7.length; _i++) { + var node = nodes_7[_i]; if (pos < node.pos) { pos = this.addSyntheticNodes(list._children, pos, node.pos); } @@ -49129,7 +50144,7 @@ var ts; NodeObject.prototype.createChildren = function (sourceFile) { var _this = this; var children; - if (this.kind >= 138 /* FirstNode */) { + if (this.kind >= 139 /* FirstNode */) { scanner.setText((sourceFile || this.getSourceFile()).text); children = []; var pos_3 = this.pos; @@ -49176,7 +50191,7 @@ var ts; return undefined; } var child = children[0]; - return child.kind < 138 /* FirstNode */ ? child : child.getFirstToken(sourceFile); + return child.kind < 139 /* FirstNode */ ? child : child.getFirstToken(sourceFile); }; NodeObject.prototype.getLastToken = function (sourceFile) { var children = this.getChildren(sourceFile); @@ -49184,7 +50199,7 @@ var ts; if (!child) { return undefined; } - return child.kind < 138 /* FirstNode */ ? child : child.getLastToken(sourceFile); + return child.kind < 139 /* FirstNode */ ? child : child.getLastToken(sourceFile); }; return NodeObject; }()); @@ -49233,7 +50248,7 @@ var ts; if (ts.indexOf(declarations, declaration) === indexOfDeclaration) { var sourceFileOfDeclaration_1 = ts.getSourceFileOfNode(declaration); // If it is parameter - try and get the jsDoc comment with @param tag from function declaration's jsDoc comments - if (canUseParsedParamTagComments && declaration.kind === 141 /* Parameter */) { + if (canUseParsedParamTagComments && declaration.kind === 142 /* Parameter */) { ts.forEach(getJsDocCommentTextRange(declaration.parent, sourceFileOfDeclaration_1), function (jsDocCommentTextRange) { var cleanedParamJsDocComment = getCleanedParamJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration_1); if (cleanedParamJsDocComment) { @@ -49242,15 +50257,15 @@ var ts; }); } // If this is left side of dotted module declaration, there is no doc comments associated with this node - if (declaration.kind === 224 /* ModuleDeclaration */ && declaration.body.kind === 224 /* ModuleDeclaration */) { + if (declaration.kind === 225 /* ModuleDeclaration */ && declaration.body.kind === 225 /* ModuleDeclaration */) { return; } // If this is dotted module name, get the doc comments from the parent - while (declaration.kind === 224 /* ModuleDeclaration */ && declaration.parent.kind === 224 /* ModuleDeclaration */) { + while (declaration.kind === 225 /* ModuleDeclaration */ && declaration.parent.kind === 225 /* ModuleDeclaration */) { declaration = declaration.parent; } // Get the cleaned js doc comment text from the declaration - ts.forEach(getJsDocCommentTextRange(declaration.kind === 217 /* VariableDeclaration */ ? declaration.parent.parent : declaration, sourceFileOfDeclaration_1), function (jsDocCommentTextRange) { + ts.forEach(getJsDocCommentTextRange(declaration.kind === 218 /* VariableDeclaration */ ? declaration.parent.parent : declaration, sourceFileOfDeclaration_1), function (jsDocCommentTextRange) { var cleanedJsDocComment = getCleanedJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration_1); if (cleanedJsDocComment) { ts.addRange(jsDocCommentParts, cleanedJsDocComment); @@ -49524,6 +50539,9 @@ var ts; ? this.checker.getBaseTypes(this) : undefined; }; + TypeObject.prototype.getNonNullableType = function () { + return this.checker.getNonNullableType(this); + }; return TypeObject; }()); var SignatureObject = (function () { @@ -49595,9 +50613,9 @@ var ts; if (result_2 !== undefined) { return result_2; } - if (declaration.name.kind === 139 /* ComputedPropertyName */) { + if (declaration.name.kind === 140 /* ComputedPropertyName */) { var expr = declaration.name.expression; - if (expr.kind === 171 /* PropertyAccessExpression */) { + if (expr.kind === 172 /* PropertyAccessExpression */) { return expr.name.text; } return getTextOfIdentifierOrLiteral(expr); @@ -49617,9 +50635,10 @@ var ts; } function visit(node) { switch (node.kind) { - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: var functionDeclaration = node; var declarationName = getDeclarationName(functionDeclaration); if (declarationName) { @@ -49639,60 +50658,53 @@ var ts; ts.forEachChild(node, visit); } break; - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 223 /* EnumDeclaration */: - case 224 /* ModuleDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 237 /* ExportSpecifier */: - case 233 /* ImportSpecifier */: - case 228 /* ImportEqualsDeclaration */: - case 230 /* ImportClause */: - case 231 /* NamespaceImport */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 158 /* TypeLiteral */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 224 /* EnumDeclaration */: + case 225 /* ModuleDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 238 /* ExportSpecifier */: + case 234 /* ImportSpecifier */: + case 229 /* ImportEqualsDeclaration */: + case 231 /* ImportClause */: + case 232 /* NamespaceImport */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 159 /* TypeLiteral */: addDeclaration(node); - // fall through - case 147 /* Constructor */: - case 199 /* VariableStatement */: - case 218 /* VariableDeclarationList */: - case 166 /* ObjectBindingPattern */: - case 167 /* ArrayBindingPattern */: - case 225 /* ModuleBlock */: ts.forEachChild(node, visit); break; - case 198 /* Block */: - if (ts.isFunctionBlock(node)) { - ts.forEachChild(node, visit); - } - break; - case 141 /* Parameter */: - // Only consider properties defined as constructor parameters - if (!(node.flags & 28 /* AccessibilityModifier */)) { + case 142 /* Parameter */: + // Only consider parameter properties + if (!(node.flags & 92 /* ParameterPropertyModifier */)) { break; } // fall through - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: - if (ts.isBindingPattern(node.name)) { - ts.forEachChild(node.name, visit); + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: { + var decl = node; + if (ts.isBindingPattern(decl.name)) { + ts.forEachChild(decl.name, visit); break; } - case 254 /* EnumMember */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + if (decl.initializer) + visit(decl.initializer); + } + case 255 /* EnumMember */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: addDeclaration(node); break; - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: // Handle named exports case e.g.: // export {a, b as B} from "mod"; if (node.exportClause) { ts.forEach(node.exportClause.elements, visit); } break; - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: var importClause = node.importClause; if (importClause) { // Handle default import case e.g.: @@ -49704,7 +50716,7 @@ var ts; // import * as NS from "mod"; // import {a, b as B} from "mod"; if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 231 /* NamespaceImport */) { + if (importClause.namedBindings.kind === 232 /* NamespaceImport */) { addDeclaration(importClause.namedBindings); } else { @@ -49713,6 +50725,8 @@ var ts; } } break; + default: + ts.forEachChild(node, visit); } } }; @@ -49926,16 +50940,16 @@ var ts; } return ts.forEach(symbol.declarations, function (declaration) { // Function expressions are local - if (declaration.kind === 178 /* FunctionExpression */) { + if (declaration.kind === 179 /* FunctionExpression */) { return true; } - if (declaration.kind !== 217 /* VariableDeclaration */ && declaration.kind !== 219 /* FunctionDeclaration */) { + if (declaration.kind !== 218 /* VariableDeclaration */ && declaration.kind !== 220 /* FunctionDeclaration */) { return false; } // If the parent is not sourceFile or module block it is local variable - for (var parent_12 = declaration.parent; !ts.isFunctionBlock(parent_12); parent_12 = parent_12.parent) { + for (var parent_15 = declaration.parent; !ts.isFunctionBlock(parent_15); parent_15 = parent_15.parent) { // Reached source file or module block - if (parent_12.kind === 255 /* SourceFile */ || parent_12.kind === 225 /* ModuleBlock */) { + if (parent_15.kind === 256 /* SourceFile */ || parent_15.kind === 226 /* ModuleBlock */) { return false; } } @@ -49995,10 +51009,12 @@ var ts; }; HostCache.prototype.getOrCreateEntry = function (fileName) { var path = ts.toPath(fileName, this.currentDirectory, this.getCanonicalFileName); - if (this.contains(path)) { - return this.getEntry(path); - } - return this.createEntry(fileName, path); + return this.getOrCreateEntryByPath(fileName, path); + }; + HostCache.prototype.getOrCreateEntryByPath = function (fileName, path) { + return this.contains(path) + ? this.getEntry(path) + : this.createEntry(fileName, path); }; HostCache.prototype.getRootFileNames = function () { var fileNames = []; @@ -50068,7 +51084,7 @@ var ts; function transpileModule(input, transpileOptions) { var options = transpileOptions.compilerOptions ? ts.clone(transpileOptions.compilerOptions) : getDefaultCompilerOptions(); options.isolatedModules = true; - // transpileModule does not write anything to disk so there is no need to verify that there are no conflicts between input and output paths. + // transpileModule does not write anything to disk so there is no need to verify that there are no conflicts between input and output paths. options.suppressOutputPathCheck = true; // Filename can be non-ts file. options.allowNonTsExtensions = true; @@ -50091,7 +51107,7 @@ var ts; var sourceMapText; // Create a compilerHost object to allow the compiler to read and write files var compilerHost = { - getSourceFile: function (fileName, target) { return fileName === ts.normalizeSlashes(inputFileName) ? sourceFile : undefined; }, + getSourceFile: function (fileName, target) { return fileName === ts.normalizePath(inputFileName) ? sourceFile : undefined; }, writeFile: function (name, text, writeByteOrderMark) { if (ts.fileExtensionIs(name, ".map")) { ts.Debug.assert(sourceMapText === undefined, "Unexpected multiple source map outputs for the file '" + name + "'"); @@ -50198,11 +51214,10 @@ var ts; // for those settings. var buckets = {}; var getCanonicalFileName = ts.createGetCanonicalFileName(!!useCaseSensitiveFileNames); - function getKeyFromCompilationSettings(settings) { - return "_" + settings.target + "|" + settings.module + "|" + settings.noResolve + "|" + settings.jsx + +"|" + settings.allowJs; + function getKeyForCompilationSettings(settings) { + return ("_" + settings.target + "|" + settings.module + "|" + settings.noResolve + "|" + settings.jsx + "|" + settings.allowJs + "|" + settings.baseUrl + "|" + settings.typesRoot + "|" + settings.typesSearchPaths + "|" + JSON.stringify(settings.rootDirs) + "|" + JSON.stringify(settings.paths)); } - function getBucketForCompilationSettings(settings, createIfMissing) { - var key = getKeyFromCompilationSettings(settings); + function getBucketForCompilationSettings(key, createIfMissing) { var bucket = ts.lookUp(buckets, key); if (!bucket && createIfMissing) { buckets[key] = bucket = ts.createFileMap(); @@ -50229,14 +51244,23 @@ var ts; return JSON.stringify(bucketInfoArray, undefined, 2); } function acquireDocument(fileName, compilationSettings, scriptSnapshot, version, scriptKind) { - return acquireOrUpdateDocument(fileName, compilationSettings, scriptSnapshot, version, /*acquiring*/ true, scriptKind); + var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); + var key = getKeyForCompilationSettings(compilationSettings); + return acquireDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind); + } + function acquireDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind) { + return acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, /*acquiring*/ true, scriptKind); } function updateDocument(fileName, compilationSettings, scriptSnapshot, version, scriptKind) { - return acquireOrUpdateDocument(fileName, compilationSettings, scriptSnapshot, version, /*acquiring*/ false, scriptKind); - } - function acquireOrUpdateDocument(fileName, compilationSettings, scriptSnapshot, version, acquiring, scriptKind) { - var bucket = getBucketForCompilationSettings(compilationSettings, /*createIfMissing*/ true); var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); + var key = getKeyForCompilationSettings(compilationSettings); + return updateDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind); + } + function updateDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind) { + return acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, /*acquiring*/ false, scriptKind); + } + function acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, acquiring, scriptKind) { + var bucket = getBucketForCompilationSettings(key, /*createIfMissing*/ true); var entry = bucket.get(path); if (!entry) { ts.Debug.assert(acquiring, "How could we be trying to update a document that the registry doesn't have?"); @@ -50268,9 +51292,13 @@ var ts; return entry.sourceFile; } function releaseDocument(fileName, compilationSettings) { - var bucket = getBucketForCompilationSettings(compilationSettings, /*createIfMissing*/ false); - ts.Debug.assert(bucket !== undefined); var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); + var key = getKeyForCompilationSettings(compilationSettings); + return releaseDocumentWithKey(path, key); + } + function releaseDocumentWithKey(path, key) { + var bucket = getBucketForCompilationSettings(key, /*createIfMissing*/ false); + ts.Debug.assert(bucket !== undefined); var entry = bucket.get(path); entry.languageServiceRefCount--; ts.Debug.assert(entry.languageServiceRefCount >= 0); @@ -50280,9 +51308,13 @@ var ts; } return { acquireDocument: acquireDocument, + acquireDocumentWithKey: acquireDocumentWithKey, updateDocument: updateDocument, + updateDocumentWithKey: updateDocumentWithKey, releaseDocument: releaseDocument, - reportStats: reportStats + releaseDocumentWithKey: releaseDocumentWithKey, + reportStats: reportStats, + getKeyForCompilationSettings: getKeyForCompilationSettings }; } ts.createDocumentRegistry = createDocumentRegistry; @@ -50382,7 +51414,7 @@ var ts; else { if (token === 69 /* Identifier */ || ts.isKeyword(token)) { token = nextToken(); - if (token === 135 /* FromKeyword */) { + if (token === 136 /* FromKeyword */) { token = nextToken(); if (token === 9 /* StringLiteral */) { // import d from "mod"; @@ -50413,7 +51445,7 @@ var ts; } if (token === 16 /* CloseBraceToken */) { token = nextToken(); - if (token === 135 /* FromKeyword */) { + if (token === 136 /* FromKeyword */) { token = nextToken(); if (token === 9 /* StringLiteral */) { // import {a as A} from "mod"; @@ -50429,7 +51461,7 @@ var ts; token = nextToken(); if (token === 69 /* Identifier */ || ts.isKeyword(token)) { token = nextToken(); - if (token === 135 /* FromKeyword */) { + if (token === 136 /* FromKeyword */) { token = nextToken(); if (token === 9 /* StringLiteral */) { // import * as NS from "mod" @@ -50459,7 +51491,7 @@ var ts; } if (token === 16 /* CloseBraceToken */) { token = nextToken(); - if (token === 135 /* FromKeyword */) { + if (token === 136 /* FromKeyword */) { token = nextToken(); if (token === 9 /* StringLiteral */) { // export {a as A} from "mod"; @@ -50471,7 +51503,7 @@ var ts; } else if (token === 37 /* AsteriskToken */) { token = nextToken(); - if (token === 135 /* FromKeyword */) { + if (token === 136 /* FromKeyword */) { token = nextToken(); if (token === 9 /* StringLiteral */) { // export * from "mod" @@ -50496,7 +51528,7 @@ var ts; } function tryConsumeRequireCall(skipCurrentToken) { var token = skipCurrentToken ? nextToken() : scanner.getToken(); - if (token === 128 /* RequireKeyword */) { + if (token === 129 /* RequireKeyword */) { token = nextToken(); if (token === 17 /* OpenParenToken */) { token = nextToken(); @@ -50619,7 +51651,7 @@ var ts; /// Helpers function getTargetLabel(referenceNode, labelName) { while (referenceNode) { - if (referenceNode.kind === 213 /* LabeledStatement */ && referenceNode.label.text === labelName) { + if (referenceNode.kind === 214 /* LabeledStatement */ && referenceNode.label.text === labelName) { return referenceNode.label; } referenceNode = referenceNode.parent; @@ -50628,12 +51660,12 @@ var ts; } function isJumpStatementTarget(node) { return node.kind === 69 /* Identifier */ && - (node.parent.kind === 209 /* BreakStatement */ || node.parent.kind === 208 /* ContinueStatement */) && + (node.parent.kind === 210 /* BreakStatement */ || node.parent.kind === 209 /* ContinueStatement */) && node.parent.label === node; } function isLabelOfLabeledStatement(node) { return node.kind === 69 /* Identifier */ && - node.parent.kind === 213 /* LabeledStatement */ && + node.parent.kind === 214 /* LabeledStatement */ && node.parent.label === node; } /** @@ -50641,7 +51673,7 @@ var ts; * Note: 'node' cannot be a SourceFile. */ function isLabeledBy(node, labelName) { - for (var owner = node.parent; owner.kind === 213 /* LabeledStatement */; owner = owner.parent) { + for (var owner = node.parent; owner.kind === 214 /* LabeledStatement */; owner = owner.parent) { if (owner.label.text === labelName) { return true; } @@ -50652,50 +51684,74 @@ var ts; return isLabelOfLabeledStatement(node) || isJumpStatementTarget(node); } function isRightSideOfQualifiedName(node) { - return node.parent.kind === 138 /* QualifiedName */ && node.parent.right === node; + return node.parent.kind === 139 /* QualifiedName */ && node.parent.right === node; } function isRightSideOfPropertyAccess(node) { - return node && node.parent && node.parent.kind === 171 /* PropertyAccessExpression */ && node.parent.name === node; + return node && node.parent && node.parent.kind === 172 /* PropertyAccessExpression */ && node.parent.name === node; } function isCallExpressionTarget(node) { if (isRightSideOfPropertyAccess(node)) { node = node.parent; } - return node && node.parent && node.parent.kind === 173 /* CallExpression */ && node.parent.expression === node; + return node && node.parent && node.parent.kind === 174 /* CallExpression */ && node.parent.expression === node; } function isNewExpressionTarget(node) { if (isRightSideOfPropertyAccess(node)) { node = node.parent; } - return node && node.parent && node.parent.kind === 174 /* NewExpression */ && node.parent.expression === node; + return node && node.parent && node.parent.kind === 175 /* NewExpression */ && node.parent.expression === node; } function isNameOfModuleDeclaration(node) { - return node.parent.kind === 224 /* ModuleDeclaration */ && node.parent.name === node; + return node.parent.kind === 225 /* ModuleDeclaration */ && node.parent.name === node; } function isNameOfFunctionDeclaration(node) { return node.kind === 69 /* Identifier */ && ts.isFunctionLike(node.parent) && node.parent.name === node; } - /** Returns true if node is a name of an object literal property, e.g. "a" in x = { "a": 1 } */ - function isNameOfPropertyAssignment(node) { - return (node.kind === 69 /* Identifier */ || node.kind === 9 /* StringLiteral */ || node.kind === 8 /* NumericLiteral */) && - (node.parent.kind === 252 /* PropertyAssignment */ || node.parent.kind === 253 /* ShorthandPropertyAssignment */) && node.parent.name === node; + function isObjectLiteralPropertyDeclaration(node) { + switch (node.kind) { + case 253 /* PropertyAssignment */: + case 254 /* ShorthandPropertyAssignment */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + return true; + } + return false; + } + /** + * Returns the containing object literal property declaration given a possible name node, e.g. "a" in x = { "a": 1 } + */ + function getContainingObjectLiteralElement(node) { + switch (node.kind) { + case 9 /* StringLiteral */: + case 8 /* NumericLiteral */: + if (node.parent.kind === 140 /* ComputedPropertyName */) { + return isObjectLiteralPropertyDeclaration(node.parent.parent) ? node.parent.parent : undefined; + } + // intential fall through + case 69 /* Identifier */: + return isObjectLiteralPropertyDeclaration(node.parent) && node.parent.name === node ? node.parent : undefined; + } + return undefined; } function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) { if (node.kind === 9 /* StringLiteral */ || node.kind === 8 /* NumericLiteral */) { switch (node.parent.kind) { - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 252 /* PropertyAssignment */: - case 254 /* EnumMember */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 224 /* ModuleDeclaration */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 253 /* PropertyAssignment */: + case 255 /* EnumMember */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 225 /* ModuleDeclaration */: return node.parent.name === node; - case 172 /* ElementAccessExpression */: + case 173 /* ElementAccessExpression */: return node.parent.argumentExpression === node; + case 140 /* ComputedPropertyName */: + return true; } } return false; @@ -50753,7 +51809,7 @@ var ts; })(BreakContinueSearchType || (BreakContinueSearchType = {})); // A cache of completion entries for keywords, these do not change between sessions var keywordCompletions = []; - for (var i = 70 /* FirstKeyword */; i <= 137 /* LastKeyword */; i++) { + for (var i = 70 /* FirstKeyword */; i <= 138 /* LastKeyword */; i++) { keywordCompletions.push({ name: ts.tokenToString(i), kind: ScriptElementKind.keyword, @@ -50768,17 +51824,17 @@ var ts; return undefined; } switch (node.kind) { - case 255 /* SourceFile */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 224 /* ModuleDeclaration */: + case 256 /* SourceFile */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 225 /* ModuleDeclaration */: return node; } } @@ -50786,38 +51842,42 @@ var ts; ts.getContainerNode = getContainerNode; /* @internal */ function getNodeKind(node) { switch (node.kind) { - case 224 /* ModuleDeclaration */: return ScriptElementKind.moduleElement; - case 220 /* ClassDeclaration */: return ScriptElementKind.classElement; - case 221 /* InterfaceDeclaration */: return ScriptElementKind.interfaceElement; - case 222 /* TypeAliasDeclaration */: return ScriptElementKind.typeElement; - case 223 /* EnumDeclaration */: return ScriptElementKind.enumElement; - case 217 /* VariableDeclaration */: + case 225 /* ModuleDeclaration */: return ScriptElementKind.moduleElement; + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + return ScriptElementKind.classElement; + case 222 /* InterfaceDeclaration */: return ScriptElementKind.interfaceElement; + case 223 /* TypeAliasDeclaration */: return ScriptElementKind.typeElement; + case 224 /* EnumDeclaration */: return ScriptElementKind.enumElement; + case 218 /* VariableDeclaration */: return ts.isConst(node) ? ScriptElementKind.constElement : ts.isLet(node) ? ScriptElementKind.letElement : ScriptElementKind.variableElement; - case 219 /* FunctionDeclaration */: return ScriptElementKind.functionElement; - case 148 /* GetAccessor */: return ScriptElementKind.memberGetAccessorElement; - case 149 /* SetAccessor */: return ScriptElementKind.memberSetAccessorElement; - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + return ScriptElementKind.functionElement; + case 149 /* GetAccessor */: return ScriptElementKind.memberGetAccessorElement; + case 150 /* SetAccessor */: return ScriptElementKind.memberSetAccessorElement; + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: return ScriptElementKind.memberFunctionElement; - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return ScriptElementKind.memberVariableElement; - case 152 /* IndexSignature */: return ScriptElementKind.indexSignatureElement; - case 151 /* ConstructSignature */: return ScriptElementKind.constructSignatureElement; - case 150 /* CallSignature */: return ScriptElementKind.callSignatureElement; - case 147 /* Constructor */: return ScriptElementKind.constructorImplementationElement; - case 140 /* TypeParameter */: return ScriptElementKind.typeParameterElement; - case 254 /* EnumMember */: return ScriptElementKind.variableElement; - case 141 /* Parameter */: return (node.flags & 28 /* AccessibilityModifier */) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement; - case 228 /* ImportEqualsDeclaration */: - case 233 /* ImportSpecifier */: - case 230 /* ImportClause */: - case 237 /* ExportSpecifier */: - case 231 /* NamespaceImport */: + case 153 /* IndexSignature */: return ScriptElementKind.indexSignatureElement; + case 152 /* ConstructSignature */: return ScriptElementKind.constructSignatureElement; + case 151 /* CallSignature */: return ScriptElementKind.callSignatureElement; + case 148 /* Constructor */: return ScriptElementKind.constructorImplementationElement; + case 141 /* TypeParameter */: return ScriptElementKind.typeParameterElement; + case 255 /* EnumMember */: return ScriptElementKind.variableElement; + case 142 /* Parameter */: return (node.flags & 92 /* ParameterPropertyModifier */) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement; + case 229 /* ImportEqualsDeclaration */: + case 234 /* ImportSpecifier */: + case 231 /* ImportClause */: + case 238 /* ExportSpecifier */: + case 232 /* NamespaceImport */: return ScriptElementKind.alias; } return ScriptElementKind.unknown; @@ -50904,6 +51964,7 @@ var ts; // Now create a new compiler var compilerHost = { getSourceFile: getOrCreateSourceFile, + getSourceFileByPath: getOrCreateSourceFileByPath, getCancellationToken: function () { return cancellationToken; }, getCanonicalFileName: getCanonicalFileName, useCaseSensitiveFileNames: function () { return useCaseSensitivefileNames; }, @@ -50937,15 +51998,17 @@ var ts; return host.resolveTypeReferenceDirectives(typeReferenceDirectiveNames, containingFile); }; } + var documentRegistryBucketKey = documentRegistry.getKeyForCompilationSettings(newSettings); var newProgram = ts.createProgram(hostCache.getRootFileNames(), newSettings, compilerHost, program); // Release any files we have acquired in the old program but are // not part of the new program. if (program) { var oldSourceFiles = program.getSourceFiles(); + var oldSettingsKey = documentRegistry.getKeyForCompilationSettings(oldSettings); for (var _i = 0, oldSourceFiles_1 = oldSourceFiles; _i < oldSourceFiles_1.length; _i++) { var oldSourceFile = oldSourceFiles_1[_i]; if (!newProgram.getSourceFile(oldSourceFile.fileName) || changesInCompilationSettingsAffectSyntax) { - documentRegistry.releaseDocument(oldSourceFile.fileName, oldSettings); + documentRegistry.releaseDocumentWithKey(oldSourceFile.path, oldSettingsKey); } } } @@ -50958,11 +52021,14 @@ var ts; program.getTypeChecker(); return; function getOrCreateSourceFile(fileName) { + return getOrCreateSourceFileByPath(fileName, ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + } + function getOrCreateSourceFileByPath(fileName, path) { ts.Debug.assert(hostCache !== undefined); // The program is asking for this file, check first if the host can locate it. // If the host can not locate the file, then it does not exist. return undefined // to the program to allow reporting of errors for missing files. - var hostFileInformation = hostCache.getOrCreateEntry(fileName); + var hostFileInformation = hostCache.getOrCreateEntryByPath(fileName, path); if (!hostFileInformation) { return undefined; } @@ -50971,7 +52037,7 @@ var ts; // can not be reused. we have to dump all syntax trees and create new ones. if (!changesInCompilationSettingsAffectSyntax) { // Check if the old program had this file already - var oldSourceFile = program && program.getSourceFile(fileName); + var oldSourceFile = program && program.getSourceFileByPath(path); if (oldSourceFile) { // We already had a source file for this file name. Go to the registry to // ensure that we get the right up to date version of it. We need this to @@ -50997,12 +52063,12 @@ var ts; // We do not support the scenario where a host can modify a registered // file's script kind, i.e. in one project some file is treated as ".ts" // and in another as ".js" - ts.Debug.assert(hostFileInformation.scriptKind === oldSourceFile.scriptKind, "Registered script kind (" + oldSourceFile.scriptKind + ") should match new script kind (" + hostFileInformation.scriptKind + ") for file: " + fileName); - return documentRegistry.updateDocument(fileName, newSettings, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); + ts.Debug.assert(hostFileInformation.scriptKind === oldSourceFile.scriptKind, "Registered script kind (" + oldSourceFile.scriptKind + ") should match new script kind (" + hostFileInformation.scriptKind + ") for file: " + path); + return documentRegistry.updateDocumentWithKey(fileName, path, newSettings, documentRegistryBucketKey, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); } } // Could not find this file in the old program, create a new SourceFile for it. - return documentRegistry.acquireDocument(fileName, newSettings, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); + return documentRegistry.acquireDocumentWithKey(fileName, path, newSettings, documentRegistryBucketKey, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); } function sourceFileUpToDate(sourceFile) { if (!sourceFile) { @@ -51141,9 +52207,9 @@ var ts; isJsDocTagName = true; } switch (tag.kind) { - case 276 /* JSDocTypeTag */: - case 274 /* JSDocParameterTag */: - case 275 /* JSDocReturnTag */: + case 277 /* JSDocTypeTag */: + case 275 /* JSDocParameterTag */: + case 276 /* JSDocReturnTag */: var tagWithExpression = tag; if (tagWithExpression.typeExpression) { insideJsDocTagExpression = tagWithExpression.typeExpression.pos < position && position < tagWithExpression.typeExpression.end; @@ -51188,13 +52254,13 @@ var ts; log("Returning an empty list because completion was requested in an invalid position."); return undefined; } - var parent_13 = contextToken.parent, kind = contextToken.kind; + var parent_16 = contextToken.parent, kind = contextToken.kind; if (kind === 21 /* DotToken */) { - if (parent_13.kind === 171 /* PropertyAccessExpression */) { + if (parent_16.kind === 172 /* PropertyAccessExpression */) { node = contextToken.parent.expression; isRightOfDot = true; } - else if (parent_13.kind === 138 /* QualifiedName */) { + else if (parent_16.kind === 139 /* QualifiedName */) { node = contextToken.parent.left; isRightOfDot = true; } @@ -51209,7 +52275,7 @@ var ts; isRightOfOpenTag = true; location = contextToken; } - else if (kind === 39 /* SlashToken */ && contextToken.parent.kind === 244 /* JsxClosingElement */) { + else if (kind === 39 /* SlashToken */ && contextToken.parent.kind === 245 /* JsxClosingElement */) { isStartingCloseTag = true; location = contextToken; } @@ -51256,7 +52322,7 @@ var ts; // Right of dot member completion list isMemberCompletion = true; isNewIdentifierLocation = false; - if (node.kind === 69 /* Identifier */ || node.kind === 138 /* QualifiedName */ || node.kind === 171 /* PropertyAccessExpression */) { + if (node.kind === 69 /* Identifier */ || node.kind === 139 /* QualifiedName */ || node.kind === 172 /* PropertyAccessExpression */) { var symbol = typeChecker.getSymbolAtLocation(node); // This is an alias, follow what it aliases if (symbol && symbol.flags & 8388608 /* Alias */) { @@ -51312,7 +52378,7 @@ var ts; } if (jsxContainer = tryGetContainingJsxElement(contextToken)) { var attrsType = void 0; - if ((jsxContainer.kind === 241 /* JsxSelfClosingElement */) || (jsxContainer.kind === 242 /* JsxOpeningElement */)) { + if ((jsxContainer.kind === 242 /* JsxSelfClosingElement */) || (jsxContainer.kind === 243 /* JsxOpeningElement */)) { // Cursor is inside a JSX self-closing element or opening element attrsType = typeChecker.getJsxElementAttributesType(jsxContainer); if (attrsType) { @@ -51384,15 +52450,15 @@ var ts; return result; } function isInJsxText(contextToken) { - if (contextToken.kind === 243 /* JsxText */) { + if (contextToken.kind === 244 /* JsxText */) { return true; } if (contextToken.kind === 27 /* GreaterThanToken */ && contextToken.parent) { - if (contextToken.parent.kind === 242 /* JsxOpeningElement */) { + if (contextToken.parent.kind === 243 /* JsxOpeningElement */) { return true; } - if (contextToken.parent.kind === 244 /* JsxClosingElement */ || contextToken.parent.kind === 241 /* JsxSelfClosingElement */) { - return contextToken.parent.parent && contextToken.parent.parent.kind === 240 /* JsxElement */; + if (contextToken.parent.kind === 245 /* JsxClosingElement */ || contextToken.parent.kind === 242 /* JsxSelfClosingElement */) { + return contextToken.parent.parent && contextToken.parent.parent.kind === 241 /* JsxElement */; } } return false; @@ -51402,40 +52468,40 @@ var ts; var containingNodeKind = previousToken.parent.kind; switch (previousToken.kind) { case 24 /* CommaToken */: - return containingNodeKind === 173 /* CallExpression */ // func( a, | - || containingNodeKind === 147 /* Constructor */ // constructor( a, | /* public, protected, private keywords are allowed here, so show completion */ - || containingNodeKind === 174 /* NewExpression */ // new C(a, | - || containingNodeKind === 169 /* ArrayLiteralExpression */ // [a, | - || containingNodeKind === 186 /* BinaryExpression */ // const x = (a, | - || containingNodeKind === 155 /* FunctionType */; // var x: (s: string, list| + return containingNodeKind === 174 /* CallExpression */ // func( a, | + || containingNodeKind === 148 /* Constructor */ // constructor( a, | /* public, protected, private keywords are allowed here, so show completion */ + || containingNodeKind === 175 /* NewExpression */ // new C(a, | + || containingNodeKind === 170 /* ArrayLiteralExpression */ // [a, | + || containingNodeKind === 187 /* BinaryExpression */ // const x = (a, | + || containingNodeKind === 156 /* FunctionType */; // var x: (s: string, list| case 17 /* OpenParenToken */: - return containingNodeKind === 173 /* CallExpression */ // func( | - || containingNodeKind === 147 /* Constructor */ // constructor( | - || containingNodeKind === 174 /* NewExpression */ // new C(a| - || containingNodeKind === 177 /* ParenthesizedExpression */ // const x = (a| - || containingNodeKind === 163 /* ParenthesizedType */; // function F(pred: (a| /* this can become an arrow function, where 'a' is the argument */ + return containingNodeKind === 174 /* CallExpression */ // func( | + || containingNodeKind === 148 /* Constructor */ // constructor( | + || containingNodeKind === 175 /* NewExpression */ // new C(a| + || containingNodeKind === 178 /* ParenthesizedExpression */ // const x = (a| + || containingNodeKind === 164 /* ParenthesizedType */; // function F(pred: (a| /* this can become an arrow function, where 'a' is the argument */ case 19 /* OpenBracketToken */: - return containingNodeKind === 169 /* ArrayLiteralExpression */ // [ | - || containingNodeKind === 152 /* IndexSignature */ // [ | : string ] - || containingNodeKind === 139 /* ComputedPropertyName */; // [ | /* this can become an index signature */ + return containingNodeKind === 170 /* ArrayLiteralExpression */ // [ | + || containingNodeKind === 153 /* IndexSignature */ // [ | : string ] + || containingNodeKind === 140 /* ComputedPropertyName */; // [ | /* this can become an index signature */ case 125 /* ModuleKeyword */: // module | case 126 /* NamespaceKeyword */: return true; case 21 /* DotToken */: - return containingNodeKind === 224 /* ModuleDeclaration */; // module A.| + return containingNodeKind === 225 /* ModuleDeclaration */; // module A.| case 15 /* OpenBraceToken */: - return containingNodeKind === 220 /* ClassDeclaration */; // class A{ | + return containingNodeKind === 221 /* ClassDeclaration */; // class A{ | case 56 /* EqualsToken */: - return containingNodeKind === 217 /* VariableDeclaration */ // const x = a| - || containingNodeKind === 186 /* BinaryExpression */; // x = a| + return containingNodeKind === 218 /* VariableDeclaration */ // const x = a| + || containingNodeKind === 187 /* BinaryExpression */; // x = a| case 12 /* TemplateHead */: - return containingNodeKind === 188 /* TemplateExpression */; // `aa ${| + return containingNodeKind === 189 /* TemplateExpression */; // `aa ${| case 13 /* TemplateMiddle */: - return containingNodeKind === 196 /* TemplateSpan */; // `aa ${10} dd ${| + return containingNodeKind === 197 /* TemplateSpan */; // `aa ${10} dd ${| case 112 /* PublicKeyword */: case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: - return containingNodeKind === 144 /* PropertyDeclaration */; // class A{ public | + return containingNodeKind === 145 /* PropertyDeclaration */; // class A{ public | } // Previous token may have been a keyword that was converted to an identifier. switch (previousToken.getText()) { @@ -51449,7 +52515,7 @@ var ts; } function isInStringOrRegularExpressionOrTemplateLiteral(contextToken) { if (contextToken.kind === 9 /* StringLiteral */ - || contextToken.kind === 165 /* StringLiteralType */ + || contextToken.kind === 166 /* StringLiteralType */ || contextToken.kind === 10 /* RegularExpressionLiteral */ || ts.isTemplateLiteralKind(contextToken.kind)) { var start_7 = contextToken.getStart(); @@ -51479,14 +52545,14 @@ var ts; isMemberCompletion = true; var typeForObject; var existingMembers; - if (objectLikeContainer.kind === 170 /* ObjectLiteralExpression */) { + if (objectLikeContainer.kind === 171 /* ObjectLiteralExpression */) { // We are completing on contextual types, but may also include properties // other than those within the declared type. isNewIdentifierLocation = true; typeForObject = typeChecker.getContextualType(objectLikeContainer); existingMembers = objectLikeContainer.properties; } - else if (objectLikeContainer.kind === 166 /* ObjectBindingPattern */) { + else if (objectLikeContainer.kind === 167 /* ObjectBindingPattern */) { // We are *only* completing on properties from the type being destructured. isNewIdentifierLocation = false; var rootDeclaration = ts.getRootDeclaration(objectLikeContainer.parent); @@ -51497,11 +52563,11 @@ var ts; // Also proceed if rootDeclaration is parameter and if its containing function expression\arrow function is contextually typed - // type of parameter will flow in from the contextual type of the function var canGetType = !!(rootDeclaration.initializer || rootDeclaration.type); - if (!canGetType && rootDeclaration.kind === 141 /* Parameter */) { + if (!canGetType && rootDeclaration.kind === 142 /* Parameter */) { if (ts.isExpression(rootDeclaration.parent)) { canGetType = !!typeChecker.getContextualType(rootDeclaration.parent); } - else if (rootDeclaration.parent.kind === 146 /* MethodDeclaration */ || rootDeclaration.parent.kind === 149 /* SetAccessor */) { + else if (rootDeclaration.parent.kind === 147 /* MethodDeclaration */ || rootDeclaration.parent.kind === 150 /* SetAccessor */) { canGetType = ts.isExpression(rootDeclaration.parent.parent) && !!typeChecker.getContextualType(rootDeclaration.parent.parent); } } @@ -51543,9 +52609,9 @@ var ts; * @returns true if 'symbols' was successfully populated; false otherwise. */ function tryGetImportOrExportClauseCompletionSymbols(namedImportsOrExports) { - var declarationKind = namedImportsOrExports.kind === 232 /* NamedImports */ ? - 229 /* ImportDeclaration */ : - 235 /* ExportDeclaration */; + var declarationKind = namedImportsOrExports.kind === 233 /* NamedImports */ ? + 230 /* ImportDeclaration */ : + 236 /* ExportDeclaration */; var importOrExportDeclaration = ts.getAncestor(namedImportsOrExports, declarationKind); var moduleSpecifier = importOrExportDeclaration.moduleSpecifier; if (!moduleSpecifier) { @@ -51570,9 +52636,9 @@ var ts; switch (contextToken.kind) { case 15 /* OpenBraceToken */: // const x = { | case 24 /* CommaToken */: - var parent_14 = contextToken.parent; - if (parent_14 && (parent_14.kind === 170 /* ObjectLiteralExpression */ || parent_14.kind === 166 /* ObjectBindingPattern */)) { - return parent_14; + var parent_17 = contextToken.parent; + if (parent_17 && (parent_17.kind === 171 /* ObjectLiteralExpression */ || parent_17.kind === 167 /* ObjectBindingPattern */)) { + return parent_17; } break; } @@ -51589,8 +52655,8 @@ var ts; case 15 /* OpenBraceToken */: // import { | case 24 /* CommaToken */: switch (contextToken.parent.kind) { - case 232 /* NamedImports */: - case 236 /* NamedExports */: + case 233 /* NamedImports */: + case 237 /* NamedExports */: return contextToken.parent; } } @@ -51599,37 +52665,37 @@ var ts; } function tryGetContainingJsxElement(contextToken) { if (contextToken) { - var parent_15 = contextToken.parent; + var parent_18 = contextToken.parent; switch (contextToken.kind) { case 26 /* LessThanSlashToken */: case 39 /* SlashToken */: case 69 /* Identifier */: - case 245 /* JsxAttribute */: - case 246 /* JsxSpreadAttribute */: - if (parent_15 && (parent_15.kind === 241 /* JsxSelfClosingElement */ || parent_15.kind === 242 /* JsxOpeningElement */)) { - return parent_15; + case 246 /* JsxAttribute */: + case 247 /* JsxSpreadAttribute */: + if (parent_18 && (parent_18.kind === 242 /* JsxSelfClosingElement */ || parent_18.kind === 243 /* JsxOpeningElement */)) { + return parent_18; } - else if (parent_15.kind === 245 /* JsxAttribute */) { - return parent_15.parent; + else if (parent_18.kind === 246 /* JsxAttribute */) { + return parent_18.parent; } break; // The context token is the closing } or " of an attribute, which means // its parent is a JsxExpression, whose parent is a JsxAttribute, // whose parent is a JsxOpeningLikeElement case 9 /* StringLiteral */: - if (parent_15 && ((parent_15.kind === 245 /* JsxAttribute */) || (parent_15.kind === 246 /* JsxSpreadAttribute */))) { - return parent_15.parent; + if (parent_18 && ((parent_18.kind === 246 /* JsxAttribute */) || (parent_18.kind === 247 /* JsxSpreadAttribute */))) { + return parent_18.parent; } break; case 16 /* CloseBraceToken */: - if (parent_15 && - parent_15.kind === 247 /* JsxExpression */ && - parent_15.parent && - (parent_15.parent.kind === 245 /* JsxAttribute */)) { - return parent_15.parent.parent; + if (parent_18 && + parent_18.kind === 248 /* JsxExpression */ && + parent_18.parent && + (parent_18.parent.kind === 246 /* JsxAttribute */)) { + return parent_18.parent.parent; } - if (parent_15 && parent_15.kind === 246 /* JsxSpreadAttribute */) { - return parent_15.parent; + if (parent_18 && parent_18.kind === 247 /* JsxSpreadAttribute */) { + return parent_18.parent; } break; } @@ -51638,16 +52704,16 @@ var ts; } function isFunction(kind) { switch (kind) { - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: return true; } return false; @@ -51659,66 +52725,66 @@ var ts; var containingNodeKind = contextToken.parent.kind; switch (contextToken.kind) { case 24 /* CommaToken */: - return containingNodeKind === 217 /* VariableDeclaration */ || - containingNodeKind === 218 /* VariableDeclarationList */ || - containingNodeKind === 199 /* VariableStatement */ || - containingNodeKind === 223 /* EnumDeclaration */ || + return containingNodeKind === 218 /* VariableDeclaration */ || + containingNodeKind === 219 /* VariableDeclarationList */ || + containingNodeKind === 200 /* VariableStatement */ || + containingNodeKind === 224 /* EnumDeclaration */ || isFunction(containingNodeKind) || - containingNodeKind === 220 /* ClassDeclaration */ || - containingNodeKind === 191 /* ClassExpression */ || - containingNodeKind === 221 /* InterfaceDeclaration */ || - containingNodeKind === 167 /* ArrayBindingPattern */ || - containingNodeKind === 222 /* TypeAliasDeclaration */; // type Map, K, | + containingNodeKind === 221 /* ClassDeclaration */ || + containingNodeKind === 192 /* ClassExpression */ || + containingNodeKind === 222 /* InterfaceDeclaration */ || + containingNodeKind === 168 /* ArrayBindingPattern */ || + containingNodeKind === 223 /* TypeAliasDeclaration */; // type Map, K, | case 21 /* DotToken */: - return containingNodeKind === 167 /* ArrayBindingPattern */; // var [.| + return containingNodeKind === 168 /* ArrayBindingPattern */; // var [.| case 54 /* ColonToken */: - return containingNodeKind === 168 /* BindingElement */; // var {x :html| + return containingNodeKind === 169 /* BindingElement */; // var {x :html| case 19 /* OpenBracketToken */: - return containingNodeKind === 167 /* ArrayBindingPattern */; // var [x| + return containingNodeKind === 168 /* ArrayBindingPattern */; // var [x| case 17 /* OpenParenToken */: - return containingNodeKind === 251 /* CatchClause */ || + return containingNodeKind === 252 /* CatchClause */ || isFunction(containingNodeKind); case 15 /* OpenBraceToken */: - return containingNodeKind === 223 /* EnumDeclaration */ || - containingNodeKind === 221 /* InterfaceDeclaration */ || - containingNodeKind === 158 /* TypeLiteral */; // const x : { | + return containingNodeKind === 224 /* EnumDeclaration */ || + containingNodeKind === 222 /* InterfaceDeclaration */ || + containingNodeKind === 159 /* TypeLiteral */; // const x : { | case 23 /* SemicolonToken */: - return containingNodeKind === 143 /* PropertySignature */ && + return containingNodeKind === 144 /* PropertySignature */ && contextToken.parent && contextToken.parent.parent && - (contextToken.parent.parent.kind === 221 /* InterfaceDeclaration */ || - contextToken.parent.parent.kind === 158 /* TypeLiteral */); // const x : { a; | + (contextToken.parent.parent.kind === 222 /* InterfaceDeclaration */ || + contextToken.parent.parent.kind === 159 /* TypeLiteral */); // const x : { a; | case 25 /* LessThanToken */: - return containingNodeKind === 220 /* ClassDeclaration */ || - containingNodeKind === 191 /* ClassExpression */ || - containingNodeKind === 221 /* InterfaceDeclaration */ || - containingNodeKind === 222 /* TypeAliasDeclaration */ || + return containingNodeKind === 221 /* ClassDeclaration */ || + containingNodeKind === 192 /* ClassExpression */ || + containingNodeKind === 222 /* InterfaceDeclaration */ || + containingNodeKind === 223 /* TypeAliasDeclaration */ || isFunction(containingNodeKind); case 113 /* StaticKeyword */: - return containingNodeKind === 144 /* PropertyDeclaration */; + return containingNodeKind === 145 /* PropertyDeclaration */; case 22 /* DotDotDotToken */: - return containingNodeKind === 141 /* Parameter */ || + return containingNodeKind === 142 /* Parameter */ || (contextToken.parent && contextToken.parent.parent && - contextToken.parent.parent.kind === 167 /* ArrayBindingPattern */); // var [...z| + contextToken.parent.parent.kind === 168 /* ArrayBindingPattern */); // var [...z| case 112 /* PublicKeyword */: case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: - return containingNodeKind === 141 /* Parameter */; + return containingNodeKind === 142 /* Parameter */; case 116 /* AsKeyword */: - return containingNodeKind === 233 /* ImportSpecifier */ || - containingNodeKind === 237 /* ExportSpecifier */ || - containingNodeKind === 231 /* NamespaceImport */; + return containingNodeKind === 234 /* ImportSpecifier */ || + containingNodeKind === 238 /* ExportSpecifier */ || + containingNodeKind === 232 /* NamespaceImport */; case 73 /* ClassKeyword */: case 81 /* EnumKeyword */: case 107 /* InterfaceKeyword */: case 87 /* FunctionKeyword */: case 102 /* VarKeyword */: case 123 /* GetKeyword */: - case 130 /* SetKeyword */: + case 131 /* SetKeyword */: case 89 /* ImportKeyword */: case 108 /* LetKeyword */: case 74 /* ConstKeyword */: case 114 /* YieldKeyword */: - case 133 /* TypeKeyword */: + case 134 /* TypeKeyword */: return true; } // Previous token may have been a keyword that was converted to an identifier. @@ -51770,9 +52836,9 @@ var ts; existingImportsOrExports[name_39.text] = true; } if (ts.isEmpty(existingImportsOrExports)) { - return exportsOfModule; + return ts.filter(exportsOfModule, function (e) { return e.name !== "default"; }); } - return ts.filter(exportsOfModule, function (e) { return !ts.lookUp(existingImportsOrExports, e.name); }); + return ts.filter(exportsOfModule, function (e) { return e.name !== "default" && !ts.lookUp(existingImportsOrExports, e.name); }); } /** * Filters out completion suggestions for named imports or exports. @@ -51788,10 +52854,10 @@ var ts; for (var _i = 0, existingMembers_1 = existingMembers; _i < existingMembers_1.length; _i++) { var m = existingMembers_1[_i]; // Ignore omitted expressions for missing members - if (m.kind !== 252 /* PropertyAssignment */ && - m.kind !== 253 /* ShorthandPropertyAssignment */ && - m.kind !== 168 /* BindingElement */ && - m.kind !== 146 /* MethodDeclaration */) { + if (m.kind !== 253 /* PropertyAssignment */ && + m.kind !== 254 /* ShorthandPropertyAssignment */ && + m.kind !== 169 /* BindingElement */ && + m.kind !== 147 /* MethodDeclaration */) { continue; } // If this is the current item we are editing right now, do not filter it out @@ -51799,7 +52865,7 @@ var ts; continue; } var existingName = void 0; - if (m.kind === 168 /* BindingElement */ && m.propertyName) { + if (m.kind === 169 /* BindingElement */ && m.propertyName) { // include only identifiers in completion list if (m.propertyName.kind === 69 /* Identifier */) { existingName = m.propertyName.text; @@ -51829,7 +52895,7 @@ var ts; if (attr.getStart() <= position && position <= attr.getEnd()) { continue; } - if (attr.kind === 245 /* JsxAttribute */) { + if (attr.kind === 246 /* JsxAttribute */) { seenNames[attr.name.text] = true; } } @@ -51856,7 +52922,7 @@ var ts; else { if (!symbols || symbols.length === 0) { if (sourceFile.languageVariant === 1 /* JSX */ && - location.parent && location.parent.kind === 244 /* JsxClosingElement */) { + location.parent && location.parent.kind === 245 /* JsxClosingElement */) { // In the TypeScript JSX element, if such element is not defined. When users query for completion at closing tag, // instead of simply giving unknown value, the completion will return the tag-name of an associated opening-element. // For example: @@ -51997,7 +53063,7 @@ var ts; function getSymbolKind(symbol, location) { var flags = symbol.getFlags(); if (flags & 32 /* Class */) - return ts.getDeclarationOfKind(symbol, 191 /* ClassExpression */) ? + return ts.getDeclarationOfKind(symbol, 192 /* ClassExpression */) ? ScriptElementKind.localClassElement : ScriptElementKind.classElement; if (flags & 384 /* Enum */) return ScriptElementKind.enumElement; @@ -52103,7 +53169,7 @@ var ts; var signature = void 0; type = isThisExpression ? typeChecker.getTypeAtLocation(location) : typeChecker.getTypeOfSymbolAtLocation(symbol, location); if (type) { - if (location.parent && location.parent.kind === 171 /* PropertyAccessExpression */) { + if (location.parent && location.parent.kind === 172 /* PropertyAccessExpression */) { var right = location.parent.name; // Either the location is on the right of a property access, or on the left and the right is missing if (right === location || (right && right.getFullWidth() === 0)) { @@ -52112,7 +53178,7 @@ var ts; } // try get the call/construct signature from the type if it matches var callExpression = void 0; - if (location.kind === 173 /* CallExpression */ || location.kind === 174 /* NewExpression */) { + if (location.kind === 174 /* CallExpression */ || location.kind === 175 /* NewExpression */) { callExpression = location; } else if (isCallExpressionTarget(location) || isNewExpressionTarget(location)) { @@ -52125,7 +53191,7 @@ var ts; // Use the first candidate: signature = candidateSignatures[0]; } - var useConstructSignatures = callExpression.kind === 174 /* NewExpression */ || callExpression.expression.kind === 95 /* SuperKeyword */; + var useConstructSignatures = callExpression.kind === 175 /* NewExpression */ || callExpression.expression.kind === 95 /* SuperKeyword */; var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures(); if (!ts.contains(allSignatures, signature.target) && !ts.contains(allSignatures, signature)) { // Get the first signature if there is one -- allSignatures may contain @@ -52165,7 +53231,7 @@ var ts; displayParts.push(ts.keywordPart(92 /* NewKeyword */)); displayParts.push(ts.spacePart()); } - if (!(type.flags & 65536 /* Anonymous */)) { + if (!(type.flags & 65536 /* Anonymous */) && type.symbol) { ts.addRange(displayParts, ts.symbolToDisplayParts(typeChecker, type.symbol, enclosingDeclaration, /*meaning*/ undefined, 1 /* WriteTypeParametersOrArguments */)); } addSignatureDisplayParts(signature, allSignatures, 8 /* WriteArrowStyleSignature */); @@ -52178,24 +53244,24 @@ var ts; } } else if ((isNameOfFunctionDeclaration(location) && !(symbol.flags & 98304 /* Accessor */)) || - (location.kind === 121 /* ConstructorKeyword */ && location.parent.kind === 147 /* Constructor */)) { + (location.kind === 121 /* ConstructorKeyword */ && location.parent.kind === 148 /* Constructor */)) { // get the signature from the declaration and write it var functionDeclaration = location.parent; - var allSignatures = functionDeclaration.kind === 147 /* Constructor */ ? type.getConstructSignatures() : type.getCallSignatures(); + var allSignatures = functionDeclaration.kind === 148 /* Constructor */ ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures(); if (!typeChecker.isImplementationOfOverload(functionDeclaration)) { signature = typeChecker.getSignatureFromDeclaration(functionDeclaration); } else { signature = allSignatures[0]; } - if (functionDeclaration.kind === 147 /* Constructor */) { + if (functionDeclaration.kind === 148 /* Constructor */) { // show (constructor) Type(...) signature symbolKind = ScriptElementKind.constructorImplementationElement; addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); } else { // (function/method) symbol(..signature) - addPrefixForAnyFunctionOrVar(functionDeclaration.kind === 150 /* CallSignature */ && + addPrefixForAnyFunctionOrVar(functionDeclaration.kind === 151 /* CallSignature */ && !(type.symbol.flags & 2048 /* TypeLiteral */ || type.symbol.flags & 4096 /* ObjectLiteral */) ? type.symbol : symbol, symbolKind); } addSignatureDisplayParts(signature, allSignatures); @@ -52204,7 +53270,7 @@ var ts; } } if (symbolFlags & 32 /* Class */ && !hasAddedSymbolInfo && !isThisExpression) { - if (ts.getDeclarationOfKind(symbol, 191 /* ClassExpression */)) { + if (ts.getDeclarationOfKind(symbol, 192 /* ClassExpression */)) { // Special case for class expressions because we would like to indicate that // the class name is local to the class body (similar to function expression) // (local class) class @@ -52227,7 +53293,7 @@ var ts; } if (symbolFlags & 524288 /* TypeAlias */) { addNewLineIfDisplayPartsExist(); - displayParts.push(ts.keywordPart(133 /* TypeKeyword */)); + displayParts.push(ts.keywordPart(134 /* TypeKeyword */)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); writeTypeParametersOfSymbol(symbol, sourceFile); @@ -52248,7 +53314,7 @@ var ts; } if (symbolFlags & 1536 /* Module */) { addNewLineIfDisplayPartsExist(); - var declaration = ts.getDeclarationOfKind(symbol, 224 /* ModuleDeclaration */); + var declaration = ts.getDeclarationOfKind(symbol, 225 /* ModuleDeclaration */); var isNamespace = declaration && declaration.name && declaration.name.kind === 69 /* Identifier */; displayParts.push(ts.keywordPart(isNamespace ? 126 /* NamespaceKeyword */ : 125 /* ModuleKeyword */)); displayParts.push(ts.spacePart()); @@ -52271,17 +53337,17 @@ var ts; } else { // Method/function type parameter - var declaration = ts.getDeclarationOfKind(symbol, 140 /* TypeParameter */); + var declaration = ts.getDeclarationOfKind(symbol, 141 /* TypeParameter */); ts.Debug.assert(declaration !== undefined); declaration = declaration.parent; if (declaration) { if (ts.isFunctionLikeKind(declaration.kind)) { var signature = typeChecker.getSignatureFromDeclaration(declaration); - if (declaration.kind === 151 /* ConstructSignature */) { + if (declaration.kind === 152 /* ConstructSignature */) { displayParts.push(ts.keywordPart(92 /* NewKeyword */)); displayParts.push(ts.spacePart()); } - else if (declaration.kind !== 150 /* CallSignature */ && declaration.name) { + else if (declaration.kind !== 151 /* CallSignature */ && declaration.name) { addFullSymbolName(declaration.symbol); } ts.addRange(displayParts, ts.signatureToDisplayParts(typeChecker, signature, sourceFile, 32 /* WriteTypeArgumentsOfSignature */)); @@ -52290,7 +53356,7 @@ var ts; // Type alias type parameter // For example // type list = T[]; // Both T will go through same code path - displayParts.push(ts.keywordPart(133 /* TypeKeyword */)); + displayParts.push(ts.keywordPart(134 /* TypeKeyword */)); displayParts.push(ts.spacePart()); addFullSymbolName(declaration.symbol); writeTypeParametersOfSymbol(declaration.symbol, sourceFile); @@ -52301,7 +53367,7 @@ var ts; if (symbolFlags & 8 /* EnumMember */) { addPrefixForAnyFunctionOrVar(symbol, "enum member"); var declaration = symbol.declarations[0]; - if (declaration.kind === 254 /* EnumMember */) { + if (declaration.kind === 255 /* EnumMember */) { var constantValue = typeChecker.getConstantValue(declaration); if (constantValue !== undefined) { displayParts.push(ts.spacePart()); @@ -52317,13 +53383,13 @@ var ts; displayParts.push(ts.spacePart()); addFullSymbolName(symbol); ts.forEach(symbol.declarations, function (declaration) { - if (declaration.kind === 228 /* ImportEqualsDeclaration */) { + if (declaration.kind === 229 /* ImportEqualsDeclaration */) { var importEqualsDeclaration = declaration; if (ts.isExternalModuleImportEqualsDeclaration(importEqualsDeclaration)) { displayParts.push(ts.spacePart()); displayParts.push(ts.operatorPart(56 /* EqualsToken */)); displayParts.push(ts.spacePart()); - displayParts.push(ts.keywordPart(128 /* RequireKeyword */)); + displayParts.push(ts.keywordPart(129 /* RequireKeyword */)); displayParts.push(ts.punctuationPart(17 /* OpenParenToken */)); displayParts.push(ts.displayPart(ts.getTextOfNode(ts.getExternalModuleImportEqualsDeclarationExpression(importEqualsDeclaration)), SymbolDisplayPartKind.stringLiteral)); displayParts.push(ts.punctuationPart(18 /* CloseParenToken */)); @@ -52375,7 +53441,7 @@ var ts; symbolFlags & 131072 /* Signature */ || symbolFlags & 98304 /* Accessor */ || symbolKind === ScriptElementKind.memberFunctionElement) { - var allSignatures = type.getCallSignatures(); + var allSignatures = type.getNonNullableType().getCallSignatures(); addSignatureDisplayParts(allSignatures[0], allSignatures); } } @@ -52445,7 +53511,7 @@ var ts; synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); - if (!node) { + if (node === sourceFile) { return undefined; } if (isLabelName(node)) { @@ -52457,10 +53523,10 @@ var ts; // Try getting just type at this position and show switch (node.kind) { case 69 /* Identifier */: - case 171 /* PropertyAccessExpression */: - case 138 /* QualifiedName */: + case 172 /* PropertyAccessExpression */: + case 139 /* QualifiedName */: case 97 /* ThisKeyword */: - case 164 /* ThisType */: + case 165 /* ThisType */: case 95 /* SuperKeyword */: // For the identifiers/this/super etc get the type at position var type = typeChecker.getTypeAtLocation(node); @@ -52539,8 +53605,8 @@ var ts; var declarations = []; var definition; ts.forEach(signatureDeclarations, function (d) { - if ((selectConstructors && d.kind === 147 /* Constructor */) || - (!selectConstructors && (d.kind === 219 /* FunctionDeclaration */ || d.kind === 146 /* MethodDeclaration */ || d.kind === 145 /* MethodSignature */))) { + if ((selectConstructors && d.kind === 148 /* Constructor */) || + (!selectConstructors && (d.kind === 220 /* FunctionDeclaration */ || d.kind === 147 /* MethodDeclaration */ || d.kind === 146 /* MethodSignature */))) { declarations.push(d); if (d.body) definition = d; @@ -52580,16 +53646,6 @@ var ts; function getDefinitionAtPosition(fileName, position) { synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); - var node = ts.getTouchingPropertyName(sourceFile, position); - if (!node) { - return undefined; - } - // Labels - if (isJumpStatementTarget(node)) { - var labelName = node.text; - var label = getTargetLabel(node.parent, node.text); - return label ? [createDefinitionInfo(label, ScriptElementKind.label, labelName, /*containerName*/ undefined)] : undefined; - } /// Triple slash reference comments var comment = findReferenceInPosition(sourceFile.referencedFiles, position); if (comment) { @@ -52602,12 +53658,22 @@ var ts; // Type reference directives var typeReferenceDirective = findReferenceInPosition(sourceFile.typeReferenceDirectives, position); if (typeReferenceDirective) { - var referenceFile = ts.lookUp(program.resolvedTypeReferenceDirectives, typeReferenceDirective.fileName); + var referenceFile = ts.lookUp(program.getResolvedTypeReferenceDirectives(), typeReferenceDirective.fileName); if (referenceFile && referenceFile.resolvedFileName) { return [getDefinitionInfoForFileReference(typeReferenceDirective.fileName, referenceFile.resolvedFileName)]; } return undefined; } + var node = ts.getTouchingPropertyName(sourceFile, position); + if (node === sourceFile) { + return undefined; + } + // Labels + if (isJumpStatementTarget(node)) { + var labelName = node.text; + var label = getTargetLabel(node.parent, node.text); + return label ? [createDefinitionInfo(label, ScriptElementKind.label, labelName, /*containerName*/ undefined)] : undefined; + } var typeChecker = program.getTypeChecker(); var symbol = typeChecker.getSymbolAtLocation(node); // Could not find a symbol e.g. node is string or number keyword, @@ -52628,7 +53694,7 @@ var ts; // if (node.kind === 69 /* Identifier */ && (node.parent === declaration || - (declaration.kind === 233 /* ImportSpecifier */ && declaration.parent && declaration.parent.kind === 232 /* NamedImports */))) { + (declaration.kind === 234 /* ImportSpecifier */ && declaration.parent && declaration.parent.kind === 233 /* NamedImports */))) { symbol = typeChecker.getAliasedSymbol(symbol); } } @@ -52637,7 +53703,7 @@ var ts; // go to the declaration of the property name (in this case stay at the same position). However, if go-to-definition // is performed at the location of property access, we would like to go to definition of the property in the short-hand // assignment. This case and others are handled by the following code. - if (node.parent.kind === 253 /* ShorthandPropertyAssignment */) { + if (node.parent.kind === 254 /* ShorthandPropertyAssignment */) { var shorthandSymbol = typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration); if (!shorthandSymbol) { return []; @@ -52655,7 +53721,7 @@ var ts; synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); - if (!node) { + if (node === sourceFile) { return undefined; } var typeChecker = program.getTypeChecker(); @@ -52713,10 +53779,10 @@ var ts; function getSemanticDocumentHighlights(node) { if (node.kind === 69 /* Identifier */ || node.kind === 97 /* ThisKeyword */ || - node.kind === 164 /* ThisType */ || + node.kind === 165 /* ThisType */ || node.kind === 95 /* SuperKeyword */ || - isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || - isNameOfExternalModuleImportOrDeclaration(node)) { + node.kind === 9 /* StringLiteral */ || + isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { var referencedSymbols = getReferencedSymbolsForNode(node, sourceFilesToSearch, /*findInStrings*/ false, /*findInComments*/ false); return convertReferencedSymbols(referencedSymbols); } @@ -52767,75 +53833,75 @@ var ts; switch (node.kind) { case 88 /* IfKeyword */: case 80 /* ElseKeyword */: - if (hasKind(node.parent, 202 /* IfStatement */)) { + if (hasKind(node.parent, 203 /* IfStatement */)) { return getIfElseOccurrences(node.parent); } break; case 94 /* ReturnKeyword */: - if (hasKind(node.parent, 210 /* ReturnStatement */)) { + if (hasKind(node.parent, 211 /* ReturnStatement */)) { return getReturnOccurrences(node.parent); } break; case 98 /* ThrowKeyword */: - if (hasKind(node.parent, 214 /* ThrowStatement */)) { + if (hasKind(node.parent, 215 /* ThrowStatement */)) { return getThrowOccurrences(node.parent); } break; case 72 /* CatchKeyword */: - if (hasKind(parent(parent(node)), 215 /* TryStatement */)) { + if (hasKind(parent(parent(node)), 216 /* TryStatement */)) { return getTryCatchFinallyOccurrences(node.parent.parent); } break; case 100 /* TryKeyword */: case 85 /* FinallyKeyword */: - if (hasKind(parent(node), 215 /* TryStatement */)) { + if (hasKind(parent(node), 216 /* TryStatement */)) { return getTryCatchFinallyOccurrences(node.parent); } break; case 96 /* SwitchKeyword */: - if (hasKind(node.parent, 212 /* SwitchStatement */)) { + if (hasKind(node.parent, 213 /* SwitchStatement */)) { return getSwitchCaseDefaultOccurrences(node.parent); } break; case 71 /* CaseKeyword */: case 77 /* DefaultKeyword */: - if (hasKind(parent(parent(parent(node))), 212 /* SwitchStatement */)) { + if (hasKind(parent(parent(parent(node))), 213 /* SwitchStatement */)) { return getSwitchCaseDefaultOccurrences(node.parent.parent.parent); } break; case 70 /* BreakKeyword */: case 75 /* ContinueKeyword */: - if (hasKind(node.parent, 209 /* BreakStatement */) || hasKind(node.parent, 208 /* ContinueStatement */)) { + if (hasKind(node.parent, 210 /* BreakStatement */) || hasKind(node.parent, 209 /* ContinueStatement */)) { return getBreakOrContinueStatementOccurrences(node.parent); } break; case 86 /* ForKeyword */: - if (hasKind(node.parent, 205 /* ForStatement */) || - hasKind(node.parent, 206 /* ForInStatement */) || - hasKind(node.parent, 207 /* ForOfStatement */)) { + if (hasKind(node.parent, 206 /* ForStatement */) || + hasKind(node.parent, 207 /* ForInStatement */) || + hasKind(node.parent, 208 /* ForOfStatement */)) { return getLoopBreakContinueOccurrences(node.parent); } break; case 104 /* WhileKeyword */: case 79 /* DoKeyword */: - if (hasKind(node.parent, 204 /* WhileStatement */) || hasKind(node.parent, 203 /* DoStatement */)) { + if (hasKind(node.parent, 205 /* WhileStatement */) || hasKind(node.parent, 204 /* DoStatement */)) { return getLoopBreakContinueOccurrences(node.parent); } break; case 121 /* ConstructorKeyword */: - if (hasKind(node.parent, 147 /* Constructor */)) { + if (hasKind(node.parent, 148 /* Constructor */)) { return getConstructorOccurrences(node.parent); } break; case 123 /* GetKeyword */: - case 130 /* SetKeyword */: - if (hasKind(node.parent, 148 /* GetAccessor */) || hasKind(node.parent, 149 /* SetAccessor */)) { + case 131 /* SetKeyword */: + if (hasKind(node.parent, 149 /* GetAccessor */) || hasKind(node.parent, 150 /* SetAccessor */)) { return getGetAndSetOccurrences(node.parent); } break; default: if (ts.isModifierKind(node.kind) && node.parent && - (ts.isDeclaration(node.parent) || node.parent.kind === 199 /* VariableStatement */)) { + (ts.isDeclaration(node.parent) || node.parent.kind === 200 /* VariableStatement */)) { return getModifierOccurrences(node.kind, node.parent); } } @@ -52851,10 +53917,10 @@ var ts; aggregate(node); return statementAccumulator; function aggregate(node) { - if (node.kind === 214 /* ThrowStatement */) { + if (node.kind === 215 /* ThrowStatement */) { statementAccumulator.push(node); } - else if (node.kind === 215 /* TryStatement */) { + else if (node.kind === 216 /* TryStatement */) { var tryStatement = node; if (tryStatement.catchClause) { aggregate(tryStatement.catchClause); @@ -52881,19 +53947,19 @@ var ts; function getThrowStatementOwner(throwStatement) { var child = throwStatement; while (child.parent) { - var parent_16 = child.parent; - if (ts.isFunctionBlock(parent_16) || parent_16.kind === 255 /* SourceFile */) { - return parent_16; + var parent_19 = child.parent; + if (ts.isFunctionBlock(parent_19) || parent_19.kind === 256 /* SourceFile */) { + return parent_19; } // A throw-statement is only owned by a try-statement if the try-statement has // a catch clause, and if the throw-statement occurs within the try block. - if (parent_16.kind === 215 /* TryStatement */) { - var tryStatement = parent_16; + if (parent_19.kind === 216 /* TryStatement */) { + var tryStatement = parent_19; if (tryStatement.tryBlock === child && tryStatement.catchClause) { return child; } } - child = parent_16; + child = parent_19; } return undefined; } @@ -52902,7 +53968,7 @@ var ts; aggregate(node); return statementAccumulator; function aggregate(node) { - if (node.kind === 209 /* BreakStatement */ || node.kind === 208 /* ContinueStatement */) { + if (node.kind === 210 /* BreakStatement */ || node.kind === 209 /* ContinueStatement */) { statementAccumulator.push(node); } else if (!ts.isFunctionLike(node)) { @@ -52915,25 +53981,25 @@ var ts; return actualOwner && actualOwner === owner; } function getBreakOrContinueOwner(statement) { - for (var node_2 = statement.parent; node_2; node_2 = node_2.parent) { - switch (node_2.kind) { - case 212 /* SwitchStatement */: - if (statement.kind === 208 /* ContinueStatement */) { + for (var node_1 = statement.parent; node_1; node_1 = node_1.parent) { + switch (node_1.kind) { + case 213 /* SwitchStatement */: + if (statement.kind === 209 /* ContinueStatement */) { continue; } // Fall through. - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 204 /* WhileStatement */: - case 203 /* DoStatement */: - if (!statement.label || isLabeledBy(node_2, statement.label.text)) { - return node_2; + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 205 /* WhileStatement */: + case 204 /* DoStatement */: + if (!statement.label || isLabeledBy(node_1, statement.label.text)) { + return node_1; } break; default: // Don't cross function boundaries. - if (ts.isFunctionLike(node_2)) { + if (ts.isFunctionLike(node_1)) { return undefined; } break; @@ -52945,24 +54011,24 @@ var ts; var container = declaration.parent; // Make sure we only highlight the keyword when it makes sense to do so. if (ts.isAccessibilityModifier(modifier)) { - if (!(container.kind === 220 /* ClassDeclaration */ || - container.kind === 191 /* ClassExpression */ || - (declaration.kind === 141 /* Parameter */ && hasKind(container, 147 /* Constructor */)))) { + if (!(container.kind === 221 /* ClassDeclaration */ || + container.kind === 192 /* ClassExpression */ || + (declaration.kind === 142 /* Parameter */ && hasKind(container, 148 /* Constructor */)))) { return undefined; } } else if (modifier === 113 /* StaticKeyword */) { - if (!(container.kind === 220 /* ClassDeclaration */ || container.kind === 191 /* ClassExpression */)) { + if (!(container.kind === 221 /* ClassDeclaration */ || container.kind === 192 /* ClassExpression */)) { return undefined; } } else if (modifier === 82 /* ExportKeyword */ || modifier === 122 /* DeclareKeyword */) { - if (!(container.kind === 225 /* ModuleBlock */ || container.kind === 255 /* SourceFile */)) { + if (!(container.kind === 226 /* ModuleBlock */ || container.kind === 256 /* SourceFile */)) { return undefined; } } else if (modifier === 115 /* AbstractKeyword */) { - if (!(container.kind === 220 /* ClassDeclaration */ || declaration.kind === 220 /* ClassDeclaration */)) { + if (!(container.kind === 221 /* ClassDeclaration */ || declaration.kind === 221 /* ClassDeclaration */)) { return undefined; } } @@ -52974,8 +54040,8 @@ var ts; var modifierFlag = getFlagFromModifier(modifier); var nodes; switch (container.kind) { - case 225 /* ModuleBlock */: - case 255 /* SourceFile */: + case 226 /* ModuleBlock */: + case 256 /* SourceFile */: // Container is either a class declaration or the declaration is a classDeclaration if (modifierFlag & 128 /* Abstract */) { nodes = declaration.members.concat(declaration); @@ -52984,17 +54050,17 @@ var ts; nodes = container.statements; } break; - case 147 /* Constructor */: + case 148 /* Constructor */: nodes = container.parameters.concat(container.parent.members); break; - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: nodes = container.members; // If we're an accessibility modifier, we're in an instance member and should search // the constructor's parameter list for instance members as well. if (modifierFlag & 28 /* AccessibilityModifier */) { var constructor = ts.forEach(container.members, function (member) { - return member.kind === 147 /* Constructor */ && member; + return member.kind === 148 /* Constructor */ && member; }); if (constructor) { nodes = nodes.concat(constructor.parameters); @@ -53047,13 +54113,13 @@ var ts; } function getGetAndSetOccurrences(accessorDeclaration) { var keywords = []; - tryPushAccessorKeyword(accessorDeclaration.symbol, 148 /* GetAccessor */); - tryPushAccessorKeyword(accessorDeclaration.symbol, 149 /* SetAccessor */); + tryPushAccessorKeyword(accessorDeclaration.symbol, 149 /* GetAccessor */); + tryPushAccessorKeyword(accessorDeclaration.symbol, 150 /* SetAccessor */); return ts.map(keywords, getHighlightSpanForNode); function tryPushAccessorKeyword(accessorSymbol, accessorKind) { var accessor = ts.getDeclarationOfKind(accessorSymbol, accessorKind); if (accessor) { - ts.forEach(accessor.getChildren(), function (child) { return pushKeywordIf(keywords, child, 123 /* GetKeyword */, 130 /* SetKeyword */); }); + ts.forEach(accessor.getChildren(), function (child) { return pushKeywordIf(keywords, child, 123 /* GetKeyword */, 131 /* SetKeyword */); }); } } } @@ -53071,7 +54137,7 @@ var ts; var keywords = []; if (pushKeywordIf(keywords, loopNode.getFirstToken(), 86 /* ForKeyword */, 104 /* WhileKeyword */, 79 /* DoKeyword */)) { // If we succeeded and got a do-while loop, then start looking for a 'while' keyword. - if (loopNode.kind === 203 /* DoStatement */) { + if (loopNode.kind === 204 /* DoStatement */) { var loopTokens = loopNode.getChildren(); for (var i = loopTokens.length - 1; i >= 0; i--) { if (pushKeywordIf(keywords, loopTokens[i], 104 /* WhileKeyword */)) { @@ -53092,13 +54158,13 @@ var ts; var owner = getBreakOrContinueOwner(breakOrContinueStatement); if (owner) { switch (owner.kind) { - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 204 /* DoStatement */: + case 205 /* WhileStatement */: return getLoopBreakContinueOccurrences(owner); - case 212 /* SwitchStatement */: + case 213 /* SwitchStatement */: return getSwitchCaseDefaultOccurrences(owner); } } @@ -53152,7 +54218,7 @@ var ts; function getReturnOccurrences(returnStatement) { var func = ts.getContainingFunction(returnStatement); // If we didn't find a containing function with a block body, bail out. - if (!(func && hasKind(func.body, 198 /* Block */))) { + if (!(func && hasKind(func.body, 199 /* Block */))) { return undefined; } var keywords = []; @@ -53168,7 +54234,7 @@ var ts; function getIfElseOccurrences(ifStatement) { var keywords = []; // Traverse upwards through all parent if-statements linked by their else-branches. - while (hasKind(ifStatement.parent, 202 /* IfStatement */) && ifStatement.parent.elseStatement === ifStatement) { + while (hasKind(ifStatement.parent, 203 /* IfStatement */) && ifStatement.parent.elseStatement === ifStatement) { ifStatement = ifStatement.parent; } // Now traverse back down through the else branches, aggregating if/else keywords of if-statements. @@ -53181,7 +54247,7 @@ var ts; break; } } - if (!hasKind(ifStatement.elseStatement, 202 /* IfStatement */)) { + if (!hasKind(ifStatement.elseStatement, 203 /* IfStatement */)) { break; } ifStatement = ifStatement.elseStatement; @@ -53269,15 +54335,15 @@ var ts; synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); - if (!node) { + if (node === sourceFile) { return undefined; } if (node.kind !== 69 /* Identifier */ && // TODO (drosen): This should be enabled in a later release - currently breaks rename. // node.kind !== SyntaxKind.ThisKeyword && // node.kind !== SyntaxKind.SuperKeyword && - !isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && - !isNameOfExternalModuleImportOrDeclaration(node)) { + node.kind !== 9 /* StringLiteral */ && + !isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { return undefined; } ts.Debug.assert(node.kind === 69 /* Identifier */ || node.kind === 8 /* NumericLiteral */ || node.kind === 9 /* StringLiteral */); @@ -53298,13 +54364,16 @@ var ts; return getLabelReferencesInNode(node.parent, node); } } - if (node.kind === 97 /* ThisKeyword */ || node.kind === 164 /* ThisType */) { + if (node.kind === 97 /* ThisKeyword */ || node.kind === 165 /* ThisType */) { return getReferencesForThisKeyword(node, sourceFiles); } if (node.kind === 95 /* SuperKeyword */) { return getReferencesForSuperKeyword(node); } var symbol = typeChecker.getSymbolAtLocation(node); + if (!symbol && node.kind === 9 /* StringLiteral */) { + return getReferencesForStringLiteral(node, sourceFiles); + } // Could not find a symbol e.g. unknown identifier if (!symbol) { // Can't have references to something that we have no symbol for. @@ -53359,8 +54428,46 @@ var ts; textSpan: ts.createTextSpan(declarations[0].getStart(), 0) }; } - function isImportSpecifierSymbol(symbol) { - return (symbol.flags & 8388608 /* Alias */) && !!ts.getDeclarationOfKind(symbol, 233 /* ImportSpecifier */); + function getAliasSymbolForPropertyNameSymbol(symbol, location) { + if (symbol.flags & 8388608 /* Alias */) { + // Default import get alias + var defaultImport = ts.getDeclarationOfKind(symbol, 231 /* ImportClause */); + if (defaultImport) { + return typeChecker.getAliasedSymbol(symbol); + } + var importOrExportSpecifier = ts.forEach(symbol.declarations, function (declaration) { return (declaration.kind === 234 /* ImportSpecifier */ || + declaration.kind === 238 /* ExportSpecifier */) ? declaration : undefined; }); + if (importOrExportSpecifier && + // export { a } + (!importOrExportSpecifier.propertyName || + // export {a as class } where a is location + importOrExportSpecifier.propertyName === location)) { + // If Import specifier -> get alias + // else Export specifier -> get local target + return importOrExportSpecifier.kind === 234 /* ImportSpecifier */ ? + typeChecker.getAliasedSymbol(symbol) : + typeChecker.getExportSpecifierLocalTargetSymbol(importOrExportSpecifier); + } + } + return undefined; + } + function getPropertySymbolOfDestructuringAssignment(location) { + return ts.isArrayLiteralOrObjectLiteralDestructuringPattern(location.parent.parent) && + typeChecker.getPropertySymbolOfDestructuringAssignment(location); + } + function isObjectBindingPatternElementWithoutPropertyName(symbol) { + var bindingElement = ts.getDeclarationOfKind(symbol, 169 /* BindingElement */); + return bindingElement && + bindingElement.parent.kind === 167 /* ObjectBindingPattern */ && + !bindingElement.propertyName; + } + function getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol) { + if (isObjectBindingPatternElementWithoutPropertyName(symbol)) { + var bindingElement = ts.getDeclarationOfKind(symbol, 169 /* BindingElement */); + var typeOfPattern = typeChecker.getTypeAtLocation(bindingElement.parent); + return typeOfPattern && typeChecker.getPropertyOfType(typeOfPattern, bindingElement.name.text); + } + return undefined; } function getInternedName(symbol, location, declarations) { // If this is an export or import specifier it could have been renamed using the 'as' syntax. @@ -53386,14 +54493,14 @@ var ts; // If this is the symbol of a named function expression or named class expression, // then named references are limited to its own scope. var valueDeclaration = symbol.valueDeclaration; - if (valueDeclaration && (valueDeclaration.kind === 178 /* FunctionExpression */ || valueDeclaration.kind === 191 /* ClassExpression */)) { + if (valueDeclaration && (valueDeclaration.kind === 179 /* FunctionExpression */ || valueDeclaration.kind === 192 /* ClassExpression */)) { return valueDeclaration; } // If this is private property or method, the scope is the containing class if (symbol.flags & (4 /* Property */ | 8192 /* Method */)) { var privateDeclaration = ts.forEach(symbol.getDeclarations(), function (d) { return (d.flags & 8 /* Private */) ? d : undefined; }); if (privateDeclaration) { - return ts.getAncestor(privateDeclaration, 220 /* ClassDeclaration */); + return ts.getAncestor(privateDeclaration, 221 /* ClassDeclaration */); } } // If the symbol is an import we would like to find it if we are looking for what it imports. @@ -53401,6 +54508,11 @@ var ts; if (symbol.flags & 8388608 /* Alias */) { return undefined; } + // If symbol is of object binding pattern element without property name we would want to + // look for property too and that could be anywhere + if (isObjectBindingPatternElementWithoutPropertyName(symbol)) { + return undefined; + } // if this symbol is visible from its parent container, e.g. exported, then bail out // if symbol correspond to the union property - bail out if (symbol.parent || (symbol.flags & 268435456 /* SyntheticProperty */)) { @@ -53419,7 +54531,7 @@ var ts; // Different declarations have different containers, bail out return undefined; } - if (container.kind === 255 /* SourceFile */ && !ts.isExternalModule(container)) { + if (container.kind === 256 /* SourceFile */ && !ts.isExternalModule(container)) { // This is a global variable and not an external module, any declaration defined // within this scope is visible outside the file return undefined; @@ -53592,13 +54704,13 @@ var ts; // Whether 'super' occurs in a static context within a class. var staticFlag = 32 /* Static */; switch (searchSpaceNode.kind) { - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: staticFlag &= searchSpaceNode.flags; searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning class break; @@ -53630,27 +54742,27 @@ var ts; // Whether 'this' occurs in a static context within a class. var staticFlag = 32 /* Static */; switch (searchSpaceNode.kind) { - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: if (ts.isObjectLiteralMethod(searchSpaceNode)) { break; } // fall through - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: staticFlag &= searchSpaceNode.flags; searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning class break; - case 255 /* SourceFile */: + case 256 /* SourceFile */: if (ts.isExternalModule(searchSpaceNode)) { return undefined; } // Fall through - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: break; // Computed properties in classes are not handled here because references to this are illegal, // so there is no point finding references to them. @@ -53659,7 +54771,7 @@ var ts; } var references = []; var possiblePositions; - if (searchSpaceNode.kind === 255 /* SourceFile */) { + if (searchSpaceNode.kind === 256 /* SourceFile */) { ts.forEach(sourceFiles, function (sourceFile) { possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "this", sourceFile.getStart(), sourceFile.getEnd()); getThisReferencesInFile(sourceFile, sourceFile, possiblePositions, references); @@ -53685,33 +54797,33 @@ var ts; ts.forEach(possiblePositions, function (position) { cancellationToken.throwIfCancellationRequested(); var node = ts.getTouchingWord(sourceFile, position); - if (!node || (node.kind !== 97 /* ThisKeyword */ && node.kind !== 164 /* ThisType */)) { + if (!node || (node.kind !== 97 /* ThisKeyword */ && node.kind !== 165 /* ThisType */)) { return; } var container = ts.getThisContainer(node, /* includeArrowFunctions */ false); switch (searchSpaceNode.kind) { - case 178 /* FunctionExpression */: - case 219 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: if (searchSpaceNode.symbol === container.symbol) { result.push(getReferenceEntryFromNode(node)); } break; - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: if (ts.isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol) { result.push(getReferenceEntryFromNode(node)); } break; - case 191 /* ClassExpression */: - case 220 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 221 /* ClassDeclaration */: // Make sure the container belongs to the same class // and has the appropriate static modifier from the original container. if (container.parent && searchSpaceNode.symbol === container.parent.symbol && (container.flags & 32 /* Static */) === staticFlag) { result.push(getReferenceEntryFromNode(node)); } break; - case 255 /* SourceFile */: - if (container.kind === 255 /* SourceFile */ && !ts.isExternalModule(container)) { + case 256 /* SourceFile */: + if (container.kind === 256 /* SourceFile */ && !ts.isExternalModule(container)) { result.push(getReferenceEntryFromNode(node)); } break; @@ -53719,26 +54831,78 @@ var ts; }); } } + function getReferencesForStringLiteral(node, sourceFiles) { + var typeChecker = program.getTypeChecker(); + var type = getStringLiteralTypeForNode(node, typeChecker); + if (!type) { + // nothing to do here. moving on + return undefined; + } + var references = []; + for (var _i = 0, sourceFiles_5 = sourceFiles; _i < sourceFiles_5.length; _i++) { + var sourceFile = sourceFiles_5[_i]; + var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, type.text, sourceFile.getStart(), sourceFile.getEnd()); + getReferencesForStringLiteralInFile(sourceFile, type, possiblePositions, references); + } + return [{ + definition: { + containerKind: "", + containerName: "", + fileName: node.getSourceFile().fileName, + kind: ScriptElementKind.variableElement, + name: type.text, + textSpan: ts.createTextSpanFromBounds(node.getStart(), node.getEnd()) + }, + references: references + }]; + function getReferencesForStringLiteralInFile(sourceFile, searchType, possiblePositions, references) { + for (var _i = 0, possiblePositions_1 = possiblePositions; _i < possiblePositions_1.length; _i++) { + var position = possiblePositions_1[_i]; + cancellationToken.throwIfCancellationRequested(); + var node_2 = ts.getTouchingWord(sourceFile, position); + if (!node_2 || node_2.kind !== 9 /* StringLiteral */) { + return; + } + var type_1 = getStringLiteralTypeForNode(node_2, typeChecker); + if (type_1 === searchType) { + references.push(getReferenceEntryFromNode(node_2)); + } + } + } + } function populateSearchSymbolSet(symbol, location) { // The search set contains at least the current symbol var result = [symbol]; - // If the symbol is an alias, add what it aliases to the list - if (isImportSpecifierSymbol(symbol)) { - result.push(typeChecker.getAliasedSymbol(symbol)); + // If the location is name of property symbol from object literal destructuring pattern + // Search the property symbol + // for ( { property: p2 } of elems) { } + var containingObjectLiteralElement = getContainingObjectLiteralElement(location); + if (containingObjectLiteralElement && containingObjectLiteralElement.kind !== 254 /* ShorthandPropertyAssignment */) { + var propertySymbol = getPropertySymbolOfDestructuringAssignment(location); + if (propertySymbol) { + result.push(propertySymbol); + } } - // For export specifiers, the exported name can be referring to a local symbol, e.g.: + // If the symbol is an alias, add what it aliases to the list // import {a} from "mod"; - // export {a as somethingElse} - // We want the *local* declaration of 'a' as declared in the import, - // *not* as declared within "mod" (or farther) - if (location.parent.kind === 237 /* ExportSpecifier */) { - result.push(typeChecker.getExportSpecifierLocalTargetSymbol(location.parent)); + // export {a} + // If the symbol is an alias to default declaration, add what it aliases to the list + // declare "mod" { export default class B { } } + // import B from "mod"; + //// For export specifiers, the exported name can be referring to a local symbol, e.g.: + //// import {a} from "mod"; + //// export {a as somethingElse} + //// We want the *local* declaration of 'a' as declared in the import, + //// *not* as declared within "mod" (or farther) + var aliasSymbol = getAliasSymbolForPropertyNameSymbol(symbol, location); + if (aliasSymbol) { + result = result.concat(populateSearchSymbolSet(aliasSymbol, location)); } // If the location is in a context sensitive location (i.e. in an object literal) try // to get a contextual type for it, and add the property symbol from the contextual // type to the search set - if (isNameOfPropertyAssignment(location)) { - ts.forEach(getPropertySymbolsFromContextualType(location), function (contextualSymbol) { + if (containingObjectLiteralElement) { + ts.forEach(getPropertySymbolsFromContextualType(containingObjectLiteralElement), function (contextualSymbol) { ts.addRange(result, typeChecker.getRootSymbols(contextualSymbol)); }); /* Because in short-hand property assignment, location has two meaning : property name and as value of the property @@ -53761,10 +54925,16 @@ var ts; // we should include both parameter declaration symbol and property declaration symbol // Parameter Declaration symbol is only visible within function scope, so the symbol is stored in constructor.locals. // Property Declaration symbol is a member of the class, so the symbol is stored in its class Declaration.symbol.members - if (symbol.valueDeclaration && symbol.valueDeclaration.kind === 141 /* Parameter */ && + if (symbol.valueDeclaration && symbol.valueDeclaration.kind === 142 /* Parameter */ && ts.isParameterPropertyDeclaration(symbol.valueDeclaration)) { result = result.concat(typeChecker.getSymbolsOfParameterPropertyDeclaration(symbol.valueDeclaration, symbol.name)); } + // If this is symbol of binding element without propertyName declaration in Object binding pattern + // Include the property in the search + var bindingElementPropertySymbol = getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol); + if (bindingElementPropertySymbol) { + result.push(bindingElementPropertySymbol); + } // If this is a union property, add all the symbols from all its source symbols in all unioned types. // If the symbol is an instantiation from a another symbol (e.g. widened symbol) , add the root the list ts.forEach(typeChecker.getRootSymbols(symbol), function (rootSymbol) { @@ -53806,11 +54976,11 @@ var ts; } if (symbol.flags & (32 /* Class */ | 64 /* Interface */)) { ts.forEach(symbol.getDeclarations(), function (declaration) { - if (declaration.kind === 220 /* ClassDeclaration */) { + if (ts.isClassLike(declaration)) { getPropertySymbolFromTypeReference(ts.getClassExtendsHeritageClauseElement(declaration)); ts.forEach(ts.getClassImplementsHeritageClauseElements(declaration), getPropertySymbolFromTypeReference); } - else if (declaration.kind === 221 /* InterfaceDeclaration */) { + else if (declaration.kind === 222 /* InterfaceDeclaration */) { ts.forEach(ts.getInterfaceBaseTypeNodes(declaration), getPropertySymbolFromTypeReference); } }); @@ -53822,7 +54992,7 @@ var ts; if (type) { var propertySymbol = typeChecker.getPropertyOfType(type, propertyName); if (propertySymbol) { - result.push(propertySymbol); + result.push.apply(result, typeChecker.getRootSymbols(propertySymbol)); } // Visit the typeReference as well to see if it directly or indirectly use that property previousIterationSymbolsCache[symbol.name] = symbol; @@ -53836,30 +55006,37 @@ var ts; return referenceSymbol; } // If the reference symbol is an alias, check if what it is aliasing is one of the search - // symbols. - if (isImportSpecifierSymbol(referenceSymbol)) { - var aliasedSymbol = typeChecker.getAliasedSymbol(referenceSymbol); - if (searchSymbols.indexOf(aliasedSymbol) >= 0) { - return aliasedSymbol; - } - } - // For export specifiers, it can be a local symbol, e.g. - // import {a} from "mod"; - // export {a as somethingElse} - // We want the local target of the export (i.e. the import symbol) and not the final target (i.e. "mod".a) - if (referenceLocation.parent.kind === 237 /* ExportSpecifier */) { - var aliasedSymbol = typeChecker.getExportSpecifierLocalTargetSymbol(referenceLocation.parent); - if (searchSymbols.indexOf(aliasedSymbol) >= 0) { - return aliasedSymbol; - } + // symbols but by looking up for related symbol of this alias so it can handle multiple level of indirectness. + var aliasSymbol = getAliasSymbolForPropertyNameSymbol(referenceSymbol, referenceLocation); + if (aliasSymbol) { + return getRelatedSymbol(searchSymbols, aliasSymbol, referenceLocation); } // If the reference location is in an object literal, try to get the contextual type for the // object literal, lookup the property symbol in the contextual type, and use this symbol to // compare to our searchSymbol - if (isNameOfPropertyAssignment(referenceLocation)) { - return ts.forEach(getPropertySymbolsFromContextualType(referenceLocation), function (contextualSymbol) { + var containingObjectLiteralElement = getContainingObjectLiteralElement(referenceLocation); + if (containingObjectLiteralElement) { + var contextualSymbol = ts.forEach(getPropertySymbolsFromContextualType(containingObjectLiteralElement), function (contextualSymbol) { return ts.forEach(typeChecker.getRootSymbols(contextualSymbol), function (s) { return searchSymbols.indexOf(s) >= 0 ? s : undefined; }); }); + if (contextualSymbol) { + return contextualSymbol; + } + // If the reference location is the name of property from object literal destructuring pattern + // Get the property symbol from the object literal's type and look if thats the search symbol + // In below eg. get 'property' from type of elems iterating type + // for ( { property: p2 } of elems) { } + var propertySymbol = getPropertySymbolOfDestructuringAssignment(referenceLocation); + if (propertySymbol && searchSymbols.indexOf(propertySymbol) >= 0) { + return propertySymbol; + } + } + // If the reference location is the binding element and doesn't have property name + // then include the binding element in the related symbols + // let { a } : { a }; + var bindingElementPropertySymbol = getPropertySymbolOfObjectBindingPatternWithoutPropertyName(referenceSymbol); + if (bindingElementPropertySymbol && searchSymbols.indexOf(bindingElementPropertySymbol) >= 0) { + return bindingElementPropertySymbol; } // Unwrap symbols to get to the root (e.g. transient symbols as a result of widening) // Or a union property, use its underlying unioned symbols @@ -53878,37 +55055,36 @@ var ts; return undefined; }); } - function getPropertySymbolsFromContextualType(node) { - if (isNameOfPropertyAssignment(node)) { - var objectLiteral = node.parent.parent; - var contextualType = typeChecker.getContextualType(objectLiteral); - var name_41 = node.text; - if (contextualType) { - if (contextualType.flags & 16384 /* Union */) { - // This is a union type, first see if the property we are looking for is a union property (i.e. exists in all types) - // if not, search the constituent types for the property - var unionProperty = contextualType.getProperty(name_41); - if (unionProperty) { - return [unionProperty]; - } - else { - var result_5 = []; - ts.forEach(contextualType.types, function (t) { - var symbol = t.getProperty(name_41); - if (symbol) { - result_5.push(symbol); - } - }); - return result_5; - } - } - else { - var symbol_1 = contextualType.getProperty(name_41); - if (symbol_1) { - return [symbol_1]; - } - } + function getNameFromObjectLiteralElement(node) { + if (node.name.kind === 140 /* ComputedPropertyName */) { + var nameExpression = node.name.expression; + // treat computed property names where expression is string/numeric literal as just string/numeric literal + if (ts.isStringOrNumericLiteral(nameExpression.kind)) { + return nameExpression.text; } + return undefined; + } + return node.name.text; + } + function getPropertySymbolsFromContextualType(node) { + var objectLiteral = node.parent; + var contextualType = typeChecker.getContextualType(objectLiteral); + var name = getNameFromObjectLiteralElement(node); + if (name && contextualType) { + var result_5 = []; + var symbol_1 = contextualType.getProperty(name); + if (symbol_1) { + result_5.push(symbol_1); + } + if (contextualType.flags & 16384 /* Union */) { + ts.forEach(contextualType.types, function (t) { + var symbol = t.getProperty(name); + if (symbol) { + result_5.push(symbol); + } + }); + } + return result_5; } return undefined; } @@ -53961,10 +55137,10 @@ var ts; } var parent = node.parent; if (parent) { - if (parent.kind === 185 /* PostfixUnaryExpression */ || parent.kind === 184 /* PrefixUnaryExpression */) { + if (parent.kind === 186 /* PostfixUnaryExpression */ || parent.kind === 185 /* PrefixUnaryExpression */) { return true; } - else if (parent.kind === 186 /* BinaryExpression */ && parent.left === node) { + else if (parent.kind === 187 /* BinaryExpression */ && parent.left === node) { var operator = parent.operatorToken.kind; return 56 /* FirstAssignment */ <= operator && operator <= 68 /* LastAssignment */; } @@ -53995,33 +55171,33 @@ var ts; } function getMeaningFromDeclaration(node) { switch (node.kind) { - case 141 /* Parameter */: - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 252 /* PropertyAssignment */: - case 253 /* ShorthandPropertyAssignment */: - case 254 /* EnumMember */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 251 /* CatchClause */: + case 142 /* Parameter */: + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 253 /* PropertyAssignment */: + case 254 /* ShorthandPropertyAssignment */: + case 255 /* EnumMember */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 252 /* CatchClause */: return 1 /* Value */; - case 140 /* TypeParameter */: - case 221 /* InterfaceDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 158 /* TypeLiteral */: + case 141 /* TypeParameter */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 159 /* TypeLiteral */: return 2 /* Type */; - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: return 1 /* Value */ | 2 /* Type */; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: if (ts.isAmbientModule(node)) { return 4 /* Namespace */ | 1 /* Value */; } @@ -54031,15 +55207,15 @@ var ts; else { return 4 /* Namespace */; } - case 232 /* NamedImports */: - case 233 /* ImportSpecifier */: - case 228 /* ImportEqualsDeclaration */: - case 229 /* ImportDeclaration */: - case 234 /* ExportAssignment */: - case 235 /* ExportDeclaration */: + case 233 /* NamedImports */: + case 234 /* ImportSpecifier */: + case 229 /* ImportEqualsDeclaration */: + case 230 /* ImportDeclaration */: + case 235 /* ExportAssignment */: + case 236 /* ExportDeclaration */: return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; // An external module can be a Value - case 255 /* SourceFile */: + case 256 /* SourceFile */: return 4 /* Namespace */ | 1 /* Value */; } return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; @@ -54048,10 +55224,10 @@ var ts; if (ts.isRightSideOfQualifiedNameOrPropertyAccess(node)) { node = node.parent; } - return node.parent.kind === 154 /* TypeReference */ || - (node.parent.kind === 193 /* ExpressionWithTypeArguments */ && !ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent)) || + return node.parent.kind === 155 /* TypeReference */ || + (node.parent.kind === 194 /* ExpressionWithTypeArguments */ && !ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent)) || (node.kind === 97 /* ThisKeyword */ && !ts.isExpression(node)) || - node.kind === 164 /* ThisType */; + node.kind === 165 /* ThisType */; } function isNamespaceReference(node) { return isQualifiedNameNamespaceReference(node) || isPropertyAccessNamespaceReference(node); @@ -54059,32 +55235,32 @@ var ts; function isPropertyAccessNamespaceReference(node) { var root = node; var isLastClause = true; - if (root.parent.kind === 171 /* PropertyAccessExpression */) { - while (root.parent && root.parent.kind === 171 /* PropertyAccessExpression */) { + if (root.parent.kind === 172 /* PropertyAccessExpression */) { + while (root.parent && root.parent.kind === 172 /* PropertyAccessExpression */) { root = root.parent; } isLastClause = root.name === node; } - if (!isLastClause && root.parent.kind === 193 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 250 /* HeritageClause */) { + if (!isLastClause && root.parent.kind === 194 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 251 /* HeritageClause */) { var decl = root.parent.parent.parent; - return (decl.kind === 220 /* ClassDeclaration */ && root.parent.parent.token === 106 /* ImplementsKeyword */) || - (decl.kind === 221 /* InterfaceDeclaration */ && root.parent.parent.token === 83 /* ExtendsKeyword */); + return (decl.kind === 221 /* ClassDeclaration */ && root.parent.parent.token === 106 /* ImplementsKeyword */) || + (decl.kind === 222 /* InterfaceDeclaration */ && root.parent.parent.token === 83 /* ExtendsKeyword */); } return false; } function isQualifiedNameNamespaceReference(node) { var root = node; var isLastClause = true; - if (root.parent.kind === 138 /* QualifiedName */) { - while (root.parent && root.parent.kind === 138 /* QualifiedName */) { + if (root.parent.kind === 139 /* QualifiedName */) { + while (root.parent && root.parent.kind === 139 /* QualifiedName */) { root = root.parent; } isLastClause = root.right === node; } - return root.parent.kind === 154 /* TypeReference */ && !isLastClause; + return root.parent.kind === 155 /* TypeReference */ && !isLastClause; } function isInRightSideOfImport(node) { - while (node.parent.kind === 138 /* QualifiedName */) { + while (node.parent.kind === 139 /* QualifiedName */) { node = node.parent; } return ts.isInternalModuleImportEqualsDeclaration(node.parent) && node.parent.moduleReference === node; @@ -54094,15 +55270,15 @@ var ts; // import a = |b|; // Namespace // import a = |b.c|; // Value, type, namespace // import a = |b.c|.d; // Namespace - if (node.parent.kind === 138 /* QualifiedName */ && + if (node.parent.kind === 139 /* QualifiedName */ && node.parent.right === node && - node.parent.parent.kind === 228 /* ImportEqualsDeclaration */) { + node.parent.parent.kind === 229 /* ImportEqualsDeclaration */) { return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; } return 4 /* Namespace */; } function getMeaningFromLocation(node) { - if (node.parent.kind === 234 /* ExportAssignment */) { + if (node.parent.kind === 235 /* ExportAssignment */) { return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; } else if (isInRightSideOfImport(node)) { @@ -54138,20 +55314,20 @@ var ts; var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); // Get node at the location var node = ts.getTouchingPropertyName(sourceFile, startPos); - if (!node) { + if (node === sourceFile) { return; } switch (node.kind) { - case 171 /* PropertyAccessExpression */: - case 138 /* QualifiedName */: + case 172 /* PropertyAccessExpression */: + case 139 /* QualifiedName */: case 9 /* StringLiteral */: - case 165 /* StringLiteralType */: + case 166 /* StringLiteralType */: case 84 /* FalseKeyword */: case 99 /* TrueKeyword */: case 93 /* NullKeyword */: case 95 /* SuperKeyword */: case 97 /* ThisKeyword */: - case 164 /* ThisType */: + case 165 /* ThisType */: case 69 /* Identifier */: break; // Cant create the text span @@ -54168,7 +55344,7 @@ var ts; // If this is name of a module declarations, check if this is right side of dotted module name // If parent of the module declaration which is parent of this node is module declaration and its body is the module declaration that this node is name of // Then this name is name from dotted module - if (nodeForStartPos.parent.parent.kind === 224 /* ModuleDeclaration */ && + if (nodeForStartPos.parent.parent.kind === 225 /* ModuleDeclaration */ && nodeForStartPos.parent.parent.body === nodeForStartPos.parent) { // Use parent module declarations name for start pos nodeForStartPos = nodeForStartPos.parent.parent.name; @@ -54209,10 +55385,10 @@ var ts; // That means we're calling back into the host around every 1.2k of the file we process. // Lib.d.ts has similar numbers. switch (kind) { - case 224 /* ModuleDeclaration */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 219 /* FunctionDeclaration */: + case 225 /* ModuleDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 220 /* FunctionDeclaration */: cancellationToken.throwIfCancellationRequested(); } } @@ -54266,7 +55442,7 @@ var ts; */ function hasValueSideModule(symbol) { return ts.forEach(symbol.declarations, function (declaration) { - return declaration.kind === 224 /* ModuleDeclaration */ && + return declaration.kind === 225 /* ModuleDeclaration */ && ts.getModuleInstanceState(declaration) === 1 /* Instantiated */; }); } @@ -54427,16 +55603,16 @@ var ts; pushClassification(tag.tagName.pos, tag.tagName.end - tag.tagName.pos, 18 /* docCommentTagName */); pos = tag.tagName.end; switch (tag.kind) { - case 274 /* JSDocParameterTag */: + case 275 /* JSDocParameterTag */: processJSDocParameterTag(tag); break; - case 277 /* JSDocTemplateTag */: + case 278 /* JSDocTemplateTag */: processJSDocTemplateTag(tag); break; - case 276 /* JSDocTypeTag */: + case 277 /* JSDocTypeTag */: processElement(tag.typeExpression); break; - case 275 /* JSDocReturnTag */: + case 276 /* JSDocReturnTag */: processElement(tag.typeExpression); break; } @@ -54503,10 +55679,10 @@ var ts; return true; } var classifiedElementName = tryClassifyJsxElementName(node); - if (!ts.isToken(node) && node.kind !== 243 /* JsxText */ && classifiedElementName === undefined) { + if (!ts.isToken(node) && node.kind !== 244 /* JsxText */ && classifiedElementName === undefined) { return false; } - var tokenStart = node.kind === 243 /* JsxText */ ? node.pos : classifyLeadingTriviaAndGetTokenStart(node); + var tokenStart = node.kind === 244 /* JsxText */ ? node.pos : classifyLeadingTriviaAndGetTokenStart(node); var tokenWidth = node.end - tokenStart; ts.Debug.assert(tokenWidth >= 0); if (tokenWidth > 0) { @@ -54519,22 +55695,22 @@ var ts; } function tryClassifyJsxElementName(token) { switch (token.parent && token.parent.kind) { - case 242 /* JsxOpeningElement */: + case 243 /* JsxOpeningElement */: if (token.parent.tagName === token) { return 19 /* jsxOpenTagName */; } break; - case 244 /* JsxClosingElement */: + case 245 /* JsxClosingElement */: if (token.parent.tagName === token) { return 20 /* jsxCloseTagName */; } break; - case 241 /* JsxSelfClosingElement */: + case 242 /* JsxSelfClosingElement */: if (token.parent.tagName === token) { return 21 /* jsxSelfClosingTagName */; } break; - case 245 /* JsxAttribute */: + case 246 /* JsxAttribute */: if (token.parent.name === token) { return 22 /* jsxAttribute */; } @@ -54562,17 +55738,17 @@ var ts; if (token) { if (tokenKind === 56 /* EqualsToken */) { // the '=' in a variable declaration is special cased here. - if (token.parent.kind === 217 /* VariableDeclaration */ || - token.parent.kind === 144 /* PropertyDeclaration */ || - token.parent.kind === 141 /* Parameter */ || - token.parent.kind === 245 /* JsxAttribute */) { + if (token.parent.kind === 218 /* VariableDeclaration */ || + token.parent.kind === 145 /* PropertyDeclaration */ || + token.parent.kind === 142 /* Parameter */ || + token.parent.kind === 246 /* JsxAttribute */) { return 5 /* operator */; } } - if (token.parent.kind === 186 /* BinaryExpression */ || - token.parent.kind === 184 /* PrefixUnaryExpression */ || - token.parent.kind === 185 /* PostfixUnaryExpression */ || - token.parent.kind === 187 /* ConditionalExpression */) { + if (token.parent.kind === 187 /* BinaryExpression */ || + token.parent.kind === 185 /* PrefixUnaryExpression */ || + token.parent.kind === 186 /* PostfixUnaryExpression */ || + token.parent.kind === 188 /* ConditionalExpression */) { return 5 /* operator */; } } @@ -54581,8 +55757,8 @@ var ts; else if (tokenKind === 8 /* NumericLiteral */) { return 4 /* numericLiteral */; } - else if (tokenKind === 9 /* StringLiteral */ || tokenKind === 165 /* StringLiteralType */) { - return token.parent.kind === 245 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */; + else if (tokenKind === 9 /* StringLiteral */ || tokenKind === 166 /* StringLiteralType */) { + return token.parent.kind === 246 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */; } else if (tokenKind === 10 /* RegularExpressionLiteral */) { // TODO: we should get another classification type for these literals. @@ -54592,38 +55768,38 @@ var ts; // TODO (drosen): we should *also* get another classification type for these literals. return 6 /* stringLiteral */; } - else if (tokenKind === 243 /* JsxText */) { + else if (tokenKind === 244 /* JsxText */) { return 23 /* jsxText */; } else if (tokenKind === 69 /* Identifier */) { if (token) { switch (token.parent.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: if (token.parent.name === token) { return 11 /* className */; } return; - case 140 /* TypeParameter */: + case 141 /* TypeParameter */: if (token.parent.name === token) { return 15 /* typeParameterName */; } return; - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: if (token.parent.name === token) { return 13 /* interfaceName */; } return; - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: if (token.parent.name === token) { return 12 /* enumName */; } return; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: if (token.parent.name === token) { return 14 /* moduleName */; } return; - case 141 /* Parameter */: + case 142 /* Parameter */: if (token.parent.name === token) { return 17 /* parameterName */; } @@ -54767,19 +55943,19 @@ var ts; var commentOwner; findOwner: for (commentOwner = tokenAtPos; commentOwner; commentOwner = commentOwner.parent) { switch (commentOwner.kind) { - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 147 /* Constructor */: - case 220 /* ClassDeclaration */: - case 199 /* VariableStatement */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 148 /* Constructor */: + case 221 /* ClassDeclaration */: + case 200 /* VariableStatement */: break findOwner; - case 255 /* SourceFile */: + case 256 /* SourceFile */: return undefined; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: // If in walking up the tree, we hit a a nested namespace declaration, // then we must be somewhere within a dotted namespace name; however we don't // want to give back a JSDoc template for the 'b' or 'c' in 'namespace a.b.c { }'. - if (commentOwner.parent.kind === 224 /* ModuleDeclaration */) { + if (commentOwner.parent.kind === 225 /* ModuleDeclaration */) { return undefined; } break findOwner; @@ -54816,11 +55992,34 @@ var ts; (tokenStart === position ? newLine + indentationStr : ""); return { newText: result, caretOffset: preamble.length }; } + function isValidBraceCompletionAtPostion(fileName, position, openingBrace) { + // '<' is currently not supported, figuring out if we're in a Generic Type vs. a comparison is too + // expensive to do during typing scenarios + // i.e. whether we're dealing with: + // var x = new foo<| ( with class foo{} ) + // or + // var y = 3 <| + if (openingBrace === 60 /* lessThan */) { + return false; + } + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + // Check if in a context where we don't want to perform any insertion + if (ts.isInString(sourceFile, position) || ts.isInComment(sourceFile, position)) { + return false; + } + if (ts.isInsideJsxElementOrAttribute(sourceFile, position)) { + return openingBrace === 123 /* openBrace */; + } + if (ts.isInTemplateString(sourceFile, position)) { + return false; + } + return true; + } function getParametersForJsDocOwningNode(commentOwner) { if (ts.isFunctionLike(commentOwner)) { return commentOwner.parameters; } - if (commentOwner.kind === 199 /* VariableStatement */) { + if (commentOwner.kind === 200 /* VariableStatement */) { var varStatement = commentOwner; var varDeclarations = varStatement.declarationList.declarations; if (varDeclarations.length === 1 && varDeclarations[0].initializer) { @@ -54838,17 +56037,17 @@ var ts; * @returns the parameters of a signature found on the RHS if one exists; otherwise 'emptyArray'. */ function getParametersFromRightHandSideOfAssignment(rightHandSide) { - while (rightHandSide.kind === 177 /* ParenthesizedExpression */) { + while (rightHandSide.kind === 178 /* ParenthesizedExpression */) { rightHandSide = rightHandSide.expression; } switch (rightHandSide.kind) { - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return rightHandSide.parameters; - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: for (var _i = 0, _a = rightHandSide.members; _i < _a.length; _i++) { var member = _a[_i]; - if (member.kind === 147 /* Constructor */) { + if (member.kind === 148 /* Constructor */) { return member.parameters; } } @@ -54980,47 +56179,68 @@ var ts; (char >= 48 /* _0 */ && char <= 57 /* _9 */); } } + function getStringLiteralTypeForNode(node, typeChecker) { + var searchNode = node.parent.kind === 166 /* StringLiteralType */ ? node.parent : node; + var type = typeChecker.getTypeAtLocation(searchNode); + if (type && type.flags & 256 /* StringLiteral */) { + return type; + } + return undefined; + } function getRenameInfo(fileName, position) { synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var typeChecker = program.getTypeChecker(); + var defaultLibFileName = host.getDefaultLibFileName(host.getCompilationSettings()); + var canonicalDefaultLibName = getCanonicalFileName(ts.normalizePath(defaultLibFileName)); var node = ts.getTouchingWord(sourceFile, position); // Can only rename an identifier. - if (node && node.kind === 69 /* Identifier */) { - var symbol = typeChecker.getSymbolAtLocation(node); - // Only allow a symbol to be renamed if it actually has at least one declaration. - if (symbol) { - var declarations = symbol.getDeclarations(); - if (declarations && declarations.length > 0) { - // Disallow rename for elements that are defined in the standard TypeScript library. - var defaultLibFileName = host.getDefaultLibFileName(host.getCompilationSettings()); - var canonicalDefaultLibName = getCanonicalFileName(ts.normalizePath(defaultLibFileName)); - if (defaultLibFileName) { - for (var _i = 0, declarations_11 = declarations; _i < declarations_11.length; _i++) { - var current = declarations_11[_i]; - var sourceFile_3 = current.getSourceFile(); - // TODO (drosen): When is there no source file? - if (!sourceFile_3) { - continue; - } - var canonicalName = getCanonicalFileName(ts.normalizePath(sourceFile_3.fileName)); - if (canonicalName === canonicalDefaultLibName) { - return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library)); - } + if (node) { + if (node.kind === 69 /* Identifier */ || + node.kind === 9 /* StringLiteral */ || + isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + var symbol = typeChecker.getSymbolAtLocation(node); + // Only allow a symbol to be renamed if it actually has at least one declaration. + if (symbol) { + var declarations = symbol.getDeclarations(); + if (declarations && declarations.length > 0) { + // Disallow rename for elements that are defined in the standard TypeScript library. + if (ts.forEach(declarations, isDefinedInLibraryFile)) { + return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library)); + } + var displayName = ts.stripQuotes(ts.getDeclaredName(typeChecker, symbol, node)); + var kind = getSymbolKind(symbol, node); + if (kind) { + return { + canRename: true, + kind: kind, + displayName: displayName, + localizedErrorMessage: undefined, + fullDisplayName: typeChecker.getFullyQualifiedName(symbol), + kindModifiers: getSymbolModifiers(symbol), + triggerSpan: createTriggerSpanForNode(node, sourceFile) + }; } } - var displayName = ts.stripQuotes(ts.getDeclaredName(typeChecker, symbol, node)); - var kind = getSymbolKind(symbol, node); - if (kind) { - return { - canRename: true, - kind: kind, - displayName: displayName, - localizedErrorMessage: undefined, - fullDisplayName: typeChecker.getFullyQualifiedName(symbol), - kindModifiers: getSymbolModifiers(symbol), - triggerSpan: ts.createTextSpan(node.getStart(), node.getWidth()) - }; + } + else if (node.kind === 9 /* StringLiteral */) { + var type = getStringLiteralTypeForNode(node, typeChecker); + if (type) { + if (isDefinedInLibraryFile(node)) { + return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library)); + } + else { + var displayName = ts.stripQuotes(type.text); + return { + canRename: true, + kind: ScriptElementKind.variableElement, + displayName: displayName, + localizedErrorMessage: undefined, + fullDisplayName: displayName, + kindModifiers: ScriptElementKindModifier.none, + triggerSpan: createTriggerSpanForNode(node, sourceFile) + }; + } } } } @@ -55037,6 +56257,26 @@ var ts; triggerSpan: undefined }; } + function isDefinedInLibraryFile(declaration) { + if (defaultLibFileName) { + var sourceFile_3 = declaration.getSourceFile(); + var canonicalName = getCanonicalFileName(ts.normalizePath(sourceFile_3.fileName)); + if (canonicalName === canonicalDefaultLibName) { + return true; + } + } + return false; + } + function createTriggerSpanForNode(node, sourceFile) { + var start = node.getStart(sourceFile); + var width = node.getWidth(sourceFile); + if (node.kind === 9 /* StringLiteral */) { + // Exclude the quotes + start += 1; + width -= 2; + } + return ts.createTextSpan(start, width); + } } return { dispose: dispose, @@ -55072,6 +56312,7 @@ var ts; getFormattingEditsForDocument: getFormattingEditsForDocument, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, getDocCommentTemplateAtPosition: getDocCommentTemplateAtPosition, + isValidBraceCompletionAtPostion: isValidBraceCompletionAtPostion, getEmitOutput: getEmitOutput, getNonBoundSourceFile: getNonBoundSourceFile, getProgram: getProgram @@ -55102,8 +56343,9 @@ var ts; // then we want 'something' to be in the name table. Similarly, if we have // "a['propname']" then we want to store "propname" in the name table. if (ts.isDeclarationName(node) || - node.parent.kind === 239 /* ExternalModuleReference */ || - isArgumentOfElementAccessExpression(node)) { + node.parent.kind === 240 /* ExternalModuleReference */ || + isArgumentOfElementAccessExpression(node) || + ts.isLiteralComputedPropertyDeclarationName(node)) { nameTable[node.text] = nameTable[node.text] === undefined ? node.pos : -1; } break; @@ -55115,7 +56357,7 @@ var ts; function isArgumentOfElementAccessExpression(node) { return node && node.parent && - node.parent.kind === 172 /* ElementAccessExpression */ && + node.parent.kind === 173 /* ElementAccessExpression */ && node.parent.argumentExpression === node; } /// Classifier @@ -55163,7 +56405,7 @@ var ts; function canFollow(keyword1, keyword2) { if (ts.isAccessibilityModifier(keyword1)) { if (keyword2 === 123 /* GetKeyword */ || - keyword2 === 130 /* SetKeyword */ || + keyword2 === 131 /* SetKeyword */ || keyword2 === 121 /* ConstructorKeyword */ || keyword2 === 113 /* StaticKeyword */) { // Allow things like "public get", "public constructor" and "public static". @@ -55322,10 +56564,10 @@ var ts; angleBracketStack--; } else if (token === 117 /* AnyKeyword */ || - token === 131 /* StringKeyword */ || - token === 129 /* NumberKeyword */ || + token === 132 /* StringKeyword */ || + token === 130 /* NumberKeyword */ || token === 120 /* BooleanKeyword */ || - token === 132 /* SymbolKeyword */) { + token === 133 /* SymbolKeyword */) { if (angleBracketStack > 0 && !syntacticClassifierAbsent) { // If it looks like we're could be in something generic, don't classify this // as a keyword. We may just get overwritten by the syntactic classifier, @@ -55374,7 +56616,7 @@ var ts; var end = scanner.getTextPos(); addResult(start, end, classFromKind(token)); if (end >= text.length) { - if (token === 9 /* StringLiteral */ || token === 165 /* StringLiteralType */) { + if (token === 9 /* StringLiteral */ || token === 166 /* StringLiteralType */) { // Check to see if we finished up on a multiline string literal. var tokenText = scanner.getTokenText(); if (scanner.isUnterminated()) { @@ -55497,7 +56739,7 @@ var ts; } } function isKeyword(token) { - return token >= 70 /* FirstKeyword */ && token <= 137 /* LastKeyword */; + return token >= 70 /* FirstKeyword */ && token <= 138 /* LastKeyword */; } function classFromKind(token) { if (isKeyword(token)) { @@ -55513,7 +56755,7 @@ var ts; case 8 /* NumericLiteral */: return 4 /* numericLiteral */; case 9 /* StringLiteral */: - case 165 /* StringLiteralType */: + case 166 /* StringLiteralType */: return 6 /* stringLiteral */; case 10 /* RegularExpressionLiteral */: return 7 /* regularExpressionLiteral */; @@ -55587,7 +56829,7 @@ var ts; // token at position will return let keyword on second line as the token but we would like to use // token on same line if trailing trivia (comments or white spaces on same line) part of the last token on that line tokenAtLocation = ts.findPrecedingToken(tokenAtLocation.pos, sourceFile); - // Its a blank line + // It's a blank line if (!tokenAtLocation || sourceFile.getLineAndCharacterOfPosition(tokenAtLocation.getEnd()).line !== lineOfPosition) { return undefined; } @@ -55625,113 +56867,113 @@ var ts; function spanInNode(node) { if (node) { switch (node.kind) { - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: // Span on first variable declaration return spanInVariableDeclaration(node.declarationList.declarations[0]); - case 217 /* VariableDeclaration */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 218 /* VariableDeclaration */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return spanInVariableDeclaration(node); - case 141 /* Parameter */: + case 142 /* Parameter */: return spanInParameterDeclaration(node); - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 147 /* Constructor */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 148 /* Constructor */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return spanInFunctionDeclaration(node); - case 198 /* Block */: + case 199 /* Block */: if (ts.isFunctionBlock(node)) { return spanInFunctionBlock(node); } // Fall through - case 225 /* ModuleBlock */: + case 226 /* ModuleBlock */: return spanInBlock(node); - case 251 /* CatchClause */: + case 252 /* CatchClause */: return spanInBlock(node.block); - case 201 /* ExpressionStatement */: + case 202 /* ExpressionStatement */: // span on the expression return textSpan(node.expression); - case 210 /* ReturnStatement */: + case 211 /* ReturnStatement */: // span on return keyword and expression if present return textSpan(node.getChildAt(0), node.expression); - case 204 /* WhileStatement */: + case 205 /* WhileStatement */: // Span on while(...) return textSpanEndingAtNextToken(node, node.expression); - case 203 /* DoStatement */: + case 204 /* DoStatement */: // span in statement of the do statement return spanInNode(node.statement); - case 216 /* DebuggerStatement */: + case 217 /* DebuggerStatement */: // span on debugger keyword return textSpan(node.getChildAt(0)); - case 202 /* IfStatement */: + case 203 /* IfStatement */: // set on if(..) span return textSpanEndingAtNextToken(node, node.expression); - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: // span in statement return spanInNode(node.statement); - case 209 /* BreakStatement */: - case 208 /* ContinueStatement */: + case 210 /* BreakStatement */: + case 209 /* ContinueStatement */: // On break or continue keyword and label if present return textSpan(node.getChildAt(0), node.label); - case 205 /* ForStatement */: + case 206 /* ForStatement */: return spanInForStatement(node); - case 206 /* ForInStatement */: + case 207 /* ForInStatement */: // span of for (a in ...) return textSpanEndingAtNextToken(node, node.expression); - case 207 /* ForOfStatement */: + case 208 /* ForOfStatement */: // span in initializer return spanInInitializerOfForLike(node); - case 212 /* SwitchStatement */: + case 213 /* SwitchStatement */: // span on switch(...) return textSpanEndingAtNextToken(node, node.expression); - case 248 /* CaseClause */: - case 249 /* DefaultClause */: + case 249 /* CaseClause */: + case 250 /* DefaultClause */: // span in first statement of the clause return spanInNode(node.statements[0]); - case 215 /* TryStatement */: + case 216 /* TryStatement */: // span in try block return spanInBlock(node.tryBlock); - case 214 /* ThrowStatement */: + case 215 /* ThrowStatement */: // span in throw ... return textSpan(node, node.expression); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: // span on export = id return textSpan(node, node.expression); - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: // import statement without including semicolon return textSpan(node, node.moduleReference); - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: // import statement without including semicolon return textSpan(node, node.moduleSpecifier); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: // import statement without including semicolon return textSpan(node, node.moduleSpecifier); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: // span on complete module if it is instantiated if (ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { return undefined; } - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: - case 254 /* EnumMember */: - case 168 /* BindingElement */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: + case 255 /* EnumMember */: + case 169 /* BindingElement */: // span on complete node return textSpan(node); - case 211 /* WithStatement */: + case 212 /* WithStatement */: // span in statement return spanInNode(node.statement); - case 142 /* Decorator */: + case 143 /* Decorator */: return spanInNodeArray(node.parent.decorators); - case 166 /* ObjectBindingPattern */: - case 167 /* ArrayBindingPattern */: + case 167 /* ObjectBindingPattern */: + case 168 /* ArrayBindingPattern */: return spanInBindingPattern(node); // No breakpoint in interface, type alias - case 221 /* InterfaceDeclaration */: - case 222 /* TypeAliasDeclaration */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: return undefined; // Tokens: case 23 /* SemicolonToken */: @@ -55761,7 +57003,7 @@ var ts; case 72 /* CatchKeyword */: case 85 /* FinallyKeyword */: return spanInNextNode(node); - case 137 /* OfKeyword */: + case 138 /* OfKeyword */: return spanInOfKeyword(node); default: // Destructuring pattern in destructuring assignment @@ -55774,13 +57016,13 @@ var ts; // a or ...c or d: x from // [a, b, ...c] or { a, b } or { d: x } from destructuring pattern if ((node.kind === 69 /* Identifier */ || - node.kind == 190 /* SpreadElementExpression */ || - node.kind === 252 /* PropertyAssignment */ || - node.kind === 253 /* ShorthandPropertyAssignment */) && + node.kind == 191 /* SpreadElementExpression */ || + node.kind === 253 /* PropertyAssignment */ || + node.kind === 254 /* ShorthandPropertyAssignment */) && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) { return textSpan(node); } - if (node.kind === 186 /* BinaryExpression */) { + if (node.kind === 187 /* BinaryExpression */) { var binaryExpression = node; // Set breakpoint in destructuring pattern if its destructuring assignment // [a, b, c] or {a, b, c} of @@ -55803,22 +57045,22 @@ var ts; } if (ts.isExpression(node)) { switch (node.parent.kind) { - case 203 /* DoStatement */: + case 204 /* DoStatement */: // Set span as if on while keyword return spanInPreviousNode(node); - case 142 /* Decorator */: + case 143 /* Decorator */: // Set breakpoint on the decorator emit return spanInNode(node.parent); - case 205 /* ForStatement */: - case 207 /* ForOfStatement */: + case 206 /* ForStatement */: + case 208 /* ForOfStatement */: return textSpan(node); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: if (node.parent.operatorToken.kind === 24 /* CommaToken */) { - // if this is comma expression, the breakpoint is possible in this expression + // If this is a comma expression, the breakpoint is possible in this expression return textSpan(node); } break; - case 179 /* ArrowFunction */: + case 180 /* ArrowFunction */: if (node.parent.body === node) { // If this is body of arrow function, it is allowed to have the breakpoint return textSpan(node); @@ -55827,13 +57069,13 @@ var ts; } } // If this is name of property assignment, set breakpoint in the initializer - if (node.parent.kind === 252 /* PropertyAssignment */ && + if (node.parent.kind === 253 /* PropertyAssignment */ && node.parent.name === node && !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.parent)) { return spanInNode(node.parent.initializer); } // Breakpoint in type assertion goes to its operand - if (node.parent.kind === 176 /* TypeAssertionExpression */ && node.parent.type === node) { + if (node.parent.kind === 177 /* TypeAssertionExpression */ && node.parent.type === node) { return spanInNextNode(node.parent.type); } // return type of function go to previous token @@ -55841,8 +57083,8 @@ var ts; return spanInPreviousNode(node); } // initializer of variable/parameter declaration go to previous node - if ((node.parent.kind === 217 /* VariableDeclaration */ || - node.parent.kind === 141 /* Parameter */)) { + if ((node.parent.kind === 218 /* VariableDeclaration */ || + node.parent.kind === 142 /* Parameter */)) { var paramOrVarDecl = node.parent; if (paramOrVarDecl.initializer === node || paramOrVarDecl.type === node || @@ -55850,7 +57092,7 @@ var ts; return spanInPreviousNode(node); } } - if (node.parent.kind === 186 /* BinaryExpression */) { + if (node.parent.kind === 187 /* BinaryExpression */) { var binaryExpression = node.parent; if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.left) && (binaryExpression.right === node || @@ -55876,10 +57118,10 @@ var ts; } function spanInVariableDeclaration(variableDeclaration) { // If declaration of for in statement, just set the span in parent - if (variableDeclaration.parent.parent.kind === 206 /* ForInStatement */) { + if (variableDeclaration.parent.parent.kind === 207 /* ForInStatement */) { return spanInNode(variableDeclaration.parent.parent); } - // If this is a destructuring pattern set breakpoint in binding pattern + // If this is a destructuring pattern, set breakpoint in binding pattern if (ts.isBindingPattern(variableDeclaration.name)) { return spanInBindingPattern(variableDeclaration.name); } @@ -55887,14 +57129,14 @@ var ts; // or its declaration from 'for of' if (variableDeclaration.initializer || (variableDeclaration.flags & 1 /* Export */) || - variableDeclaration.parent.parent.kind === 207 /* ForOfStatement */) { + variableDeclaration.parent.parent.kind === 208 /* ForOfStatement */) { return textSpanFromVariableDeclaration(variableDeclaration); } var declarations = variableDeclaration.parent.declarations; if (declarations && declarations[0] !== variableDeclaration) { - // If we cant set breakpoint on this declaration, set it on previous one + // If we cannot set breakpoint on this declaration, set it on previous one // Because the variable declaration may be binding pattern and - // we would like to set breakpoint in last binding element if thats the case, + // we would like to set breakpoint in last binding element if that's the case, // use preceding token instead return spanInNode(ts.findPrecedingToken(variableDeclaration.pos, sourceFile, variableDeclaration.parent)); } @@ -55906,7 +57148,7 @@ var ts; } function spanInParameterDeclaration(parameter) { if (ts.isBindingPattern(parameter.name)) { - // set breakpoint in binding pattern + // Set breakpoint in binding pattern return spanInBindingPattern(parameter.name); } else if (canHaveSpanInParameterDeclaration(parameter)) { @@ -55927,7 +57169,7 @@ var ts; } function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) { return !!(functionDeclaration.flags & 1 /* Export */) || - (functionDeclaration.parent.kind === 220 /* ClassDeclaration */ && functionDeclaration.kind !== 147 /* Constructor */); + (functionDeclaration.parent.kind === 221 /* ClassDeclaration */ && functionDeclaration.kind !== 148 /* Constructor */); } function spanInFunctionDeclaration(functionDeclaration) { // No breakpoints in the function signature @@ -55950,26 +57192,26 @@ var ts; } function spanInBlock(block) { switch (block.parent.kind) { - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: if (ts.getModuleInstanceState(block.parent) !== 1 /* Instantiated */) { return undefined; } // Set on parent if on same line otherwise on first statement - case 204 /* WhileStatement */: - case 202 /* IfStatement */: - case 206 /* ForInStatement */: + case 205 /* WhileStatement */: + case 203 /* IfStatement */: + case 207 /* ForInStatement */: return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]); // Set span on previous token if it starts on same line otherwise on the first statement of the block - case 205 /* ForStatement */: - case 207 /* ForOfStatement */: + case 206 /* ForStatement */: + case 208 /* ForOfStatement */: return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]); } // Default action is to set on first statement return spanInNode(block.statements[0]); } function spanInInitializerOfForLike(forLikeStatement) { - if (forLikeStatement.initializer.kind === 218 /* VariableDeclarationList */) { - // declaration list, set breakpoint in first declaration + if (forLikeStatement.initializer.kind === 219 /* VariableDeclarationList */) { + // Declaration list - set breakpoint in first declaration var variableDeclarationList = forLikeStatement.initializer; if (variableDeclarationList.declarations.length > 0) { return spanInNode(variableDeclarationList.declarations[0]); @@ -55993,23 +57235,23 @@ var ts; } function spanInBindingPattern(bindingPattern) { // Set breakpoint in first binding element - var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 192 /* OmittedExpression */ ? element : undefined; }); + var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 193 /* OmittedExpression */ ? element : undefined; }); if (firstBindingElement) { return spanInNode(firstBindingElement); } // Empty binding pattern of binding element, set breakpoint on binding element - if (bindingPattern.parent.kind === 168 /* BindingElement */) { + if (bindingPattern.parent.kind === 169 /* BindingElement */) { return textSpan(bindingPattern.parent); } // Variable declaration is used as the span return textSpanFromVariableDeclaration(bindingPattern.parent); } function spanInArrayLiteralOrObjectLiteralDestructuringPattern(node) { - ts.Debug.assert(node.kind !== 167 /* ArrayBindingPattern */ && node.kind !== 166 /* ObjectBindingPattern */); - var elements = node.kind === 169 /* ArrayLiteralExpression */ ? + ts.Debug.assert(node.kind !== 168 /* ArrayBindingPattern */ && node.kind !== 167 /* ObjectBindingPattern */); + var elements = node.kind === 170 /* ArrayLiteralExpression */ ? node.elements : node.properties; - var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 192 /* OmittedExpression */ ? element : undefined; }); + var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 193 /* OmittedExpression */ ? element : undefined; }); if (firstBindingElement) { return spanInNode(firstBindingElement); } @@ -56017,18 +57259,18 @@ var ts; // just nested element in another destructuring assignment // set breakpoint on assignment when parent is destructuring assignment // Otherwise set breakpoint for this element - return textSpan(node.parent.kind === 186 /* BinaryExpression */ ? node.parent : node); + return textSpan(node.parent.kind === 187 /* BinaryExpression */ ? node.parent : node); } // Tokens: function spanInOpenBraceToken(node) { switch (node.parent.kind) { - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: var enumDeclaration = node.parent; return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile)); - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: var classDeclaration = node.parent; return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile)); - case 226 /* CaseBlock */: + case 227 /* CaseBlock */: return spanInNodeIfStartsOnSameLine(node.parent.parent, node.parent.clauses[0]); } // Default to parent node @@ -56036,24 +57278,24 @@ var ts; } function spanInCloseBraceToken(node) { switch (node.parent.kind) { - case 225 /* ModuleBlock */: - // If this is not instantiated module block no bp span + case 226 /* ModuleBlock */: + // If this is not an instantiated module block, no bp span if (ts.getModuleInstanceState(node.parent.parent) !== 1 /* Instantiated */) { return undefined; } - case 223 /* EnumDeclaration */: - case 220 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: + case 221 /* ClassDeclaration */: // Span on close brace token return textSpan(node); - case 198 /* Block */: + case 199 /* Block */: if (ts.isFunctionBlock(node.parent)) { // Span on close brace token return textSpan(node); } - // fall through. - case 251 /* CatchClause */: + // fall through + case 252 /* CatchClause */: return spanInNode(ts.lastOrUndefined(node.parent.statements)); - case 226 /* CaseBlock */: + case 227 /* CaseBlock */: // breakpoint in last statement of the last clause var caseBlock = node.parent; var lastClause = ts.lastOrUndefined(caseBlock.clauses); @@ -56061,7 +57303,7 @@ var ts; return spanInNode(ts.lastOrUndefined(lastClause.statements)); } return undefined; - case 166 /* ObjectBindingPattern */: + case 167 /* ObjectBindingPattern */: // Breakpoint in last binding element or binding pattern if it contains no elements var bindingPattern = node.parent; return spanInNode(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern); @@ -56077,7 +57319,7 @@ var ts; } function spanInCloseBracketToken(node) { switch (node.parent.kind) { - case 167 /* ArrayBindingPattern */: + case 168 /* ArrayBindingPattern */: // Breakpoint in last binding element or binding pattern if it contains no elements var bindingPattern = node.parent; return textSpan(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern); @@ -56092,12 +57334,12 @@ var ts; } } function spanInOpenParenToken(node) { - if (node.parent.kind === 203 /* DoStatement */ || - node.parent.kind === 173 /* CallExpression */ || - node.parent.kind === 174 /* NewExpression */) { + if (node.parent.kind === 204 /* DoStatement */ || + node.parent.kind === 174 /* CallExpression */ || + node.parent.kind === 175 /* NewExpression */) { return spanInPreviousNode(node); } - if (node.parent.kind === 177 /* ParenthesizedExpression */) { + if (node.parent.kind === 178 /* ParenthesizedExpression */) { return spanInNextNode(node); } // Default to parent node @@ -56106,21 +57348,21 @@ var ts; function spanInCloseParenToken(node) { // Is this close paren token of parameter list, set span in previous token switch (node.parent.kind) { - case 178 /* FunctionExpression */: - case 219 /* FunctionDeclaration */: - case 179 /* ArrowFunction */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 147 /* Constructor */: - case 204 /* WhileStatement */: - case 203 /* DoStatement */: - case 205 /* ForStatement */: - case 207 /* ForOfStatement */: - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 177 /* ParenthesizedExpression */: + case 179 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: + case 180 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 148 /* Constructor */: + case 205 /* WhileStatement */: + case 204 /* DoStatement */: + case 206 /* ForStatement */: + case 208 /* ForOfStatement */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: + case 178 /* ParenthesizedExpression */: return spanInPreviousNode(node); // Default to parent node default: @@ -56130,20 +57372,20 @@ var ts; function spanInColonToken(node) { // Is this : specifying return annotation of the function declaration if (ts.isFunctionLike(node.parent) || - node.parent.kind === 252 /* PropertyAssignment */ || - node.parent.kind === 141 /* Parameter */) { + node.parent.kind === 253 /* PropertyAssignment */ || + node.parent.kind === 142 /* Parameter */) { return spanInPreviousNode(node); } return spanInNode(node.parent); } function spanInGreaterThanOrLessThanToken(node) { - if (node.parent.kind === 176 /* TypeAssertionExpression */) { + if (node.parent.kind === 177 /* TypeAssertionExpression */) { return spanInNextNode(node); } return spanInNode(node.parent); } function spanInWhileKeyword(node) { - if (node.parent.kind === 203 /* DoStatement */) { + if (node.parent.kind === 204 /* DoStatement */) { // Set span on while expression return textSpanEndingAtNextToken(node, node.parent.expression); } @@ -56151,8 +57393,8 @@ var ts; return spanInNode(node.parent); } function spanInOfKeyword(node) { - if (node.parent.kind === 207 /* ForOfStatement */) { - // set using next token + if (node.parent.kind === 208 /* ForOfStatement */) { + // Set using next token return spanInNextNode(node); } // Default to parent node @@ -56181,7 +57423,7 @@ var ts; /* @internal */ var debugObjectHost = this; // We need to use 'null' to interface with the managed side. -/* tslint:disable:no-null */ +/* tslint:disable:no-null-keyword */ /* tslint:disable:no-in-operator */ /* @internal */ var ts; @@ -56351,6 +57593,9 @@ var ts; if ("directoryExists" in this.shimHost) { this.directoryExists = function (directoryName) { return _this.shimHost.directoryExists(directoryName); }; } + if ("realpath" in this.shimHost) { + this.realpath = function (path) { return _this.shimHost.realpath(path); }; + } } CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extension, exclude, depth) { // Wrap the API changes for 2.0 release. This try/catch @@ -56583,6 +57828,10 @@ var ts; var _this = this; return this.forwardJSONCall("getBraceMatchingAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getBraceMatchingAtPosition(fileName, position); }); }; + LanguageServiceShimObject.prototype.isValidBraceCompletionAtPostion = function (fileName, position, openingBrace) { + var _this = this; + return this.forwardJSONCall("isValidBraceCompletionAtPostion('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPostion(fileName, position, openingBrace); }); + }; /// GET SMART INDENT LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options /*Services.EditorOptions*/) { var _this = this; @@ -56780,6 +58029,7 @@ var ts; options: {}, typingOptions: {}, files: [], + raw: {}, errors: [realizeDiagnostic(result.error, "\r\n")] }; } @@ -56789,6 +58039,7 @@ var ts; options: configFile.options, typingOptions: configFile.typingOptions, files: configFile.fileNames, + raw: configFile.raw, errors: realizeDiagnostics(configFile.errors, "\r\n") }; }); diff --git a/lib/typescriptServices.d.ts b/lib/typescriptServices.d.ts index c5e72bdbbbf..cd459201d8b 100644 --- a/lib/typescriptServices.d.ts +++ b/lib/typescriptServices.d.ts @@ -160,173 +160,174 @@ declare namespace ts { IsKeyword = 124, ModuleKeyword = 125, NamespaceKeyword = 126, - ReadonlyKeyword = 127, - RequireKeyword = 128, - NumberKeyword = 129, - SetKeyword = 130, - StringKeyword = 131, - SymbolKeyword = 132, - TypeKeyword = 133, - UndefinedKeyword = 134, - FromKeyword = 135, - GlobalKeyword = 136, - OfKeyword = 137, - QualifiedName = 138, - ComputedPropertyName = 139, - TypeParameter = 140, - Parameter = 141, - Decorator = 142, - PropertySignature = 143, - PropertyDeclaration = 144, - MethodSignature = 145, - MethodDeclaration = 146, - Constructor = 147, - GetAccessor = 148, - SetAccessor = 149, - CallSignature = 150, - ConstructSignature = 151, - IndexSignature = 152, - TypePredicate = 153, - TypeReference = 154, - FunctionType = 155, - ConstructorType = 156, - TypeQuery = 157, - TypeLiteral = 158, - ArrayType = 159, - TupleType = 160, - UnionType = 161, - IntersectionType = 162, - ParenthesizedType = 163, - ThisType = 164, - StringLiteralType = 165, - ObjectBindingPattern = 166, - ArrayBindingPattern = 167, - BindingElement = 168, - ArrayLiteralExpression = 169, - ObjectLiteralExpression = 170, - PropertyAccessExpression = 171, - ElementAccessExpression = 172, - CallExpression = 173, - NewExpression = 174, - TaggedTemplateExpression = 175, - TypeAssertionExpression = 176, - ParenthesizedExpression = 177, - FunctionExpression = 178, - ArrowFunction = 179, - DeleteExpression = 180, - TypeOfExpression = 181, - VoidExpression = 182, - AwaitExpression = 183, - PrefixUnaryExpression = 184, - PostfixUnaryExpression = 185, - BinaryExpression = 186, - ConditionalExpression = 187, - TemplateExpression = 188, - YieldExpression = 189, - SpreadElementExpression = 190, - ClassExpression = 191, - OmittedExpression = 192, - ExpressionWithTypeArguments = 193, - AsExpression = 194, - NonNullExpression = 195, - TemplateSpan = 196, - SemicolonClassElement = 197, - Block = 198, - VariableStatement = 199, - EmptyStatement = 200, - ExpressionStatement = 201, - IfStatement = 202, - DoStatement = 203, - WhileStatement = 204, - ForStatement = 205, - ForInStatement = 206, - ForOfStatement = 207, - ContinueStatement = 208, - BreakStatement = 209, - ReturnStatement = 210, - WithStatement = 211, - SwitchStatement = 212, - LabeledStatement = 213, - ThrowStatement = 214, - TryStatement = 215, - DebuggerStatement = 216, - VariableDeclaration = 217, - VariableDeclarationList = 218, - FunctionDeclaration = 219, - ClassDeclaration = 220, - InterfaceDeclaration = 221, - TypeAliasDeclaration = 222, - EnumDeclaration = 223, - ModuleDeclaration = 224, - ModuleBlock = 225, - CaseBlock = 226, - GlobalModuleExportDeclaration = 227, - ImportEqualsDeclaration = 228, - ImportDeclaration = 229, - ImportClause = 230, - NamespaceImport = 231, - NamedImports = 232, - ImportSpecifier = 233, - ExportAssignment = 234, - ExportDeclaration = 235, - NamedExports = 236, - ExportSpecifier = 237, - MissingDeclaration = 238, - ExternalModuleReference = 239, - JsxElement = 240, - JsxSelfClosingElement = 241, - JsxOpeningElement = 242, - JsxText = 243, - JsxClosingElement = 244, - JsxAttribute = 245, - JsxSpreadAttribute = 246, - JsxExpression = 247, - CaseClause = 248, - DefaultClause = 249, - HeritageClause = 250, - CatchClause = 251, - PropertyAssignment = 252, - ShorthandPropertyAssignment = 253, - EnumMember = 254, - SourceFile = 255, - JSDocTypeExpression = 256, - JSDocAllType = 257, - JSDocUnknownType = 258, - JSDocArrayType = 259, - JSDocUnionType = 260, - JSDocTupleType = 261, - JSDocNullableType = 262, - JSDocNonNullableType = 263, - JSDocRecordType = 264, - JSDocRecordMember = 265, - JSDocTypeReference = 266, - JSDocOptionalType = 267, - JSDocFunctionType = 268, - JSDocVariadicType = 269, - JSDocConstructorType = 270, - JSDocThisType = 271, - JSDocComment = 272, - JSDocTag = 273, - JSDocParameterTag = 274, - JSDocReturnTag = 275, - JSDocTypeTag = 276, - JSDocTemplateTag = 277, - SyntaxList = 278, - Count = 279, + NeverKeyword = 127, + ReadonlyKeyword = 128, + RequireKeyword = 129, + NumberKeyword = 130, + SetKeyword = 131, + StringKeyword = 132, + SymbolKeyword = 133, + TypeKeyword = 134, + UndefinedKeyword = 135, + FromKeyword = 136, + GlobalKeyword = 137, + OfKeyword = 138, + QualifiedName = 139, + ComputedPropertyName = 140, + TypeParameter = 141, + Parameter = 142, + Decorator = 143, + PropertySignature = 144, + PropertyDeclaration = 145, + MethodSignature = 146, + MethodDeclaration = 147, + Constructor = 148, + GetAccessor = 149, + SetAccessor = 150, + CallSignature = 151, + ConstructSignature = 152, + IndexSignature = 153, + TypePredicate = 154, + TypeReference = 155, + FunctionType = 156, + ConstructorType = 157, + TypeQuery = 158, + TypeLiteral = 159, + ArrayType = 160, + TupleType = 161, + UnionType = 162, + IntersectionType = 163, + ParenthesizedType = 164, + ThisType = 165, + StringLiteralType = 166, + ObjectBindingPattern = 167, + ArrayBindingPattern = 168, + BindingElement = 169, + ArrayLiteralExpression = 170, + ObjectLiteralExpression = 171, + PropertyAccessExpression = 172, + ElementAccessExpression = 173, + CallExpression = 174, + NewExpression = 175, + TaggedTemplateExpression = 176, + TypeAssertionExpression = 177, + ParenthesizedExpression = 178, + FunctionExpression = 179, + ArrowFunction = 180, + DeleteExpression = 181, + TypeOfExpression = 182, + VoidExpression = 183, + AwaitExpression = 184, + PrefixUnaryExpression = 185, + PostfixUnaryExpression = 186, + BinaryExpression = 187, + ConditionalExpression = 188, + TemplateExpression = 189, + YieldExpression = 190, + SpreadElementExpression = 191, + ClassExpression = 192, + OmittedExpression = 193, + ExpressionWithTypeArguments = 194, + AsExpression = 195, + NonNullExpression = 196, + TemplateSpan = 197, + SemicolonClassElement = 198, + Block = 199, + VariableStatement = 200, + EmptyStatement = 201, + ExpressionStatement = 202, + IfStatement = 203, + DoStatement = 204, + WhileStatement = 205, + ForStatement = 206, + ForInStatement = 207, + ForOfStatement = 208, + ContinueStatement = 209, + BreakStatement = 210, + ReturnStatement = 211, + WithStatement = 212, + SwitchStatement = 213, + LabeledStatement = 214, + ThrowStatement = 215, + TryStatement = 216, + DebuggerStatement = 217, + VariableDeclaration = 218, + VariableDeclarationList = 219, + FunctionDeclaration = 220, + ClassDeclaration = 221, + InterfaceDeclaration = 222, + TypeAliasDeclaration = 223, + EnumDeclaration = 224, + ModuleDeclaration = 225, + ModuleBlock = 226, + CaseBlock = 227, + GlobalModuleExportDeclaration = 228, + ImportEqualsDeclaration = 229, + ImportDeclaration = 230, + ImportClause = 231, + NamespaceImport = 232, + NamedImports = 233, + ImportSpecifier = 234, + ExportAssignment = 235, + ExportDeclaration = 236, + NamedExports = 237, + ExportSpecifier = 238, + MissingDeclaration = 239, + ExternalModuleReference = 240, + JsxElement = 241, + JsxSelfClosingElement = 242, + JsxOpeningElement = 243, + JsxText = 244, + JsxClosingElement = 245, + JsxAttribute = 246, + JsxSpreadAttribute = 247, + JsxExpression = 248, + CaseClause = 249, + DefaultClause = 250, + HeritageClause = 251, + CatchClause = 252, + PropertyAssignment = 253, + ShorthandPropertyAssignment = 254, + EnumMember = 255, + SourceFile = 256, + JSDocTypeExpression = 257, + JSDocAllType = 258, + JSDocUnknownType = 259, + JSDocArrayType = 260, + JSDocUnionType = 261, + JSDocTupleType = 262, + JSDocNullableType = 263, + JSDocNonNullableType = 264, + JSDocRecordType = 265, + JSDocRecordMember = 266, + JSDocTypeReference = 267, + JSDocOptionalType = 268, + JSDocFunctionType = 269, + JSDocVariadicType = 270, + JSDocConstructorType = 271, + JSDocThisType = 272, + JSDocComment = 273, + JSDocTag = 274, + JSDocParameterTag = 275, + JSDocReturnTag = 276, + JSDocTypeTag = 277, + JSDocTemplateTag = 278, + SyntaxList = 279, + Count = 280, FirstAssignment = 56, LastAssignment = 68, FirstReservedWord = 70, LastReservedWord = 105, FirstKeyword = 70, - LastKeyword = 137, + LastKeyword = 138, FirstFutureReservedWord = 106, LastFutureReservedWord = 114, - FirstTypeNode = 153, - LastTypeNode = 165, + FirstTypeNode = 154, + LastTypeNode = 166, FirstPunctuation = 15, LastPunctuation = 68, FirstToken = 0, - LastToken = 137, + LastToken = 138, FirstTriviaToken = 2, LastTriviaToken = 7, FirstLiteralToken = 8, @@ -335,7 +336,7 @@ declare namespace ts { LastTemplateToken = 14, FirstBinaryOperator = 25, LastBinaryOperator = 68, - FirstNode = 138, + FirstNode = 139, } enum NodeFlags { None = 0, @@ -370,8 +371,9 @@ declare namespace ts { ThisNodeOrAnySubNodesHasError = 268435456, HasAggregatedChildData = 536870912, HasJsxSpreadAttribute = 1073741824, - Modifier = 959, + Modifier = 1023, AccessibilityModifier = 28, + ParameterPropertyModifier = 92, BlockScoped = 3072, ReachabilityCheckFlags = 98304, EmitHelperFlags = 3932160, @@ -405,9 +407,6 @@ declare namespace ts { text: string; originalKeywordKind?: SyntaxKind; } - interface TransientIdentifier extends Identifier { - resolvedSymbol: Symbol; - } interface QualifiedName extends Node { left: EntityName; right: Identifier; @@ -1047,6 +1046,34 @@ declare namespace ts { postParameterName?: Identifier; isBracketed: boolean; } + enum FlowFlags { + Unreachable = 1, + Start = 2, + BranchLabel = 4, + LoopLabel = 8, + Assignment = 16, + TrueCondition = 32, + FalseCondition = 64, + Referenced = 128, + Shared = 256, + Label = 12, + Condition = 96, + } + interface FlowNode { + flags: FlowFlags; + id?: number; + } + interface FlowLabel extends FlowNode { + antecedents: FlowNode[]; + } + interface FlowAssignment extends FlowNode { + node: Expression | VariableDeclaration | BindingElement; + antecedent: FlowNode; + } + interface FlowCondition extends FlowNode { + expression: Expression; + antecedent: FlowNode; + } interface AmdDependency { path: string; name: string; @@ -1077,6 +1104,7 @@ declare namespace ts { interface ScriptReferenceHost { getCompilerOptions(): CompilerOptions; getSourceFile(fileName: string): SourceFile; + getSourceFileByPath(path: Path): SourceFile; getCurrentDirectory(): string; } interface ParseConfigHost { @@ -1169,11 +1197,13 @@ declare namespace ts { getIndexTypeOfType(type: Type, kind: IndexKind): Type; getBaseTypes(type: InterfaceType): ObjectType[]; getReturnTypeOfSignature(signature: Signature): Type; + getNonNullableType(type: Type): Type; getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; getSymbolAtLocation(node: Node): Symbol; getSymbolsOfParameterPropertyDeclaration(parameter: ParameterDeclaration, parameterName: string): Symbol[]; getShorthandAssignmentValueSymbol(location: Node): Symbol; getExportSpecifierLocalTargetSymbol(location: ExportSpecifier): Symbol; + getPropertySymbolOfDestructuringAssignment(location: Identifier): Symbol; getTypeAtLocation(node: Node): Type; typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string; symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string; @@ -1233,6 +1263,7 @@ declare namespace ts { WriteTypeArgumentsOfSignature = 32, InElementType = 64, UseFullyQualifiedType = 128, + InFirstTypeArgument = 256, } enum SymbolFormatFlags { None = 0, @@ -1356,11 +1387,13 @@ declare namespace ts { ESSymbol = 16777216, ThisType = 33554432, ObjectLiteralPatternWithComputedProperties = 67108864, + Never = 134217728, StringLike = 258, NumberLike = 132, ObjectType = 80896, UnionOrIntersection = 49152, StructuredType = 130048, + Narrowable = 97793, } type DestructuringPattern = BindingPattern | ObjectLiteralExpression | ArrayLiteralExpression; interface Type { @@ -1525,13 +1558,13 @@ declare namespace ts { lib?: string[]; types?: string[]; list?: string[]; - [option: string]: CompilerOptionsValue; + [option: string]: CompilerOptionsValue | undefined; } interface TypingOptions { enableAutoDiscovery?: boolean; include?: string[]; exclude?: string[]; - [option: string]: string[] | boolean; + [option: string]: string[] | boolean | undefined; } interface DiscoverTypingsInfo { fileNames: string[]; @@ -1585,6 +1618,7 @@ declare namespace ts { options: CompilerOptions; typingOptions?: TypingOptions; fileNames: string[]; + raw?: any; errors: Diagnostic[]; } interface ModuleResolutionHost { @@ -1592,6 +1626,7 @@ declare namespace ts { readFile(fileName: string): string; trace?(s: string): void; directoryExists?(directoryName: string): boolean; + realpath?(path: string): string; } interface ResolvedModule { resolvedFileName: string; @@ -1611,6 +1646,7 @@ declare namespace ts { } interface CompilerHost extends ModuleResolutionHost { getSourceFile(fileName: string, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; + getSourceFileByPath?(fileName: string, path: Path, languageVersion: ScriptTarget, onError?: (message: string) => void): SourceFile; getCancellationToken?(): CancellationToken; getDefaultLibFileName(options: CompilerOptions): string; getDefaultLibLocation?(): string; @@ -1637,6 +1673,11 @@ declare namespace ts { declare namespace ts { type FileWatcherCallback = (fileName: string, removed?: boolean) => void; type DirectoryWatcherCallback = (directoryName: string) => void; + interface WatchedFile { + fileName: string; + callback: FileWatcherCallback; + mtime?: Date; + } interface System { args: string[]; newLine: string; @@ -1657,6 +1698,7 @@ declare namespace ts { createHash?(data: string): string; getMemoryUsage?(): number; exit(exitCode?: number): void; + realpath?(path: string): string; } interface FileWatcher { close(): void; @@ -1843,6 +1885,7 @@ declare namespace ts { getStringIndexType(): Type; getNumberIndexType(): Type; getBaseTypes(): ObjectType[]; + getNonNullableType(): Type; } interface Signature { getDeclaration(): SignatureDeclaration; @@ -1898,7 +1941,7 @@ declare namespace ts { getScriptFileNames(): string[]; getScriptKind?(fileName: string): ScriptKind; getScriptVersion(fileName: string): string; - getScriptSnapshot(fileName: string): IScriptSnapshot; + getScriptSnapshot(fileName: string): IScriptSnapshot | undefined; getLocalizedDiagnosticMessages?(): any; getCancellationToken?(): HostCancellationToken; getCurrentDirectory(): string; @@ -1951,6 +1994,7 @@ declare namespace ts { getFormattingEditsForDocument(fileName: string, options: FormatCodeOptions): TextChange[]; getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions): TextChange[]; getDocCommentTemplateAtPosition(fileName: string, position: number): TextInsertion; + isValidBraceCompletionAtPostion(fileName: string, position: number, openingBrace: number): boolean; getEmitOutput(fileName: string): EmitOutput; getProgram(): Program; dispose(): void; @@ -2266,6 +2310,7 @@ declare namespace ts { * in the registry and a new one was created. */ acquireDocument(fileName: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string, scriptKind?: ScriptKind): SourceFile; + acquireDocumentWithKey(fileName: string, path: Path, compilationSettings: CompilerOptions, key: DocumentRegistryBucketKey, scriptSnapshot: IScriptSnapshot, version: string, scriptKind?: ScriptKind): SourceFile; /** * Request an updated version of an already existing SourceFile with a given fileName * and compilationSettings. The update will in-turn call updateLanguageServiceSourceFile @@ -2279,6 +2324,8 @@ declare namespace ts { * @param version Current version of the file. */ updateDocument(fileName: string, compilationSettings: CompilerOptions, scriptSnapshot: IScriptSnapshot, version: string, scriptKind?: ScriptKind): SourceFile; + updateDocumentWithKey(fileName: string, path: Path, compilationSettings: CompilerOptions, key: DocumentRegistryBucketKey, scriptSnapshot: IScriptSnapshot, version: string, scriptKind?: ScriptKind): SourceFile; + getKeyForCompilationSettings(settings: CompilerOptions): DocumentRegistryBucketKey; /** * Informs the DocumentRegistry that a file is not needed any longer. * @@ -2289,8 +2336,12 @@ declare namespace ts { * @param compilationSettings The compilation settings used to acquire the file */ releaseDocument(fileName: string, compilationSettings: CompilerOptions): void; + releaseDocumentWithKey(path: Path, key: DocumentRegistryBucketKey): void; reportStats(): string; } + type DocumentRegistryBucketKey = string & { + __bucketKey: any; + }; namespace ScriptElementKind { const unknown: string; const warning: string; diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js index f8b128defd8..e78eda7b0bb 100644 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -161,194 +161,195 @@ var ts; SyntaxKind[SyntaxKind["IsKeyword"] = 124] = "IsKeyword"; SyntaxKind[SyntaxKind["ModuleKeyword"] = 125] = "ModuleKeyword"; SyntaxKind[SyntaxKind["NamespaceKeyword"] = 126] = "NamespaceKeyword"; - SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 127] = "ReadonlyKeyword"; - SyntaxKind[SyntaxKind["RequireKeyword"] = 128] = "RequireKeyword"; - SyntaxKind[SyntaxKind["NumberKeyword"] = 129] = "NumberKeyword"; - SyntaxKind[SyntaxKind["SetKeyword"] = 130] = "SetKeyword"; - SyntaxKind[SyntaxKind["StringKeyword"] = 131] = "StringKeyword"; - SyntaxKind[SyntaxKind["SymbolKeyword"] = 132] = "SymbolKeyword"; - SyntaxKind[SyntaxKind["TypeKeyword"] = 133] = "TypeKeyword"; - SyntaxKind[SyntaxKind["UndefinedKeyword"] = 134] = "UndefinedKeyword"; - SyntaxKind[SyntaxKind["FromKeyword"] = 135] = "FromKeyword"; - SyntaxKind[SyntaxKind["GlobalKeyword"] = 136] = "GlobalKeyword"; - SyntaxKind[SyntaxKind["OfKeyword"] = 137] = "OfKeyword"; + SyntaxKind[SyntaxKind["NeverKeyword"] = 127] = "NeverKeyword"; + SyntaxKind[SyntaxKind["ReadonlyKeyword"] = 128] = "ReadonlyKeyword"; + SyntaxKind[SyntaxKind["RequireKeyword"] = 129] = "RequireKeyword"; + SyntaxKind[SyntaxKind["NumberKeyword"] = 130] = "NumberKeyword"; + SyntaxKind[SyntaxKind["SetKeyword"] = 131] = "SetKeyword"; + SyntaxKind[SyntaxKind["StringKeyword"] = 132] = "StringKeyword"; + SyntaxKind[SyntaxKind["SymbolKeyword"] = 133] = "SymbolKeyword"; + SyntaxKind[SyntaxKind["TypeKeyword"] = 134] = "TypeKeyword"; + SyntaxKind[SyntaxKind["UndefinedKeyword"] = 135] = "UndefinedKeyword"; + SyntaxKind[SyntaxKind["FromKeyword"] = 136] = "FromKeyword"; + SyntaxKind[SyntaxKind["GlobalKeyword"] = 137] = "GlobalKeyword"; + SyntaxKind[SyntaxKind["OfKeyword"] = 138] = "OfKeyword"; // Parse tree nodes // Names - SyntaxKind[SyntaxKind["QualifiedName"] = 138] = "QualifiedName"; - SyntaxKind[SyntaxKind["ComputedPropertyName"] = 139] = "ComputedPropertyName"; + SyntaxKind[SyntaxKind["QualifiedName"] = 139] = "QualifiedName"; + SyntaxKind[SyntaxKind["ComputedPropertyName"] = 140] = "ComputedPropertyName"; // Signature elements - SyntaxKind[SyntaxKind["TypeParameter"] = 140] = "TypeParameter"; - SyntaxKind[SyntaxKind["Parameter"] = 141] = "Parameter"; - SyntaxKind[SyntaxKind["Decorator"] = 142] = "Decorator"; + SyntaxKind[SyntaxKind["TypeParameter"] = 141] = "TypeParameter"; + SyntaxKind[SyntaxKind["Parameter"] = 142] = "Parameter"; + SyntaxKind[SyntaxKind["Decorator"] = 143] = "Decorator"; // TypeMember - SyntaxKind[SyntaxKind["PropertySignature"] = 143] = "PropertySignature"; - SyntaxKind[SyntaxKind["PropertyDeclaration"] = 144] = "PropertyDeclaration"; - SyntaxKind[SyntaxKind["MethodSignature"] = 145] = "MethodSignature"; - SyntaxKind[SyntaxKind["MethodDeclaration"] = 146] = "MethodDeclaration"; - SyntaxKind[SyntaxKind["Constructor"] = 147] = "Constructor"; - SyntaxKind[SyntaxKind["GetAccessor"] = 148] = "GetAccessor"; - SyntaxKind[SyntaxKind["SetAccessor"] = 149] = "SetAccessor"; - SyntaxKind[SyntaxKind["CallSignature"] = 150] = "CallSignature"; - SyntaxKind[SyntaxKind["ConstructSignature"] = 151] = "ConstructSignature"; - SyntaxKind[SyntaxKind["IndexSignature"] = 152] = "IndexSignature"; + SyntaxKind[SyntaxKind["PropertySignature"] = 144] = "PropertySignature"; + SyntaxKind[SyntaxKind["PropertyDeclaration"] = 145] = "PropertyDeclaration"; + SyntaxKind[SyntaxKind["MethodSignature"] = 146] = "MethodSignature"; + SyntaxKind[SyntaxKind["MethodDeclaration"] = 147] = "MethodDeclaration"; + SyntaxKind[SyntaxKind["Constructor"] = 148] = "Constructor"; + SyntaxKind[SyntaxKind["GetAccessor"] = 149] = "GetAccessor"; + SyntaxKind[SyntaxKind["SetAccessor"] = 150] = "SetAccessor"; + SyntaxKind[SyntaxKind["CallSignature"] = 151] = "CallSignature"; + SyntaxKind[SyntaxKind["ConstructSignature"] = 152] = "ConstructSignature"; + SyntaxKind[SyntaxKind["IndexSignature"] = 153] = "IndexSignature"; // Type - SyntaxKind[SyntaxKind["TypePredicate"] = 153] = "TypePredicate"; - SyntaxKind[SyntaxKind["TypeReference"] = 154] = "TypeReference"; - SyntaxKind[SyntaxKind["FunctionType"] = 155] = "FunctionType"; - SyntaxKind[SyntaxKind["ConstructorType"] = 156] = "ConstructorType"; - SyntaxKind[SyntaxKind["TypeQuery"] = 157] = "TypeQuery"; - SyntaxKind[SyntaxKind["TypeLiteral"] = 158] = "TypeLiteral"; - SyntaxKind[SyntaxKind["ArrayType"] = 159] = "ArrayType"; - SyntaxKind[SyntaxKind["TupleType"] = 160] = "TupleType"; - SyntaxKind[SyntaxKind["UnionType"] = 161] = "UnionType"; - SyntaxKind[SyntaxKind["IntersectionType"] = 162] = "IntersectionType"; - SyntaxKind[SyntaxKind["ParenthesizedType"] = 163] = "ParenthesizedType"; - SyntaxKind[SyntaxKind["ThisType"] = 164] = "ThisType"; - SyntaxKind[SyntaxKind["StringLiteralType"] = 165] = "StringLiteralType"; + SyntaxKind[SyntaxKind["TypePredicate"] = 154] = "TypePredicate"; + SyntaxKind[SyntaxKind["TypeReference"] = 155] = "TypeReference"; + SyntaxKind[SyntaxKind["FunctionType"] = 156] = "FunctionType"; + SyntaxKind[SyntaxKind["ConstructorType"] = 157] = "ConstructorType"; + SyntaxKind[SyntaxKind["TypeQuery"] = 158] = "TypeQuery"; + SyntaxKind[SyntaxKind["TypeLiteral"] = 159] = "TypeLiteral"; + SyntaxKind[SyntaxKind["ArrayType"] = 160] = "ArrayType"; + SyntaxKind[SyntaxKind["TupleType"] = 161] = "TupleType"; + SyntaxKind[SyntaxKind["UnionType"] = 162] = "UnionType"; + SyntaxKind[SyntaxKind["IntersectionType"] = 163] = "IntersectionType"; + SyntaxKind[SyntaxKind["ParenthesizedType"] = 164] = "ParenthesizedType"; + SyntaxKind[SyntaxKind["ThisType"] = 165] = "ThisType"; + SyntaxKind[SyntaxKind["StringLiteralType"] = 166] = "StringLiteralType"; // Binding patterns - SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 166] = "ObjectBindingPattern"; - SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 167] = "ArrayBindingPattern"; - SyntaxKind[SyntaxKind["BindingElement"] = 168] = "BindingElement"; + SyntaxKind[SyntaxKind["ObjectBindingPattern"] = 167] = "ObjectBindingPattern"; + SyntaxKind[SyntaxKind["ArrayBindingPattern"] = 168] = "ArrayBindingPattern"; + SyntaxKind[SyntaxKind["BindingElement"] = 169] = "BindingElement"; // Expression - SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 169] = "ArrayLiteralExpression"; - SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 170] = "ObjectLiteralExpression"; - SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 171] = "PropertyAccessExpression"; - SyntaxKind[SyntaxKind["ElementAccessExpression"] = 172] = "ElementAccessExpression"; - SyntaxKind[SyntaxKind["CallExpression"] = 173] = "CallExpression"; - SyntaxKind[SyntaxKind["NewExpression"] = 174] = "NewExpression"; - SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 175] = "TaggedTemplateExpression"; - SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 176] = "TypeAssertionExpression"; - SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 177] = "ParenthesizedExpression"; - SyntaxKind[SyntaxKind["FunctionExpression"] = 178] = "FunctionExpression"; - SyntaxKind[SyntaxKind["ArrowFunction"] = 179] = "ArrowFunction"; - SyntaxKind[SyntaxKind["DeleteExpression"] = 180] = "DeleteExpression"; - SyntaxKind[SyntaxKind["TypeOfExpression"] = 181] = "TypeOfExpression"; - SyntaxKind[SyntaxKind["VoidExpression"] = 182] = "VoidExpression"; - SyntaxKind[SyntaxKind["AwaitExpression"] = 183] = "AwaitExpression"; - SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 184] = "PrefixUnaryExpression"; - SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 185] = "PostfixUnaryExpression"; - SyntaxKind[SyntaxKind["BinaryExpression"] = 186] = "BinaryExpression"; - SyntaxKind[SyntaxKind["ConditionalExpression"] = 187] = "ConditionalExpression"; - SyntaxKind[SyntaxKind["TemplateExpression"] = 188] = "TemplateExpression"; - SyntaxKind[SyntaxKind["YieldExpression"] = 189] = "YieldExpression"; - SyntaxKind[SyntaxKind["SpreadElementExpression"] = 190] = "SpreadElementExpression"; - SyntaxKind[SyntaxKind["ClassExpression"] = 191] = "ClassExpression"; - SyntaxKind[SyntaxKind["OmittedExpression"] = 192] = "OmittedExpression"; - SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 193] = "ExpressionWithTypeArguments"; - SyntaxKind[SyntaxKind["AsExpression"] = 194] = "AsExpression"; - SyntaxKind[SyntaxKind["NonNullExpression"] = 195] = "NonNullExpression"; + SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 170] = "ArrayLiteralExpression"; + SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 171] = "ObjectLiteralExpression"; + SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 172] = "PropertyAccessExpression"; + SyntaxKind[SyntaxKind["ElementAccessExpression"] = 173] = "ElementAccessExpression"; + SyntaxKind[SyntaxKind["CallExpression"] = 174] = "CallExpression"; + SyntaxKind[SyntaxKind["NewExpression"] = 175] = "NewExpression"; + SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 176] = "TaggedTemplateExpression"; + SyntaxKind[SyntaxKind["TypeAssertionExpression"] = 177] = "TypeAssertionExpression"; + SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 178] = "ParenthesizedExpression"; + SyntaxKind[SyntaxKind["FunctionExpression"] = 179] = "FunctionExpression"; + SyntaxKind[SyntaxKind["ArrowFunction"] = 180] = "ArrowFunction"; + SyntaxKind[SyntaxKind["DeleteExpression"] = 181] = "DeleteExpression"; + SyntaxKind[SyntaxKind["TypeOfExpression"] = 182] = "TypeOfExpression"; + SyntaxKind[SyntaxKind["VoidExpression"] = 183] = "VoidExpression"; + SyntaxKind[SyntaxKind["AwaitExpression"] = 184] = "AwaitExpression"; + SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 185] = "PrefixUnaryExpression"; + SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 186] = "PostfixUnaryExpression"; + SyntaxKind[SyntaxKind["BinaryExpression"] = 187] = "BinaryExpression"; + SyntaxKind[SyntaxKind["ConditionalExpression"] = 188] = "ConditionalExpression"; + SyntaxKind[SyntaxKind["TemplateExpression"] = 189] = "TemplateExpression"; + SyntaxKind[SyntaxKind["YieldExpression"] = 190] = "YieldExpression"; + SyntaxKind[SyntaxKind["SpreadElementExpression"] = 191] = "SpreadElementExpression"; + SyntaxKind[SyntaxKind["ClassExpression"] = 192] = "ClassExpression"; + SyntaxKind[SyntaxKind["OmittedExpression"] = 193] = "OmittedExpression"; + SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 194] = "ExpressionWithTypeArguments"; + SyntaxKind[SyntaxKind["AsExpression"] = 195] = "AsExpression"; + SyntaxKind[SyntaxKind["NonNullExpression"] = 196] = "NonNullExpression"; // Misc - SyntaxKind[SyntaxKind["TemplateSpan"] = 196] = "TemplateSpan"; - SyntaxKind[SyntaxKind["SemicolonClassElement"] = 197] = "SemicolonClassElement"; + SyntaxKind[SyntaxKind["TemplateSpan"] = 197] = "TemplateSpan"; + SyntaxKind[SyntaxKind["SemicolonClassElement"] = 198] = "SemicolonClassElement"; // Element - SyntaxKind[SyntaxKind["Block"] = 198] = "Block"; - SyntaxKind[SyntaxKind["VariableStatement"] = 199] = "VariableStatement"; - SyntaxKind[SyntaxKind["EmptyStatement"] = 200] = "EmptyStatement"; - SyntaxKind[SyntaxKind["ExpressionStatement"] = 201] = "ExpressionStatement"; - SyntaxKind[SyntaxKind["IfStatement"] = 202] = "IfStatement"; - SyntaxKind[SyntaxKind["DoStatement"] = 203] = "DoStatement"; - SyntaxKind[SyntaxKind["WhileStatement"] = 204] = "WhileStatement"; - SyntaxKind[SyntaxKind["ForStatement"] = 205] = "ForStatement"; - SyntaxKind[SyntaxKind["ForInStatement"] = 206] = "ForInStatement"; - SyntaxKind[SyntaxKind["ForOfStatement"] = 207] = "ForOfStatement"; - SyntaxKind[SyntaxKind["ContinueStatement"] = 208] = "ContinueStatement"; - SyntaxKind[SyntaxKind["BreakStatement"] = 209] = "BreakStatement"; - SyntaxKind[SyntaxKind["ReturnStatement"] = 210] = "ReturnStatement"; - SyntaxKind[SyntaxKind["WithStatement"] = 211] = "WithStatement"; - SyntaxKind[SyntaxKind["SwitchStatement"] = 212] = "SwitchStatement"; - SyntaxKind[SyntaxKind["LabeledStatement"] = 213] = "LabeledStatement"; - SyntaxKind[SyntaxKind["ThrowStatement"] = 214] = "ThrowStatement"; - SyntaxKind[SyntaxKind["TryStatement"] = 215] = "TryStatement"; - SyntaxKind[SyntaxKind["DebuggerStatement"] = 216] = "DebuggerStatement"; - SyntaxKind[SyntaxKind["VariableDeclaration"] = 217] = "VariableDeclaration"; - SyntaxKind[SyntaxKind["VariableDeclarationList"] = 218] = "VariableDeclarationList"; - SyntaxKind[SyntaxKind["FunctionDeclaration"] = 219] = "FunctionDeclaration"; - SyntaxKind[SyntaxKind["ClassDeclaration"] = 220] = "ClassDeclaration"; - SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 221] = "InterfaceDeclaration"; - SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 222] = "TypeAliasDeclaration"; - SyntaxKind[SyntaxKind["EnumDeclaration"] = 223] = "EnumDeclaration"; - SyntaxKind[SyntaxKind["ModuleDeclaration"] = 224] = "ModuleDeclaration"; - SyntaxKind[SyntaxKind["ModuleBlock"] = 225] = "ModuleBlock"; - SyntaxKind[SyntaxKind["CaseBlock"] = 226] = "CaseBlock"; - SyntaxKind[SyntaxKind["GlobalModuleExportDeclaration"] = 227] = "GlobalModuleExportDeclaration"; - SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 228] = "ImportEqualsDeclaration"; - SyntaxKind[SyntaxKind["ImportDeclaration"] = 229] = "ImportDeclaration"; - SyntaxKind[SyntaxKind["ImportClause"] = 230] = "ImportClause"; - SyntaxKind[SyntaxKind["NamespaceImport"] = 231] = "NamespaceImport"; - SyntaxKind[SyntaxKind["NamedImports"] = 232] = "NamedImports"; - SyntaxKind[SyntaxKind["ImportSpecifier"] = 233] = "ImportSpecifier"; - SyntaxKind[SyntaxKind["ExportAssignment"] = 234] = "ExportAssignment"; - SyntaxKind[SyntaxKind["ExportDeclaration"] = 235] = "ExportDeclaration"; - SyntaxKind[SyntaxKind["NamedExports"] = 236] = "NamedExports"; - SyntaxKind[SyntaxKind["ExportSpecifier"] = 237] = "ExportSpecifier"; - SyntaxKind[SyntaxKind["MissingDeclaration"] = 238] = "MissingDeclaration"; + SyntaxKind[SyntaxKind["Block"] = 199] = "Block"; + SyntaxKind[SyntaxKind["VariableStatement"] = 200] = "VariableStatement"; + SyntaxKind[SyntaxKind["EmptyStatement"] = 201] = "EmptyStatement"; + SyntaxKind[SyntaxKind["ExpressionStatement"] = 202] = "ExpressionStatement"; + SyntaxKind[SyntaxKind["IfStatement"] = 203] = "IfStatement"; + SyntaxKind[SyntaxKind["DoStatement"] = 204] = "DoStatement"; + SyntaxKind[SyntaxKind["WhileStatement"] = 205] = "WhileStatement"; + SyntaxKind[SyntaxKind["ForStatement"] = 206] = "ForStatement"; + SyntaxKind[SyntaxKind["ForInStatement"] = 207] = "ForInStatement"; + SyntaxKind[SyntaxKind["ForOfStatement"] = 208] = "ForOfStatement"; + SyntaxKind[SyntaxKind["ContinueStatement"] = 209] = "ContinueStatement"; + SyntaxKind[SyntaxKind["BreakStatement"] = 210] = "BreakStatement"; + SyntaxKind[SyntaxKind["ReturnStatement"] = 211] = "ReturnStatement"; + SyntaxKind[SyntaxKind["WithStatement"] = 212] = "WithStatement"; + SyntaxKind[SyntaxKind["SwitchStatement"] = 213] = "SwitchStatement"; + SyntaxKind[SyntaxKind["LabeledStatement"] = 214] = "LabeledStatement"; + SyntaxKind[SyntaxKind["ThrowStatement"] = 215] = "ThrowStatement"; + SyntaxKind[SyntaxKind["TryStatement"] = 216] = "TryStatement"; + SyntaxKind[SyntaxKind["DebuggerStatement"] = 217] = "DebuggerStatement"; + SyntaxKind[SyntaxKind["VariableDeclaration"] = 218] = "VariableDeclaration"; + SyntaxKind[SyntaxKind["VariableDeclarationList"] = 219] = "VariableDeclarationList"; + SyntaxKind[SyntaxKind["FunctionDeclaration"] = 220] = "FunctionDeclaration"; + SyntaxKind[SyntaxKind["ClassDeclaration"] = 221] = "ClassDeclaration"; + SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 222] = "InterfaceDeclaration"; + SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 223] = "TypeAliasDeclaration"; + SyntaxKind[SyntaxKind["EnumDeclaration"] = 224] = "EnumDeclaration"; + SyntaxKind[SyntaxKind["ModuleDeclaration"] = 225] = "ModuleDeclaration"; + SyntaxKind[SyntaxKind["ModuleBlock"] = 226] = "ModuleBlock"; + SyntaxKind[SyntaxKind["CaseBlock"] = 227] = "CaseBlock"; + SyntaxKind[SyntaxKind["GlobalModuleExportDeclaration"] = 228] = "GlobalModuleExportDeclaration"; + SyntaxKind[SyntaxKind["ImportEqualsDeclaration"] = 229] = "ImportEqualsDeclaration"; + SyntaxKind[SyntaxKind["ImportDeclaration"] = 230] = "ImportDeclaration"; + SyntaxKind[SyntaxKind["ImportClause"] = 231] = "ImportClause"; + SyntaxKind[SyntaxKind["NamespaceImport"] = 232] = "NamespaceImport"; + SyntaxKind[SyntaxKind["NamedImports"] = 233] = "NamedImports"; + SyntaxKind[SyntaxKind["ImportSpecifier"] = 234] = "ImportSpecifier"; + SyntaxKind[SyntaxKind["ExportAssignment"] = 235] = "ExportAssignment"; + SyntaxKind[SyntaxKind["ExportDeclaration"] = 236] = "ExportDeclaration"; + SyntaxKind[SyntaxKind["NamedExports"] = 237] = "NamedExports"; + SyntaxKind[SyntaxKind["ExportSpecifier"] = 238] = "ExportSpecifier"; + SyntaxKind[SyntaxKind["MissingDeclaration"] = 239] = "MissingDeclaration"; // Module references - SyntaxKind[SyntaxKind["ExternalModuleReference"] = 239] = "ExternalModuleReference"; + SyntaxKind[SyntaxKind["ExternalModuleReference"] = 240] = "ExternalModuleReference"; // JSX - SyntaxKind[SyntaxKind["JsxElement"] = 240] = "JsxElement"; - SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 241] = "JsxSelfClosingElement"; - SyntaxKind[SyntaxKind["JsxOpeningElement"] = 242] = "JsxOpeningElement"; - SyntaxKind[SyntaxKind["JsxText"] = 243] = "JsxText"; - SyntaxKind[SyntaxKind["JsxClosingElement"] = 244] = "JsxClosingElement"; - SyntaxKind[SyntaxKind["JsxAttribute"] = 245] = "JsxAttribute"; - SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 246] = "JsxSpreadAttribute"; - SyntaxKind[SyntaxKind["JsxExpression"] = 247] = "JsxExpression"; + SyntaxKind[SyntaxKind["JsxElement"] = 241] = "JsxElement"; + SyntaxKind[SyntaxKind["JsxSelfClosingElement"] = 242] = "JsxSelfClosingElement"; + SyntaxKind[SyntaxKind["JsxOpeningElement"] = 243] = "JsxOpeningElement"; + SyntaxKind[SyntaxKind["JsxText"] = 244] = "JsxText"; + SyntaxKind[SyntaxKind["JsxClosingElement"] = 245] = "JsxClosingElement"; + SyntaxKind[SyntaxKind["JsxAttribute"] = 246] = "JsxAttribute"; + SyntaxKind[SyntaxKind["JsxSpreadAttribute"] = 247] = "JsxSpreadAttribute"; + SyntaxKind[SyntaxKind["JsxExpression"] = 248] = "JsxExpression"; // Clauses - SyntaxKind[SyntaxKind["CaseClause"] = 248] = "CaseClause"; - SyntaxKind[SyntaxKind["DefaultClause"] = 249] = "DefaultClause"; - SyntaxKind[SyntaxKind["HeritageClause"] = 250] = "HeritageClause"; - SyntaxKind[SyntaxKind["CatchClause"] = 251] = "CatchClause"; + SyntaxKind[SyntaxKind["CaseClause"] = 249] = "CaseClause"; + SyntaxKind[SyntaxKind["DefaultClause"] = 250] = "DefaultClause"; + SyntaxKind[SyntaxKind["HeritageClause"] = 251] = "HeritageClause"; + SyntaxKind[SyntaxKind["CatchClause"] = 252] = "CatchClause"; // Property assignments - SyntaxKind[SyntaxKind["PropertyAssignment"] = 252] = "PropertyAssignment"; - SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 253] = "ShorthandPropertyAssignment"; + SyntaxKind[SyntaxKind["PropertyAssignment"] = 253] = "PropertyAssignment"; + SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 254] = "ShorthandPropertyAssignment"; // Enum - SyntaxKind[SyntaxKind["EnumMember"] = 254] = "EnumMember"; + SyntaxKind[SyntaxKind["EnumMember"] = 255] = "EnumMember"; // Top-level nodes - SyntaxKind[SyntaxKind["SourceFile"] = 255] = "SourceFile"; + SyntaxKind[SyntaxKind["SourceFile"] = 256] = "SourceFile"; // JSDoc nodes - SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 256] = "JSDocTypeExpression"; + SyntaxKind[SyntaxKind["JSDocTypeExpression"] = 257] = "JSDocTypeExpression"; // The * type - SyntaxKind[SyntaxKind["JSDocAllType"] = 257] = "JSDocAllType"; + SyntaxKind[SyntaxKind["JSDocAllType"] = 258] = "JSDocAllType"; // The ? type - SyntaxKind[SyntaxKind["JSDocUnknownType"] = 258] = "JSDocUnknownType"; - SyntaxKind[SyntaxKind["JSDocArrayType"] = 259] = "JSDocArrayType"; - SyntaxKind[SyntaxKind["JSDocUnionType"] = 260] = "JSDocUnionType"; - SyntaxKind[SyntaxKind["JSDocTupleType"] = 261] = "JSDocTupleType"; - SyntaxKind[SyntaxKind["JSDocNullableType"] = 262] = "JSDocNullableType"; - SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 263] = "JSDocNonNullableType"; - SyntaxKind[SyntaxKind["JSDocRecordType"] = 264] = "JSDocRecordType"; - SyntaxKind[SyntaxKind["JSDocRecordMember"] = 265] = "JSDocRecordMember"; - SyntaxKind[SyntaxKind["JSDocTypeReference"] = 266] = "JSDocTypeReference"; - SyntaxKind[SyntaxKind["JSDocOptionalType"] = 267] = "JSDocOptionalType"; - SyntaxKind[SyntaxKind["JSDocFunctionType"] = 268] = "JSDocFunctionType"; - SyntaxKind[SyntaxKind["JSDocVariadicType"] = 269] = "JSDocVariadicType"; - SyntaxKind[SyntaxKind["JSDocConstructorType"] = 270] = "JSDocConstructorType"; - SyntaxKind[SyntaxKind["JSDocThisType"] = 271] = "JSDocThisType"; - SyntaxKind[SyntaxKind["JSDocComment"] = 272] = "JSDocComment"; - SyntaxKind[SyntaxKind["JSDocTag"] = 273] = "JSDocTag"; - SyntaxKind[SyntaxKind["JSDocParameterTag"] = 274] = "JSDocParameterTag"; - SyntaxKind[SyntaxKind["JSDocReturnTag"] = 275] = "JSDocReturnTag"; - SyntaxKind[SyntaxKind["JSDocTypeTag"] = 276] = "JSDocTypeTag"; - SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 277] = "JSDocTemplateTag"; + SyntaxKind[SyntaxKind["JSDocUnknownType"] = 259] = "JSDocUnknownType"; + SyntaxKind[SyntaxKind["JSDocArrayType"] = 260] = "JSDocArrayType"; + SyntaxKind[SyntaxKind["JSDocUnionType"] = 261] = "JSDocUnionType"; + SyntaxKind[SyntaxKind["JSDocTupleType"] = 262] = "JSDocTupleType"; + SyntaxKind[SyntaxKind["JSDocNullableType"] = 263] = "JSDocNullableType"; + SyntaxKind[SyntaxKind["JSDocNonNullableType"] = 264] = "JSDocNonNullableType"; + SyntaxKind[SyntaxKind["JSDocRecordType"] = 265] = "JSDocRecordType"; + SyntaxKind[SyntaxKind["JSDocRecordMember"] = 266] = "JSDocRecordMember"; + SyntaxKind[SyntaxKind["JSDocTypeReference"] = 267] = "JSDocTypeReference"; + SyntaxKind[SyntaxKind["JSDocOptionalType"] = 268] = "JSDocOptionalType"; + SyntaxKind[SyntaxKind["JSDocFunctionType"] = 269] = "JSDocFunctionType"; + SyntaxKind[SyntaxKind["JSDocVariadicType"] = 270] = "JSDocVariadicType"; + SyntaxKind[SyntaxKind["JSDocConstructorType"] = 271] = "JSDocConstructorType"; + SyntaxKind[SyntaxKind["JSDocThisType"] = 272] = "JSDocThisType"; + SyntaxKind[SyntaxKind["JSDocComment"] = 273] = "JSDocComment"; + SyntaxKind[SyntaxKind["JSDocTag"] = 274] = "JSDocTag"; + SyntaxKind[SyntaxKind["JSDocParameterTag"] = 275] = "JSDocParameterTag"; + SyntaxKind[SyntaxKind["JSDocReturnTag"] = 276] = "JSDocReturnTag"; + SyntaxKind[SyntaxKind["JSDocTypeTag"] = 277] = "JSDocTypeTag"; + SyntaxKind[SyntaxKind["JSDocTemplateTag"] = 278] = "JSDocTemplateTag"; // Synthesized list - SyntaxKind[SyntaxKind["SyntaxList"] = 278] = "SyntaxList"; + SyntaxKind[SyntaxKind["SyntaxList"] = 279] = "SyntaxList"; // Enum value count - SyntaxKind[SyntaxKind["Count"] = 279] = "Count"; + SyntaxKind[SyntaxKind["Count"] = 280] = "Count"; // Markers SyntaxKind[SyntaxKind["FirstAssignment"] = 56] = "FirstAssignment"; SyntaxKind[SyntaxKind["LastAssignment"] = 68] = "LastAssignment"; SyntaxKind[SyntaxKind["FirstReservedWord"] = 70] = "FirstReservedWord"; SyntaxKind[SyntaxKind["LastReservedWord"] = 105] = "LastReservedWord"; SyntaxKind[SyntaxKind["FirstKeyword"] = 70] = "FirstKeyword"; - SyntaxKind[SyntaxKind["LastKeyword"] = 137] = "LastKeyword"; + SyntaxKind[SyntaxKind["LastKeyword"] = 138] = "LastKeyword"; SyntaxKind[SyntaxKind["FirstFutureReservedWord"] = 106] = "FirstFutureReservedWord"; SyntaxKind[SyntaxKind["LastFutureReservedWord"] = 114] = "LastFutureReservedWord"; - SyntaxKind[SyntaxKind["FirstTypeNode"] = 153] = "FirstTypeNode"; - SyntaxKind[SyntaxKind["LastTypeNode"] = 165] = "LastTypeNode"; + SyntaxKind[SyntaxKind["FirstTypeNode"] = 154] = "FirstTypeNode"; + SyntaxKind[SyntaxKind["LastTypeNode"] = 166] = "LastTypeNode"; SyntaxKind[SyntaxKind["FirstPunctuation"] = 15] = "FirstPunctuation"; SyntaxKind[SyntaxKind["LastPunctuation"] = 68] = "LastPunctuation"; SyntaxKind[SyntaxKind["FirstToken"] = 0] = "FirstToken"; - SyntaxKind[SyntaxKind["LastToken"] = 137] = "LastToken"; + SyntaxKind[SyntaxKind["LastToken"] = 138] = "LastToken"; SyntaxKind[SyntaxKind["FirstTriviaToken"] = 2] = "FirstTriviaToken"; SyntaxKind[SyntaxKind["LastTriviaToken"] = 7] = "LastTriviaToken"; SyntaxKind[SyntaxKind["FirstLiteralToken"] = 8] = "FirstLiteralToken"; @@ -357,7 +358,7 @@ var ts; SyntaxKind[SyntaxKind["LastTemplateToken"] = 14] = "LastTemplateToken"; SyntaxKind[SyntaxKind["FirstBinaryOperator"] = 25] = "FirstBinaryOperator"; SyntaxKind[SyntaxKind["LastBinaryOperator"] = 68] = "LastBinaryOperator"; - SyntaxKind[SyntaxKind["FirstNode"] = 138] = "FirstNode"; + SyntaxKind[SyntaxKind["FirstNode"] = 139] = "FirstNode"; })(ts.SyntaxKind || (ts.SyntaxKind = {})); var SyntaxKind = ts.SyntaxKind; (function (NodeFlags) { @@ -393,8 +394,10 @@ var ts; NodeFlags[NodeFlags["ThisNodeOrAnySubNodesHasError"] = 268435456] = "ThisNodeOrAnySubNodesHasError"; NodeFlags[NodeFlags["HasAggregatedChildData"] = 536870912] = "HasAggregatedChildData"; NodeFlags[NodeFlags["HasJsxSpreadAttribute"] = 1073741824] = "HasJsxSpreadAttribute"; - NodeFlags[NodeFlags["Modifier"] = 959] = "Modifier"; + NodeFlags[NodeFlags["Modifier"] = 1023] = "Modifier"; NodeFlags[NodeFlags["AccessibilityModifier"] = 28] = "AccessibilityModifier"; + // Accessibility modifiers and 'readonly' can be attached to a parameter in a constructor to make it a property. + NodeFlags[NodeFlags["ParameterPropertyModifier"] = 92] = "ParameterPropertyModifier"; NodeFlags[NodeFlags["BlockScoped"] = 3072] = "BlockScoped"; NodeFlags[NodeFlags["ReachabilityCheckFlags"] = 98304] = "ReachabilityCheckFlags"; NodeFlags[NodeFlags["EmitHelperFlags"] = 3932160] = "EmitHelperFlags"; @@ -420,6 +423,20 @@ var ts; RelationComparisonResult[RelationComparisonResult["FailedAndReported"] = 3] = "FailedAndReported"; })(ts.RelationComparisonResult || (ts.RelationComparisonResult = {})); var RelationComparisonResult = ts.RelationComparisonResult; + (function (FlowFlags) { + FlowFlags[FlowFlags["Unreachable"] = 1] = "Unreachable"; + FlowFlags[FlowFlags["Start"] = 2] = "Start"; + FlowFlags[FlowFlags["BranchLabel"] = 4] = "BranchLabel"; + FlowFlags[FlowFlags["LoopLabel"] = 8] = "LoopLabel"; + FlowFlags[FlowFlags["Assignment"] = 16] = "Assignment"; + FlowFlags[FlowFlags["TrueCondition"] = 32] = "TrueCondition"; + FlowFlags[FlowFlags["FalseCondition"] = 64] = "FalseCondition"; + FlowFlags[FlowFlags["Referenced"] = 128] = "Referenced"; + FlowFlags[FlowFlags["Shared"] = 256] = "Shared"; + FlowFlags[FlowFlags["Label"] = 12] = "Label"; + FlowFlags[FlowFlags["Condition"] = 96] = "Condition"; + })(ts.FlowFlags || (ts.FlowFlags = {})); + var FlowFlags = ts.FlowFlags; var OperationCanceledException = (function () { function OperationCanceledException() { } @@ -448,6 +465,7 @@ var ts; TypeFormatFlags[TypeFormatFlags["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature"; TypeFormatFlags[TypeFormatFlags["InElementType"] = 64] = "InElementType"; TypeFormatFlags[TypeFormatFlags["UseFullyQualifiedType"] = 128] = "UseFullyQualifiedType"; + TypeFormatFlags[TypeFormatFlags["InFirstTypeArgument"] = 256] = "InFirstTypeArgument"; })(ts.TypeFormatFlags || (ts.TypeFormatFlags = {})); var TypeFormatFlags = ts.TypeFormatFlags; (function (SymbolFormatFlags) { @@ -625,10 +643,11 @@ var ts; TypeFlags[TypeFlags["ESSymbol"] = 16777216] = "ESSymbol"; TypeFlags[TypeFlags["ThisType"] = 33554432] = "ThisType"; TypeFlags[TypeFlags["ObjectLiteralPatternWithComputedProperties"] = 67108864] = "ObjectLiteralPatternWithComputedProperties"; + TypeFlags[TypeFlags["Never"] = 134217728] = "Never"; /* @internal */ TypeFlags[TypeFlags["Nullable"] = 96] = "Nullable"; /* @internal */ - TypeFlags[TypeFlags["Intrinsic"] = 16777343] = "Intrinsic"; + TypeFlags[TypeFlags["Intrinsic"] = 150995071] = "Intrinsic"; /* @internal */ TypeFlags[TypeFlags["Primitive"] = 16777726] = "Primitive"; TypeFlags[TypeFlags["StringLike"] = 258] = "StringLike"; @@ -636,6 +655,7 @@ var ts; TypeFlags[TypeFlags["ObjectType"] = 80896] = "ObjectType"; TypeFlags[TypeFlags["UnionOrIntersection"] = 49152] = "UnionOrIntersection"; TypeFlags[TypeFlags["StructuredType"] = 130048] = "StructuredType"; + TypeFlags[TypeFlags["Narrowable"] = 97793] = "Narrowable"; /* @internal */ TypeFlags[TypeFlags["RequiresWidening"] = 6291456] = "RequiresWidening"; /* @internal */ @@ -940,11 +960,11 @@ var ts; return undefined; } ts.forEach = forEach; - function contains(array, value) { + function contains(array, value, areEqual) { if (array) { for (var _i = 0, array_1 = array; _i < array_1.length; _i++) { var v = array_1[_i]; - if (v === value) { + if (areEqual ? areEqual(v, value) : v === value) { return true; } } @@ -1010,13 +1030,13 @@ var ts; return array1.concat(array2); } ts.concatenate = concatenate; - function deduplicate(array) { + function deduplicate(array, areEqual) { var result; if (array) { result = []; for (var _i = 0, array_5 = array; _i < array_5.length; _i++) { var item = array_5[_i]; - if (!contains(result, item)) { + if (!contains(result, item, areEqual)) { result.push(item); } } @@ -1890,77 +1910,7 @@ var ts; var _path = require("path"); var _os = require("os"); var _crypto = require("crypto"); - // average async stat takes about 30 microseconds - // set chunk size to do 30 files in < 1 millisecond - function createPollingWatchedFileSet(interval, chunkSize) { - if (interval === void 0) { interval = 2500; } - if (chunkSize === void 0) { chunkSize = 30; } - var watchedFiles = []; - var nextFileToCheck = 0; - var watchTimer; - function getModifiedTime(fileName) { - return _fs.statSync(fileName).mtime; - } - function poll(checkedIndex) { - var watchedFile = watchedFiles[checkedIndex]; - if (!watchedFile) { - return; - } - _fs.stat(watchedFile.fileName, function (err, stats) { - if (err) { - watchedFile.callback(watchedFile.fileName); - } - else if (watchedFile.mtime.getTime() !== stats.mtime.getTime()) { - watchedFile.mtime = getModifiedTime(watchedFile.fileName); - watchedFile.callback(watchedFile.fileName, watchedFile.mtime.getTime() === 0); - } - }); - } - // this implementation uses polling and - // stat due to inconsistencies of fs.watch - // and efficiency of stat on modern filesystems - function startWatchTimer() { - watchTimer = setInterval(function () { - var count = 0; - var nextToCheck = nextFileToCheck; - var firstCheck = -1; - while ((count < chunkSize) && (nextToCheck !== firstCheck)) { - poll(nextToCheck); - if (firstCheck < 0) { - firstCheck = nextToCheck; - } - nextToCheck++; - if (nextToCheck === watchedFiles.length) { - nextToCheck = 0; - } - count++; - } - nextFileToCheck = nextToCheck; - }, interval); - } - function addFile(fileName, callback) { - var file = { - fileName: fileName, - callback: callback, - mtime: getModifiedTime(fileName) - }; - watchedFiles.push(file); - if (watchedFiles.length === 1) { - startWatchTimer(); - } - return file; - } - function removeFile(file) { - watchedFiles = ts.copyListRemovingItem(file, watchedFiles); - } - return { - getModifiedTime: getModifiedTime, - poll: poll, - startWatchTimer: startWatchTimer, - addFile: addFile, - removeFile: removeFile - }; - } + var useNonPollingWatchers = process.env["TSC_NONPOLLING_WATCHER"]; function createWatchedFileSet() { var dirWatchers = {}; // One file can have multiple watchers @@ -2030,20 +1980,6 @@ var ts; } } } - // REVIEW: for now this implementation uses polling. - // The advantage of polling is that it works reliably - // on all os and with network mounted files. - // For 90 referenced files, the average time to detect - // changes is 2*msInterval (by default 5 seconds). - // The overhead of this is .04 percent (1/2500) with - // average pause of < 1 millisecond (and max - // pause less than 1.5 milliseconds); question is - // do we anticipate reference sets in the 100s and - // do we care about waiting 10-20 seconds to detect - // changes for large reference sets? If so, do we want - // to increase the chunk size or decrease the interval - // time dynamically to match the large reference set? - var pollingWatchedFileSet = createPollingWatchedFileSet(); var watchedFileSet = createWatchedFileSet(); function isNode4OrLater() { return parseInt(process.version.charAt(1)) >= 4; @@ -2131,7 +2067,7 @@ var ts; var directories = []; for (var _i = 0, files_2 = files; _i < files_2.length; _i++) { var current = files_2[_i]; - // This is necessary because on some file system node fails to exclude + // This is necessary because on some file system node fails to exclude // "." and "..". See https://github.com/nodejs/node/issues/4002 if (current === "." || current === "..") { continue; @@ -2165,15 +2101,24 @@ var ts; readFile: readFile, writeFile: writeFile, watchFile: function (fileName, callback) { - // Node 4.0 stabilized the `fs.watch` function on Windows which avoids polling - // and is more efficient than `fs.watchFile` (ref: https://github.com/nodejs/node/pull/2649 - // and https://github.com/Microsoft/TypeScript/issues/4643), therefore - // if the current node.js version is newer than 4, use `fs.watch` instead. - var watchSet = isNode4OrLater() ? watchedFileSet : pollingWatchedFileSet; - var watchedFile = watchSet.addFile(fileName, callback); - return { - close: function () { return watchSet.removeFile(watchedFile); } - }; + if (useNonPollingWatchers) { + var watchedFile_1 = watchedFileSet.addFile(fileName, callback); + return { + close: function () { return watchedFileSet.removeFile(watchedFile_1); } + }; + } + else { + _fs.watchFile(fileName, { persistent: true, interval: 250 }, fileChanged); + return { + close: function () { return _fs.unwatchFile(fileName, fileChanged); } + }; + } + function fileChanged(curr, prev) { + if (+curr.mtime <= +prev.mtime) { + return; + } + callback(fileName); + } }, watchDirectory: function (directoryName, callback, recursive) { // Node 4.0 `fs.watch` function supports the "recursive" option on both OSX and Windows @@ -2234,10 +2179,14 @@ var ts; }, exit: function (exitCode) { process.exit(exitCode); + }, + realpath: function (path) { + return _fs.realpathSync(path); } }; } function getChakraSystem() { + var realpath = ChakraHost.realpath && (function (path) { return ChakraHost.realpath(path); }); return { newLine: ChakraHost.newLine || "\r\n", args: ChakraHost.args, @@ -2261,10 +2210,14 @@ var ts; getExecutingFilePath: function () { return ChakraHost.executingFile; }, getCurrentDirectory: function () { return ChakraHost.currentDirectory; }, readDirectory: ChakraHost.readDirectory, - exit: ChakraHost.quit + exit: ChakraHost.quit, + realpath: realpath }; } - if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { + if (typeof ChakraHost !== "undefined") { + return getChakraSystem(); + } + else if (typeof WScript !== "undefined" && typeof ActiveXObject === "function") { return getWScriptSystem(); } else if (typeof process !== "undefined" && process.nextTick && !process.browser && typeof require !== "undefined") { @@ -2272,9 +2225,6 @@ var ts; // process.browser check excludes webpack and browserify return getNodeSystem(); } - else if (typeof ChakraHost !== "undefined") { - return getChakraSystem(); - } else { return undefined; // Unsupported host } @@ -2365,7 +2315,6 @@ var ts; A_return_statement_can_only_be_used_within_a_function_body: { code: 1108, category: ts.DiagnosticCategory.Error, key: "A_return_statement_can_only_be_used_within_a_function_body_1108", message: "A 'return' statement can only be used within a function body." }, Expression_expected: { code: 1109, category: ts.DiagnosticCategory.Error, key: "Expression_expected_1109", message: "Expression expected." }, Type_expected: { code: 1110, category: ts.DiagnosticCategory.Error, key: "Type_expected_1110", message: "Type expected." }, - A_class_member_cannot_be_declared_optional: { code: 1112, category: ts.DiagnosticCategory.Error, key: "A_class_member_cannot_be_declared_optional_1112", message: "A class member cannot be declared optional." }, A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: { code: 1113, category: ts.DiagnosticCategory.Error, key: "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113", message: "A 'default' clause cannot appear more than once in a 'switch' statement." }, Duplicate_label_0: { code: 1114, category: ts.DiagnosticCategory.Error, key: "Duplicate_label_0_1114", message: "Duplicate label '{0}'" }, A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: { code: 1115, category: ts.DiagnosticCategory.Error, key: "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115", message: "A 'continue' statement can only jump to a label of an enclosing iteration statement." }, @@ -2489,6 +2438,9 @@ var ts; A_type_literal_property_cannot_have_an_initializer: { code: 1247, category: ts.DiagnosticCategory.Error, key: "A_type_literal_property_cannot_have_an_initializer_1247", message: "A type literal property cannot have an initializer." }, A_class_member_cannot_have_the_0_keyword: { code: 1248, category: ts.DiagnosticCategory.Error, key: "A_class_member_cannot_have_the_0_keyword_1248", message: "A class member cannot have the '{0}' keyword." }, A_decorator_can_only_decorate_a_method_implementation_not_an_overload: { code: 1249, category: ts.DiagnosticCategory.Error, key: "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249", message: "A decorator can only decorate a method implementation, not an overload." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5: { code: 1250, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode: { code: 1251, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode." }, + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode: { code: 1252, category: ts.DiagnosticCategory.Error, key: "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252", message: "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Modules are automatically in strict mode." }, with_statements_are_not_allowed_in_an_async_function_block: { code: 1300, category: ts.DiagnosticCategory.Error, key: "with_statements_are_not_allowed_in_an_async_function_block_1300", message: "'with' statements are not allowed in an async function block." }, await_expression_is_only_allowed_within_an_async_function: { code: 1308, category: ts.DiagnosticCategory.Error, key: "await_expression_is_only_allowed_within_an_async_function_1308", message: "'await' expression is only allowed within an async function." }, Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher: { code: 1311, category: ts.DiagnosticCategory.Error, key: "Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher_1311", message: "Async functions are only available when targeting ECMAScript 6 and higher." }, @@ -2718,7 +2670,10 @@ var ts; A_module_cannot_have_multiple_default_exports: { code: 2528, category: ts.DiagnosticCategory.Error, key: "A_module_cannot_have_multiple_default_exports_2528", message: "A module cannot have multiple default exports." }, Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions: { code: 2529, category: ts.DiagnosticCategory.Error, key: "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529", message: "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions." }, Property_0_is_incompatible_with_index_signature: { code: 2530, category: ts.DiagnosticCategory.Error, key: "Property_0_is_incompatible_with_index_signature_2530", message: "Property '{0}' is incompatible with index signature." }, - Object_is_possibly_null_or_undefined: { code: 2531, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_or_undefined_2531", message: "Object is possibly 'null' or 'undefined'." }, + Object_is_possibly_null: { code: 2531, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_2531", message: "Object is possibly 'null'." }, + Object_is_possibly_undefined: { code: 2532, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_undefined_2532", message: "Object is possibly 'undefined'." }, + Object_is_possibly_null_or_undefined: { code: 2533, category: ts.DiagnosticCategory.Error, key: "Object_is_possibly_null_or_undefined_2533", message: "Object is possibly 'null' or 'undefined'." }, + A_function_returning_never_cannot_have_a_reachable_end_point: { code: 2534, category: ts.DiagnosticCategory.Error, key: "A_function_returning_never_cannot_have_a_reachable_end_point_2534", message: "A function returning 'never' cannot have a reachable end point." }, JSX_element_attributes_type_0_may_not_be_a_union_type: { code: 2600, category: ts.DiagnosticCategory.Error, key: "JSX_element_attributes_type_0_may_not_be_a_union_type_2600", message: "JSX element attributes type '{0}' may not be a union type." }, The_return_type_of_a_JSX_element_constructor_must_return_an_object_type: { code: 2601, category: ts.DiagnosticCategory.Error, key: "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601", message: "The return type of a JSX element constructor must return an object type." }, JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist: { code: 2602, category: ts.DiagnosticCategory.Error, key: "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602", message: "JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist." }, @@ -2738,11 +2693,10 @@ var ts; Type_0_provides_no_match_for_the_signature_1: { code: 2658, category: ts.DiagnosticCategory.Error, key: "Type_0_provides_no_match_for_the_signature_1_2658", message: "Type '{0}' provides no match for the signature '{1}'" }, super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher: { code: 2659, category: ts.DiagnosticCategory.Error, key: "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659", message: "'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher." }, super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions: { code: 2660, category: ts.DiagnosticCategory.Error, key: "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660", message: "'super' can only be referenced in members of derived classes or object literal expressions." }, - Cannot_re_export_name_that_is_not_defined_in_the_module: { code: 2661, category: ts.DiagnosticCategory.Error, key: "Cannot_re_export_name_that_is_not_defined_in_the_module_2661", message: "Cannot re-export name that is not defined in the module." }, + Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module: { code: 2661, category: ts.DiagnosticCategory.Error, key: "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661", message: "Cannot export '{0}'. Only local declarations can be exported from a module." }, Cannot_find_name_0_Did_you_mean_the_static_member_1_0: { code: 2662, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662", message: "Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?" }, Cannot_find_name_0_Did_you_mean_the_instance_member_this_0: { code: 2663, category: ts.DiagnosticCategory.Error, key: "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663", message: "Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?" }, Invalid_module_name_in_augmentation_module_0_cannot_be_found: { code: 2664, category: ts.DiagnosticCategory.Error, key: "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664", message: "Invalid module name in augmentation, module '{0}' cannot be found." }, - Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope: { code: 2665, category: ts.DiagnosticCategory.Error, key: "Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope_2665", message: "Module augmentation cannot introduce new names in the top level scope." }, Exports_and_export_assignments_are_not_permitted_in_module_augmentations: { code: 2666, category: ts.DiagnosticCategory.Error, key: "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666", message: "Exports and export assignments are not permitted in module augmentations." }, Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module: { code: 2667, category: ts.DiagnosticCategory.Error, key: "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667", message: "Imports are not permitted in module augmentations. Consider moving them to the enclosing external module." }, export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible: { code: 2668, category: ts.DiagnosticCategory.Error, key: "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668", message: "'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible." }, @@ -2759,7 +2713,7 @@ var ts; A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void: { code: 2679, category: ts.DiagnosticCategory.Error, key: "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679", message: "A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'." }, A_this_parameter_must_be_the_first_parameter: { code: 2680, category: ts.DiagnosticCategory.Error, key: "A_this_parameter_must_be_the_first_parameter_2680", message: "A 'this' parameter must be the first parameter." }, A_constructor_cannot_have_a_this_parameter: { code: 2681, category: ts.DiagnosticCategory.Error, key: "A_constructor_cannot_have_a_this_parameter_2681", message: "A constructor cannot have a 'this' parameter." }, - A_setter_cannot_have_a_this_parameter: { code: 2682, category: ts.DiagnosticCategory.Error, key: "A_setter_cannot_have_a_this_parameter_2682", message: "A setter cannot have a 'this' parameter." }, + get_and_set_accessor_must_have_the_same_this_type: { code: 2682, category: ts.DiagnosticCategory.Error, key: "get_and_set_accessor_must_have_the_same_this_type_2682", message: "'get' and 'set' accessor must have the same 'this' type." }, this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation: { code: 2683, category: ts.DiagnosticCategory.Error, key: "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683", message: "'this' implicitly has type 'any' because it does not have a type annotation." }, The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1: { code: 2684, category: ts.DiagnosticCategory.Error, key: "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684", message: "The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'." }, The_this_types_of_each_signature_are_incompatible: { code: 2685, category: ts.DiagnosticCategory.Error, key: "The_this_types_of_each_signature_are_incompatible_2685", message: "The 'this' types of each signature are incompatible." }, @@ -2856,6 +2810,8 @@ var ts; Option_paths_cannot_be_used_without_specifying_baseUrl_option: { code: 5060, category: ts.DiagnosticCategory.Error, key: "Option_paths_cannot_be_used_without_specifying_baseUrl_option_5060", message: "Option 'paths' cannot be used without specifying '--baseUrl' option." }, Pattern_0_can_have_at_most_one_Asterisk_character: { code: 5061, category: ts.DiagnosticCategory.Error, key: "Pattern_0_can_have_at_most_one_Asterisk_character_5061", message: "Pattern '{0}' can have at most one '*' character" }, Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character: { code: 5062, category: ts.DiagnosticCategory.Error, key: "Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character_5062", message: "Substitution '{0}' in pattern '{1}' in can have at most one '*' character" }, + Substututions_for_pattern_0_should_be_an_array: { code: 5063, category: ts.DiagnosticCategory.Error, key: "Substututions_for_pattern_0_should_be_an_array_5063", message: "Substututions for pattern '{0}' should be an array." }, + Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2: { code: 5064, category: ts.DiagnosticCategory.Error, key: "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064", message: "Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'." }, Concatenate_and_emit_output_to_single_file: { code: 6001, category: ts.DiagnosticCategory.Message, key: "Concatenate_and_emit_output_to_single_file_6001", message: "Concatenate and emit output to single file." }, Generates_corresponding_d_ts_file: { code: 6002, category: ts.DiagnosticCategory.Message, key: "Generates_corresponding_d_ts_file_6002", message: "Generates corresponding '.d.ts' file." }, Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: { code: 6003, category: ts.DiagnosticCategory.Message, key: "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", message: "Specify the location where debugger should locate map files instead of generated locations." }, @@ -2966,6 +2922,8 @@ var ts; Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder: { code: 6126, category: ts.DiagnosticCategory.Message, key: "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126", message: "Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder." }, Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1: { code: 6127, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127", message: "======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========" }, Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set: { code: 6128, category: ts.DiagnosticCategory.Message, key: "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128", message: "======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========" }, + The_config_file_0_found_doesn_t_contain_any_source_files: { code: 6129, category: ts.DiagnosticCategory.Error, key: "The_config_file_0_found_doesn_t_contain_any_source_files_6129", message: "The config file '{0}' found doesn't contain any source files." }, + Resolving_real_path_for_0_result_1: { code: 6130, category: ts.DiagnosticCategory.Message, key: "Resolving_real_path_for_0_result_1_6130", message: "Resolving real path for '{0}', result '{1}'" }, Variable_0_implicitly_has_an_1_type: { code: 7005, category: ts.DiagnosticCategory.Error, key: "Variable_0_implicitly_has_an_1_type_7005", message: "Variable '{0}' implicitly has an '{1}' type." }, Parameter_0_implicitly_has_an_1_type: { code: 7006, category: ts.DiagnosticCategory.Error, key: "Parameter_0_implicitly_has_an_1_type_7006", message: "Parameter '{0}' implicitly has an '{1}' type." }, Member_0_implicitly_has_an_1_type: { code: 7008, category: ts.DiagnosticCategory.Error, key: "Member_0_implicitly_has_an_1_type_7008", message: "Member '{0}' implicitly has an '{1}' type." }, @@ -3053,7 +3011,7 @@ var ts; "false": 84 /* FalseKeyword */, "finally": 85 /* FinallyKeyword */, "for": 86 /* ForKeyword */, - "from": 135 /* FromKeyword */, + "from": 136 /* FromKeyword */, "function": 87 /* FunctionKeyword */, "get": 123 /* GetKeyword */, "if": 88 /* IfKeyword */, @@ -3066,30 +3024,31 @@ var ts; "let": 108 /* LetKeyword */, "module": 125 /* ModuleKeyword */, "namespace": 126 /* NamespaceKeyword */, + "never": 127 /* NeverKeyword */, "new": 92 /* NewKeyword */, "null": 93 /* NullKeyword */, - "number": 129 /* NumberKeyword */, + "number": 130 /* NumberKeyword */, "package": 109 /* PackageKeyword */, "private": 110 /* PrivateKeyword */, "protected": 111 /* ProtectedKeyword */, "public": 112 /* PublicKeyword */, - "readonly": 127 /* ReadonlyKeyword */, - "require": 128 /* RequireKeyword */, - "global": 136 /* GlobalKeyword */, + "readonly": 128 /* ReadonlyKeyword */, + "require": 129 /* RequireKeyword */, + "global": 137 /* GlobalKeyword */, "return": 94 /* ReturnKeyword */, - "set": 130 /* SetKeyword */, + "set": 131 /* SetKeyword */, "static": 113 /* StaticKeyword */, - "string": 131 /* StringKeyword */, + "string": 132 /* StringKeyword */, "super": 95 /* SuperKeyword */, "switch": 96 /* SwitchKeyword */, - "symbol": 132 /* SymbolKeyword */, + "symbol": 133 /* SymbolKeyword */, "this": 97 /* ThisKeyword */, "throw": 98 /* ThrowKeyword */, "true": 99 /* TrueKeyword */, "try": 100 /* TryKeyword */, - "type": 133 /* TypeKeyword */, + "type": 134 /* TypeKeyword */, "typeof": 101 /* TypeOfKeyword */, - "undefined": 134 /* UndefinedKeyword */, + "undefined": 135 /* UndefinedKeyword */, "var": 102 /* VarKeyword */, "void": 103 /* VoidKeyword */, "while": 104 /* WhileKeyword */, @@ -3097,7 +3056,7 @@ var ts; "yield": 114 /* YieldKeyword */, "async": 118 /* AsyncKeyword */, "await": 119 /* AwaitKeyword */, - "of": 137 /* OfKeyword */, + "of": 138 /* OfKeyword */, "{": 15 /* OpenBraceToken */, "}": 16 /* CloseBraceToken */, "(": 17 /* OpenParenToken */, @@ -4515,7 +4474,7 @@ var ts; break; } } - return token = 243 /* JsxText */; + return token = 244 /* JsxText */; } // Scans a JSX identifier; these differ from normal identifiers in that // they allow dashes @@ -4715,6 +4674,24 @@ var ts; return node.end - node.pos; } ts.getFullWidth = getFullWidth; + function mapIsEqualTo(map1, map2) { + if (!map1 || !map2) { + return map1 === map2; + } + return containsAll(map1, map2) && containsAll(map2, map1); + } + ts.mapIsEqualTo = mapIsEqualTo; + function containsAll(map, other) { + for (var key in map) { + if (!ts.hasProperty(map, key)) { + continue; + } + if (!ts.hasProperty(other, key) || map[key] !== other[key]) { + return false; + } + } + return true; + } function arrayIsEqualTo(array1, array2, equaler) { if (!array1 || !array2) { return array1 === array2; @@ -4805,7 +4782,7 @@ var ts; } } function getSourceFileOfNode(node) { - while (node && node.kind !== 255 /* SourceFile */) { + while (node && node.kind !== 256 /* SourceFile */) { node = node.parent; } return node; @@ -4813,11 +4790,11 @@ var ts; ts.getSourceFileOfNode = getSourceFileOfNode; function isStatementWithLocals(node) { switch (node.kind) { - case 198 /* Block */: - case 226 /* CaseBlock */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: + case 199 /* Block */: + case 227 /* CaseBlock */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: return true; } return false; @@ -4947,13 +4924,13 @@ var ts; } ts.isBlockOrCatchScoped = isBlockOrCatchScoped; function isAmbientModule(node) { - return node && node.kind === 224 /* ModuleDeclaration */ && + return node && node.kind === 225 /* ModuleDeclaration */ && (node.name.kind === 9 /* StringLiteral */ || isGlobalScopeAugmentation(node)); } ts.isAmbientModule = isAmbientModule; function isBlockScopedContainerTopLevel(node) { - return node.kind === 255 /* SourceFile */ || - node.kind === 224 /* ModuleDeclaration */ || + return node.kind === 256 /* SourceFile */ || + node.kind === 225 /* ModuleDeclaration */ || isFunctionLike(node) || isFunctionBlock(node); } @@ -4970,9 +4947,9 @@ var ts; return false; } switch (node.parent.kind) { - case 255 /* SourceFile */: + case 256 /* SourceFile */: return ts.isExternalModule(node.parent); - case 225 /* ModuleBlock */: + case 226 /* ModuleBlock */: return isAmbientModule(node.parent.parent) && !ts.isExternalModule(node.parent.parent.parent); } return false; @@ -4987,15 +4964,15 @@ var ts; return current; } switch (current.kind) { - case 255 /* SourceFile */: - case 226 /* CaseBlock */: - case 251 /* CatchClause */: - case 224 /* ModuleDeclaration */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: + case 256 /* SourceFile */: + case 227 /* CaseBlock */: + case 252 /* CatchClause */: + case 225 /* ModuleDeclaration */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: return current; - case 198 /* Block */: + case 199 /* Block */: // function block is not considered block-scope container // see comment in binder.ts: bind(...), case for SyntaxKind.Block if (!isFunctionLike(current.parent)) { @@ -5008,9 +4985,9 @@ var ts; ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer; function isCatchClauseVariableDeclaration(declaration) { return declaration && - declaration.kind === 217 /* VariableDeclaration */ && + declaration.kind === 218 /* VariableDeclaration */ && declaration.parent && - declaration.parent.kind === 251 /* CatchClause */; + declaration.parent.kind === 252 /* CatchClause */; } ts.isCatchClauseVariableDeclaration = isCatchClauseVariableDeclaration; // Return display name of an identifier @@ -5048,11 +5025,11 @@ var ts; ts.getSpanOfTokenAtPosition = getSpanOfTokenAtPosition; function getErrorSpanForArrowFunction(sourceFile, node) { var pos = ts.skipTrivia(sourceFile.text, node.pos); - if (node.body && node.body.kind === 198 /* Block */) { + if (node.body && node.body.kind === 199 /* Block */) { var startLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.pos).line; var endLine = ts.getLineAndCharacterOfPosition(sourceFile, node.body.end).line; if (startLine < endLine) { - // The arrow function spans multiple lines, + // The arrow function spans multiple lines, // make the error span be the first line, inclusive. return ts.createTextSpan(pos, getEndLinePosition(startLine, sourceFile) - pos + 1); } @@ -5062,7 +5039,7 @@ var ts; function getErrorSpanForNode(sourceFile, node) { var errorNode = node; switch (node.kind) { - case 255 /* SourceFile */: + case 256 /* SourceFile */: var pos_1 = ts.skipTrivia(sourceFile.text, 0, /*stopAfterLineBreak*/ false); if (pos_1 === sourceFile.text.length) { // file is empty - return span for the beginning of the file @@ -5071,23 +5048,23 @@ var ts; return getSpanOfTokenAtPosition(sourceFile, pos_1); // This list is a work in progress. Add missing node kinds to improve their error // spans. - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 221 /* InterfaceDeclaration */: - case 224 /* ModuleDeclaration */: - case 223 /* EnumDeclaration */: - case 254 /* EnumMember */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 222 /* TypeAliasDeclaration */: + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + case 225 /* ModuleDeclaration */: + case 224 /* EnumDeclaration */: + case 255 /* EnumMember */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 223 /* TypeAliasDeclaration */: errorNode = node.name; break; - case 179 /* ArrowFunction */: + case 180 /* ArrowFunction */: return getErrorSpanForArrowFunction(sourceFile, node); } if (errorNode === undefined) { @@ -5110,11 +5087,11 @@ var ts; } ts.isDeclarationFile = isDeclarationFile; function isConstEnumDeclaration(node) { - return node.kind === 223 /* EnumDeclaration */ && isConst(node); + return node.kind === 224 /* EnumDeclaration */ && isConst(node); } ts.isConstEnumDeclaration = isConstEnumDeclaration; function walkUpBindingElementsAndPatterns(node) { - while (node && (node.kind === 168 /* BindingElement */ || isBindingPattern(node))) { + while (node && (node.kind === 169 /* BindingElement */ || isBindingPattern(node))) { node = node.parent; } return node; @@ -5129,14 +5106,14 @@ var ts; function getCombinedNodeFlags(node) { node = walkUpBindingElementsAndPatterns(node); var flags = node.flags; - if (node.kind === 217 /* VariableDeclaration */) { + if (node.kind === 218 /* VariableDeclaration */) { node = node.parent; } - if (node && node.kind === 218 /* VariableDeclarationList */) { + if (node && node.kind === 219 /* VariableDeclarationList */) { flags |= node.flags; node = node.parent; } - if (node && node.kind === 199 /* VariableStatement */) { + if (node && node.kind === 200 /* VariableStatement */) { flags |= node.flags; } return flags; @@ -5151,11 +5128,11 @@ var ts; } ts.isLet = isLet; function isSuperCallExpression(n) { - return n.kind === 173 /* CallExpression */ && n.expression.kind === 95 /* SuperKeyword */; + return n.kind === 174 /* CallExpression */ && n.expression.kind === 95 /* SuperKeyword */; } ts.isSuperCallExpression = isSuperCallExpression; function isPrologueDirective(node) { - return node.kind === 201 /* ExpressionStatement */ && node.expression.kind === 9 /* StringLiteral */; + return node.kind === 202 /* ExpressionStatement */ && node.expression.kind === 9 /* StringLiteral */; } ts.isPrologueDirective = isPrologueDirective; function getLeadingCommentRangesOfNode(node, sourceFileOfNode) { @@ -5171,7 +5148,7 @@ var ts; } ts.getJsDocComments = getJsDocComments; function getJsDocCommentsFromText(node, text) { - var commentRanges = (node.kind === 141 /* Parameter */ || node.kind === 140 /* TypeParameter */) ? + var commentRanges = (node.kind === 142 /* Parameter */ || node.kind === 141 /* TypeParameter */) ? ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) : getLeadingCommentRangesOfNodeFromText(node, text); return ts.filter(commentRanges, isJsDocComment); @@ -5187,38 +5164,39 @@ var ts; ts.fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*/; ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*/; function isTypeNode(node) { - if (153 /* FirstTypeNode */ <= node.kind && node.kind <= 165 /* LastTypeNode */) { + if (154 /* FirstTypeNode */ <= node.kind && node.kind <= 166 /* LastTypeNode */) { return true; } switch (node.kind) { case 117 /* AnyKeyword */: - case 129 /* NumberKeyword */: - case 131 /* StringKeyword */: + case 130 /* NumberKeyword */: + case 132 /* StringKeyword */: case 120 /* BooleanKeyword */: - case 132 /* SymbolKeyword */: - case 134 /* UndefinedKeyword */: + case 133 /* SymbolKeyword */: + case 135 /* UndefinedKeyword */: + case 127 /* NeverKeyword */: return true; case 103 /* VoidKeyword */: - return node.parent.kind !== 182 /* VoidExpression */; - case 193 /* ExpressionWithTypeArguments */: + return node.parent.kind !== 183 /* VoidExpression */; + case 194 /* ExpressionWithTypeArguments */: return !isExpressionWithTypeArgumentsInClassExtendsClause(node); // Identifiers and qualified names may be type nodes, depending on their context. Climb // above them to find the lowest container case 69 /* Identifier */: // If the identifier is the RHS of a qualified name, then it's a type iff its parent is. - if (node.parent.kind === 138 /* QualifiedName */ && node.parent.right === node) { + if (node.parent.kind === 139 /* QualifiedName */ && node.parent.right === node) { node = node.parent; } - else if (node.parent.kind === 171 /* PropertyAccessExpression */ && node.parent.name === node) { + else if (node.parent.kind === 172 /* PropertyAccessExpression */ && node.parent.name === node) { node = node.parent; } // At this point, node is either a qualified name or an identifier - ts.Debug.assert(node.kind === 69 /* Identifier */ || node.kind === 138 /* QualifiedName */ || node.kind === 171 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'."); - case 138 /* QualifiedName */: - case 171 /* PropertyAccessExpression */: + ts.Debug.assert(node.kind === 69 /* Identifier */ || node.kind === 139 /* QualifiedName */ || node.kind === 172 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isTypeNode'."); + case 139 /* QualifiedName */: + case 172 /* PropertyAccessExpression */: case 97 /* ThisKeyword */: var parent_1 = node.parent; - if (parent_1.kind === 157 /* TypeQuery */) { + if (parent_1.kind === 158 /* TypeQuery */) { return false; } // Do not recursively call isTypeNode on the parent. In the example: @@ -5227,38 +5205,38 @@ var ts; // // Calling isTypeNode would consider the qualified name A.B a type node. Only C or // A.B.C is a type node. - if (153 /* FirstTypeNode */ <= parent_1.kind && parent_1.kind <= 165 /* LastTypeNode */) { + if (154 /* FirstTypeNode */ <= parent_1.kind && parent_1.kind <= 166 /* LastTypeNode */) { return true; } switch (parent_1.kind) { - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: return !isExpressionWithTypeArgumentsInClassExtendsClause(parent_1); - case 140 /* TypeParameter */: + case 141 /* TypeParameter */: return node === parent_1.constraint; - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 141 /* Parameter */: - case 217 /* VariableDeclaration */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 142 /* Parameter */: + case 218 /* VariableDeclaration */: return node === parent_1.type; - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 147 /* Constructor */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 148 /* Constructor */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: return node === parent_1.type; - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: return node === parent_1.type; - case 176 /* TypeAssertionExpression */: + case 177 /* TypeAssertionExpression */: return node === parent_1.type; - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: return parent_1.typeArguments && ts.indexOf(parent_1.typeArguments, node) >= 0; - case 175 /* TaggedTemplateExpression */: + case 176 /* TaggedTemplateExpression */: // TODO (drosen): TaggedTemplateExpressions may eventually support type arguments. return false; } @@ -5272,23 +5250,23 @@ var ts; return traverse(body); function traverse(node) { switch (node.kind) { - case 210 /* ReturnStatement */: + case 211 /* ReturnStatement */: return visitor(node); - case 226 /* CaseBlock */: - case 198 /* Block */: - case 202 /* IfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 211 /* WithStatement */: - case 212 /* SwitchStatement */: - case 248 /* CaseClause */: - case 249 /* DefaultClause */: - case 213 /* LabeledStatement */: - case 215 /* TryStatement */: - case 251 /* CatchClause */: + case 227 /* CaseBlock */: + case 199 /* Block */: + case 203 /* IfStatement */: + case 204 /* DoStatement */: + case 205 /* WhileStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 212 /* WithStatement */: + case 213 /* SwitchStatement */: + case 249 /* CaseClause */: + case 250 /* DefaultClause */: + case 214 /* LabeledStatement */: + case 216 /* TryStatement */: + case 252 /* CatchClause */: return ts.forEachChild(node, traverse); } } @@ -5298,18 +5276,18 @@ var ts; return traverse(body); function traverse(node) { switch (node.kind) { - case 189 /* YieldExpression */: + case 190 /* YieldExpression */: visitor(node); var operand = node.expression; if (operand) { traverse(operand); } - case 223 /* EnumDeclaration */: - case 221 /* InterfaceDeclaration */: - case 224 /* ModuleDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: + case 224 /* EnumDeclaration */: + case 222 /* InterfaceDeclaration */: + case 225 /* ModuleDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: // These are not allowed inside a generator now, but eventually they may be allowed // as local types. Regardless, any yield statements contained within them should be // skipped in this traversal. @@ -5317,7 +5295,7 @@ var ts; default: if (isFunctionLike(node)) { var name_5 = node.name; - if (name_5 && name_5.kind === 139 /* ComputedPropertyName */) { + if (name_5 && name_5.kind === 140 /* ComputedPropertyName */) { // Note that we will not include methods/accessors of a class because they would require // first descending into the class. This is by design. traverse(name_5.expression); @@ -5336,14 +5314,14 @@ var ts; function isVariableLike(node) { if (node) { switch (node.kind) { - case 168 /* BindingElement */: - case 254 /* EnumMember */: - case 141 /* Parameter */: - case 252 /* PropertyAssignment */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 253 /* ShorthandPropertyAssignment */: - case 217 /* VariableDeclaration */: + case 169 /* BindingElement */: + case 255 /* EnumMember */: + case 142 /* Parameter */: + case 253 /* PropertyAssignment */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 254 /* ShorthandPropertyAssignment */: + case 218 /* VariableDeclaration */: return true; } } @@ -5351,11 +5329,11 @@ var ts; } ts.isVariableLike = isVariableLike; function isAccessor(node) { - return node && (node.kind === 148 /* GetAccessor */ || node.kind === 149 /* SetAccessor */); + return node && (node.kind === 149 /* GetAccessor */ || node.kind === 150 /* SetAccessor */); } ts.isAccessor = isAccessor; function isClassLike(node) { - return node && (node.kind === 220 /* ClassDeclaration */ || node.kind === 191 /* ClassExpression */); + return node && (node.kind === 221 /* ClassDeclaration */ || node.kind === 192 /* ClassExpression */); } ts.isClassLike = isClassLike; function isFunctionLike(node) { @@ -5364,32 +5342,32 @@ var ts; ts.isFunctionLike = isFunctionLike; function isFunctionLikeKind(kind) { switch (kind) { - case 147 /* Constructor */: - case 178 /* FunctionExpression */: - case 219 /* FunctionDeclaration */: - case 179 /* ArrowFunction */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: - case 155 /* FunctionType */: - case 156 /* ConstructorType */: + case 148 /* Constructor */: + case 179 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: + case 180 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: return true; } } ts.isFunctionLikeKind = isFunctionLikeKind; function introducesArgumentsExoticObject(node) { switch (node.kind) { - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: return true; } return false; @@ -5397,24 +5375,24 @@ var ts; ts.introducesArgumentsExoticObject = introducesArgumentsExoticObject; function isIterationStatement(node, lookInLabeledStatements) { switch (node.kind) { - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 204 /* DoStatement */: + case 205 /* WhileStatement */: return true; - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements); } return false; } ts.isIterationStatement = isIterationStatement; function isFunctionBlock(node) { - return node && node.kind === 198 /* Block */ && isFunctionLike(node.parent); + return node && node.kind === 199 /* Block */ && isFunctionLike(node.parent); } ts.isFunctionBlock = isFunctionBlock; function isObjectLiteralMethod(node) { - return node && node.kind === 146 /* MethodDeclaration */ && node.parent.kind === 170 /* ObjectLiteralExpression */; + return node && node.kind === 147 /* MethodDeclaration */ && node.parent.kind === 171 /* ObjectLiteralExpression */; } ts.isObjectLiteralMethod = isObjectLiteralMethod; function isIdentifierTypePredicate(predicate) { @@ -5434,6 +5412,15 @@ var ts; } } ts.getContainingFunction = getContainingFunction; + function getContainingFunctionOrModule(node) { + while (true) { + node = node.parent; + if (isFunctionLike(node) || node.kind === 225 /* ModuleDeclaration */ || node.kind === 256 /* SourceFile */) { + return node; + } + } + } + ts.getContainingFunctionOrModule = getContainingFunctionOrModule; function getContainingClass(node) { while (true) { node = node.parent; @@ -5450,7 +5437,7 @@ var ts; return undefined; } switch (node.kind) { - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: // If the grandparent node is an object literal (as opposed to a class), // then the computed property is not a 'this' container. // A computed property name in a class needs to be a this container @@ -5465,9 +5452,9 @@ var ts; // the *body* of the container. node = node.parent; break; - case 142 /* Decorator */: + case 143 /* Decorator */: // Decorators are always applied outside of the body of a class or method. - if (node.parent.kind === 141 /* Parameter */ && isClassElement(node.parent.parent)) { + if (node.parent.kind === 142 /* Parameter */ && isClassElement(node.parent.parent)) { // If the decorator's parent is a Parameter, we resolve the this container from // the grandparent class declaration. node = node.parent.parent; @@ -5478,26 +5465,26 @@ var ts; node = node.parent; } break; - case 179 /* ArrowFunction */: + case 180 /* ArrowFunction */: if (!includeArrowFunctions) { continue; } // Fall through - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 224 /* ModuleDeclaration */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: - case 223 /* EnumDeclaration */: - case 255 /* SourceFile */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 225 /* ModuleDeclaration */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 224 /* EnumDeclaration */: + case 256 /* SourceFile */: return node; } } @@ -5518,26 +5505,26 @@ var ts; return node; } switch (node.kind) { - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: node = node.parent; break; - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: if (!stopOnFunctions) { continue; } - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: return node; - case 142 /* Decorator */: + case 143 /* Decorator */: // Decorators are always applied outside of the body of a class or method. - if (node.parent.kind === 141 /* Parameter */ && isClassElement(node.parent.parent)) { + if (node.parent.kind === 142 /* Parameter */ && isClassElement(node.parent.parent)) { // If the decorator's parent is a Parameter, we resolve the this container from // the grandparent class declaration. node = node.parent.parent; @@ -5556,20 +5543,20 @@ var ts; * Determines whether a node is a property or element access expression for super. */ function isSuperPropertyOrElementAccess(node) { - return (node.kind === 171 /* PropertyAccessExpression */ - || node.kind === 172 /* ElementAccessExpression */) + return (node.kind === 172 /* PropertyAccessExpression */ + || node.kind === 173 /* ElementAccessExpression */) && node.expression.kind === 95 /* SuperKeyword */; } ts.isSuperPropertyOrElementAccess = isSuperPropertyOrElementAccess; function getEntityNameFromTypeNode(node) { if (node) { switch (node.kind) { - case 154 /* TypeReference */: + case 155 /* TypeReference */: return node.typeName; - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: return node.expression; case 69 /* Identifier */: - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: return node; } } @@ -5577,7 +5564,7 @@ var ts; } ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode; function getInvokedExpression(node) { - if (node.kind === 175 /* TaggedTemplateExpression */) { + if (node.kind === 176 /* TaggedTemplateExpression */) { return node.tag; } // Will either be a CallExpression, NewExpression, or Decorator. @@ -5586,25 +5573,25 @@ var ts; ts.getInvokedExpression = getInvokedExpression; function nodeCanBeDecorated(node) { switch (node.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: // classes are valid targets return true; - case 144 /* PropertyDeclaration */: + case 145 /* PropertyDeclaration */: // property declarations are valid if their parent is a class declaration. - return node.parent.kind === 220 /* ClassDeclaration */; - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 146 /* MethodDeclaration */: + return node.parent.kind === 221 /* ClassDeclaration */; + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 147 /* MethodDeclaration */: // if this method has a body and its parent is a class declaration, this is a valid target. return node.body !== undefined - && node.parent.kind === 220 /* ClassDeclaration */; - case 141 /* Parameter */: + && node.parent.kind === 221 /* ClassDeclaration */; + case 142 /* Parameter */: // if the parameter's parent has a body and its grandparent is a class declaration, this is a valid target; return node.parent.body !== undefined - && (node.parent.kind === 147 /* Constructor */ - || node.parent.kind === 146 /* MethodDeclaration */ - || node.parent.kind === 149 /* SetAccessor */) - && node.parent.parent.kind === 220 /* ClassDeclaration */; + && (node.parent.kind === 148 /* Constructor */ + || node.parent.kind === 147 /* MethodDeclaration */ + || node.parent.kind === 150 /* SetAccessor */) + && node.parent.parent.kind === 221 /* ClassDeclaration */; } return false; } @@ -5615,18 +5602,18 @@ var ts; } ts.nodeIsDecorated = nodeIsDecorated; function isPropertyAccessExpression(node) { - return node.kind === 171 /* PropertyAccessExpression */; + return node.kind === 172 /* PropertyAccessExpression */; } ts.isPropertyAccessExpression = isPropertyAccessExpression; function isElementAccessExpression(node) { - return node.kind === 172 /* ElementAccessExpression */; + return node.kind === 173 /* ElementAccessExpression */; } ts.isElementAccessExpression = isElementAccessExpression; function isJSXTagName(node) { var parent = node.parent; - if (parent.kind === 242 /* JsxOpeningElement */ || - parent.kind === 241 /* JsxSelfClosingElement */ || - parent.kind === 244 /* JsxClosingElement */) { + if (parent.kind === 243 /* JsxOpeningElement */ || + parent.kind === 242 /* JsxSelfClosingElement */ || + parent.kind === 245 /* JsxClosingElement */) { return parent.tagName === node; } return false; @@ -5634,48 +5621,49 @@ var ts; ts.isJSXTagName = isJSXTagName; function isExpression(node) { switch (node.kind) { + case 97 /* ThisKeyword */: case 95 /* SuperKeyword */: case 93 /* NullKeyword */: case 99 /* TrueKeyword */: case 84 /* FalseKeyword */: case 10 /* RegularExpressionLiteral */: - case 169 /* ArrayLiteralExpression */: - case 170 /* ObjectLiteralExpression */: - case 171 /* PropertyAccessExpression */: - case 172 /* ElementAccessExpression */: - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 175 /* TaggedTemplateExpression */: - case 194 /* AsExpression */: - case 176 /* TypeAssertionExpression */: - case 195 /* NonNullExpression */: - case 177 /* ParenthesizedExpression */: - case 178 /* FunctionExpression */: - case 191 /* ClassExpression */: - case 179 /* ArrowFunction */: - case 182 /* VoidExpression */: - case 180 /* DeleteExpression */: - case 181 /* TypeOfExpression */: - case 184 /* PrefixUnaryExpression */: - case 185 /* PostfixUnaryExpression */: - case 186 /* BinaryExpression */: - case 187 /* ConditionalExpression */: - case 190 /* SpreadElementExpression */: - case 188 /* TemplateExpression */: + case 170 /* ArrayLiteralExpression */: + case 171 /* ObjectLiteralExpression */: + case 172 /* PropertyAccessExpression */: + case 173 /* ElementAccessExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: + case 176 /* TaggedTemplateExpression */: + case 195 /* AsExpression */: + case 177 /* TypeAssertionExpression */: + case 196 /* NonNullExpression */: + case 178 /* ParenthesizedExpression */: + case 179 /* FunctionExpression */: + case 192 /* ClassExpression */: + case 180 /* ArrowFunction */: + case 183 /* VoidExpression */: + case 181 /* DeleteExpression */: + case 182 /* TypeOfExpression */: + case 185 /* PrefixUnaryExpression */: + case 186 /* PostfixUnaryExpression */: + case 187 /* BinaryExpression */: + case 188 /* ConditionalExpression */: + case 191 /* SpreadElementExpression */: + case 189 /* TemplateExpression */: case 11 /* NoSubstitutionTemplateLiteral */: - case 192 /* OmittedExpression */: - case 240 /* JsxElement */: - case 241 /* JsxSelfClosingElement */: - case 189 /* YieldExpression */: - case 183 /* AwaitExpression */: + case 193 /* OmittedExpression */: + case 241 /* JsxElement */: + case 242 /* JsxSelfClosingElement */: + case 190 /* YieldExpression */: + case 184 /* AwaitExpression */: return true; - case 138 /* QualifiedName */: - while (node.parent.kind === 138 /* QualifiedName */) { + case 139 /* QualifiedName */: + while (node.parent.kind === 139 /* QualifiedName */) { node = node.parent; } - return node.parent.kind === 157 /* TypeQuery */ || isJSXTagName(node); + return node.parent.kind === 158 /* TypeQuery */ || isJSXTagName(node); case 69 /* Identifier */: - if (node.parent.kind === 157 /* TypeQuery */ || isJSXTagName(node)) { + if (node.parent.kind === 158 /* TypeQuery */ || isJSXTagName(node)) { return true; } // fall through @@ -5684,47 +5672,47 @@ var ts; case 97 /* ThisKeyword */: var parent_2 = node.parent; switch (parent_2.kind) { - case 217 /* VariableDeclaration */: - case 141 /* Parameter */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 254 /* EnumMember */: - case 252 /* PropertyAssignment */: - case 168 /* BindingElement */: + case 218 /* VariableDeclaration */: + case 142 /* Parameter */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 255 /* EnumMember */: + case 253 /* PropertyAssignment */: + case 169 /* BindingElement */: return parent_2.initializer === node; - case 201 /* ExpressionStatement */: - case 202 /* IfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: - case 210 /* ReturnStatement */: - case 211 /* WithStatement */: - case 212 /* SwitchStatement */: - case 248 /* CaseClause */: - case 214 /* ThrowStatement */: - case 212 /* SwitchStatement */: + case 202 /* ExpressionStatement */: + case 203 /* IfStatement */: + case 204 /* DoStatement */: + case 205 /* WhileStatement */: + case 211 /* ReturnStatement */: + case 212 /* WithStatement */: + case 213 /* SwitchStatement */: + case 249 /* CaseClause */: + case 215 /* ThrowStatement */: + case 213 /* SwitchStatement */: return parent_2.expression === node; - case 205 /* ForStatement */: + case 206 /* ForStatement */: var forStatement = parent_2; - return (forStatement.initializer === node && forStatement.initializer.kind !== 218 /* VariableDeclarationList */) || + return (forStatement.initializer === node && forStatement.initializer.kind !== 219 /* VariableDeclarationList */) || forStatement.condition === node || forStatement.incrementor === node; - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: var forInStatement = parent_2; - return (forInStatement.initializer === node && forInStatement.initializer.kind !== 218 /* VariableDeclarationList */) || + return (forInStatement.initializer === node && forInStatement.initializer.kind !== 219 /* VariableDeclarationList */) || forInStatement.expression === node; - case 176 /* TypeAssertionExpression */: - case 194 /* AsExpression */: + case 177 /* TypeAssertionExpression */: + case 195 /* AsExpression */: return node === parent_2.expression; - case 196 /* TemplateSpan */: + case 197 /* TemplateSpan */: return node === parent_2.expression; - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: return node === parent_2.expression; - case 142 /* Decorator */: - case 247 /* JsxExpression */: - case 246 /* JsxSpreadAttribute */: + case 143 /* Decorator */: + case 248 /* JsxExpression */: + case 247 /* JsxSpreadAttribute */: return true; - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: return parent_2.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent_2); default: if (isExpression(parent_2)) { @@ -5748,7 +5736,7 @@ var ts; } ts.isInstantiatedModule = isInstantiatedModule; function isExternalModuleImportEqualsDeclaration(node) { - return node.kind === 228 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 239 /* ExternalModuleReference */; + return node.kind === 229 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 240 /* ExternalModuleReference */; } ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration; function getExternalModuleImportEqualsDeclarationExpression(node) { @@ -5757,7 +5745,7 @@ var ts; } ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression; function isInternalModuleImportEqualsDeclaration(node) { - return node.kind === 228 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 239 /* ExternalModuleReference */; + return node.kind === 229 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 240 /* ExternalModuleReference */; } ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration; function isSourceFileJavaScript(file) { @@ -5775,24 +5763,28 @@ var ts; */ function isRequireCall(expression, checkArgumentIsStringLiteral) { // of the form 'require("name")' - var isRequire = expression.kind === 173 /* CallExpression */ && + var isRequire = expression.kind === 174 /* CallExpression */ && expression.expression.kind === 69 /* Identifier */ && expression.expression.text === "require" && expression.arguments.length === 1; return isRequire && (!checkArgumentIsStringLiteral || expression.arguments[0].kind === 9 /* StringLiteral */); } ts.isRequireCall = isRequireCall; + function isSingleOrDoubleQuote(charCode) { + return charCode === 39 /* singleQuote */ || charCode === 34 /* doubleQuote */; + } + ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote; /// Given a BinaryExpression, returns SpecialPropertyAssignmentKind for the various kinds of property /// assignments we treat as special in the binder function getSpecialPropertyAssignmentKind(expression) { if (!isInJavaScriptFile(expression)) { return 0 /* None */; } - if (expression.kind !== 186 /* BinaryExpression */) { + if (expression.kind !== 187 /* BinaryExpression */) { return 0 /* None */; } var expr = expression; - if (expr.operatorToken.kind !== 56 /* EqualsToken */ || expr.left.kind !== 171 /* PropertyAccessExpression */) { + if (expr.operatorToken.kind !== 56 /* EqualsToken */ || expr.left.kind !== 172 /* PropertyAccessExpression */) { return 0 /* None */; } var lhs = expr.left; @@ -5810,30 +5802,37 @@ var ts; else if (lhs.expression.kind === 97 /* ThisKeyword */) { return 4 /* ThisProperty */; } - else if (lhs.expression.kind === 171 /* PropertyAccessExpression */) { + else if (lhs.expression.kind === 172 /* PropertyAccessExpression */) { // chained dot, e.g. x.y.z = expr; this var is the 'x.y' part var innerPropertyAccess = lhs.expression; - if (innerPropertyAccess.expression.kind === 69 /* Identifier */ && innerPropertyAccess.name.text === "prototype") { - return 3 /* PrototypeProperty */; + if (innerPropertyAccess.expression.kind === 69 /* Identifier */) { + // module.exports.name = expr + var innerPropertyAccessIdentifier = innerPropertyAccess.expression; + if (innerPropertyAccessIdentifier.text === "module" && innerPropertyAccess.name.text === "exports") { + return 1 /* ExportsProperty */; + } + if (innerPropertyAccess.name.text === "prototype") { + return 3 /* PrototypeProperty */; + } } } return 0 /* None */; } ts.getSpecialPropertyAssignmentKind = getSpecialPropertyAssignmentKind; function getExternalModuleName(node) { - if (node.kind === 229 /* ImportDeclaration */) { + if (node.kind === 230 /* ImportDeclaration */) { return node.moduleSpecifier; } - if (node.kind === 228 /* ImportEqualsDeclaration */) { + if (node.kind === 229 /* ImportEqualsDeclaration */) { var reference = node.moduleReference; - if (reference.kind === 239 /* ExternalModuleReference */) { + if (reference.kind === 240 /* ExternalModuleReference */) { return reference.expression; } } - if (node.kind === 235 /* ExportDeclaration */) { + if (node.kind === 236 /* ExportDeclaration */) { return node.moduleSpecifier; } - if (node.kind === 224 /* ModuleDeclaration */ && node.name.kind === 9 /* StringLiteral */) { + if (node.kind === 225 /* ModuleDeclaration */ && node.name.kind === 9 /* StringLiteral */) { return node.name; } } @@ -5841,13 +5840,13 @@ var ts; function hasQuestionToken(node) { if (node) { switch (node.kind) { - case 141 /* Parameter */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 253 /* ShorthandPropertyAssignment */: - case 252 /* PropertyAssignment */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 142 /* Parameter */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 254 /* ShorthandPropertyAssignment */: + case 253 /* PropertyAssignment */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return node.questionToken !== undefined; } } @@ -5855,9 +5854,9 @@ var ts; } ts.hasQuestionToken = hasQuestionToken; function isJSDocConstructSignature(node) { - return node.kind === 268 /* JSDocFunctionType */ && + return node.kind === 269 /* JSDocFunctionType */ && node.parameters.length > 0 && - node.parameters[0].type.kind === 270 /* JSDocConstructorType */; + node.parameters[0].type.kind === 271 /* JSDocConstructorType */; } ts.isJSDocConstructSignature = isJSDocConstructSignature; function getJSDocTag(node, kind, checkParentVariableStatement) { @@ -5879,16 +5878,16 @@ var ts; if (node.jsDocComment) { return node.jsDocComment; } - // Try to recognize this pattern when node is initializer of variable declaration and JSDoc comments are on containing variable statement. - // /** + // Try to recognize this pattern when node is initializer of variable declaration and JSDoc comments are on containing variable statement. + // /** // * @param {number} name - // * @returns {number} + // * @returns {number} // */ // var x = function(name) { return name.length; } if (checkParentVariableStatement) { - var isInitializerOfVariableDeclarationInStatement = node.parent.kind === 217 /* VariableDeclaration */ && + var isInitializerOfVariableDeclarationInStatement = node.parent.kind === 218 /* VariableDeclaration */ && node.parent.initializer === node && - node.parent.parent.parent.kind === 199 /* VariableStatement */; + node.parent.parent.parent.kind === 200 /* VariableStatement */; var variableStatementNode = isInitializerOfVariableDeclarationInStatement ? node.parent.parent.parent : undefined; if (variableStatementNode) { return variableStatementNode.jsDocComment; @@ -5896,13 +5895,13 @@ var ts; // Also recognize when the node is the RHS of an assignment expression var parent_3 = node.parent; var isSourceOfAssignmentExpressionStatement = parent_3 && parent_3.parent && - parent_3.kind === 186 /* BinaryExpression */ && + parent_3.kind === 187 /* BinaryExpression */ && parent_3.operatorToken.kind === 56 /* EqualsToken */ && - parent_3.parent.kind === 201 /* ExpressionStatement */; + parent_3.parent.kind === 202 /* ExpressionStatement */; if (isSourceOfAssignmentExpressionStatement) { return parent_3.parent.jsDocComment; } - var isPropertyAssignmentExpression = parent_3 && parent_3.kind === 252 /* PropertyAssignment */; + var isPropertyAssignmentExpression = parent_3 && parent_3.kind === 253 /* PropertyAssignment */; if (isPropertyAssignmentExpression) { return parent_3.jsDocComment; } @@ -5910,15 +5909,15 @@ var ts; return undefined; } function getJSDocTypeTag(node) { - return getJSDocTag(node, 276 /* JSDocTypeTag */, /*checkParentVariableStatement*/ false); + return getJSDocTag(node, 277 /* JSDocTypeTag */, /*checkParentVariableStatement*/ false); } ts.getJSDocTypeTag = getJSDocTypeTag; function getJSDocReturnTag(node) { - return getJSDocTag(node, 275 /* JSDocReturnTag */, /*checkParentVariableStatement*/ true); + return getJSDocTag(node, 276 /* JSDocReturnTag */, /*checkParentVariableStatement*/ true); } ts.getJSDocReturnTag = getJSDocReturnTag; function getJSDocTemplateTag(node) { - return getJSDocTag(node, 277 /* JSDocTemplateTag */, /*checkParentVariableStatement*/ false); + return getJSDocTag(node, 278 /* JSDocTemplateTag */, /*checkParentVariableStatement*/ false); } ts.getJSDocTemplateTag = getJSDocTemplateTag; function getCorrespondingJSDocParameterTag(parameter) { @@ -5930,7 +5929,7 @@ var ts; if (jsDocComment) { for (var _i = 0, _a = jsDocComment.tags; _i < _a.length; _i++) { var tag = _a[_i]; - if (tag.kind === 274 /* JSDocParameterTag */) { + if (tag.kind === 275 /* JSDocParameterTag */) { var parameterTag = tag; var name_6 = parameterTag.preParameterName || parameterTag.postParameterName; if (name_6.text === parameterName) { @@ -5947,22 +5946,27 @@ var ts; return isRestParameter(ts.lastOrUndefined(s.parameters)); } ts.hasRestParameter = hasRestParameter; + function hasDeclaredRestParameter(s) { + return isDeclaredRestParam(ts.lastOrUndefined(s.parameters)); + } + ts.hasDeclaredRestParameter = hasDeclaredRestParameter; function isRestParameter(node) { - if (node) { - if (node.flags & 134217728 /* JavaScriptFile */) { - if (node.type && node.type.kind === 269 /* JSDocVariadicType */) { - return true; - } - var paramTag = getCorrespondingJSDocParameterTag(node); - if (paramTag && paramTag.typeExpression) { - return paramTag.typeExpression.type.kind === 269 /* JSDocVariadicType */; - } + if (node && (node.flags & 134217728 /* JavaScriptFile */)) { + if (node.type && node.type.kind === 270 /* JSDocVariadicType */) { + return true; + } + var paramTag = getCorrespondingJSDocParameterTag(node); + if (paramTag && paramTag.typeExpression) { + return paramTag.typeExpression.type.kind === 270 /* JSDocVariadicType */; } - return node.dotDotDotToken !== undefined; } - return false; + return isDeclaredRestParam(node); } ts.isRestParameter = isRestParameter; + function isDeclaredRestParam(node) { + return node && node.dotDotDotToken !== undefined; + } + ts.isDeclaredRestParam = isDeclaredRestParam; function isLiteralKind(kind) { return 8 /* FirstLiteralToken */ <= kind && kind <= 11 /* LastLiteralToken */; } @@ -5976,9 +5980,34 @@ var ts; } ts.isTemplateLiteralKind = isTemplateLiteralKind; function isBindingPattern(node) { - return !!node && (node.kind === 167 /* ArrayBindingPattern */ || node.kind === 166 /* ObjectBindingPattern */); + return !!node && (node.kind === 168 /* ArrayBindingPattern */ || node.kind === 167 /* ObjectBindingPattern */); } ts.isBindingPattern = isBindingPattern; + // A node is an assignment target if it is on the left hand side of an '=' token, if it is parented by a property + // assignment in an object literal that is an assignment target, or if it is parented by an array literal that is + // an assignment target. Examples include 'a = xxx', '{ p: a } = xxx', '[{ p: a}] = xxx'. + function isAssignmentTarget(node) { + while (node.parent.kind === 178 /* ParenthesizedExpression */) { + node = node.parent; + } + while (true) { + var parent_4 = node.parent; + if (parent_4.kind === 170 /* ArrayLiteralExpression */ || parent_4.kind === 191 /* SpreadElementExpression */) { + node = parent_4; + continue; + } + if (parent_4.kind === 253 /* PropertyAssignment */ || parent_4.kind === 254 /* ShorthandPropertyAssignment */) { + node = parent_4.parent; + continue; + } + return parent_4.kind === 187 /* BinaryExpression */ && + parent_4.operatorToken.kind === 56 /* EqualsToken */ && + parent_4.left === node || + (parent_4.kind === 207 /* ForInStatement */ || parent_4.kind === 208 /* ForOfStatement */) && + parent_4.initializer === node; + } + } + ts.isAssignmentTarget = isAssignmentTarget; function isNodeDescendentOf(node, ancestor) { while (node) { if (node === ancestor) @@ -5990,7 +6019,7 @@ var ts; ts.isNodeDescendentOf = isNodeDescendentOf; function isInAmbientContext(node) { while (node) { - if (node.flags & 2 /* Ambient */ || (node.kind === 255 /* SourceFile */ && node.isDeclarationFile)) { + if (node.flags & 2 /* Ambient */ || (node.kind === 256 /* SourceFile */ && node.isDeclarationFile)) { return true; } node = node.parent; @@ -6000,34 +6029,34 @@ var ts; ts.isInAmbientContext = isInAmbientContext; function isDeclaration(node) { switch (node.kind) { - case 179 /* ArrowFunction */: - case 168 /* BindingElement */: - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 147 /* Constructor */: - case 223 /* EnumDeclaration */: - case 254 /* EnumMember */: - case 237 /* ExportSpecifier */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 148 /* GetAccessor */: - case 230 /* ImportClause */: - case 228 /* ImportEqualsDeclaration */: - case 233 /* ImportSpecifier */: - case 221 /* InterfaceDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 224 /* ModuleDeclaration */: - case 231 /* NamespaceImport */: - case 141 /* Parameter */: - case 252 /* PropertyAssignment */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 149 /* SetAccessor */: - case 253 /* ShorthandPropertyAssignment */: - case 222 /* TypeAliasDeclaration */: - case 140 /* TypeParameter */: - case 217 /* VariableDeclaration */: + case 180 /* ArrowFunction */: + case 169 /* BindingElement */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 148 /* Constructor */: + case 224 /* EnumDeclaration */: + case 255 /* EnumMember */: + case 238 /* ExportSpecifier */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 149 /* GetAccessor */: + case 231 /* ImportClause */: + case 229 /* ImportEqualsDeclaration */: + case 234 /* ImportSpecifier */: + case 222 /* InterfaceDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 225 /* ModuleDeclaration */: + case 232 /* NamespaceImport */: + case 142 /* Parameter */: + case 253 /* PropertyAssignment */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 150 /* SetAccessor */: + case 254 /* ShorthandPropertyAssignment */: + case 223 /* TypeAliasDeclaration */: + case 141 /* TypeParameter */: + case 218 /* VariableDeclaration */: return true; } return false; @@ -6035,25 +6064,25 @@ var ts; ts.isDeclaration = isDeclaration; function isStatement(n) { switch (n.kind) { - case 209 /* BreakStatement */: - case 208 /* ContinueStatement */: - case 216 /* DebuggerStatement */: - case 203 /* DoStatement */: - case 201 /* ExpressionStatement */: - case 200 /* EmptyStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 205 /* ForStatement */: - case 202 /* IfStatement */: - case 213 /* LabeledStatement */: - case 210 /* ReturnStatement */: - case 212 /* SwitchStatement */: - case 214 /* ThrowStatement */: - case 215 /* TryStatement */: - case 199 /* VariableStatement */: - case 204 /* WhileStatement */: - case 211 /* WithStatement */: - case 234 /* ExportAssignment */: + case 210 /* BreakStatement */: + case 209 /* ContinueStatement */: + case 217 /* DebuggerStatement */: + case 204 /* DoStatement */: + case 202 /* ExpressionStatement */: + case 201 /* EmptyStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 206 /* ForStatement */: + case 203 /* IfStatement */: + case 214 /* LabeledStatement */: + case 211 /* ReturnStatement */: + case 213 /* SwitchStatement */: + case 215 /* ThrowStatement */: + case 216 /* TryStatement */: + case 200 /* VariableStatement */: + case 205 /* WhileStatement */: + case 212 /* WithStatement */: + case 235 /* ExportAssignment */: return true; default: return false; @@ -6062,13 +6091,13 @@ var ts; ts.isStatement = isStatement; function isClassElement(n) { switch (n.kind) { - case 147 /* Constructor */: - case 144 /* PropertyDeclaration */: - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 145 /* MethodSignature */: - case 152 /* IndexSignature */: + case 148 /* Constructor */: + case 145 /* PropertyDeclaration */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 146 /* MethodSignature */: + case 153 /* IndexSignature */: return true; default: return false; @@ -6081,7 +6110,7 @@ var ts; return false; } var parent = name.parent; - if (parent.kind === 233 /* ImportSpecifier */ || parent.kind === 237 /* ExportSpecifier */) { + if (parent.kind === 234 /* ImportSpecifier */ || parent.kind === 238 /* ExportSpecifier */) { if (parent.propertyName) { return true; } @@ -6092,35 +6121,41 @@ var ts; return false; } ts.isDeclarationName = isDeclarationName; + function isLiteralComputedPropertyDeclarationName(node) { + return (node.kind === 9 /* StringLiteral */ || node.kind === 8 /* NumericLiteral */) && + node.parent.kind === 140 /* ComputedPropertyName */ && + isDeclaration(node.parent.parent); + } + ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName; // Return true if the given identifier is classified as an IdentifierName function isIdentifierName(node) { var parent = node.parent; switch (parent.kind) { - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 254 /* EnumMember */: - case 252 /* PropertyAssignment */: - case 171 /* PropertyAccessExpression */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 255 /* EnumMember */: + case 253 /* PropertyAssignment */: + case 172 /* PropertyAccessExpression */: // Name in member declaration or property name in property access return parent.name === node; - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: // Name on right hand side of dot in a type query if (parent.right === node) { - while (parent.kind === 138 /* QualifiedName */) { + while (parent.kind === 139 /* QualifiedName */) { parent = parent.parent; } - return parent.kind === 157 /* TypeQuery */; + return parent.kind === 158 /* TypeQuery */; } return false; - case 168 /* BindingElement */: - case 233 /* ImportSpecifier */: + case 169 /* BindingElement */: + case 234 /* ImportSpecifier */: // Property name in binding element or import specifier return parent.propertyName === node; - case 237 /* ExportSpecifier */: + case 238 /* ExportSpecifier */: // Any name in an export specifier return true; } @@ -6136,13 +6171,13 @@ var ts; // export = ... // export default ... function isAliasSymbolDeclaration(node) { - return node.kind === 228 /* ImportEqualsDeclaration */ || - node.kind === 227 /* GlobalModuleExportDeclaration */ || - node.kind === 230 /* ImportClause */ && !!node.name || - node.kind === 231 /* NamespaceImport */ || - node.kind === 233 /* ImportSpecifier */ || - node.kind === 237 /* ExportSpecifier */ || - node.kind === 234 /* ExportAssignment */ && node.expression.kind === 69 /* Identifier */; + return node.kind === 229 /* ImportEqualsDeclaration */ || + node.kind === 228 /* GlobalModuleExportDeclaration */ || + node.kind === 231 /* ImportClause */ && !!node.name || + node.kind === 232 /* NamespaceImport */ || + node.kind === 234 /* ImportSpecifier */ || + node.kind === 238 /* ExportSpecifier */ || + node.kind === 235 /* ExportAssignment */ && node.expression.kind === 69 /* Identifier */; } ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration; function getClassExtendsHeritageClauseElement(node) { @@ -6224,7 +6259,7 @@ var ts; } ts.getFileReferenceFromReferencePath = getFileReferenceFromReferencePath; function isKeyword(token) { - return 70 /* FirstKeyword */ <= token && token <= 137 /* LastKeyword */; + return 70 /* FirstKeyword */ <= token && token <= 138 /* LastKeyword */; } ts.isKeyword = isKeyword; function isTrivia(token) { @@ -6251,7 +6286,7 @@ var ts; } ts.hasDynamicName = hasDynamicName; function isDynamicName(name) { - return name.kind === 139 /* ComputedPropertyName */ && + return name.kind === 140 /* ComputedPropertyName */ && !isStringOrNumericLiteral(name.expression.kind) && !isWellKnownSymbolSyntactically(name.expression); } @@ -6269,12 +6304,15 @@ var ts; if (name.kind === 69 /* Identifier */ || name.kind === 9 /* StringLiteral */ || name.kind === 8 /* NumericLiteral */) { return name.text; } - if (name.kind === 139 /* ComputedPropertyName */) { + if (name.kind === 140 /* ComputedPropertyName */) { var nameExpression = name.expression; if (isWellKnownSymbolSyntactically(nameExpression)) { var rightHandSideName = nameExpression.name.text; return getPropertyNameForKnownSymbolName(rightHandSideName); } + else if (nameExpression.kind === 9 /* StringLiteral */ || nameExpression.kind === 8 /* NumericLiteral */) { + return nameExpression.text; + } } return undefined; } @@ -6301,7 +6339,7 @@ var ts; case 112 /* PublicKeyword */: case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: - case 127 /* ReadonlyKeyword */: + case 128 /* ReadonlyKeyword */: case 113 /* StaticKeyword */: return true; } @@ -6310,18 +6348,18 @@ var ts; ts.isModifierKind = isModifierKind; function isParameterDeclaration(node) { var root = getRootDeclaration(node); - return root.kind === 141 /* Parameter */; + return root.kind === 142 /* Parameter */; } ts.isParameterDeclaration = isParameterDeclaration; function getRootDeclaration(node) { - while (node.kind === 168 /* BindingElement */) { + while (node.kind === 169 /* BindingElement */) { node = node.parent.parent; } return node; } ts.getRootDeclaration = getRootDeclaration; function nodeStartsNewLexicalEnvironment(n) { - return isFunctionLike(n) || n.kind === 224 /* ModuleDeclaration */ || n.kind === 255 /* SourceFile */; + return isFunctionLike(n) || n.kind === 225 /* ModuleDeclaration */ || n.kind === 256 /* SourceFile */; } ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment; /** @@ -6371,7 +6409,7 @@ var ts; } ts.cloneEntityName = cloneEntityName; function isQualifiedName(node) { - return node.kind === 138 /* QualifiedName */; + return node.kind === 139 /* QualifiedName */; } ts.isQualifiedName = isQualifiedName; function nodeIsSynthesized(node) { @@ -6725,14 +6763,19 @@ var ts; ts.getLineOfLocalPositionFromLineMap = getLineOfLocalPositionFromLineMap; function getFirstConstructorWithBody(node) { return ts.forEach(node.members, function (member) { - if (member.kind === 147 /* Constructor */ && nodeIsPresent(member.body)) { + if (member.kind === 148 /* Constructor */ && nodeIsPresent(member.body)) { return member; } }); } ts.getFirstConstructorWithBody = getFirstConstructorWithBody; function getSetAccessorTypeAnnotationNode(accessor) { - return accessor && accessor.parameters.length > 0 && accessor.parameters[0].type; + if (accessor && accessor.parameters.length > 0) { + var hasThis = accessor.parameters.length === 2 && + accessor.parameters[0].name.kind === 69 /* Identifier */ && + accessor.parameters[0].name.originalKeywordKind === 97 /* ThisKeyword */; + return accessor.parameters[hasThis ? 1 : 0].type; + } } ts.getSetAccessorTypeAnnotationNode = getSetAccessorTypeAnnotationNode; function getAllAccessorDeclarations(declarations, accessor) { @@ -6742,10 +6785,10 @@ var ts; var setAccessor; if (hasDynamicName(accessor)) { firstAccessor = accessor; - if (accessor.kind === 148 /* GetAccessor */) { + if (accessor.kind === 149 /* GetAccessor */) { getAccessor = accessor; } - else if (accessor.kind === 149 /* SetAccessor */) { + else if (accessor.kind === 150 /* SetAccessor */) { setAccessor = accessor; } else { @@ -6754,7 +6797,7 @@ var ts; } else { ts.forEach(declarations, function (member) { - if ((member.kind === 148 /* GetAccessor */ || member.kind === 149 /* SetAccessor */) + if ((member.kind === 149 /* GetAccessor */ || member.kind === 150 /* SetAccessor */) && (member.flags & 32 /* Static */) === (accessor.flags & 32 /* Static */)) { var memberName = getPropertyNameForPropertyNameNode(member.name); var accessorName = getPropertyNameForPropertyNameNode(accessor.name); @@ -6765,10 +6808,10 @@ var ts; else if (!secondAccessor) { secondAccessor = member; } - if (member.kind === 148 /* GetAccessor */ && !getAccessor) { + if (member.kind === 149 /* GetAccessor */ && !getAccessor) { getAccessor = member; } - if (member.kind === 149 /* SetAccessor */ && !setAccessor) { + if (member.kind === 150 /* SetAccessor */ && !setAccessor) { setAccessor = member; } } @@ -6971,7 +7014,7 @@ var ts; case 74 /* ConstKeyword */: return 2048 /* Const */; case 77 /* DefaultKeyword */: return 512 /* Default */; case 118 /* AsyncKeyword */: return 256 /* Async */; - case 127 /* ReadonlyKeyword */: return 64 /* Readonly */; + case 128 /* ReadonlyKeyword */: return 64 /* Readonly */; } return 0; } @@ -6979,25 +7022,25 @@ var ts; function isLeftHandSideExpression(expr) { if (expr) { switch (expr.kind) { - case 171 /* PropertyAccessExpression */: - case 172 /* ElementAccessExpression */: - case 174 /* NewExpression */: - case 173 /* CallExpression */: - case 195 /* NonNullExpression */: - case 240 /* JsxElement */: - case 241 /* JsxSelfClosingElement */: - case 175 /* TaggedTemplateExpression */: - case 169 /* ArrayLiteralExpression */: - case 177 /* ParenthesizedExpression */: - case 170 /* ObjectLiteralExpression */: - case 191 /* ClassExpression */: - case 178 /* FunctionExpression */: + case 172 /* PropertyAccessExpression */: + case 173 /* ElementAccessExpression */: + case 175 /* NewExpression */: + case 174 /* CallExpression */: + case 196 /* NonNullExpression */: + case 241 /* JsxElement */: + case 242 /* JsxSelfClosingElement */: + case 176 /* TaggedTemplateExpression */: + case 170 /* ArrayLiteralExpression */: + case 178 /* ParenthesizedExpression */: + case 171 /* ObjectLiteralExpression */: + case 192 /* ClassExpression */: + case 179 /* FunctionExpression */: case 69 /* Identifier */: case 10 /* RegularExpressionLiteral */: case 8 /* NumericLiteral */: case 9 /* StringLiteral */: case 11 /* NoSubstitutionTemplateLiteral */: - case 188 /* TemplateExpression */: + case 189 /* TemplateExpression */: case 84 /* FalseKeyword */: case 93 /* NullKeyword */: case 97 /* ThisKeyword */: @@ -7014,7 +7057,7 @@ var ts; } ts.isAssignmentOperator = isAssignmentOperator; function isExpressionWithTypeArgumentsInClassExtendsClause(node) { - return node.kind === 193 /* ExpressionWithTypeArguments */ && + return node.kind === 194 /* ExpressionWithTypeArguments */ && node.parent.token === 83 /* ExtendsKeyword */ && isClassLike(node.parent.parent); } @@ -7037,16 +7080,16 @@ var ts; } } function isRightSideOfQualifiedNameOrPropertyAccess(node) { - return (node.parent.kind === 138 /* QualifiedName */ && node.parent.right === node) || - (node.parent.kind === 171 /* PropertyAccessExpression */ && node.parent.name === node); + return (node.parent.kind === 139 /* QualifiedName */ && node.parent.right === node) || + (node.parent.kind === 172 /* PropertyAccessExpression */ && node.parent.name === node); } ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess; function isEmptyObjectLiteralOrArrayLiteral(expression) { var kind = expression.kind; - if (kind === 170 /* ObjectLiteralExpression */) { + if (kind === 171 /* ObjectLiteralExpression */) { return expression.properties.length === 0; } - if (kind === 169 /* ArrayLiteralExpression */) { + if (kind === 170 /* ArrayLiteralExpression */) { return expression.elements.length === 0; } return false; @@ -7406,9 +7449,9 @@ var ts; } ts.collapseTextChangeRangesAcrossMultipleVersions = collapseTextChangeRangesAcrossMultipleVersions; function getTypeParameterOwner(d) { - if (d && d.kind === 140 /* TypeParameter */) { + if (d && d.kind === 141 /* TypeParameter */) { for (var current = d; current; current = current.parent) { - if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 221 /* InterfaceDeclaration */) { + if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 222 /* InterfaceDeclaration */) { return current; } } @@ -7416,7 +7459,7 @@ var ts; } ts.getTypeParameterOwner = getTypeParameterOwner; function isParameterPropertyDeclaration(node) { - return node.flags & 28 /* AccessibilityModifier */ && node.parent.kind === 147 /* Constructor */ && ts.isClassLike(node.parent.parent); + return node.flags & 92 /* ParameterPropertyModifier */ && node.parent.kind === 148 /* Constructor */ && ts.isClassLike(node.parent.parent); } ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration; function startsWith(str, prefix) { @@ -7437,7 +7480,7 @@ var ts; var NodeConstructor; var SourceFileConstructor; function createNode(kind, pos, end) { - if (kind === 255 /* SourceFile */) { + if (kind === 256 /* SourceFile */) { return new (SourceFileConstructor || (SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor()))(kind, pos, end); } else { @@ -7480,26 +7523,26 @@ var ts; var visitNodes = cbNodeArray ? visitNodeArray : visitEachNode; var cbNodes = cbNodeArray || cbNode; switch (node.kind) { - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: return visitNode(cbNode, node.left) || visitNode(cbNode, node.right); - case 140 /* TypeParameter */: + case 141 /* TypeParameter */: return visitNode(cbNode, node.name) || visitNode(cbNode, node.constraint) || visitNode(cbNode, node.expression); - case 253 /* ShorthandPropertyAssignment */: + case 254 /* ShorthandPropertyAssignment */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.equalsToken) || visitNode(cbNode, node.objectAssignmentInitializer); - case 141 /* Parameter */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 252 /* PropertyAssignment */: - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: + case 142 /* Parameter */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 253 /* PropertyAssignment */: + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.propertyName) || @@ -7508,24 +7551,24 @@ var ts; visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.type) || visitNode(cbNode, node.initializer); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNodes(cbNodes, node.typeParameters) || visitNodes(cbNodes, node.parameters) || visitNode(cbNode, node.type); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 178 /* FunctionExpression */: - case 219 /* FunctionDeclaration */: - case 179 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 179 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: + case 180 /* ArrowFunction */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.asteriskToken) || @@ -7536,294 +7579,294 @@ var ts; visitNode(cbNode, node.type) || visitNode(cbNode, node.equalsGreaterThanToken) || visitNode(cbNode, node.body); - case 154 /* TypeReference */: + case 155 /* TypeReference */: return visitNode(cbNode, node.typeName) || visitNodes(cbNodes, node.typeArguments); - case 153 /* TypePredicate */: + case 154 /* TypePredicate */: return visitNode(cbNode, node.parameterName) || visitNode(cbNode, node.type); - case 157 /* TypeQuery */: + case 158 /* TypeQuery */: return visitNode(cbNode, node.exprName); - case 158 /* TypeLiteral */: + case 159 /* TypeLiteral */: return visitNodes(cbNodes, node.members); - case 159 /* ArrayType */: + case 160 /* ArrayType */: return visitNode(cbNode, node.elementType); - case 160 /* TupleType */: + case 161 /* TupleType */: return visitNodes(cbNodes, node.elementTypes); - case 161 /* UnionType */: - case 162 /* IntersectionType */: + case 162 /* UnionType */: + case 163 /* IntersectionType */: return visitNodes(cbNodes, node.types); - case 163 /* ParenthesizedType */: + case 164 /* ParenthesizedType */: return visitNode(cbNode, node.type); - case 166 /* ObjectBindingPattern */: - case 167 /* ArrayBindingPattern */: + case 167 /* ObjectBindingPattern */: + case 168 /* ArrayBindingPattern */: return visitNodes(cbNodes, node.elements); - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: return visitNodes(cbNodes, node.elements); - case 170 /* ObjectLiteralExpression */: + case 171 /* ObjectLiteralExpression */: return visitNodes(cbNodes, node.properties); - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.dotToken) || visitNode(cbNode, node.name); - case 172 /* ElementAccessExpression */: + case 173 /* ElementAccessExpression */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.argumentExpression); - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.typeArguments) || visitNodes(cbNodes, node.arguments); - case 175 /* TaggedTemplateExpression */: + case 176 /* TaggedTemplateExpression */: return visitNode(cbNode, node.tag) || visitNode(cbNode, node.template); - case 176 /* TypeAssertionExpression */: + case 177 /* TypeAssertionExpression */: return visitNode(cbNode, node.type) || visitNode(cbNode, node.expression); - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return visitNode(cbNode, node.expression); - case 180 /* DeleteExpression */: + case 181 /* DeleteExpression */: return visitNode(cbNode, node.expression); - case 181 /* TypeOfExpression */: + case 182 /* TypeOfExpression */: return visitNode(cbNode, node.expression); - case 182 /* VoidExpression */: + case 183 /* VoidExpression */: return visitNode(cbNode, node.expression); - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: return visitNode(cbNode, node.operand); - case 189 /* YieldExpression */: + case 190 /* YieldExpression */: return visitNode(cbNode, node.asteriskToken) || visitNode(cbNode, node.expression); - case 183 /* AwaitExpression */: + case 184 /* AwaitExpression */: return visitNode(cbNode, node.expression); - case 185 /* PostfixUnaryExpression */: + case 186 /* PostfixUnaryExpression */: return visitNode(cbNode, node.operand); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return visitNode(cbNode, node.left) || visitNode(cbNode, node.operatorToken) || visitNode(cbNode, node.right); - case 194 /* AsExpression */: + case 195 /* AsExpression */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.type); - case 195 /* NonNullExpression */: + case 196 /* NonNullExpression */: return visitNode(cbNode, node.expression); - case 187 /* ConditionalExpression */: + case 188 /* ConditionalExpression */: return visitNode(cbNode, node.condition) || visitNode(cbNode, node.questionToken) || visitNode(cbNode, node.whenTrue) || visitNode(cbNode, node.colonToken) || visitNode(cbNode, node.whenFalse); - case 190 /* SpreadElementExpression */: + case 191 /* SpreadElementExpression */: return visitNode(cbNode, node.expression); - case 198 /* Block */: - case 225 /* ModuleBlock */: + case 199 /* Block */: + case 226 /* ModuleBlock */: return visitNodes(cbNodes, node.statements); - case 255 /* SourceFile */: + case 256 /* SourceFile */: return visitNodes(cbNodes, node.statements) || visitNode(cbNode, node.endOfFileToken); - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.declarationList); - case 218 /* VariableDeclarationList */: + case 219 /* VariableDeclarationList */: return visitNodes(cbNodes, node.declarations); - case 201 /* ExpressionStatement */: + case 202 /* ExpressionStatement */: return visitNode(cbNode, node.expression); - case 202 /* IfStatement */: + case 203 /* IfStatement */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.thenStatement) || visitNode(cbNode, node.elseStatement); - case 203 /* DoStatement */: + case 204 /* DoStatement */: return visitNode(cbNode, node.statement) || visitNode(cbNode, node.expression); - case 204 /* WhileStatement */: + case 205 /* WhileStatement */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 205 /* ForStatement */: + case 206 /* ForStatement */: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.condition) || visitNode(cbNode, node.incrementor) || visitNode(cbNode, node.statement); - case 206 /* ForInStatement */: + case 207 /* ForInStatement */: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 207 /* ForOfStatement */: + case 208 /* ForOfStatement */: return visitNode(cbNode, node.initializer) || visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 208 /* ContinueStatement */: - case 209 /* BreakStatement */: + case 209 /* ContinueStatement */: + case 210 /* BreakStatement */: return visitNode(cbNode, node.label); - case 210 /* ReturnStatement */: + case 211 /* ReturnStatement */: return visitNode(cbNode, node.expression); - case 211 /* WithStatement */: + case 212 /* WithStatement */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.statement); - case 212 /* SwitchStatement */: + case 213 /* SwitchStatement */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.caseBlock); - case 226 /* CaseBlock */: + case 227 /* CaseBlock */: return visitNodes(cbNodes, node.clauses); - case 248 /* CaseClause */: + case 249 /* CaseClause */: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.statements); - case 249 /* DefaultClause */: + case 250 /* DefaultClause */: return visitNodes(cbNodes, node.statements); - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: return visitNode(cbNode, node.label) || visitNode(cbNode, node.statement); - case 214 /* ThrowStatement */: + case 215 /* ThrowStatement */: return visitNode(cbNode, node.expression); - case 215 /* TryStatement */: + case 216 /* TryStatement */: return visitNode(cbNode, node.tryBlock) || visitNode(cbNode, node.catchClause) || visitNode(cbNode, node.finallyBlock); - case 251 /* CatchClause */: + case 252 /* CatchClause */: return visitNode(cbNode, node.variableDeclaration) || visitNode(cbNode, node.block); - case 142 /* Decorator */: + case 143 /* Decorator */: return visitNode(cbNode, node.expression); - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeParameters) || visitNodes(cbNodes, node.heritageClauses) || visitNodes(cbNodes, node.members); - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeParameters) || visitNodes(cbNodes, node.heritageClauses) || visitNodes(cbNodes, node.members); - case 222 /* TypeAliasDeclaration */: + case 223 /* TypeAliasDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeParameters) || visitNode(cbNode, node.type); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNodes(cbNodes, node.members); - case 254 /* EnumMember */: + case 255 /* EnumMember */: return visitNode(cbNode, node.name) || visitNode(cbNode, node.initializer); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.body); - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.name) || visitNode(cbNode, node.moduleReference); - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.importClause) || visitNode(cbNode, node.moduleSpecifier); - case 230 /* ImportClause */: + case 231 /* ImportClause */: return visitNode(cbNode, node.name) || visitNode(cbNode, node.namedBindings); - case 227 /* GlobalModuleExportDeclaration */: + case 228 /* GlobalModuleExportDeclaration */: return visitNode(cbNode, node.name); - case 231 /* NamespaceImport */: + case 232 /* NamespaceImport */: return visitNode(cbNode, node.name); - case 232 /* NamedImports */: - case 236 /* NamedExports */: + case 233 /* NamedImports */: + case 237 /* NamedExports */: return visitNodes(cbNodes, node.elements); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.exportClause) || visitNode(cbNode, node.moduleSpecifier); - case 233 /* ImportSpecifier */: - case 237 /* ExportSpecifier */: + case 234 /* ImportSpecifier */: + case 238 /* ExportSpecifier */: return visitNode(cbNode, node.propertyName) || visitNode(cbNode, node.name); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || visitNode(cbNode, node.expression); - case 188 /* TemplateExpression */: + case 189 /* TemplateExpression */: return visitNode(cbNode, node.head) || visitNodes(cbNodes, node.templateSpans); - case 196 /* TemplateSpan */: + case 197 /* TemplateSpan */: return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal); - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: return visitNode(cbNode, node.expression); - case 250 /* HeritageClause */: + case 251 /* HeritageClause */: return visitNodes(cbNodes, node.types); - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: return visitNode(cbNode, node.expression) || visitNodes(cbNodes, node.typeArguments); - case 239 /* ExternalModuleReference */: + case 240 /* ExternalModuleReference */: return visitNode(cbNode, node.expression); - case 238 /* MissingDeclaration */: + case 239 /* MissingDeclaration */: return visitNodes(cbNodes, node.decorators); - case 240 /* JsxElement */: + case 241 /* JsxElement */: return visitNode(cbNode, node.openingElement) || visitNodes(cbNodes, node.children) || visitNode(cbNode, node.closingElement); - case 241 /* JsxSelfClosingElement */: - case 242 /* JsxOpeningElement */: + case 242 /* JsxSelfClosingElement */: + case 243 /* JsxOpeningElement */: return visitNode(cbNode, node.tagName) || visitNodes(cbNodes, node.attributes); - case 245 /* JsxAttribute */: + case 246 /* JsxAttribute */: return visitNode(cbNode, node.name) || visitNode(cbNode, node.initializer); - case 246 /* JsxSpreadAttribute */: + case 247 /* JsxSpreadAttribute */: return visitNode(cbNode, node.expression); - case 247 /* JsxExpression */: + case 248 /* JsxExpression */: return visitNode(cbNode, node.expression); - case 244 /* JsxClosingElement */: + case 245 /* JsxClosingElement */: return visitNode(cbNode, node.tagName); - case 256 /* JSDocTypeExpression */: + case 257 /* JSDocTypeExpression */: return visitNode(cbNode, node.type); - case 260 /* JSDocUnionType */: + case 261 /* JSDocUnionType */: return visitNodes(cbNodes, node.types); - case 261 /* JSDocTupleType */: + case 262 /* JSDocTupleType */: return visitNodes(cbNodes, node.types); - case 259 /* JSDocArrayType */: + case 260 /* JSDocArrayType */: return visitNode(cbNode, node.elementType); - case 263 /* JSDocNonNullableType */: + case 264 /* JSDocNonNullableType */: return visitNode(cbNode, node.type); - case 262 /* JSDocNullableType */: + case 263 /* JSDocNullableType */: return visitNode(cbNode, node.type); - case 264 /* JSDocRecordType */: + case 265 /* JSDocRecordType */: return visitNodes(cbNodes, node.members); - case 266 /* JSDocTypeReference */: + case 267 /* JSDocTypeReference */: return visitNode(cbNode, node.name) || visitNodes(cbNodes, node.typeArguments); - case 267 /* JSDocOptionalType */: + case 268 /* JSDocOptionalType */: return visitNode(cbNode, node.type); - case 268 /* JSDocFunctionType */: + case 269 /* JSDocFunctionType */: return visitNodes(cbNodes, node.parameters) || visitNode(cbNode, node.type); - case 269 /* JSDocVariadicType */: + case 270 /* JSDocVariadicType */: return visitNode(cbNode, node.type); - case 270 /* JSDocConstructorType */: + case 271 /* JSDocConstructorType */: return visitNode(cbNode, node.type); - case 271 /* JSDocThisType */: + case 272 /* JSDocThisType */: return visitNode(cbNode, node.type); - case 265 /* JSDocRecordMember */: + case 266 /* JSDocRecordMember */: return visitNode(cbNode, node.name) || visitNode(cbNode, node.type); - case 272 /* JSDocComment */: + case 273 /* JSDocComment */: return visitNodes(cbNodes, node.tags); - case 274 /* JSDocParameterTag */: + case 275 /* JSDocParameterTag */: return visitNode(cbNode, node.preParameterName) || visitNode(cbNode, node.typeExpression) || visitNode(cbNode, node.postParameterName); - case 275 /* JSDocReturnTag */: + case 276 /* JSDocReturnTag */: return visitNode(cbNode, node.typeExpression); - case 276 /* JSDocTypeTag */: + case 277 /* JSDocTypeTag */: return visitNode(cbNode, node.typeExpression); - case 277 /* JSDocTemplateTag */: + case 278 /* JSDocTemplateTag */: return visitNodes(cbNodes, node.typeParameters); } } @@ -8060,7 +8103,7 @@ var ts; function createSourceFile(fileName, languageVersion, scriptKind) { // code from createNode is inlined here so createNode won't have to deal with special case of creating source files // this is quite rare comparing to other nodes and createNode should be as fast as possible - var sourceFile = new SourceFileConstructor(255 /* SourceFile */, /*pos*/ 0, /* end */ sourceText.length); + var sourceFile = new SourceFileConstructor(256 /* SourceFile */, /*pos*/ 0, /* end */ sourceText.length); nodeCount++; sourceFile.text = sourceText; sourceFile.bindDiagnostics = []; @@ -8413,7 +8456,7 @@ var ts; // PropertyName [Yield]: // LiteralPropertyName // ComputedPropertyName[?Yield] - var node = createNode(139 /* ComputedPropertyName */); + var node = createNode(140 /* ComputedPropertyName */); parseExpected(19 /* OpenBracketToken */); // We parse any expression (including a comma expression). But the grammar // says that only an assignment expression is allowed, so the grammar checker @@ -8814,14 +8857,14 @@ var ts; function isReusableClassMember(node) { if (node) { switch (node.kind) { - case 147 /* Constructor */: - case 152 /* IndexSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 144 /* PropertyDeclaration */: - case 197 /* SemicolonClassElement */: + case 148 /* Constructor */: + case 153 /* IndexSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 145 /* PropertyDeclaration */: + case 198 /* SemicolonClassElement */: return true; - case 146 /* MethodDeclaration */: + case 147 /* MethodDeclaration */: // Method declarations are not necessarily reusable. An object-literal // may have a method calls "constructor(...)" and we must reparse that // into an actual .ConstructorDeclaration. @@ -8836,8 +8879,8 @@ var ts; function isReusableSwitchClause(node) { if (node) { switch (node.kind) { - case 248 /* CaseClause */: - case 249 /* DefaultClause */: + case 249 /* CaseClause */: + case 250 /* DefaultClause */: return true; } } @@ -8846,58 +8889,58 @@ var ts; function isReusableStatement(node) { if (node) { switch (node.kind) { - case 219 /* FunctionDeclaration */: - case 199 /* VariableStatement */: - case 198 /* Block */: - case 202 /* IfStatement */: - case 201 /* ExpressionStatement */: - case 214 /* ThrowStatement */: - case 210 /* ReturnStatement */: - case 212 /* SwitchStatement */: - case 209 /* BreakStatement */: - case 208 /* ContinueStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 205 /* ForStatement */: - case 204 /* WhileStatement */: - case 211 /* WithStatement */: - case 200 /* EmptyStatement */: - case 215 /* TryStatement */: - case 213 /* LabeledStatement */: - case 203 /* DoStatement */: - case 216 /* DebuggerStatement */: - case 229 /* ImportDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 235 /* ExportDeclaration */: - case 234 /* ExportAssignment */: - case 224 /* ModuleDeclaration */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 222 /* TypeAliasDeclaration */: + case 220 /* FunctionDeclaration */: + case 200 /* VariableStatement */: + case 199 /* Block */: + case 203 /* IfStatement */: + case 202 /* ExpressionStatement */: + case 215 /* ThrowStatement */: + case 211 /* ReturnStatement */: + case 213 /* SwitchStatement */: + case 210 /* BreakStatement */: + case 209 /* ContinueStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 206 /* ForStatement */: + case 205 /* WhileStatement */: + case 212 /* WithStatement */: + case 201 /* EmptyStatement */: + case 216 /* TryStatement */: + case 214 /* LabeledStatement */: + case 204 /* DoStatement */: + case 217 /* DebuggerStatement */: + case 230 /* ImportDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 236 /* ExportDeclaration */: + case 235 /* ExportAssignment */: + case 225 /* ModuleDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 223 /* TypeAliasDeclaration */: return true; } } return false; } function isReusableEnumMember(node) { - return node.kind === 254 /* EnumMember */; + return node.kind === 255 /* EnumMember */; } function isReusableTypeMember(node) { if (node) { switch (node.kind) { - case 151 /* ConstructSignature */: - case 145 /* MethodSignature */: - case 152 /* IndexSignature */: - case 143 /* PropertySignature */: - case 150 /* CallSignature */: + case 152 /* ConstructSignature */: + case 146 /* MethodSignature */: + case 153 /* IndexSignature */: + case 144 /* PropertySignature */: + case 151 /* CallSignature */: return true; } } return false; } function isReusableVariableDeclaration(node) { - if (node.kind !== 217 /* VariableDeclaration */) { + if (node.kind !== 218 /* VariableDeclaration */) { return false; } // Very subtle incremental parsing bug. Consider the following code: @@ -8918,7 +8961,7 @@ var ts; return variableDeclarator.initializer === undefined; } function isReusableParameter(node) { - if (node.kind !== 141 /* Parameter */) { + if (node.kind !== 142 /* Parameter */) { return false; } // See the comment in isReusableVariableDeclaration for why we do this. @@ -9035,7 +9078,7 @@ var ts; function parseEntityName(allowReservedWords, diagnosticMessage) { var entity = parseIdentifier(diagnosticMessage); while (parseOptional(21 /* DotToken */)) { - var node = createNode(138 /* QualifiedName */, entity.pos); + var node = createNode(139 /* QualifiedName */, entity.pos); // !!! node.left = entity; node.right = parseRightSideOfDot(allowReservedWords); entity = finishNode(node); @@ -9074,7 +9117,7 @@ var ts; return allowIdentifierNames ? parseIdentifierName() : parseIdentifier(); } function parseTemplateExpression() { - var template = createNode(188 /* TemplateExpression */); + var template = createNode(189 /* TemplateExpression */); template.head = parseTemplateLiteralFragment(); ts.Debug.assert(template.head.kind === 12 /* TemplateHead */, "Template head has wrong token kind"); var templateSpans = []; @@ -9087,7 +9130,7 @@ var ts; return finishNode(template); } function parseTemplateSpan() { - var span = createNode(196 /* TemplateSpan */); + var span = createNode(197 /* TemplateSpan */); span.expression = allowInAnd(parseExpression); var literal; if (token === 16 /* CloseBraceToken */) { @@ -9101,7 +9144,7 @@ var ts; return finishNode(span); } function parseStringLiteralTypeNode() { - return parseLiteralLikeNode(165 /* StringLiteralType */, /*internName*/ true); + return parseLiteralLikeNode(166 /* StringLiteralType */, /*internName*/ true); } function parseLiteralNode(internName) { return parseLiteralLikeNode(token, internName); @@ -9138,7 +9181,7 @@ var ts; // TYPES function parseTypeReference() { var typeName = parseEntityName(/*allowReservedWords*/ false, ts.Diagnostics.Type_expected); - var node = createNode(154 /* TypeReference */, typeName.pos); + var node = createNode(155 /* TypeReference */, typeName.pos); node.typeName = typeName; if (!scanner.hasPrecedingLineBreak() && token === 25 /* LessThanToken */) { node.typeArguments = parseBracketedList(18 /* TypeArguments */, parseType, 25 /* LessThanToken */, 27 /* GreaterThanToken */); @@ -9147,24 +9190,24 @@ var ts; } function parseThisTypePredicate(lhs) { nextToken(); - var node = createNode(153 /* TypePredicate */, lhs.pos); + var node = createNode(154 /* TypePredicate */, lhs.pos); node.parameterName = lhs; node.type = parseType(); return finishNode(node); } function parseThisTypeNode() { - var node = createNode(164 /* ThisType */); + var node = createNode(165 /* ThisType */); nextToken(); return finishNode(node); } function parseTypeQuery() { - var node = createNode(157 /* TypeQuery */); + var node = createNode(158 /* TypeQuery */); parseExpected(101 /* TypeOfKeyword */); node.exprName = parseEntityName(/*allowReservedWords*/ true); return finishNode(node); } function parseTypeParameter() { - var node = createNode(140 /* TypeParameter */); + var node = createNode(141 /* TypeParameter */); node.name = parseIdentifier(); if (parseOptional(83 /* ExtendsKeyword */)) { // It's not uncommon for people to write improper constraints to a generic. If the @@ -9208,7 +9251,7 @@ var ts; } } function parseParameter() { - var node = createNode(141 /* Parameter */); + var node = createNode(142 /* Parameter */); if (token === 97 /* ThisKeyword */) { node.name = createIdentifier(/*isIdentifier*/ true, undefined); node.type = parseParameterType(); @@ -9307,7 +9350,7 @@ var ts; } function parseSignatureMember(kind) { var node = createNode(kind); - if (kind === 151 /* ConstructSignature */) { + if (kind === 152 /* ConstructSignature */) { parseExpected(92 /* NewKeyword */); } fillSignature(54 /* ColonToken */, /*yieldContext*/ false, /*awaitContext*/ false, /*requireCompleteParameterList*/ false, node); @@ -9371,7 +9414,7 @@ var ts; return token === 54 /* ColonToken */ || token === 24 /* CommaToken */ || token === 20 /* CloseBracketToken */; } function parseIndexSignatureDeclaration(fullStart, decorators, modifiers) { - var node = createNode(152 /* IndexSignature */, fullStart); + var node = createNode(153 /* IndexSignature */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); node.parameters = parseBracketedList(16 /* Parameters */, parseParameter, 19 /* OpenBracketToken */, 20 /* CloseBracketToken */); @@ -9383,7 +9426,7 @@ var ts; var name = parsePropertyName(); var questionToken = parseOptionalToken(53 /* QuestionToken */); if (token === 17 /* OpenParenToken */ || token === 25 /* LessThanToken */) { - var method = createNode(145 /* MethodSignature */, fullStart); + var method = createNode(146 /* MethodSignature */, fullStart); setModifiers(method, modifiers); method.name = name; method.questionToken = questionToken; @@ -9394,7 +9437,7 @@ var ts; return finishNode(method); } else { - var property = createNode(143 /* PropertySignature */, fullStart); + var property = createNode(144 /* PropertySignature */, fullStart); setModifiers(property, modifiers); property.name = name; property.questionToken = questionToken; @@ -9442,10 +9485,10 @@ var ts; } function parseTypeMember() { if (token === 17 /* OpenParenToken */ || token === 25 /* LessThanToken */) { - return parseSignatureMember(150 /* CallSignature */); + return parseSignatureMember(151 /* CallSignature */); } if (token === 92 /* NewKeyword */ && lookAhead(isStartOfConstructSignature)) { - return parseSignatureMember(151 /* ConstructSignature */); + return parseSignatureMember(152 /* ConstructSignature */); } var fullStart = getNodePos(); var modifiers = parseModifiers(); @@ -9459,7 +9502,7 @@ var ts; return token === 17 /* OpenParenToken */ || token === 25 /* LessThanToken */; } function parseTypeLiteral() { - var node = createNode(158 /* TypeLiteral */); + var node = createNode(159 /* TypeLiteral */); node.members = parseObjectTypeMembers(); return finishNode(node); } @@ -9475,12 +9518,12 @@ var ts; return members; } function parseTupleType() { - var node = createNode(160 /* TupleType */); + var node = createNode(161 /* TupleType */); node.elementTypes = parseBracketedList(19 /* TupleElementTypes */, parseType, 19 /* OpenBracketToken */, 20 /* CloseBracketToken */); return finishNode(node); } function parseParenthesizedType() { - var node = createNode(163 /* ParenthesizedType */); + var node = createNode(164 /* ParenthesizedType */); parseExpected(17 /* OpenParenToken */); node.type = parseType(); parseExpected(18 /* CloseParenToken */); @@ -9488,7 +9531,7 @@ var ts; } function parseFunctionOrConstructorType(kind) { var node = createNode(kind); - if (kind === 156 /* ConstructorType */) { + if (kind === 157 /* ConstructorType */) { parseExpected(92 /* NewKeyword */); } fillSignature(34 /* EqualsGreaterThanToken */, /*yieldContext*/ false, /*awaitContext*/ false, /*requireCompleteParameterList*/ false, node); @@ -9501,11 +9544,12 @@ var ts; function parseNonArrayType() { switch (token) { case 117 /* AnyKeyword */: - case 131 /* StringKeyword */: - case 129 /* NumberKeyword */: + case 132 /* StringKeyword */: + case 130 /* NumberKeyword */: case 120 /* BooleanKeyword */: - case 132 /* SymbolKeyword */: - case 134 /* UndefinedKeyword */: + case 133 /* SymbolKeyword */: + case 135 /* UndefinedKeyword */: + case 127 /* NeverKeyword */: // If these are followed by a dot, then parse these out as a dotted type reference instead. var node = tryParse(parseKeywordAndNoDot); return node || parseTypeReference(); @@ -9538,15 +9582,16 @@ var ts; function isStartOfType() { switch (token) { case 117 /* AnyKeyword */: - case 131 /* StringKeyword */: - case 129 /* NumberKeyword */: + case 132 /* StringKeyword */: + case 130 /* NumberKeyword */: case 120 /* BooleanKeyword */: - case 132 /* SymbolKeyword */: + case 133 /* SymbolKeyword */: case 103 /* VoidKeyword */: - case 134 /* UndefinedKeyword */: + case 135 /* UndefinedKeyword */: case 93 /* NullKeyword */: case 97 /* ThisKeyword */: case 101 /* TypeOfKeyword */: + case 127 /* NeverKeyword */: case 15 /* OpenBraceToken */: case 19 /* OpenBracketToken */: case 25 /* LessThanToken */: @@ -9569,7 +9614,7 @@ var ts; var type = parseNonArrayType(); while (!scanner.hasPrecedingLineBreak() && parseOptional(19 /* OpenBracketToken */)) { parseExpected(20 /* CloseBracketToken */); - var node = createNode(159 /* ArrayType */, type.pos); + var node = createNode(160 /* ArrayType */, type.pos); node.elementType = type; type = finishNode(node); } @@ -9591,10 +9636,10 @@ var ts; return type; } function parseIntersectionTypeOrHigher() { - return parseUnionOrIntersectionType(162 /* IntersectionType */, parseArrayTypeOrHigher, 46 /* AmpersandToken */); + return parseUnionOrIntersectionType(163 /* IntersectionType */, parseArrayTypeOrHigher, 46 /* AmpersandToken */); } function parseUnionTypeOrHigher() { - return parseUnionOrIntersectionType(161 /* UnionType */, parseIntersectionTypeOrHigher, 47 /* BarToken */); + return parseUnionOrIntersectionType(162 /* UnionType */, parseIntersectionTypeOrHigher, 47 /* BarToken */); } function isStartOfFunctionType() { if (token === 25 /* LessThanToken */) { @@ -9651,7 +9696,7 @@ var ts; var typePredicateVariable = isIdentifier() && tryParse(parseTypePredicatePrefix); var type = parseType(); if (typePredicateVariable) { - var node = createNode(153 /* TypePredicate */, typePredicateVariable.pos); + var node = createNode(154 /* TypePredicate */, typePredicateVariable.pos); node.parameterName = typePredicateVariable; node.type = type; return finishNode(node); @@ -9674,10 +9719,10 @@ var ts; } function parseTypeWorker() { if (isStartOfFunctionType()) { - return parseFunctionOrConstructorType(155 /* FunctionType */); + return parseFunctionOrConstructorType(156 /* FunctionType */); } if (token === 92 /* NewKeyword */) { - return parseFunctionOrConstructorType(156 /* ConstructorType */); + return parseFunctionOrConstructorType(157 /* ConstructorType */); } return parseUnionTypeOrHigher(); } @@ -9796,7 +9841,8 @@ var ts; // 2) LeftHandSideExpression = AssignmentExpression[?in,?yield] // 3) LeftHandSideExpression AssignmentOperator AssignmentExpression[?in,?yield] // 4) ArrowFunctionExpression[?in,?yield] - // 5) [+Yield] YieldExpression[?In] + // 5) AsyncArrowFunctionExpression[in,yield,await] + // 6) [+Yield] YieldExpression[?In] // // Note: for ease of implementation we treat productions '2' and '3' as the same thing. // (i.e. they're both BinaryExpressions with an assignment operator in it). @@ -9804,11 +9850,18 @@ var ts; if (isYieldExpression()) { return parseYieldExpression(); } - // Then, check if we have an arrow function (production '4') that starts with a parenthesized - // parameter list. If we do, we must *not* recurse for productions 1, 2 or 3. An ArrowFunction is + // Then, check if we have an arrow function (production '4' and '5') that starts with a parenthesized + // parameter list or is an async arrow function. + // AsyncArrowFunctionExpression: + // 1) async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In] + // 2) CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In] + // Production (1) of AsyncArrowFunctionExpression is parsed in "tryParseAsyncSimpleArrowFunctionExpression". + // And production (2) is parsed in "tryParseParenthesizedArrowFunctionExpression". + // + // If we do successfully parse arrow-function, we must *not* recurse for productions 1, 2 or 3. An ArrowFunction is // not a LeftHandSideExpression, nor does it start a ConditionalExpression. So we are done // with AssignmentExpression if we see one. - var arrowExpression = tryParseParenthesizedArrowFunctionExpression(); + var arrowExpression = tryParseParenthesizedArrowFunctionExpression() || tryParseAsyncSimpleArrowFunctionExpression(); if (arrowExpression) { return arrowExpression; } @@ -9870,7 +9923,7 @@ var ts; return !scanner.hasPrecedingLineBreak() && isIdentifier(); } function parseYieldExpression() { - var node = createNode(189 /* YieldExpression */); + var node = createNode(190 /* YieldExpression */); // YieldExpression[In] : // yield // yield [no LineTerminator here] [Lexical goal InputElementRegExp]AssignmentExpression[?In, Yield] @@ -9888,17 +9941,24 @@ var ts; return finishNode(node); } } - function parseSimpleArrowFunctionExpression(identifier) { + function parseSimpleArrowFunctionExpression(identifier, asyncModifier) { ts.Debug.assert(token === 34 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); - var node = createNode(179 /* ArrowFunction */, identifier.pos); - var parameter = createNode(141 /* Parameter */, identifier.pos); + var node; + if (asyncModifier) { + node = createNode(180 /* ArrowFunction */, asyncModifier.pos); + setModifiers(node, asyncModifier); + } + else { + node = createNode(180 /* ArrowFunction */, identifier.pos); + } + var parameter = createNode(142 /* Parameter */, identifier.pos); parameter.name = identifier; finishNode(parameter); node.parameters = [parameter]; node.parameters.pos = parameter.pos; node.parameters.end = parameter.end; node.equalsGreaterThanToken = parseExpectedToken(34 /* EqualsGreaterThanToken */, /*reportAtCurrentPosition*/ false, ts.Diagnostics._0_expected, "=>"); - node.body = parseArrowFunctionExpressionBody(/*isAsync*/ false); + node.body = parseArrowFunctionExpressionBody(/*isAsync*/ !!asyncModifier); return finishNode(node); } function tryParseParenthesizedArrowFunctionExpression() { @@ -10042,8 +10102,39 @@ var ts; function parsePossibleParenthesizedArrowFunctionExpressionHead() { return parseParenthesizedArrowFunctionExpressionHead(/*allowAmbiguity*/ false); } + function tryParseAsyncSimpleArrowFunctionExpression() { + // We do a check here so that we won't be doing unnecessarily call to "lookAhead" + if (token === 118 /* AsyncKeyword */) { + var isUnParenthesizedAsyncArrowFunction = lookAhead(isUnParenthesizedAsyncArrowFunctionWorker); + if (isUnParenthesizedAsyncArrowFunction === 1 /* True */) { + var asyncModifier = parseModifiersForArrowFunction(); + var expr = parseBinaryExpressionOrHigher(/*precedence*/ 0); + return parseSimpleArrowFunctionExpression(expr, asyncModifier); + } + } + return undefined; + } + function isUnParenthesizedAsyncArrowFunctionWorker() { + // AsyncArrowFunctionExpression: + // 1) async[no LineTerminator here]AsyncArrowBindingIdentifier[?Yield][no LineTerminator here]=>AsyncConciseBody[?In] + // 2) CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody[?In] + if (token === 118 /* AsyncKeyword */) { + nextToken(); + // If the "async" is followed by "=>" token then it is not a begining of an async arrow-function + // but instead a simple arrow-function which will be parsed inside "parseAssignmentExpressionOrHigher" + if (scanner.hasPrecedingLineBreak() || token === 34 /* EqualsGreaterThanToken */) { + return 0 /* False */; + } + // Check for un-parenthesized AsyncArrowFunction + var expr = parseBinaryExpressionOrHigher(/*precedence*/ 0); + if (!scanner.hasPrecedingLineBreak() && expr.kind === 69 /* Identifier */ && token === 34 /* EqualsGreaterThanToken */) { + return 1 /* True */; + } + } + return 0 /* False */; + } function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) { - var node = createNode(179 /* ArrowFunction */); + var node = createNode(180 /* ArrowFunction */); setModifiers(node, parseModifiersForArrowFunction()); var isAsync = !!(node.flags & 256 /* Async */); // Arrow functions are never generators. @@ -10109,7 +10200,7 @@ var ts; } // Note: we explicitly 'allowIn' in the whenTrue part of the condition expression, and // we do not that for the 'whenFalse' part. - var node = createNode(187 /* ConditionalExpression */, leftOperand.pos); + var node = createNode(188 /* ConditionalExpression */, leftOperand.pos); node.condition = leftOperand; node.questionToken = questionToken; node.whenTrue = doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher); @@ -10122,7 +10213,7 @@ var ts; return parseBinaryExpressionRest(precedence, leftOperand); } function isInOrOfKeyword(t) { - return t === 90 /* InKeyword */ || t === 137 /* OfKeyword */; + return t === 90 /* InKeyword */ || t === 138 /* OfKeyword */; } function parseBinaryExpressionRest(precedence, leftOperand) { while (true) { @@ -10230,39 +10321,39 @@ var ts; return -1; } function makeBinaryExpression(left, operatorToken, right) { - var node = createNode(186 /* BinaryExpression */, left.pos); + var node = createNode(187 /* BinaryExpression */, left.pos); node.left = left; node.operatorToken = operatorToken; node.right = right; return finishNode(node); } function makeAsExpression(left, right) { - var node = createNode(194 /* AsExpression */, left.pos); + var node = createNode(195 /* AsExpression */, left.pos); node.expression = left; node.type = right; return finishNode(node); } function parsePrefixUnaryExpression() { - var node = createNode(184 /* PrefixUnaryExpression */); + var node = createNode(185 /* PrefixUnaryExpression */); node.operator = token; nextToken(); node.operand = parseSimpleUnaryExpression(); return finishNode(node); } function parseDeleteExpression() { - var node = createNode(180 /* DeleteExpression */); + var node = createNode(181 /* DeleteExpression */); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function parseTypeOfExpression() { - var node = createNode(181 /* TypeOfExpression */); + var node = createNode(182 /* TypeOfExpression */); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); } function parseVoidExpression() { - var node = createNode(182 /* VoidExpression */); + var node = createNode(183 /* VoidExpression */); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); @@ -10278,7 +10369,7 @@ var ts; return false; } function parseAwaitExpression() { - var node = createNode(183 /* AwaitExpression */); + var node = createNode(184 /* AwaitExpression */); nextToken(); node.expression = parseSimpleUnaryExpression(); return finishNode(node); @@ -10304,7 +10395,7 @@ var ts; var simpleUnaryExpression = parseSimpleUnaryExpression(); if (token === 38 /* AsteriskAsteriskToken */) { var start = ts.skipTrivia(sourceText, simpleUnaryExpression.pos); - if (simpleUnaryExpression.kind === 176 /* TypeAssertionExpression */) { + if (simpleUnaryExpression.kind === 177 /* TypeAssertionExpression */) { 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 { @@ -10394,7 +10485,7 @@ var ts; */ function parseIncrementExpression() { if (token === 41 /* PlusPlusToken */ || token === 42 /* MinusMinusToken */) { - var node = createNode(184 /* PrefixUnaryExpression */); + var node = createNode(185 /* PrefixUnaryExpression */); node.operator = token; nextToken(); node.operand = parseLeftHandSideExpressionOrHigher(); @@ -10407,7 +10498,7 @@ var ts; var expression = parseLeftHandSideExpressionOrHigher(); ts.Debug.assert(ts.isLeftHandSideExpression(expression)); if ((token === 41 /* PlusPlusToken */ || token === 42 /* MinusMinusToken */) && !scanner.hasPrecedingLineBreak()) { - var node = createNode(185 /* PostfixUnaryExpression */, expression.pos); + var node = createNode(186 /* PostfixUnaryExpression */, expression.pos); node.operand = expression; node.operator = token; nextToken(); @@ -10511,7 +10602,7 @@ var ts; } // If we have seen "super" it must be followed by '(' or '.'. // If it wasn't then just try to parse out a '.' and report an error. - var node = createNode(171 /* PropertyAccessExpression */, expression.pos); + var node = createNode(172 /* PropertyAccessExpression */, expression.pos); node.expression = expression; node.dotToken = parseExpectedToken(21 /* DotToken */, /*reportAtCurrentPosition*/ false, ts.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); node.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); @@ -10530,8 +10621,8 @@ var ts; function parseJsxElementOrSelfClosingElement(inExpressionContext) { var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext); var result; - if (opening.kind === 242 /* JsxOpeningElement */) { - var node = createNode(240 /* JsxElement */, opening.pos); + if (opening.kind === 243 /* JsxOpeningElement */) { + var node = createNode(241 /* JsxElement */, opening.pos); node.openingElement = opening; node.children = parseJsxChildren(node.openingElement.tagName); node.closingElement = parseJsxClosingElement(inExpressionContext); @@ -10541,7 +10632,7 @@ var ts; result = finishNode(node); } else { - ts.Debug.assert(opening.kind === 241 /* JsxSelfClosingElement */); + ts.Debug.assert(opening.kind === 242 /* JsxSelfClosingElement */); // Nothing else to do for self-closing elements result = opening; } @@ -10556,7 +10647,7 @@ var ts; var invalidElement = tryParse(function () { return parseJsxElementOrSelfClosingElement(/*inExpressionContext*/ true); }); if (invalidElement) { parseErrorAtCurrentToken(ts.Diagnostics.JSX_expressions_must_have_one_parent_element); - var badNode = createNode(186 /* BinaryExpression */, result.pos); + var badNode = createNode(187 /* BinaryExpression */, result.pos); badNode.end = invalidElement.end; badNode.left = result; badNode.right = invalidElement; @@ -10568,13 +10659,13 @@ var ts; return result; } function parseJsxText() { - var node = createNode(243 /* JsxText */, scanner.getStartPos()); + var node = createNode(244 /* JsxText */, scanner.getStartPos()); token = scanner.scanJsxToken(); return finishNode(node); } function parseJsxChild() { switch (token) { - case 243 /* JsxText */: + case 244 /* JsxText */: return parseJsxText(); case 15 /* OpenBraceToken */: return parseJsxExpression(/*inExpressionContext*/ false); @@ -10616,7 +10707,7 @@ var ts; // Closing tag, so scan the immediately-following text with the JSX scanning instead // of regular scanning to avoid treating illegal characters (e.g. '#') as immediate // scanning errors - node = createNode(242 /* JsxOpeningElement */, fullStart); + node = createNode(243 /* JsxOpeningElement */, fullStart); scanJsxText(); } else { @@ -10628,7 +10719,7 @@ var ts; parseExpected(27 /* GreaterThanToken */, /*diagnostic*/ undefined, /*shouldAdvance*/ false); scanJsxText(); } - node = createNode(241 /* JsxSelfClosingElement */, fullStart); + node = createNode(242 /* JsxSelfClosingElement */, fullStart); } node.tagName = tagName; node.attributes = attributes; @@ -10639,7 +10730,7 @@ var ts; var elementName = parseIdentifierName(); while (parseOptional(21 /* DotToken */)) { scanJsxIdentifier(); - var node = createNode(138 /* QualifiedName */, elementName.pos); + var node = createNode(139 /* QualifiedName */, elementName.pos); // !!! node.left = elementName; node.right = parseIdentifierName(); elementName = finishNode(node); @@ -10647,7 +10738,7 @@ var ts; return elementName; } function parseJsxExpression(inExpressionContext) { - var node = createNode(247 /* JsxExpression */); + var node = createNode(248 /* JsxExpression */); parseExpected(15 /* OpenBraceToken */); if (token !== 16 /* CloseBraceToken */) { node.expression = parseAssignmentExpressionOrHigher(); @@ -10666,7 +10757,7 @@ var ts; return parseJsxSpreadAttribute(); } scanJsxIdentifier(); - var node = createNode(245 /* JsxAttribute */); + var node = createNode(246 /* JsxAttribute */); node.name = parseIdentifierName(); if (parseOptional(56 /* EqualsToken */)) { switch (token) { @@ -10681,7 +10772,7 @@ var ts; return finishNode(node); } function parseJsxSpreadAttribute() { - var node = createNode(246 /* JsxSpreadAttribute */); + var node = createNode(247 /* JsxSpreadAttribute */); parseExpected(15 /* OpenBraceToken */); parseExpected(22 /* DotDotDotToken */); node.expression = parseExpression(); @@ -10689,7 +10780,7 @@ var ts; return finishNode(node); } function parseJsxClosingElement(inExpressionContext) { - var node = createNode(244 /* JsxClosingElement */); + var node = createNode(245 /* JsxClosingElement */); parseExpected(26 /* LessThanSlashToken */); node.tagName = parseJsxElementName(); if (inExpressionContext) { @@ -10702,7 +10793,7 @@ var ts; return finishNode(node); } function parseTypeAssertion() { - var node = createNode(176 /* TypeAssertionExpression */); + var node = createNode(177 /* TypeAssertionExpression */); parseExpected(25 /* LessThanToken */); node.type = parseType(); parseExpected(27 /* GreaterThanToken */); @@ -10713,7 +10804,7 @@ var ts; while (true) { var dotToken = parseOptionalToken(21 /* DotToken */); if (dotToken) { - var propertyAccess = createNode(171 /* PropertyAccessExpression */, expression.pos); + var propertyAccess = createNode(172 /* PropertyAccessExpression */, expression.pos); propertyAccess.expression = expression; propertyAccess.dotToken = dotToken; propertyAccess.name = parseRightSideOfDot(/*allowIdentifierNames*/ true); @@ -10722,14 +10813,14 @@ var ts; } if (token === 49 /* ExclamationToken */ && !scanner.hasPrecedingLineBreak()) { nextToken(); - var nonNullExpression = createNode(195 /* NonNullExpression */, expression.pos); + var nonNullExpression = createNode(196 /* NonNullExpression */, expression.pos); nonNullExpression.expression = expression; expression = finishNode(nonNullExpression); continue; } // when in the [Decorator] context, we do not parse ElementAccess as it could be part of a ComputedPropertyName if (!inDecoratorContext() && parseOptional(19 /* OpenBracketToken */)) { - var indexedAccess = createNode(172 /* ElementAccessExpression */, expression.pos); + var indexedAccess = createNode(173 /* ElementAccessExpression */, expression.pos); indexedAccess.expression = expression; // It's not uncommon for a user to write: "new Type[]". // Check for that common pattern and report a better error message. @@ -10745,7 +10836,7 @@ var ts; continue; } if (token === 11 /* NoSubstitutionTemplateLiteral */ || token === 12 /* TemplateHead */) { - var tagExpression = createNode(175 /* TaggedTemplateExpression */, expression.pos); + var tagExpression = createNode(176 /* TaggedTemplateExpression */, expression.pos); tagExpression.tag = expression; tagExpression.template = token === 11 /* NoSubstitutionTemplateLiteral */ ? parseLiteralNode() @@ -10768,7 +10859,7 @@ var ts; if (!typeArguments) { return expression; } - var callExpr = createNode(173 /* CallExpression */, expression.pos); + var callExpr = createNode(174 /* CallExpression */, expression.pos); callExpr.expression = expression; callExpr.typeArguments = typeArguments; callExpr.arguments = parseArgumentList(); @@ -10776,7 +10867,7 @@ var ts; continue; } else if (token === 17 /* OpenParenToken */) { - var callExpr = createNode(173 /* CallExpression */, expression.pos); + var callExpr = createNode(174 /* CallExpression */, expression.pos); callExpr.expression = expression; callExpr.arguments = parseArgumentList(); expression = finishNode(callExpr); @@ -10886,28 +10977,28 @@ var ts; return parseIdentifier(ts.Diagnostics.Expression_expected); } function parseParenthesizedExpression() { - var node = createNode(177 /* ParenthesizedExpression */); + var node = createNode(178 /* ParenthesizedExpression */); parseExpected(17 /* OpenParenToken */); node.expression = allowInAnd(parseExpression); parseExpected(18 /* CloseParenToken */); return finishNode(node); } function parseSpreadElement() { - var node = createNode(190 /* SpreadElementExpression */); + var node = createNode(191 /* SpreadElementExpression */); parseExpected(22 /* DotDotDotToken */); node.expression = parseAssignmentExpressionOrHigher(); return finishNode(node); } function parseArgumentOrArrayLiteralElement() { return token === 22 /* DotDotDotToken */ ? parseSpreadElement() : - token === 24 /* CommaToken */ ? createNode(192 /* OmittedExpression */) : + token === 24 /* CommaToken */ ? createNode(193 /* OmittedExpression */) : parseAssignmentExpressionOrHigher(); } function parseArgumentExpression() { return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement); } function parseArrayLiteralExpression() { - var node = createNode(169 /* ArrayLiteralExpression */); + var node = createNode(170 /* ArrayLiteralExpression */); parseExpected(19 /* OpenBracketToken */); if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; @@ -10918,10 +11009,10 @@ var ts; } function tryParseAccessorDeclaration(fullStart, decorators, modifiers) { if (parseContextualModifier(123 /* GetKeyword */)) { - return addJSDocComment(parseAccessorDeclaration(148 /* GetAccessor */, fullStart, decorators, modifiers)); + return addJSDocComment(parseAccessorDeclaration(149 /* GetAccessor */, fullStart, decorators, modifiers)); } - else if (parseContextualModifier(130 /* SetKeyword */)) { - return parseAccessorDeclaration(149 /* SetAccessor */, fullStart, decorators, modifiers); + else if (parseContextualModifier(131 /* SetKeyword */)) { + return parseAccessorDeclaration(150 /* SetAccessor */, fullStart, decorators, modifiers); } return undefined; } @@ -10948,7 +11039,7 @@ var ts; // this is necessary because ObjectLiteral productions are also used to cover grammar for ObjectAssignmentPattern var isShorthandPropertyAssignment = tokenIsIdentifier && (token === 24 /* CommaToken */ || token === 16 /* CloseBraceToken */ || token === 56 /* EqualsToken */); if (isShorthandPropertyAssignment) { - var shorthandDeclaration = createNode(253 /* ShorthandPropertyAssignment */, fullStart); + var shorthandDeclaration = createNode(254 /* ShorthandPropertyAssignment */, fullStart); shorthandDeclaration.name = propertyName; shorthandDeclaration.questionToken = questionToken; var equalsToken = parseOptionalToken(56 /* EqualsToken */); @@ -10959,7 +11050,7 @@ var ts; return addJSDocComment(finishNode(shorthandDeclaration)); } else { - var propertyAssignment = createNode(252 /* PropertyAssignment */, fullStart); + var propertyAssignment = createNode(253 /* PropertyAssignment */, fullStart); propertyAssignment.modifiers = modifiers; propertyAssignment.name = propertyName; propertyAssignment.questionToken = questionToken; @@ -10969,7 +11060,7 @@ var ts; } } function parseObjectLiteralExpression() { - var node = createNode(170 /* ObjectLiteralExpression */); + var node = createNode(171 /* ObjectLiteralExpression */); parseExpected(15 /* OpenBraceToken */); if (scanner.hasPrecedingLineBreak()) { node.multiLine = true; @@ -10988,7 +11079,7 @@ var ts; if (saveDecoratorContext) { setDecoratorContext(/*val*/ false); } - var node = createNode(178 /* FunctionExpression */); + var node = createNode(179 /* FunctionExpression */); setModifiers(node, parseModifiers()); parseExpected(87 /* FunctionKeyword */); node.asteriskToken = parseOptionalToken(37 /* AsteriskToken */); @@ -11010,7 +11101,7 @@ var ts; return isIdentifier() ? parseIdentifier() : undefined; } function parseNewExpression() { - var node = createNode(174 /* NewExpression */); + var node = createNode(175 /* NewExpression */); parseExpected(92 /* NewKeyword */); node.expression = parseMemberExpressionOrHigher(); node.typeArguments = tryParse(parseTypeArgumentsInExpression); @@ -11021,7 +11112,7 @@ var ts; } // STATEMENTS function parseBlock(ignoreMissingOpenBrace, diagnosticMessage) { - var node = createNode(198 /* Block */); + var node = createNode(199 /* Block */); if (parseExpected(15 /* OpenBraceToken */, diagnosticMessage) || ignoreMissingOpenBrace) { node.statements = parseList(1 /* BlockStatements */, parseStatement); parseExpected(16 /* CloseBraceToken */); @@ -11051,12 +11142,12 @@ var ts; return block; } function parseEmptyStatement() { - var node = createNode(200 /* EmptyStatement */); + var node = createNode(201 /* EmptyStatement */); parseExpected(23 /* SemicolonToken */); return finishNode(node); } function parseIfStatement() { - var node = createNode(202 /* IfStatement */); + var node = createNode(203 /* IfStatement */); parseExpected(88 /* IfKeyword */); parseExpected(17 /* OpenParenToken */); node.expression = allowInAnd(parseExpression); @@ -11066,7 +11157,7 @@ var ts; return finishNode(node); } function parseDoStatement() { - var node = createNode(203 /* DoStatement */); + var node = createNode(204 /* DoStatement */); parseExpected(79 /* DoKeyword */); node.statement = parseStatement(); parseExpected(104 /* WhileKeyword */); @@ -11081,7 +11172,7 @@ var ts; return finishNode(node); } function parseWhileStatement() { - var node = createNode(204 /* WhileStatement */); + var node = createNode(205 /* WhileStatement */); parseExpected(104 /* WhileKeyword */); parseExpected(17 /* OpenParenToken */); node.expression = allowInAnd(parseExpression); @@ -11104,21 +11195,21 @@ var ts; } var forOrForInOrForOfStatement; if (parseOptional(90 /* InKeyword */)) { - var forInStatement = createNode(206 /* ForInStatement */, pos); + var forInStatement = createNode(207 /* ForInStatement */, pos); forInStatement.initializer = initializer; forInStatement.expression = allowInAnd(parseExpression); parseExpected(18 /* CloseParenToken */); forOrForInOrForOfStatement = forInStatement; } - else if (parseOptional(137 /* OfKeyword */)) { - var forOfStatement = createNode(207 /* ForOfStatement */, pos); + else if (parseOptional(138 /* OfKeyword */)) { + var forOfStatement = createNode(208 /* ForOfStatement */, pos); forOfStatement.initializer = initializer; forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher); parseExpected(18 /* CloseParenToken */); forOrForInOrForOfStatement = forOfStatement; } else { - var forStatement = createNode(205 /* ForStatement */, pos); + var forStatement = createNode(206 /* ForStatement */, pos); forStatement.initializer = initializer; parseExpected(23 /* SemicolonToken */); if (token !== 23 /* SemicolonToken */ && token !== 18 /* CloseParenToken */) { @@ -11136,7 +11227,7 @@ var ts; } function parseBreakOrContinueStatement(kind) { var node = createNode(kind); - parseExpected(kind === 209 /* BreakStatement */ ? 70 /* BreakKeyword */ : 75 /* ContinueKeyword */); + parseExpected(kind === 210 /* BreakStatement */ ? 70 /* BreakKeyword */ : 75 /* ContinueKeyword */); if (!canParseSemicolon()) { node.label = parseIdentifier(); } @@ -11144,7 +11235,7 @@ var ts; return finishNode(node); } function parseReturnStatement() { - var node = createNode(210 /* ReturnStatement */); + var node = createNode(211 /* ReturnStatement */); parseExpected(94 /* ReturnKeyword */); if (!canParseSemicolon()) { node.expression = allowInAnd(parseExpression); @@ -11153,7 +11244,7 @@ var ts; return finishNode(node); } function parseWithStatement() { - var node = createNode(211 /* WithStatement */); + var node = createNode(212 /* WithStatement */); parseExpected(105 /* WithKeyword */); parseExpected(17 /* OpenParenToken */); node.expression = allowInAnd(parseExpression); @@ -11162,7 +11253,7 @@ var ts; return finishNode(node); } function parseCaseClause() { - var node = createNode(248 /* CaseClause */); + var node = createNode(249 /* CaseClause */); parseExpected(71 /* CaseKeyword */); node.expression = allowInAnd(parseExpression); parseExpected(54 /* ColonToken */); @@ -11170,7 +11261,7 @@ var ts; return finishNode(node); } function parseDefaultClause() { - var node = createNode(249 /* DefaultClause */); + var node = createNode(250 /* DefaultClause */); parseExpected(77 /* DefaultKeyword */); parseExpected(54 /* ColonToken */); node.statements = parseList(3 /* SwitchClauseStatements */, parseStatement); @@ -11180,12 +11271,12 @@ var ts; return token === 71 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause(); } function parseSwitchStatement() { - var node = createNode(212 /* SwitchStatement */); + var node = createNode(213 /* SwitchStatement */); parseExpected(96 /* SwitchKeyword */); parseExpected(17 /* OpenParenToken */); node.expression = allowInAnd(parseExpression); parseExpected(18 /* CloseParenToken */); - var caseBlock = createNode(226 /* CaseBlock */, scanner.getStartPos()); + var caseBlock = createNode(227 /* CaseBlock */, scanner.getStartPos()); parseExpected(15 /* OpenBraceToken */); caseBlock.clauses = parseList(2 /* SwitchClauses */, parseCaseOrDefaultClause); parseExpected(16 /* CloseBraceToken */); @@ -11200,7 +11291,7 @@ var ts; // directly as that might consume an expression on the following line. // We just return 'undefined' in that case. The actual error will be reported in the // grammar walker. - var node = createNode(214 /* ThrowStatement */); + var node = createNode(215 /* ThrowStatement */); parseExpected(98 /* ThrowKeyword */); node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression); parseSemicolon(); @@ -11208,7 +11299,7 @@ var ts; } // TODO: Review for error recovery function parseTryStatement() { - var node = createNode(215 /* TryStatement */); + var node = createNode(216 /* TryStatement */); parseExpected(100 /* TryKeyword */); node.tryBlock = parseBlock(/*ignoreMissingOpenBrace*/ false); node.catchClause = token === 72 /* CatchKeyword */ ? parseCatchClause() : undefined; @@ -11221,7 +11312,7 @@ var ts; return finishNode(node); } function parseCatchClause() { - var result = createNode(251 /* CatchClause */); + var result = createNode(252 /* CatchClause */); parseExpected(72 /* CatchKeyword */); if (parseExpected(17 /* OpenParenToken */)) { result.variableDeclaration = parseVariableDeclaration(); @@ -11231,7 +11322,7 @@ var ts; return finishNode(result); } function parseDebuggerStatement() { - var node = createNode(216 /* DebuggerStatement */); + var node = createNode(217 /* DebuggerStatement */); parseExpected(76 /* DebuggerKeyword */); parseSemicolon(); return finishNode(node); @@ -11243,13 +11334,13 @@ var ts; var fullStart = scanner.getStartPos(); var expression = allowInAnd(parseExpression); if (expression.kind === 69 /* Identifier */ && parseOptional(54 /* ColonToken */)) { - var labeledStatement = createNode(213 /* LabeledStatement */, fullStart); + var labeledStatement = createNode(214 /* LabeledStatement */, fullStart); labeledStatement.label = expression; labeledStatement.statement = parseStatement(); return addJSDocComment(finishNode(labeledStatement)); } else { - var expressionStatement = createNode(201 /* ExpressionStatement */, fullStart); + var expressionStatement = createNode(202 /* ExpressionStatement */, fullStart); expressionStatement.expression = expression; parseSemicolon(); return addJSDocComment(finishNode(expressionStatement)); @@ -11299,7 +11390,7 @@ var ts; // // could be legal, it would add complexity for very little gain. case 107 /* InterfaceKeyword */: - case 133 /* TypeKeyword */: + case 134 /* TypeKeyword */: return nextTokenIsIdentifierOnSameLine(); case 125 /* ModuleKeyword */: case 126 /* NamespaceKeyword */: @@ -11310,14 +11401,14 @@ var ts; case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: case 112 /* PublicKeyword */: - case 127 /* ReadonlyKeyword */: + case 128 /* ReadonlyKeyword */: nextToken(); // ASI takes effect for this modifier. if (scanner.hasPrecedingLineBreak()) { return false; } continue; - case 136 /* GlobalKeyword */: + case 137 /* GlobalKeyword */: nextToken(); return token === 15 /* OpenBraceToken */ || token === 69 /* Identifier */ || token === 82 /* ExportKeyword */; case 89 /* ImportKeyword */: @@ -11379,15 +11470,15 @@ var ts; case 107 /* InterfaceKeyword */: case 125 /* ModuleKeyword */: case 126 /* NamespaceKeyword */: - case 133 /* TypeKeyword */: - case 136 /* GlobalKeyword */: + case 134 /* TypeKeyword */: + case 137 /* GlobalKeyword */: // When these don't start a declaration, they're an identifier in an expression statement return true; case 112 /* PublicKeyword */: case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: case 113 /* StaticKeyword */: - case 127 /* ReadonlyKeyword */: + case 128 /* ReadonlyKeyword */: // When these don't start a declaration, they may be the start of a class member if an identifier // immediately follows. Otherwise they're an identifier in an expression statement. return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); @@ -11430,9 +11521,9 @@ var ts; case 86 /* ForKeyword */: return parseForOrForInOrForOfStatement(); case 75 /* ContinueKeyword */: - return parseBreakOrContinueStatement(208 /* ContinueStatement */); + return parseBreakOrContinueStatement(209 /* ContinueStatement */); case 70 /* BreakKeyword */: - return parseBreakOrContinueStatement(209 /* BreakStatement */); + return parseBreakOrContinueStatement(210 /* BreakStatement */); case 94 /* ReturnKeyword */: return parseReturnStatement(); case 105 /* WithKeyword */: @@ -11452,7 +11543,7 @@ var ts; return parseDeclaration(); case 118 /* AsyncKeyword */: case 107 /* InterfaceKeyword */: - case 133 /* TypeKeyword */: + case 134 /* TypeKeyword */: case 125 /* ModuleKeyword */: case 126 /* NamespaceKeyword */: case 122 /* DeclareKeyword */: @@ -11465,8 +11556,8 @@ var ts; case 112 /* PublicKeyword */: case 115 /* AbstractKeyword */: case 113 /* StaticKeyword */: - case 127 /* ReadonlyKeyword */: - case 136 /* GlobalKeyword */: + case 128 /* ReadonlyKeyword */: + case 137 /* GlobalKeyword */: if (isStartOfDeclaration()) { return parseDeclaration(); } @@ -11489,11 +11580,11 @@ var ts; return parseClassDeclaration(fullStart, decorators, modifiers); case 107 /* InterfaceKeyword */: return parseInterfaceDeclaration(fullStart, decorators, modifiers); - case 133 /* TypeKeyword */: + case 134 /* TypeKeyword */: return parseTypeAliasDeclaration(fullStart, decorators, modifiers); case 81 /* EnumKeyword */: return parseEnumDeclaration(fullStart, decorators, modifiers); - case 136 /* GlobalKeyword */: + case 137 /* GlobalKeyword */: case 125 /* ModuleKeyword */: case 126 /* NamespaceKeyword */: return parseModuleDeclaration(fullStart, decorators, modifiers); @@ -11514,7 +11605,7 @@ var ts; if (decorators || modifiers) { // We reached this point because we encountered decorators and/or modifiers and assumed a declaration // would follow. For recovery and error reporting purposes, return an incomplete declaration. - var node = createMissingNode(238 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected); + var node = createMissingNode(239 /* MissingDeclaration */, /*reportAtCurrentPosition*/ true, ts.Diagnostics.Declaration_expected); node.pos = fullStart; node.decorators = decorators; setModifiers(node, modifiers); @@ -11536,16 +11627,16 @@ var ts; // DECLARATIONS function parseArrayBindingElement() { if (token === 24 /* CommaToken */) { - return createNode(192 /* OmittedExpression */); + return createNode(193 /* OmittedExpression */); } - var node = createNode(168 /* BindingElement */); + var node = createNode(169 /* BindingElement */); node.dotDotDotToken = parseOptionalToken(22 /* DotDotDotToken */); node.name = parseIdentifierOrPattern(); node.initializer = parseBindingElementInitializer(/*inParameter*/ false); return finishNode(node); } function parseObjectBindingElement() { - var node = createNode(168 /* BindingElement */); + var node = createNode(169 /* BindingElement */); var tokenIsIdentifier = isIdentifier(); var propertyName = parsePropertyName(); if (tokenIsIdentifier && token !== 54 /* ColonToken */) { @@ -11560,14 +11651,14 @@ var ts; return finishNode(node); } function parseObjectBindingPattern() { - var node = createNode(166 /* ObjectBindingPattern */); + var node = createNode(167 /* ObjectBindingPattern */); parseExpected(15 /* OpenBraceToken */); node.elements = parseDelimitedList(9 /* ObjectBindingElements */, parseObjectBindingElement); parseExpected(16 /* CloseBraceToken */); return finishNode(node); } function parseArrayBindingPattern() { - var node = createNode(167 /* ArrayBindingPattern */); + var node = createNode(168 /* ArrayBindingPattern */); parseExpected(19 /* OpenBracketToken */); node.elements = parseDelimitedList(10 /* ArrayBindingElements */, parseArrayBindingElement); parseExpected(20 /* CloseBracketToken */); @@ -11586,7 +11677,7 @@ var ts; return parseIdentifier(); } function parseVariableDeclaration() { - var node = createNode(217 /* VariableDeclaration */); + var node = createNode(218 /* VariableDeclaration */); node.name = parseIdentifierOrPattern(); node.type = parseTypeAnnotation(); if (!isInOrOfKeyword(token)) { @@ -11595,7 +11686,7 @@ var ts; return finishNode(node); } function parseVariableDeclarationList(inForStatementInitializer) { - var node = createNode(218 /* VariableDeclarationList */); + var node = createNode(219 /* VariableDeclarationList */); switch (token) { case 102 /* VarKeyword */: break; @@ -11618,7 +11709,7 @@ var ts; // So we need to look ahead to determine if 'of' should be treated as a keyword in // this context. // The checker will then give an error that there is an empty declaration list. - if (token === 137 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) { + if (token === 138 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) { node.declarations = createMissingList(); } else { @@ -11633,7 +11724,7 @@ var ts; return nextTokenIsIdentifier() && nextToken() === 18 /* CloseParenToken */; } function parseVariableStatement(fullStart, decorators, modifiers) { - var node = createNode(199 /* VariableStatement */, fullStart); + var node = createNode(200 /* VariableStatement */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); node.declarationList = parseVariableDeclarationList(/*inForStatementInitializer*/ false); @@ -11641,7 +11732,7 @@ var ts; return addJSDocComment(finishNode(node)); } function parseFunctionDeclaration(fullStart, decorators, modifiers) { - var node = createNode(219 /* FunctionDeclaration */, fullStart); + var node = createNode(220 /* FunctionDeclaration */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(87 /* FunctionKeyword */); @@ -11654,7 +11745,7 @@ var ts; return addJSDocComment(finishNode(node)); } function parseConstructorDeclaration(pos, decorators, modifiers) { - var node = createNode(147 /* Constructor */, pos); + var node = createNode(148 /* Constructor */, pos); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(121 /* ConstructorKeyword */); @@ -11663,7 +11754,7 @@ var ts; return addJSDocComment(finishNode(node)); } function parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, diagnosticMessage) { - var method = createNode(146 /* MethodDeclaration */, fullStart); + var method = createNode(147 /* MethodDeclaration */, fullStart); method.decorators = decorators; setModifiers(method, modifiers); method.asteriskToken = asteriskToken; @@ -11676,7 +11767,7 @@ var ts; return addJSDocComment(finishNode(method)); } function parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken) { - var property = createNode(144 /* PropertyDeclaration */, fullStart); + var property = createNode(145 /* PropertyDeclaration */, fullStart); property.decorators = decorators; setModifiers(property, modifiers); property.name = name; @@ -11728,7 +11819,7 @@ var ts; case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: case 113 /* StaticKeyword */: - case 127 /* ReadonlyKeyword */: + case 128 /* ReadonlyKeyword */: return true; default: return false; @@ -11769,7 +11860,7 @@ var ts; // If we were able to get any potential identifier... if (idToken !== undefined) { // If we have a non-keyword identifier, or if we have an accessor, then it's safe to parse. - if (!ts.isKeyword(idToken) || idToken === 130 /* SetKeyword */ || idToken === 123 /* GetKeyword */) { + if (!ts.isKeyword(idToken) || idToken === 131 /* SetKeyword */ || idToken === 123 /* GetKeyword */) { return true; } // If it *is* a keyword, but not an accessor, check a little farther along @@ -11803,7 +11894,7 @@ var ts; decorators = []; decorators.pos = decoratorStart; } - var decorator = createNode(142 /* Decorator */, decoratorStart); + var decorator = createNode(143 /* Decorator */, decoratorStart); decorator.expression = doInDecoratorContext(parseLeftHandSideExpressionOrHigher); decorators.push(finishNode(decorator)); } @@ -11827,7 +11918,7 @@ var ts; var modifierKind = token; if (token === 74 /* ConstKeyword */ && permitInvalidConstAsModifier) { // We need to ensure that any subsequent modifiers appear on the same line - // so that when 'const' is a standalone declaration, we don't issue an error. + // so that when 'const' is a standalone declaration, we don't issue an error. if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) { break; } @@ -11868,7 +11959,7 @@ var ts; } function parseClassElement() { if (token === 23 /* SemicolonToken */) { - var result = createNode(197 /* SemicolonClassElement */); + var result = createNode(198 /* SemicolonClassElement */); nextToken(); return finishNode(result); } @@ -11906,10 +11997,10 @@ var ts; return parseClassDeclarationOrExpression( /*fullStart*/ scanner.getStartPos(), /*decorators*/ undefined, - /*modifiers*/ undefined, 191 /* ClassExpression */); + /*modifiers*/ undefined, 192 /* ClassExpression */); } function parseClassDeclaration(fullStart, decorators, modifiers) { - return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 220 /* ClassDeclaration */); + return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 221 /* ClassDeclaration */); } function parseClassDeclarationOrExpression(fullStart, decorators, modifiers, kind) { var node = createNode(kind, fullStart); @@ -11953,7 +12044,7 @@ var ts; } function parseHeritageClause() { if (token === 83 /* ExtendsKeyword */ || token === 106 /* ImplementsKeyword */) { - var node = createNode(250 /* HeritageClause */); + var node = createNode(251 /* HeritageClause */); node.token = token; nextToken(); node.types = parseDelimitedList(7 /* HeritageClauseElement */, parseExpressionWithTypeArguments); @@ -11962,7 +12053,7 @@ var ts; return undefined; } function parseExpressionWithTypeArguments() { - var node = createNode(193 /* ExpressionWithTypeArguments */); + var node = createNode(194 /* ExpressionWithTypeArguments */); node.expression = parseLeftHandSideExpressionOrHigher(); if (token === 25 /* LessThanToken */) { node.typeArguments = parseBracketedList(18 /* TypeArguments */, parseType, 25 /* LessThanToken */, 27 /* GreaterThanToken */); @@ -11976,7 +12067,7 @@ var ts; return parseList(5 /* ClassMembers */, parseClassElement); } function parseInterfaceDeclaration(fullStart, decorators, modifiers) { - var node = createNode(221 /* InterfaceDeclaration */, fullStart); + var node = createNode(222 /* InterfaceDeclaration */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(107 /* InterfaceKeyword */); @@ -11987,10 +12078,10 @@ var ts; return finishNode(node); } function parseTypeAliasDeclaration(fullStart, decorators, modifiers) { - var node = createNode(222 /* TypeAliasDeclaration */, fullStart); + var node = createNode(223 /* TypeAliasDeclaration */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); - parseExpected(133 /* TypeKeyword */); + parseExpected(134 /* TypeKeyword */); node.name = parseIdentifier(); node.typeParameters = parseTypeParameters(); parseExpected(56 /* EqualsToken */); @@ -12003,13 +12094,13 @@ var ts; // ConstantEnumMemberSection, which starts at the beginning of an enum declaration // or any time an integer literal initializer is encountered. function parseEnumMember() { - var node = createNode(254 /* EnumMember */, scanner.getStartPos()); + var node = createNode(255 /* EnumMember */, scanner.getStartPos()); node.name = parsePropertyName(); node.initializer = allowInAnd(parseNonParameterInitializer); return finishNode(node); } function parseEnumDeclaration(fullStart, decorators, modifiers) { - var node = createNode(223 /* EnumDeclaration */, fullStart); + var node = createNode(224 /* EnumDeclaration */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); parseExpected(81 /* EnumKeyword */); @@ -12024,7 +12115,7 @@ var ts; return finishNode(node); } function parseModuleBlock() { - var node = createNode(225 /* ModuleBlock */, scanner.getStartPos()); + var node = createNode(226 /* ModuleBlock */, scanner.getStartPos()); if (parseExpected(15 /* OpenBraceToken */)) { node.statements = parseList(1 /* BlockStatements */, parseStatement); parseExpected(16 /* CloseBraceToken */); @@ -12035,7 +12126,7 @@ var ts; return finishNode(node); } function parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags) { - var node = createNode(224 /* ModuleDeclaration */, fullStart); + var node = createNode(225 /* ModuleDeclaration */, fullStart); // If we are parsing a dotted namespace name, we want to // propagate the 'Namespace' flag across the names if set. var namespaceFlag = flags & 4096 /* Namespace */; @@ -12049,11 +12140,11 @@ var ts; return finishNode(node); } function parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers) { - var node = createNode(224 /* ModuleDeclaration */, fullStart); + var node = createNode(225 /* ModuleDeclaration */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); - if (token === 136 /* GlobalKeyword */) { - // parse 'global' as name of global scope augmentation + if (token === 137 /* GlobalKeyword */) { + // parse 'global' as name of global scope augmentation node.name = parseIdentifier(); node.flags |= 131072 /* GlobalAugmentation */; } @@ -12065,7 +12156,7 @@ var ts; } function parseModuleDeclaration(fullStart, decorators, modifiers) { var flags = modifiers ? modifiers.flags : 0; - if (token === 136 /* GlobalKeyword */) { + if (token === 137 /* GlobalKeyword */) { // global augmentation return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers); } @@ -12081,7 +12172,7 @@ var ts; return parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags); } function isExternalModuleReference() { - return token === 128 /* RequireKeyword */ && + return token === 129 /* RequireKeyword */ && lookAhead(nextTokenIsOpenParen); } function nextTokenIsOpenParen() { @@ -12091,7 +12182,7 @@ var ts; return nextToken() === 39 /* SlashToken */; } function parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers) { - var exportDeclaration = createNode(227 /* GlobalModuleExportDeclaration */, fullStart); + var exportDeclaration = createNode(228 /* GlobalModuleExportDeclaration */, fullStart); exportDeclaration.decorators = decorators; exportDeclaration.modifiers = modifiers; parseExpected(116 /* AsKeyword */); @@ -12106,11 +12197,11 @@ var ts; var identifier; if (isIdentifier()) { identifier = parseIdentifier(); - if (token !== 24 /* CommaToken */ && token !== 135 /* FromKeyword */) { + if (token !== 24 /* CommaToken */ && token !== 136 /* FromKeyword */) { // ImportEquals declaration of type: // import x = require("mod"); or // import x = M.x; - var importEqualsDeclaration = createNode(228 /* ImportEqualsDeclaration */, fullStart); + var importEqualsDeclaration = createNode(229 /* ImportEqualsDeclaration */, fullStart); importEqualsDeclaration.decorators = decorators; setModifiers(importEqualsDeclaration, modifiers); importEqualsDeclaration.name = identifier; @@ -12121,7 +12212,7 @@ var ts; } } // Import statement - var importDeclaration = createNode(229 /* ImportDeclaration */, fullStart); + var importDeclaration = createNode(230 /* ImportDeclaration */, fullStart); importDeclaration.decorators = decorators; setModifiers(importDeclaration, modifiers); // ImportDeclaration: @@ -12131,7 +12222,7 @@ var ts; token === 37 /* AsteriskToken */ || token === 15 /* OpenBraceToken */) { importDeclaration.importClause = parseImportClause(identifier, afterImportPos); - parseExpected(135 /* FromKeyword */); + parseExpected(136 /* FromKeyword */); } importDeclaration.moduleSpecifier = parseModuleSpecifier(); parseSemicolon(); @@ -12144,7 +12235,7 @@ var ts; // NamedImports // ImportedDefaultBinding, NameSpaceImport // ImportedDefaultBinding, NamedImports - var importClause = createNode(230 /* ImportClause */, fullStart); + var importClause = createNode(231 /* ImportClause */, fullStart); if (identifier) { // ImportedDefaultBinding: // ImportedBinding @@ -12154,7 +12245,7 @@ var ts; // parse namespace or named imports if (!importClause.name || parseOptional(24 /* CommaToken */)) { - importClause.namedBindings = token === 37 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(232 /* NamedImports */); + importClause.namedBindings = token === 37 /* AsteriskToken */ ? parseNamespaceImport() : parseNamedImportsOrExports(233 /* NamedImports */); } return finishNode(importClause); } @@ -12164,8 +12255,8 @@ var ts; : parseEntityName(/*allowReservedWords*/ false); } function parseExternalModuleReference() { - var node = createNode(239 /* ExternalModuleReference */); - parseExpected(128 /* RequireKeyword */); + var node = createNode(240 /* ExternalModuleReference */); + parseExpected(129 /* RequireKeyword */); parseExpected(17 /* OpenParenToken */); node.expression = parseModuleSpecifier(); parseExpected(18 /* CloseParenToken */); @@ -12187,7 +12278,7 @@ var ts; function parseNamespaceImport() { // NameSpaceImport: // * as ImportedBinding - var namespaceImport = createNode(231 /* NamespaceImport */); + var namespaceImport = createNode(232 /* NamespaceImport */); parseExpected(37 /* AsteriskToken */); parseExpected(116 /* AsKeyword */); namespaceImport.name = parseIdentifier(); @@ -12202,14 +12293,14 @@ var ts; // ImportsList: // ImportSpecifier // ImportsList, ImportSpecifier - node.elements = parseBracketedList(21 /* ImportOrExportSpecifiers */, kind === 232 /* NamedImports */ ? parseImportSpecifier : parseExportSpecifier, 15 /* OpenBraceToken */, 16 /* CloseBraceToken */); + node.elements = parseBracketedList(21 /* ImportOrExportSpecifiers */, kind === 233 /* NamedImports */ ? parseImportSpecifier : parseExportSpecifier, 15 /* OpenBraceToken */, 16 /* CloseBraceToken */); return finishNode(node); } function parseExportSpecifier() { - return parseImportOrExportSpecifier(237 /* ExportSpecifier */); + return parseImportOrExportSpecifier(238 /* ExportSpecifier */); } function parseImportSpecifier() { - return parseImportOrExportSpecifier(233 /* ImportSpecifier */); + return parseImportOrExportSpecifier(234 /* ImportSpecifier */); } function parseImportOrExportSpecifier(kind) { var node = createNode(kind); @@ -12234,27 +12325,27 @@ var ts; else { node.name = identifierName; } - if (kind === 233 /* ImportSpecifier */ && checkIdentifierIsKeyword) { + if (kind === 234 /* ImportSpecifier */ && checkIdentifierIsKeyword) { // Report error identifier expected parseErrorAtPosition(checkIdentifierStart, checkIdentifierEnd - checkIdentifierStart, ts.Diagnostics.Identifier_expected); } return finishNode(node); } function parseExportDeclaration(fullStart, decorators, modifiers) { - var node = createNode(235 /* ExportDeclaration */, fullStart); + var node = createNode(236 /* ExportDeclaration */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); if (parseOptional(37 /* AsteriskToken */)) { - parseExpected(135 /* FromKeyword */); + parseExpected(136 /* FromKeyword */); node.moduleSpecifier = parseModuleSpecifier(); } else { - node.exportClause = parseNamedImportsOrExports(236 /* NamedExports */); + node.exportClause = parseNamedImportsOrExports(237 /* NamedExports */); // It is not uncommon to accidentally omit the 'from' keyword. Additionally, in editing scenarios, // the 'from' keyword can be parsed as a named export when the export clause is unterminated (i.e. `export { from "moduleName";`) // If we don't have a 'from' keyword, see if we have a string literal such that ASI won't take effect. - if (token === 135 /* FromKeyword */ || (token === 9 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) { - parseExpected(135 /* FromKeyword */); + if (token === 136 /* FromKeyword */ || (token === 9 /* StringLiteral */ && !scanner.hasPrecedingLineBreak())) { + parseExpected(136 /* FromKeyword */); node.moduleSpecifier = parseModuleSpecifier(); } } @@ -12262,7 +12353,7 @@ var ts; return finishNode(node); } function parseExportAssignment(fullStart, decorators, modifiers) { - var node = createNode(234 /* ExportAssignment */, fullStart); + var node = createNode(235 /* ExportAssignment */, fullStart); node.decorators = decorators; setModifiers(node, modifiers); if (parseOptional(56 /* EqualsToken */)) { @@ -12344,10 +12435,10 @@ var ts; function setExternalModuleIndicator(sourceFile) { sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, function (node) { return node.flags & 1 /* Export */ - || node.kind === 228 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 239 /* ExternalModuleReference */ - || node.kind === 229 /* ImportDeclaration */ - || node.kind === 234 /* ExportAssignment */ - || node.kind === 235 /* ExportDeclaration */ + || node.kind === 229 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 240 /* ExternalModuleReference */ + || node.kind === 230 /* ImportDeclaration */ + || node.kind === 235 /* ExportAssignment */ + || node.kind === 236 /* ExportDeclaration */ ? node : undefined; }); @@ -12420,7 +12511,7 @@ var ts; // Parses out a JSDoc type expression. /* @internal */ function parseJSDocTypeExpression() { - var result = createNode(256 /* JSDocTypeExpression */, scanner.getTokenPos()); + var result = createNode(257 /* JSDocTypeExpression */, scanner.getTokenPos()); parseExpected(15 /* OpenBraceToken */); result.type = parseJSDocTopLevelType(); parseExpected(16 /* CloseBraceToken */); @@ -12431,12 +12522,12 @@ var ts; function parseJSDocTopLevelType() { var type = parseJSDocType(); if (token === 47 /* BarToken */) { - var unionType = createNode(260 /* JSDocUnionType */, type.pos); + var unionType = createNode(261 /* JSDocUnionType */, type.pos); unionType.types = parseJSDocTypeList(type); type = finishNode(unionType); } if (token === 56 /* EqualsToken */) { - var optionalType = createNode(267 /* JSDocOptionalType */, type.pos); + var optionalType = createNode(268 /* JSDocOptionalType */, type.pos); nextToken(); optionalType.type = type; type = finishNode(optionalType); @@ -12447,20 +12538,20 @@ var ts; var type = parseBasicTypeExpression(); while (true) { if (token === 19 /* OpenBracketToken */) { - var arrayType = createNode(259 /* JSDocArrayType */, type.pos); + var arrayType = createNode(260 /* JSDocArrayType */, type.pos); arrayType.elementType = type; nextToken(); parseExpected(20 /* CloseBracketToken */); type = finishNode(arrayType); } else if (token === 53 /* QuestionToken */) { - var nullableType = createNode(262 /* JSDocNullableType */, type.pos); + var nullableType = createNode(263 /* JSDocNullableType */, type.pos); nullableType.type = type; nextToken(); type = finishNode(nullableType); } else if (token === 49 /* ExclamationToken */) { - var nonNullableType = createNode(263 /* JSDocNonNullableType */, type.pos); + var nonNullableType = createNode(264 /* JSDocNonNullableType */, type.pos); nonNullableType.type = type; nextToken(); type = finishNode(nonNullableType); @@ -12494,10 +12585,10 @@ var ts; case 97 /* ThisKeyword */: return parseJSDocThisType(); case 117 /* AnyKeyword */: - case 131 /* StringKeyword */: - case 129 /* NumberKeyword */: + case 132 /* StringKeyword */: + case 130 /* NumberKeyword */: case 120 /* BooleanKeyword */: - case 132 /* SymbolKeyword */: + case 133 /* SymbolKeyword */: case 103 /* VoidKeyword */: return parseTokenNode(); } @@ -12505,27 +12596,27 @@ var ts; return parseJSDocTypeReference(); } function parseJSDocThisType() { - var result = createNode(271 /* JSDocThisType */); + var result = createNode(272 /* JSDocThisType */); nextToken(); parseExpected(54 /* ColonToken */); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocConstructorType() { - var result = createNode(270 /* JSDocConstructorType */); + var result = createNode(271 /* JSDocConstructorType */); nextToken(); parseExpected(54 /* ColonToken */); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocVariadicType() { - var result = createNode(269 /* JSDocVariadicType */); + var result = createNode(270 /* JSDocVariadicType */); nextToken(); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocFunctionType() { - var result = createNode(268 /* JSDocFunctionType */); + var result = createNode(269 /* JSDocFunctionType */); nextToken(); parseExpected(17 /* OpenParenToken */); result.parameters = parseDelimitedList(22 /* JSDocFunctionParameters */, parseJSDocParameter); @@ -12538,7 +12629,7 @@ var ts; return finishNode(result); } function parseJSDocParameter() { - var parameter = createNode(141 /* Parameter */); + var parameter = createNode(142 /* Parameter */); parameter.type = parseJSDocType(); if (parseOptional(56 /* EqualsToken */)) { parameter.questionToken = createNode(56 /* EqualsToken */); @@ -12546,7 +12637,7 @@ var ts; return finishNode(parameter); } function parseJSDocTypeReference() { - var result = createNode(266 /* JSDocTypeReference */); + var result = createNode(267 /* JSDocTypeReference */); result.name = parseSimplePropertyName(); if (token === 25 /* LessThanToken */) { result.typeArguments = parseTypeArguments(); @@ -12581,13 +12672,13 @@ var ts; } } function parseQualifiedName(left) { - var result = createNode(138 /* QualifiedName */, left.pos); + var result = createNode(139 /* QualifiedName */, left.pos); result.left = left; result.right = parseIdentifierName(); return finishNode(result); } function parseJSDocRecordType() { - var result = createNode(264 /* JSDocRecordType */); + var result = createNode(265 /* JSDocRecordType */); nextToken(); result.members = parseDelimitedList(24 /* JSDocRecordMembers */, parseJSDocRecordMember); checkForTrailingComma(result.members); @@ -12595,7 +12686,7 @@ var ts; return finishNode(result); } function parseJSDocRecordMember() { - var result = createNode(265 /* JSDocRecordMember */); + var result = createNode(266 /* JSDocRecordMember */); result.name = parseSimplePropertyName(); if (token === 54 /* ColonToken */) { nextToken(); @@ -12604,13 +12695,13 @@ var ts; return finishNode(result); } function parseJSDocNonNullableType() { - var result = createNode(263 /* JSDocNonNullableType */); + var result = createNode(264 /* JSDocNonNullableType */); nextToken(); result.type = parseJSDocType(); return finishNode(result); } function parseJSDocTupleType() { - var result = createNode(261 /* JSDocTupleType */); + var result = createNode(262 /* JSDocTupleType */); nextToken(); result.types = parseDelimitedList(25 /* JSDocTupleTypes */, parseJSDocType); checkForTrailingComma(result.types); @@ -12624,7 +12715,7 @@ var ts; } } function parseJSDocUnionType() { - var result = createNode(260 /* JSDocUnionType */); + var result = createNode(261 /* JSDocUnionType */); nextToken(); result.types = parseJSDocTypeList(parseJSDocType()); parseExpected(18 /* CloseParenToken */); @@ -12642,7 +12733,7 @@ var ts; return types; } function parseJSDocAllType() { - var result = createNode(257 /* JSDocAllType */); + var result = createNode(258 /* JSDocAllType */); nextToken(); return finishNode(result); } @@ -12665,11 +12756,11 @@ var ts; token === 27 /* GreaterThanToken */ || token === 56 /* EqualsToken */ || token === 47 /* BarToken */) { - var result = createNode(258 /* JSDocUnknownType */, pos); + var result = createNode(259 /* JSDocUnknownType */, pos); return finishNode(result); } else { - var result = createNode(262 /* JSDocNullableType */, pos); + var result = createNode(263 /* JSDocNullableType */, pos); result.type = parseJSDocType(); return finishNode(result); } @@ -12760,7 +12851,7 @@ var ts; if (!tags) { return undefined; } - var result = createNode(272 /* JSDocComment */, start); + var result = createNode(273 /* JSDocComment */, start); result.tags = tags; return finishNode(result, end); } @@ -12774,7 +12865,7 @@ var ts; var atToken = createNode(55 /* AtToken */, scanner.getTokenPos()); atToken.end = scanner.getTextPos(); nextJSDocToken(); - var tagName = parseJSDocIdentifier(); + var tagName = parseJSDocIdentifierName(); if (!tagName) { return; } @@ -12798,7 +12889,7 @@ var ts; return undefined; } function handleUnknownTag(atToken, tagName) { - var result = createNode(273 /* JSDocTag */, atToken.pos); + var result = createNode(274 /* JSDocTag */, atToken.pos); result.atToken = atToken; result.tagName = tagName; return finishNode(result); @@ -12827,7 +12918,7 @@ var ts; var isBracketed; // Looking for something like '[foo]' or 'foo' if (parseOptionalToken(19 /* OpenBracketToken */)) { - name = parseJSDocIdentifier(); + name = parseJSDocIdentifierName(); isBracketed = true; // May have an optional default, e.g. '[foo = 42]' if (parseOptionalToken(56 /* EqualsToken */)) { @@ -12835,8 +12926,8 @@ var ts; } parseExpected(20 /* CloseBracketToken */); } - else if (token === 69 /* Identifier */) { - name = parseJSDocIdentifier(); + else if (ts.tokenIsIdentifierOrKeyword(token)) { + name = parseJSDocIdentifierName(); } if (!name) { parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); @@ -12852,7 +12943,7 @@ var ts; if (!typeExpression) { typeExpression = tryParseTypeExpression(); } - var result = createNode(274 /* JSDocParameterTag */, atToken.pos); + var result = createNode(275 /* JSDocParameterTag */, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.preParameterName = preName; @@ -12862,39 +12953,39 @@ var ts; return finishNode(result); } function handleReturnTag(atToken, tagName) { - if (ts.forEach(tags, function (t) { return t.kind === 275 /* JSDocReturnTag */; })) { + if (ts.forEach(tags, function (t) { return t.kind === 276 /* JSDocReturnTag */; })) { parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); } - var result = createNode(275 /* JSDocReturnTag */, atToken.pos); + var result = createNode(276 /* JSDocReturnTag */, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.typeExpression = tryParseTypeExpression(); return finishNode(result); } function handleTypeTag(atToken, tagName) { - if (ts.forEach(tags, function (t) { return t.kind === 276 /* JSDocTypeTag */; })) { + if (ts.forEach(tags, function (t) { return t.kind === 277 /* JSDocTypeTag */; })) { parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); } - var result = createNode(276 /* JSDocTypeTag */, atToken.pos); + var result = createNode(277 /* JSDocTypeTag */, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.typeExpression = tryParseTypeExpression(); return finishNode(result); } function handleTemplateTag(atToken, tagName) { - if (ts.forEach(tags, function (t) { return t.kind === 277 /* JSDocTemplateTag */; })) { + if (ts.forEach(tags, function (t) { return t.kind === 278 /* JSDocTemplateTag */; })) { parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.text); } // Type parameter list looks like '@template T,U,V' var typeParameters = []; typeParameters.pos = scanner.getStartPos(); while (true) { - var name_8 = parseJSDocIdentifier(); + var name_8 = parseJSDocIdentifierName(); if (!name_8) { parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected); return undefined; } - var typeParameter = createNode(140 /* TypeParameter */, name_8.pos); + var typeParameter = createNode(141 /* TypeParameter */, name_8.pos); typeParameter.name = name_8; finishNode(typeParameter); typeParameters.push(typeParameter); @@ -12905,7 +12996,7 @@ var ts; break; } } - var result = createNode(277 /* JSDocTemplateTag */, atToken.pos); + var result = createNode(278 /* JSDocTemplateTag */, atToken.pos); result.atToken = atToken; result.tagName = tagName; result.typeParameters = typeParameters; @@ -12916,8 +13007,11 @@ var ts; function nextJSDocToken() { return token = scanner.scanJSDocToken(); } - function parseJSDocIdentifier() { - if (token !== 69 /* Identifier */) { + function parseJSDocIdentifierName() { + return createJSDocIdentifier(ts.tokenIsIdentifierOrKeyword(token)); + } + function createJSDocIdentifier(isIdentifier) { + if (!isIdentifier) { parseErrorAtCurrentToken(ts.Diagnostics.Identifier_expected); return undefined; } @@ -13417,33 +13511,19 @@ var ts; ModuleInstanceState[ModuleInstanceState["ConstEnumOnly"] = 2] = "ConstEnumOnly"; })(ts.ModuleInstanceState || (ts.ModuleInstanceState = {})); var ModuleInstanceState = ts.ModuleInstanceState; - var Reachability; - (function (Reachability) { - Reachability[Reachability["Uninitialized"] = 1] = "Uninitialized"; - Reachability[Reachability["Reachable"] = 2] = "Reachable"; - Reachability[Reachability["Unreachable"] = 4] = "Unreachable"; - Reachability[Reachability["ReportedUnreachable"] = 8] = "ReportedUnreachable"; - })(Reachability || (Reachability = {})); - function or(state1, state2) { - return (state1 | state2) & 2 /* Reachable */ - ? 2 /* Reachable */ - : (state1 & state2) & 8 /* ReportedUnreachable */ - ? 8 /* ReportedUnreachable */ - : 4 /* Unreachable */; - } function getModuleInstanceState(node) { // A module is uninstantiated if it contains only // 1. interface declarations, type alias declarations - if (node.kind === 221 /* InterfaceDeclaration */ || node.kind === 222 /* TypeAliasDeclaration */) { + if (node.kind === 222 /* InterfaceDeclaration */ || node.kind === 223 /* TypeAliasDeclaration */) { return 0 /* NonInstantiated */; } else if (ts.isConstEnumDeclaration(node)) { return 2 /* ConstEnumOnly */; } - else if ((node.kind === 229 /* ImportDeclaration */ || node.kind === 228 /* ImportEqualsDeclaration */) && !(node.flags & 1 /* Export */)) { + else if ((node.kind === 230 /* ImportDeclaration */ || node.kind === 229 /* ImportEqualsDeclaration */) && !(node.flags & 1 /* Export */)) { return 0 /* NonInstantiated */; } - else if (node.kind === 225 /* ModuleBlock */) { + else if (node.kind === 226 /* ModuleBlock */) { var state_1 = 0 /* NonInstantiated */; ts.forEachChild(node, function (n) { switch (getModuleInstanceState(n)) { @@ -13462,7 +13542,7 @@ var ts; }); return state_1; } - else if (node.kind === 224 /* ModuleDeclaration */) { + else if (node.kind === 225 /* ModuleDeclaration */) { return getModuleInstanceState(node.body); } else { @@ -13501,6 +13581,7 @@ var ts; function createBinder() { var file; var options; + var languageVersion; var parent; var container; var blockScopeContainer; @@ -13508,10 +13589,13 @@ var ts; var seenThisKeyword; // state used by reachability checks var hasExplicitReturn; - var currentReachabilityState; - var labelStack; - var labelIndexMap; - var implicitLabels; + var currentFlow; + var currentBreakTarget; + var currentContinueTarget; + var currentTrueTarget; + var currentFalseTarget; + var preSwitchCaseFlow; + var activeLabels; // state used for emit helpers var hasClassExtends; var hasAsyncFunctions; @@ -13525,11 +13609,15 @@ var ts; var symbolCount = 0; var Symbol; var classifiableNames; + var unreachableFlow = { flags: 1 /* Unreachable */ }; + var reportedUnreachableFlow = { flags: 1 /* Unreachable */ }; function bindSourceFile(f, opts) { file = f; options = opts; + languageVersion = ts.getEmitScriptTarget(options); inStrictMode = !!file.externalModuleIndicator; classifiableNames = {}; + symbolCount = 0; Symbol = ts.objectAllocator.getSymbolConstructor(); if (!file.locals) { bind(file); @@ -13538,15 +13626,19 @@ var ts; } file = undefined; options = undefined; + languageVersion = undefined; parent = undefined; container = undefined; blockScopeContainer = undefined; lastContainer = undefined; seenThisKeyword = false; hasExplicitReturn = false; - labelStack = undefined; - labelIndexMap = undefined; - implicitLabels = undefined; + currentFlow = undefined; + currentBreakTarget = undefined; + currentContinueTarget = undefined; + currentTrueTarget = undefined; + currentFalseTarget = undefined; + activeLabels = undefined; hasClassExtends = false; hasAsyncFunctions = false; hasDecorators = false; @@ -13574,7 +13666,7 @@ var ts; if (symbolFlags & 107455 /* Value */) { var valueDeclaration = symbol.valueDeclaration; if (!valueDeclaration || - (valueDeclaration.kind !== node.kind && valueDeclaration.kind === 224 /* ModuleDeclaration */)) { + (valueDeclaration.kind !== node.kind && valueDeclaration.kind === 225 /* ModuleDeclaration */)) { // other kinds of value declarations take precedence over modules symbol.valueDeclaration = node; } @@ -13587,7 +13679,7 @@ var ts; if (ts.isAmbientModule(node)) { return ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + node.name.text + "\""; } - if (node.name.kind === 139 /* ComputedPropertyName */) { + if (node.name.kind === 140 /* ComputedPropertyName */) { var nameExpression = node.name.expression; // treat computed property names where expression is string/numeric literal as just string/numeric literal if (ts.isStringOrNumericLiteral(nameExpression.kind)) { @@ -13599,21 +13691,21 @@ var ts; return node.name.text; } switch (node.kind) { - case 147 /* Constructor */: + case 148 /* Constructor */: return "__constructor"; - case 155 /* FunctionType */: - case 150 /* CallSignature */: + case 156 /* FunctionType */: + case 151 /* CallSignature */: return "__call"; - case 156 /* ConstructorType */: - case 151 /* ConstructSignature */: + case 157 /* ConstructorType */: + case 152 /* ConstructSignature */: return "__new"; - case 152 /* IndexSignature */: + case 153 /* IndexSignature */: return "__index"; - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: return "__export"; - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return node.isExportEquals ? "export=" : "default"; - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: switch (ts.getSpecialPropertyAssignmentKind(node)) { case 2 /* ModuleExports */: // module.exports = ... @@ -13628,15 +13720,15 @@ var ts; } ts.Debug.fail("Unknown binary declaration kind"); break; - case 219 /* FunctionDeclaration */: - case 220 /* ClassDeclaration */: + case 220 /* FunctionDeclaration */: + case 221 /* ClassDeclaration */: return node.flags & 512 /* Default */ ? "default" : undefined; - case 268 /* JSDocFunctionType */: + case 269 /* JSDocFunctionType */: return ts.isJSDocConstructSignature(node) ? "__new" : "__call"; - case 141 /* Parameter */: + case 142 /* Parameter */: // Parameters with names are handled at the top of this function. Parameters // without names can only come from JSDocFunctionTypes. - ts.Debug.assert(node.parent.kind === 268 /* JSDocFunctionType */); + ts.Debug.assert(node.parent.kind === 269 /* JSDocFunctionType */); var functionType = node.parent; var index = ts.indexOf(functionType.parameters, node); return "p" + index; @@ -13715,7 +13807,7 @@ var ts; function declareModuleMember(node, symbolFlags, symbolExcludes) { var hasExportModifier = ts.getCombinedNodeFlags(node) & 1 /* Export */; if (symbolFlags & 8388608 /* Alias */) { - if (node.kind === 237 /* ExportSpecifier */ || (node.kind === 228 /* ImportEqualsDeclaration */ && hasExportModifier)) { + if (node.kind === 238 /* ExportSpecifier */ || (node.kind === 229 /* ImportEqualsDeclaration */ && hasExportModifier)) { return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); } else { @@ -13793,45 +13885,47 @@ var ts; blockScopeContainer = node; blockScopeContainer.locals = undefined; } - var savedReachabilityState; - var savedLabelStack; - var savedLabels; - var savedImplicitLabels; var savedHasExplicitReturn; + var savedCurrentFlow; + var savedBreakTarget; + var savedContinueTarget; + var savedActiveLabels; var kind = node.kind; var flags = node.flags; // reset all reachability check related flags on node (for incremental scenarios) flags &= ~98304 /* ReachabilityCheckFlags */; // reset all emit helper flags on node (for incremental scenarios) flags &= ~3932160 /* EmitHelperFlags */; - if (kind === 221 /* InterfaceDeclaration */) { + if (kind === 222 /* InterfaceDeclaration */) { seenThisKeyword = false; } - var saveState = kind === 255 /* SourceFile */ || kind === 225 /* ModuleBlock */ || ts.isFunctionLikeKind(kind); + var saveState = kind === 256 /* SourceFile */ || kind === 226 /* ModuleBlock */ || ts.isFunctionLikeKind(kind); if (saveState) { - savedReachabilityState = currentReachabilityState; - savedLabelStack = labelStack; - savedLabels = labelIndexMap; - savedImplicitLabels = implicitLabels; savedHasExplicitReturn = hasExplicitReturn; - currentReachabilityState = 2 /* Reachable */; + savedCurrentFlow = currentFlow; + savedBreakTarget = currentBreakTarget; + savedContinueTarget = currentContinueTarget; + savedActiveLabels = activeLabels; hasExplicitReturn = false; - labelStack = labelIndexMap = implicitLabels = undefined; + currentFlow = { flags: 2 /* Start */ }; + currentBreakTarget = undefined; + currentContinueTarget = undefined; + activeLabels = undefined; } if (ts.isInJavaScriptFile(node) && node.jsDocComment) { bind(node.jsDocComment); } bindReachableStatement(node); - if (currentReachabilityState === 2 /* Reachable */ && ts.isFunctionLikeKind(kind) && ts.nodeIsPresent(node.body)) { + if (!(currentFlow.flags & 1 /* Unreachable */) && ts.isFunctionLikeKind(kind) && ts.nodeIsPresent(node.body)) { flags |= 32768 /* HasImplicitReturn */; if (hasExplicitReturn) { flags |= 65536 /* HasExplicitReturn */; } } - if (kind === 221 /* InterfaceDeclaration */) { + if (kind === 222 /* InterfaceDeclaration */) { flags = seenThisKeyword ? flags | 16384 /* ContainsThis */ : flags & ~16384 /* ContainsThis */; } - if (kind === 255 /* SourceFile */) { + if (kind === 256 /* SourceFile */) { if (hasClassExtends) { flags |= 262144 /* HasClassExtends */; } @@ -13851,10 +13945,10 @@ var ts; node.flags = flags; if (saveState) { hasExplicitReturn = savedHasExplicitReturn; - currentReachabilityState = savedReachabilityState; - labelStack = savedLabelStack; - labelIndexMap = savedLabels; - implicitLabels = savedImplicitLabels; + currentFlow = savedCurrentFlow; + currentBreakTarget = savedBreakTarget; + currentContinueTarget = savedContinueTarget; + activeLabels = savedActiveLabels; } container = saveContainer; parent = saveParent; @@ -13870,212 +13964,564 @@ var ts; return; } switch (node.kind) { - case 204 /* WhileStatement */: + case 205 /* WhileStatement */: bindWhileStatement(node); break; - case 203 /* DoStatement */: + case 204 /* DoStatement */: bindDoStatement(node); break; - case 205 /* ForStatement */: + case 206 /* ForStatement */: bindForStatement(node); break; - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: bindForInOrForOfStatement(node); break; - case 202 /* IfStatement */: + case 203 /* IfStatement */: bindIfStatement(node); break; - case 210 /* ReturnStatement */: - case 214 /* ThrowStatement */: + case 211 /* ReturnStatement */: + case 215 /* ThrowStatement */: bindReturnOrThrow(node); break; - case 209 /* BreakStatement */: - case 208 /* ContinueStatement */: + case 210 /* BreakStatement */: + case 209 /* ContinueStatement */: bindBreakOrContinueStatement(node); break; - case 215 /* TryStatement */: + case 216 /* TryStatement */: bindTryStatement(node); break; - case 212 /* SwitchStatement */: + case 213 /* SwitchStatement */: bindSwitchStatement(node); break; - case 226 /* CaseBlock */: + case 227 /* CaseBlock */: bindCaseBlock(node); break; - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: bindLabeledStatement(node); break; + case 185 /* PrefixUnaryExpression */: + bindPrefixUnaryExpressionFlow(node); + break; + case 187 /* BinaryExpression */: + bindBinaryExpressionFlow(node); + break; + case 181 /* DeleteExpression */: + bindDeleteExpressionFlow(node); + break; + case 188 /* ConditionalExpression */: + bindConditionalExpressionFlow(node); + break; + case 218 /* VariableDeclaration */: + bindVariableDeclarationFlow(node); + break; default: ts.forEachChild(node, bind); break; } } - function bindWhileStatement(n) { - var preWhileState = n.expression.kind === 84 /* FalseKeyword */ ? 4 /* Unreachable */ : currentReachabilityState; - var postWhileState = n.expression.kind === 99 /* TrueKeyword */ ? 4 /* Unreachable */ : currentReachabilityState; - // bind expressions (don't affect reachability) - bind(n.expression); - currentReachabilityState = preWhileState; - var postWhileLabel = pushImplicitLabel(); - bind(n.statement); - popImplicitLabel(postWhileLabel, postWhileState); + function isNarrowableReference(expr) { + return expr.kind === 69 /* Identifier */ || + expr.kind === 97 /* ThisKeyword */ || + expr.kind === 172 /* PropertyAccessExpression */ && isNarrowableReference(expr.expression); } - function bindDoStatement(n) { - var preDoState = currentReachabilityState; - var postDoLabel = pushImplicitLabel(); - bind(n.statement); - var postDoState = n.expression.kind === 99 /* TrueKeyword */ ? 4 /* Unreachable */ : preDoState; - popImplicitLabel(postDoLabel, postDoState); - // bind expressions (don't affect reachability) - bind(n.expression); - } - function bindForStatement(n) { - var preForState = currentReachabilityState; - var postForLabel = pushImplicitLabel(); - // bind expressions (don't affect reachability) - bind(n.initializer); - bind(n.condition); - bind(n.incrementor); - bind(n.statement); - // for statement is considered infinite when it condition is either omitted or is true keyword - // - for(..;;..) - // - for(..;true;..) - var isInfiniteLoop = (!n.condition || n.condition.kind === 99 /* TrueKeyword */); - var postForState = isInfiniteLoop ? 4 /* Unreachable */ : preForState; - popImplicitLabel(postForLabel, postForState); - } - function bindForInOrForOfStatement(n) { - var preStatementState = currentReachabilityState; - var postStatementLabel = pushImplicitLabel(); - // bind expressions (don't affect reachability) - bind(n.initializer); - bind(n.expression); - bind(n.statement); - popImplicitLabel(postStatementLabel, preStatementState); - } - function bindIfStatement(n) { - // denotes reachability state when entering 'thenStatement' part of the if statement: - // i.e. if condition is false then thenStatement is unreachable - var ifTrueState = n.expression.kind === 84 /* FalseKeyword */ ? 4 /* Unreachable */ : currentReachabilityState; - // denotes reachability state when entering 'elseStatement': - // i.e. if condition is true then elseStatement is unreachable - var ifFalseState = n.expression.kind === 99 /* TrueKeyword */ ? 4 /* Unreachable */ : currentReachabilityState; - currentReachabilityState = ifTrueState; - // bind expression (don't affect reachability) - bind(n.expression); - bind(n.thenStatement); - if (n.elseStatement) { - var preElseState = currentReachabilityState; - currentReachabilityState = ifFalseState; - bind(n.elseStatement); - currentReachabilityState = or(currentReachabilityState, preElseState); + function isNarrowingExpression(expr) { + switch (expr.kind) { + case 69 /* Identifier */: + case 97 /* ThisKeyword */: + case 172 /* PropertyAccessExpression */: + return isNarrowableReference(expr); + case 174 /* CallExpression */: + return true; + case 178 /* ParenthesizedExpression */: + return isNarrowingExpression(expr.expression); + case 187 /* BinaryExpression */: + return isNarrowingBinaryExpression(expr); + case 185 /* PrefixUnaryExpression */: + return expr.operator === 49 /* ExclamationToken */ && isNarrowingExpression(expr.operand); } - else { - currentReachabilityState = or(currentReachabilityState, ifFalseState); + return false; + } + function isNarrowingBinaryExpression(expr) { + switch (expr.operatorToken.kind) { + case 56 /* EqualsToken */: + return isNarrowableReference(expr.left); + case 30 /* EqualsEqualsToken */: + case 31 /* ExclamationEqualsToken */: + case 32 /* EqualsEqualsEqualsToken */: + case 33 /* ExclamationEqualsEqualsToken */: + if (isNarrowingExpression(expr.left) && (expr.right.kind === 93 /* NullKeyword */ || expr.right.kind === 69 /* Identifier */)) { + return true; + } + if (expr.left.kind === 182 /* TypeOfExpression */ && isNarrowingExpression(expr.left.expression) && expr.right.kind === 9 /* StringLiteral */) { + return true; + } + return false; + case 91 /* InstanceOfKeyword */: + return isNarrowingExpression(expr.left); + case 24 /* CommaToken */: + return isNarrowingExpression(expr.right); + } + return false; + } + function createBranchLabel() { + return { + flags: 4 /* BranchLabel */, + antecedents: undefined + }; + } + function createLoopLabel() { + return { + flags: 8 /* LoopLabel */, + antecedents: undefined + }; + } + function setFlowNodeReferenced(flow) { + // On first reference we set the Referenced flag, thereafter we set the Shared flag + flow.flags |= flow.flags & 128 /* Referenced */ ? 256 /* Shared */ : 128 /* Referenced */; + } + function addAntecedent(label, antecedent) { + if (!(antecedent.flags & 1 /* Unreachable */) && !ts.contains(label.antecedents, antecedent)) { + (label.antecedents || (label.antecedents = [])).push(antecedent); + setFlowNodeReferenced(antecedent); } } - function bindReturnOrThrow(n) { - // bind expression (don't affect reachability) - bind(n.expression); - if (n.kind === 210 /* ReturnStatement */) { - hasExplicitReturn = true; + function createFlowCondition(flags, antecedent, expression) { + if (antecedent.flags & 1 /* Unreachable */) { + return antecedent; } - currentReachabilityState = 4 /* Unreachable */; - } - function bindBreakOrContinueStatement(n) { - // call bind on label (don't affect reachability) - bind(n.label); - // for continue case touch label so it will be marked a used - var isValidJump = jumpToLabel(n.label, n.kind === 209 /* BreakStatement */ ? currentReachabilityState : 4 /* Unreachable */); - if (isValidJump) { - currentReachabilityState = 4 /* Unreachable */; + if (!expression) { + return flags & 32 /* TrueCondition */ ? antecedent : unreachableFlow; } + if (expression.kind === 99 /* TrueKeyword */ && flags & 64 /* FalseCondition */ || + expression.kind === 84 /* FalseKeyword */ && flags & 32 /* TrueCondition */) { + return unreachableFlow; + } + if (!isNarrowingExpression(expression)) { + return antecedent; + } + setFlowNodeReferenced(antecedent); + return { + flags: flags, + antecedent: antecedent, + expression: expression + }; } - function bindTryStatement(n) { - // catch\finally blocks has the same reachability as try block - var preTryState = currentReachabilityState; - bind(n.tryBlock); - var postTryState = currentReachabilityState; - currentReachabilityState = preTryState; - bind(n.catchClause); - var postCatchState = currentReachabilityState; - currentReachabilityState = preTryState; - bind(n.finallyBlock); - // post catch/finally state is reachable if - // - post try state is reachable - control flow can fall out of try block - // - post catch state is reachable - control flow can fall out of catch block - currentReachabilityState = n.catchClause ? or(postTryState, postCatchState) : postTryState; + function createFlowAssignment(antecedent, node) { + setFlowNodeReferenced(antecedent); + return { + flags: 16 /* Assignment */, + antecedent: antecedent, + node: node + }; } - function bindSwitchStatement(n) { - var preSwitchState = currentReachabilityState; - var postSwitchLabel = pushImplicitLabel(); - // bind expression (don't affect reachability) - bind(n.expression); - bind(n.caseBlock); - var hasDefault = ts.forEach(n.caseBlock.clauses, function (c) { return c.kind === 249 /* DefaultClause */; }); - // post switch state is unreachable if switch is exhaustive (has a default case ) and does not have fallthrough from the last case - var postSwitchState = hasDefault && currentReachabilityState !== 2 /* Reachable */ ? 4 /* Unreachable */ : preSwitchState; - popImplicitLabel(postSwitchLabel, postSwitchState); + function finishFlowLabel(flow) { + var antecedents = flow.antecedents; + if (!antecedents) { + return unreachableFlow; + } + if (antecedents.length === 1) { + return antecedents[0]; + } + return flow; } - function bindCaseBlock(n) { - var startState = currentReachabilityState; - for (var i = 0; i < n.clauses.length; i++) { - var clause = n.clauses[i]; - currentReachabilityState = startState; - bind(clause); - if (clause.statements.length && - i !== n.clauses.length - 1 && - currentReachabilityState === 2 /* Reachable */ && - options.noFallthroughCasesInSwitch) { - errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); + function isStatementCondition(node) { + var parent = node.parent; + switch (parent.kind) { + case 203 /* IfStatement */: + case 205 /* WhileStatement */: + case 204 /* DoStatement */: + return parent.expression === node; + case 206 /* ForStatement */: + case 188 /* ConditionalExpression */: + return parent.condition === node; + } + return false; + } + function isLogicalExpression(node) { + while (true) { + if (node.kind === 178 /* ParenthesizedExpression */) { + node = node.expression; + } + else if (node.kind === 185 /* PrefixUnaryExpression */ && node.operator === 49 /* ExclamationToken */) { + node = node.operand; + } + else { + return node.kind === 187 /* BinaryExpression */ && (node.operatorToken.kind === 51 /* AmpersandAmpersandToken */ || + node.operatorToken.kind === 52 /* BarBarToken */); } } } - function bindLabeledStatement(n) { - // call bind on label (don't affect reachability) - bind(n.label); - var ok = pushNamedLabel(n.label); - bind(n.statement); - if (ok) { - popNamedLabel(n.label, currentReachabilityState); + function isTopLevelLogicalExpression(node) { + while (node.parent.kind === 178 /* ParenthesizedExpression */ || + node.parent.kind === 185 /* PrefixUnaryExpression */ && + node.parent.operator === 49 /* ExclamationToken */) { + 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 /* TrueCondition */, currentFlow, node)); + addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, 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 preConditionLabel = createBranchLabel(); + var postDoLabel = createBranchLabel(); + addAntecedent(preDoLabel, currentFlow); + currentFlow = preDoLabel; + bindIterativeStatement(node.statement, postDoLabel, preConditionLabel); + addAntecedent(preConditionLabel, currentFlow); + currentFlow = finishFlowLabel(preConditionLabel); + bindCondition(node.expression, preDoLabel, postDoLabel); + currentFlow = finishFlowLabel(postDoLabel); + } + function bindForStatement(node) { + var preLoopLabel = 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; + bind(node.expression); + addAntecedent(postLoopLabel, currentFlow); + bind(node.initializer); + if (node.initializer.kind !== 219 /* VariableDeclarationList */) { + 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 === 211 /* ReturnStatement */) { + hasExplicitReturn = true; + } + currentFlow = unreachableFlow; + } + function findActiveLabel(name) { + if (activeLabels) { + for (var _i = 0, activeLabels_1 = activeLabels; _i < activeLabels_1.length; _i++) { + var label = activeLabels_1[_i]; + if (label.name === name) { + return label; + } + } + } + return undefined; + } + function bindbreakOrContinueFlow(node, breakTarget, continueTarget) { + var flowLabel = node.kind === 210 /* BreakStatement */ ? breakTarget : continueTarget; + if (flowLabel) { + addAntecedent(flowLabel, currentFlow); + currentFlow = unreachableFlow; + } + } + function bindBreakOrContinueStatement(node) { + bind(node.label); + if (node.label) { + var activeLabel = findActiveLabel(node.label.text); + if (activeLabel) { + activeLabel.referenced = true; + bindbreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget); + } + } + else { + bindbreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget); + } + } + function bindTryStatement(node) { + var postFinallyLabel = createBranchLabel(); + var preTryFlow = currentFlow; + // TODO: Every statement in try block is potentially an exit point! + bind(node.tryBlock); + addAntecedent(postFinallyLabel, currentFlow); + if (node.catchClause) { + currentFlow = preTryFlow; + bind(node.catchClause); + addAntecedent(postFinallyLabel, currentFlow); + } + if (node.finallyBlock) { + currentFlow = preTryFlow; + bind(node.finallyBlock); + } + currentFlow = finishFlowLabel(postFinallyLabel); + } + function bindSwitchStatement(node) { + var postSwitchLabel = 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 === 250 /* DefaultClause */; }); + if (!hasDefault) { + addAntecedent(postSwitchLabel, preSwitchCaseFlow); + } + currentBreakTarget = saveBreakTarget; + preSwitchCaseFlow = savePreSwitchCaseFlow; + currentFlow = finishFlowLabel(postSwitchLabel); + } + function bindCaseBlock(node) { + var clauses = node.clauses; + for (var i = 0; i < clauses.length; i++) { + var clause = clauses[i]; + if (clause.statements.length) { + if (currentFlow.flags & 1 /* Unreachable */) { + currentFlow = preSwitchCaseFlow; + } + else { + var preCaseLabel = createBranchLabel(); + addAntecedent(preCaseLabel, preSwitchCaseFlow); + addAntecedent(preCaseLabel, currentFlow); + currentFlow = finishFlowLabel(preCaseLabel); + } + bind(clause); + if (!(currentFlow.flags & 1 /* Unreachable */) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch); + } + } + else { + bind(clause); + } + } + } + function pushActiveLabel(name, breakTarget, continueTarget) { + var activeLabel = { + name: name, + breakTarget: breakTarget, + continueTarget: continueTarget, + referenced: false + }; + (activeLabels || (activeLabels = [])).push(activeLabel); + return activeLabel; + } + function popActiveLabel() { + activeLabels.pop(); + } + function bindLabeledStatement(node) { + var preStatementLabel = createLoopLabel(); + var postStatementLabel = createBranchLabel(); + bind(node.label); + addAntecedent(preStatementLabel, currentFlow); + var activeLabel = pushActiveLabel(node.label.text, postStatementLabel, preStatementLabel); + bind(node.statement); + popActiveLabel(); + if (!activeLabel.referenced && !options.allowUnusedLabels) { + file.bindDiagnostics.push(ts.createDiagnosticForNode(node.label, ts.Diagnostics.Unused_label)); + } + addAntecedent(postStatementLabel, currentFlow); + currentFlow = finishFlowLabel(postStatementLabel); + } + function bindDestructuringTargetFlow(node) { + if (node.kind === 187 /* BinaryExpression */ && node.operatorToken.kind === 56 /* EqualsToken */) { + bindAssignmentTargetFlow(node.left); + } + else { + bindAssignmentTargetFlow(node); + } + } + function bindAssignmentTargetFlow(node) { + if (isNarrowableReference(node)) { + currentFlow = createFlowAssignment(currentFlow, node); + } + else if (node.kind === 170 /* ArrayLiteralExpression */) { + for (var _i = 0, _a = node.elements; _i < _a.length; _i++) { + var e = _a[_i]; + if (e.kind === 191 /* SpreadElementExpression */) { + bindAssignmentTargetFlow(e.expression); + } + else { + bindDestructuringTargetFlow(e); + } + } + } + else if (node.kind === 171 /* ObjectLiteralExpression */) { + for (var _b = 0, _c = node.properties; _b < _c.length; _b++) { + var p = _c[_b]; + if (p.kind === 253 /* PropertyAssignment */) { + bindDestructuringTargetFlow(p.initializer); + } + else if (p.kind === 254 /* ShorthandPropertyAssignment */) { + bindAssignmentTargetFlow(p.name); + } + } + } + } + function bindLogicalExpression(node, trueTarget, falseTarget) { + var preRightLabel = createBranchLabel(); + if (node.operatorToken.kind === 51 /* AmpersandAmpersandToken */) { + bindCondition(node.left, preRightLabel, falseTarget); + } + else { + bindCondition(node.left, trueTarget, preRightLabel); + } + currentFlow = finishFlowLabel(preRightLabel); + bind(node.operatorToken); + bindCondition(node.right, trueTarget, falseTarget); + } + function bindPrefixUnaryExpressionFlow(node) { + if (node.operator === 49 /* ExclamationToken */) { + var saveTrueTarget = currentTrueTarget; + currentTrueTarget = currentFalseTarget; + currentFalseTarget = saveTrueTarget; + ts.forEachChild(node, bind); + currentFalseTarget = currentTrueTarget; + currentTrueTarget = saveTrueTarget; + } + else { + ts.forEachChild(node, bind); + } + } + function bindBinaryExpressionFlow(node) { + var operator = node.operatorToken.kind; + if (operator === 51 /* AmpersandAmpersandToken */ || operator === 52 /* BarBarToken */) { + if (isTopLevelLogicalExpression(node)) { + var postExpressionLabel = createBranchLabel(); + bindLogicalExpression(node, postExpressionLabel, postExpressionLabel); + currentFlow = finishFlowLabel(postExpressionLabel); + } + else { + bindLogicalExpression(node, currentTrueTarget, currentFalseTarget); + } + } + else { + ts.forEachChild(node, bind); + if (operator === 56 /* EqualsToken */ && !ts.isAssignmentTarget(node)) { + bindAssignmentTargetFlow(node.left); + } + } + } + function bindDeleteExpressionFlow(node) { + ts.forEachChild(node, bind); + if (node.expression.kind === 172 /* PropertyAccessExpression */) { + 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.whenTrue); + addAntecedent(postExpressionLabel, currentFlow); + currentFlow = finishFlowLabel(falseLabel); + bind(node.whenFalse); + addAntecedent(postExpressionLabel, currentFlow); + currentFlow = finishFlowLabel(postExpressionLabel); + } + function bindInitializedVariableFlow(node) { + var name = node.name; + if (ts.isBindingPattern(name)) { + for (var _i = 0, _a = name.elements; _i < _a.length; _i++) { + var child = _a[_i]; + bindInitializedVariableFlow(child); + } + } + else { + currentFlow = createFlowAssignment(currentFlow, node); + } + } + function bindVariableDeclarationFlow(node) { + ts.forEachChild(node, bind); + if (node.initializer || node.parent.parent.kind === 207 /* ForInStatement */ || node.parent.parent.kind === 208 /* ForOfStatement */) { + bindInitializedVariableFlow(node); } } function getContainerFlags(node) { switch (node.kind) { - case 191 /* ClassExpression */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 170 /* ObjectLiteralExpression */: - case 158 /* TypeLiteral */: - case 264 /* JSDocRecordType */: + case 192 /* ClassExpression */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 171 /* ObjectLiteralExpression */: + case 159 /* TypeLiteral */: + case 265 /* JSDocRecordType */: return 1 /* IsContainer */; - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 219 /* FunctionDeclaration */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 155 /* FunctionType */: - case 268 /* JSDocFunctionType */: - case 156 /* ConstructorType */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 224 /* ModuleDeclaration */: - case 255 /* SourceFile */: - case 222 /* TypeAliasDeclaration */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 220 /* FunctionDeclaration */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 156 /* FunctionType */: + case 269 /* JSDocFunctionType */: + case 157 /* ConstructorType */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 225 /* ModuleDeclaration */: + case 256 /* SourceFile */: + case 223 /* TypeAliasDeclaration */: return 5 /* IsContainerWithLocals */; - case 251 /* CatchClause */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 226 /* CaseBlock */: + case 252 /* CatchClause */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 227 /* CaseBlock */: return 2 /* IsBlockScopedContainer */; - case 198 /* Block */: + case 199 /* Block */: // do not treat blocks directly inside a function as a block-scoped-container. // Locals that reside in this block should go to the function locals. Otherwise 'x' // would not appear to be a redeclaration of a block scoped local in the following @@ -14112,40 +14558,40 @@ var ts; // members are declared (for example, a member of a class will go into a specific // symbol table depending on if it is static or not). We defer to specialized // handlers to take care of declaring these child members. - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return declareModuleMember(node, symbolFlags, symbolExcludes); - case 255 /* SourceFile */: + case 256 /* SourceFile */: return declareSourceFileMember(node, symbolFlags, symbolExcludes); - case 191 /* ClassExpression */: - case 220 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 221 /* ClassDeclaration */: return declareClassMember(node, symbolFlags, symbolExcludes); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); - case 158 /* TypeLiteral */: - case 170 /* ObjectLiteralExpression */: - case 221 /* InterfaceDeclaration */: - case 264 /* JSDocRecordType */: + case 159 /* TypeLiteral */: + case 171 /* ObjectLiteralExpression */: + case 222 /* InterfaceDeclaration */: + case 265 /* JSDocRecordType */: // Interface/Object-types always have their children added to the 'members' of // their container. They are only accessible through an instance of their // container, and are never in scope otherwise (even inside the body of the // object / type / interface declaring them). An exception is type parameters, // which are in scope without qualification (similar to 'locals'). return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 268 /* JSDocFunctionType */: - case 222 /* TypeAliasDeclaration */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 269 /* JSDocFunctionType */: + case 223 /* TypeAliasDeclaration */: // All the children of these container types are never visible through another // symbol (i.e. through another symbol's 'exports' or 'members'). Instead, // they're only accessed 'lexically' (i.e. from code that exists underneath @@ -14166,11 +14612,11 @@ var ts; : declareSymbol(file.locals, undefined, node, symbolFlags, symbolExcludes); } function hasExportDeclarations(node) { - var body = node.kind === 255 /* SourceFile */ ? node : node.body; - if (body.kind === 255 /* SourceFile */ || body.kind === 225 /* ModuleBlock */) { + var body = node.kind === 256 /* SourceFile */ ? node : node.body; + if (body.kind === 256 /* SourceFile */ || body.kind === 226 /* ModuleBlock */) { for (var _i = 0, _a = body.statements; _i < _a.length; _i++) { var stat = _a[_i]; - if (stat.kind === 235 /* ExportDeclaration */ || stat.kind === 234 /* ExportAssignment */) { + if (stat.kind === 236 /* ExportDeclaration */ || stat.kind === 235 /* ExportAssignment */) { return true; } } @@ -14262,7 +14708,7 @@ var ts; // c.IsAccessorDescriptor(previous) is true and IsDataDescriptor(propId.descriptor) is true. // d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields - var currentKind = prop.kind === 252 /* PropertyAssignment */ || prop.kind === 253 /* ShorthandPropertyAssignment */ || prop.kind === 146 /* MethodDeclaration */ + var currentKind = prop.kind === 253 /* PropertyAssignment */ || prop.kind === 254 /* ShorthandPropertyAssignment */ || prop.kind === 147 /* MethodDeclaration */ ? 1 /* Property */ : 2 /* Accessor */; var existingKind = seen[identifier.text]; @@ -14284,10 +14730,10 @@ var ts; } function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) { switch (blockScopeContainer.kind) { - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: declareModuleMember(node, symbolFlags, symbolExcludes); break; - case 255 /* SourceFile */: + case 256 /* SourceFile */: if (ts.isExternalModule(container)) { declareModuleMember(node, symbolFlags, symbolExcludes); break; @@ -14310,7 +14756,8 @@ var ts; if (inStrictMode && node.originalKeywordKind >= 106 /* FirstFutureReservedWord */ && node.originalKeywordKind <= 114 /* LastFutureReservedWord */ && - !ts.isIdentifierName(node)) { + !ts.isIdentifierName(node) && + !ts.isInAmbientContext(node)) { // Report error only if there are no parse errors in file if (!file.parseDiagnostics.length) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node))); @@ -14383,6 +14830,30 @@ var ts; checkStrictModeEvalOrArguments(node, node.name); } } + function getStrictModeBlockScopeFunctionDeclarationMessage(node) { + // Provide specialized messages to help the user understand why we think they're in + // strict mode. + if (ts.getContainingClass(node)) { + return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode; + } + 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 /* ES6 */) { + // Report error if function is not top level function declaration + if (blockScopeContainer.kind !== 256 /* SourceFile */ && + blockScopeContainer.kind !== 225 /* ModuleDeclaration */ && + !ts.isFunctionLike(blockScopeContainer)) { + // We check first if the name is inside class declaration or class expression; if so give explicit message + // otherwise report generic error message. + var errorSpan = ts.getErrorSpanForNode(file, node); + file.bindDiagnostics.push(ts.createFileDiagnostic(file, errorSpan.start, errorSpan.length, getStrictModeBlockScopeFunctionDeclarationMessage(node))); + } + } + } function checkStrictModeNumericLiteral(node) { if (inStrictMode && node.isOctalLiteral) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode)); @@ -14447,17 +14918,17 @@ var ts; } function updateStrictMode(node) { switch (node.kind) { - case 255 /* SourceFile */: - case 225 /* ModuleBlock */: + case 256 /* SourceFile */: + case 226 /* ModuleBlock */: updateStrictModeStatementList(node.statements); return; - case 198 /* Block */: + case 199 /* Block */: if (ts.isFunctionLike(node.parent)) { updateStrictModeStatementList(node.statements); } return; - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: // All classes are automatically in strict mode in ES6. inStrictMode = true; return; @@ -14486,8 +14957,17 @@ var ts; switch (node.kind) { /* Strict mode checks */ case 69 /* Identifier */: + case 97 /* ThisKeyword */: + if (currentFlow && (ts.isExpression(node) || parent.kind === 254 /* ShorthandPropertyAssignment */)) { + node.flowNode = currentFlow; + } return checkStrictModeIdentifier(node); - case 186 /* BinaryExpression */: + case 172 /* PropertyAccessExpression */: + if (currentFlow && isNarrowableReference(node)) { + node.flowNode = currentFlow; + } + break; + case 187 /* BinaryExpression */: if (ts.isInJavaScriptFile(node)) { var specialKind = ts.getSpecialPropertyAssignmentKind(node); switch (specialKind) { @@ -14511,105 +14991,105 @@ var ts; } } return checkStrictModeBinaryExpression(node); - case 251 /* CatchClause */: + case 252 /* CatchClause */: return checkStrictModeCatchClause(node); - case 180 /* DeleteExpression */: + case 181 /* DeleteExpression */: return checkStrictModeDeleteExpression(node); case 8 /* NumericLiteral */: return checkStrictModeNumericLiteral(node); - case 185 /* PostfixUnaryExpression */: + case 186 /* PostfixUnaryExpression */: return checkStrictModePostfixUnaryExpression(node); - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: return checkStrictModePrefixUnaryExpression(node); - case 211 /* WithStatement */: + case 212 /* WithStatement */: return checkStrictModeWithStatement(node); - case 164 /* ThisType */: + case 165 /* ThisType */: seenThisKeyword = true; return; - case 153 /* TypePredicate */: + case 154 /* TypePredicate */: return checkTypePredicate(node); - case 140 /* TypeParameter */: + case 141 /* TypeParameter */: return declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 530912 /* TypeParameterExcludes */); - case 141 /* Parameter */: + case 142 /* Parameter */: return bindParameter(node); - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: return bindVariableDeclarationOrBindingElement(node); - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 265 /* JSDocRecordMember */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 266 /* JSDocRecordMember */: return bindPropertyOrMethodOrAccessor(node, 4 /* Property */ | (node.questionToken ? 536870912 /* Optional */ : 0 /* None */), 107455 /* PropertyExcludes */); - case 252 /* PropertyAssignment */: - case 253 /* ShorthandPropertyAssignment */: + case 253 /* PropertyAssignment */: + case 254 /* ShorthandPropertyAssignment */: return bindPropertyOrMethodOrAccessor(node, 4 /* Property */, 107455 /* PropertyExcludes */); - case 254 /* EnumMember */: + case 255 /* EnumMember */: return bindPropertyOrMethodOrAccessor(node, 8 /* EnumMember */, 107455 /* EnumMemberExcludes */); - case 246 /* JsxSpreadAttribute */: + case 247 /* JsxSpreadAttribute */: hasJsxSpreadAttribute = true; return; - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: return declareSymbolAndAddToSymbolTable(node, 131072 /* Signature */, 0 /* None */); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: // If this is an ObjectLiteralExpression method, then it sits in the same space // as other properties in the object literal. So we use SymbolFlags.PropertyExcludes // so that it will conflict with any other object literal members with the same // name. return bindPropertyOrMethodOrAccessor(node, 8192 /* Method */ | (node.questionToken ? 536870912 /* Optional */ : 0 /* None */), ts.isObjectLiteralMethod(node) ? 107455 /* PropertyExcludes */ : 99263 /* MethodExcludes */); - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return bindFunctionDeclaration(node); - case 147 /* Constructor */: + case 148 /* Constructor */: return declareSymbolAndAddToSymbolTable(node, 16384 /* Constructor */, /*symbolExcludes:*/ 0 /* None */); - case 148 /* GetAccessor */: + case 149 /* GetAccessor */: return bindPropertyOrMethodOrAccessor(node, 32768 /* GetAccessor */, 41919 /* GetAccessorExcludes */); - case 149 /* SetAccessor */: + case 150 /* SetAccessor */: return bindPropertyOrMethodOrAccessor(node, 65536 /* SetAccessor */, 74687 /* SetAccessorExcludes */); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 268 /* JSDocFunctionType */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 269 /* JSDocFunctionType */: return bindFunctionOrConstructorType(node); - case 158 /* TypeLiteral */: - case 264 /* JSDocRecordType */: + case 159 /* TypeLiteral */: + case 265 /* JSDocRecordType */: return bindAnonymousDeclaration(node, 2048 /* TypeLiteral */, "__type"); - case 170 /* ObjectLiteralExpression */: + case 171 /* ObjectLiteralExpression */: return bindObjectLiteralExpression(node); - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return bindFunctionExpression(node); - case 173 /* CallExpression */: + case 174 /* CallExpression */: if (ts.isInJavaScriptFile(node)) { bindCallExpression(node); } break; // Members of classes, interfaces, and modules - case 191 /* ClassExpression */: - case 220 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 221 /* ClassDeclaration */: return bindClassLikeDeclaration(node); - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return bindBlockScopedDeclaration(node, 64 /* Interface */, 792960 /* InterfaceExcludes */); - case 222 /* TypeAliasDeclaration */: + case 223 /* TypeAliasDeclaration */: return bindBlockScopedDeclaration(node, 524288 /* TypeAlias */, 793056 /* TypeAliasExcludes */); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return bindEnumDeclaration(node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return bindModuleDeclaration(node); // Imports and exports - case 228 /* ImportEqualsDeclaration */: - case 231 /* NamespaceImport */: - case 233 /* ImportSpecifier */: - case 237 /* ExportSpecifier */: + case 229 /* ImportEqualsDeclaration */: + case 232 /* NamespaceImport */: + case 234 /* ImportSpecifier */: + case 238 /* ExportSpecifier */: return declareSymbolAndAddToSymbolTable(node, 8388608 /* Alias */, 8388608 /* AliasExcludes */); - case 227 /* GlobalModuleExportDeclaration */: + case 228 /* GlobalModuleExportDeclaration */: return bindGlobalModuleExportDeclaration(node); - case 230 /* ImportClause */: + case 231 /* ImportClause */: return bindImportClause(node); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: return bindExportDeclaration(node); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return bindExportAssignment(node); - case 255 /* SourceFile */: + case 256 /* SourceFile */: return bindSourceFileIfExternalModule(); } } @@ -14618,7 +15098,7 @@ var ts; if (parameterName && parameterName.kind === 69 /* Identifier */) { checkStrictModeIdentifier(parameterName); } - if (parameterName && parameterName.kind === 164 /* ThisType */) { + if (parameterName && parameterName.kind === 165 /* ThisType */) { seenThisKeyword = true; } bind(type); @@ -14633,12 +15113,12 @@ var ts; bindAnonymousDeclaration(file, 512 /* ValueModule */, "\"" + ts.removeFileExtension(file.fileName) + "\""); } function bindExportAssignment(node) { - var boundExpression = node.kind === 234 /* ExportAssignment */ ? node.expression : node.right; + var boundExpression = node.kind === 235 /* ExportAssignment */ ? node.expression : node.right; if (!container.symbol || !container.symbol.exports) { // Export assignment in some sort of block construct bindAnonymousDeclaration(node, 8388608 /* Alias */, getDeclarationName(node)); } - else if (boundExpression.kind === 69 /* Identifier */ && node.kind === 234 /* ExportAssignment */) { + else if (boundExpression.kind === 69 /* Identifier */ && node.kind === 235 /* ExportAssignment */) { // An export default clause with an identifier exports all meanings of that identifier declareSymbol(container.symbol.exports, container.symbol, node, 8388608 /* Alias */, 107455 /* PropertyExcludes */ | 8388608 /* AliasExcludes */); } @@ -14651,17 +15131,17 @@ var ts; if (node.modifiers && node.modifiers.length) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Modifiers_cannot_appear_here)); } - if (node.parent.kind !== 255 /* SourceFile */) { + if (node.parent.kind !== 256 /* SourceFile */) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_at_top_level)); return; } else { - var parent_4 = node.parent; - if (!ts.isExternalModule(parent_4)) { + var parent_5 = node.parent; + if (!ts.isExternalModule(parent_5)) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_module_files)); return; } - if (!parent_4.isDeclarationFile) { + if (!parent_5.isDeclarationFile) { file.bindDiagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_declaration_files)); return; } @@ -14703,7 +15183,7 @@ var ts; } function bindThisPropertyAssignment(node) { // Declare a 'member' in case it turns out the container was an ES5 class - if (container.kind === 178 /* FunctionExpression */ || container.kind === 219 /* FunctionDeclaration */) { + if (container.kind === 179 /* FunctionExpression */ || container.kind === 220 /* FunctionDeclaration */) { container.symbol.members = container.symbol.members || {}; // It's acceptable for multiple 'this' assignments of the same identifier to occur declareSymbol(container.symbol.members, container.symbol, node, 4 /* Property */, 107455 /* PropertyExcludes */ & ~4 /* Property */); @@ -14747,7 +15227,7 @@ var ts; hasDecorators = true; } } - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { bindBlockScopedDeclaration(node, 32 /* Class */, 899519 /* ClassExcludes */); } else { @@ -14840,7 +15320,13 @@ var ts; } } checkStrictModeFunctionName(node); - return declareSymbolAndAddToSymbolTable(node, 16 /* Function */, 106927 /* FunctionExcludes */); + if (inStrictMode) { + checkStrictModeFunctionDeclaration(node); + return bindBlockScopedDeclaration(node, 16 /* Function */, 106927 /* FunctionExcludes */); + } + else { + return declareSymbolAndAddToSymbolTable(node, 16 /* Function */, 106927 /* FunctionExcludes */); + } } function bindFunctionExpression(node) { if (!ts.isDeclarationFile(file) && !ts.isInAmbientContext(node)) { @@ -14866,110 +15352,46 @@ var ts; : declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes); } // reachability checks - function pushNamedLabel(name) { - initializeReachabilityStateIfNecessary(); - if (ts.hasProperty(labelIndexMap, name.text)) { - return false; - } - labelIndexMap[name.text] = labelStack.push(1 /* Uninitialized */) - 1; - return true; - } - function pushImplicitLabel() { - initializeReachabilityStateIfNecessary(); - var index = labelStack.push(1 /* Uninitialized */) - 1; - implicitLabels.push(index); - return index; - } - function popNamedLabel(label, outerState) { - var index = labelIndexMap[label.text]; - ts.Debug.assert(index !== undefined); - ts.Debug.assert(labelStack.length == index + 1); - labelIndexMap[label.text] = undefined; - setCurrentStateAtLabel(labelStack.pop(), outerState, label); - } - function popImplicitLabel(implicitLabelIndex, outerState) { - if (labelStack.length !== implicitLabelIndex + 1) { - ts.Debug.assert(false, "Label stack: " + labelStack.length + ", index:" + implicitLabelIndex); - } - var i = implicitLabels.pop(); - if (implicitLabelIndex !== i) { - ts.Debug.assert(false, "i: " + i + ", index: " + implicitLabelIndex); - } - setCurrentStateAtLabel(labelStack.pop(), outerState, /*name*/ undefined); - } - function setCurrentStateAtLabel(innerMergedState, outerState, label) { - if (innerMergedState === 1 /* Uninitialized */) { - if (label && !options.allowUnusedLabels) { - file.bindDiagnostics.push(ts.createDiagnosticForNode(label, ts.Diagnostics.Unused_label)); - } - currentReachabilityState = outerState; - } - else { - currentReachabilityState = or(innerMergedState, outerState); - } - } - function jumpToLabel(label, outerState) { - initializeReachabilityStateIfNecessary(); - var index = label ? labelIndexMap[label.text] : ts.lastOrUndefined(implicitLabels); - if (index === undefined) { - // reference to unknown label or - // break/continue used outside of loops - return false; - } - var stateAtLabel = labelStack[index]; - labelStack[index] = stateAtLabel === 1 /* Uninitialized */ ? outerState : or(stateAtLabel, outerState); - return true; + function shouldReportErrorOnModuleDeclaration(node) { + var instanceState = getModuleInstanceState(node); + return instanceState === 1 /* Instantiated */ || (instanceState === 2 /* ConstEnumOnly */ && options.preserveConstEnums); } function checkUnreachable(node) { - switch (currentReachabilityState) { - case 4 /* Unreachable */: - var reportError = - // report error on all statements except empty ones - (ts.isStatement(node) && node.kind !== 200 /* EmptyStatement */) || - // report error on class declarations - node.kind === 220 /* ClassDeclaration */ || - // report error on instantiated modules or const-enums only modules if preserveConstEnums is set - (node.kind === 224 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node)) || - // report error on regular enums and const enums if preserveConstEnums is set - (node.kind === 223 /* EnumDeclaration */ && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums)); - if (reportError) { - currentReachabilityState = 8 /* ReportedUnreachable */; - // unreachable code is reported if - // - user has explicitly asked about it AND - // - statement is in not ambient context (statements in ambient context is already an error - // so we should not report extras) AND - // - node is not variable statement OR - // - node is block scoped variable statement OR - // - node is not block scoped variable statement and at least one variable declaration has initializer - // Rationale: we don't want to report errors on non-initialized var's since they are hoisted - // On the other side we do want to report errors on non-initialized 'lets' because of TDZ - var reportUnreachableCode = !options.allowUnreachableCode && - !ts.isInAmbientContext(node) && - (node.kind !== 199 /* VariableStatement */ || - ts.getCombinedNodeFlags(node.declarationList) & 3072 /* BlockScoped */ || - ts.forEach(node.declarationList.declarations, function (d) { return d.initializer; })); - if (reportUnreachableCode) { - errorOnFirstToken(node, ts.Diagnostics.Unreachable_code_detected); - } + if (!(currentFlow.flags & 1 /* Unreachable */)) { + return false; + } + if (currentFlow === unreachableFlow) { + var reportError = + // report error on all statements except empty ones + (ts.isStatement(node) && node.kind !== 201 /* EmptyStatement */) || + // report error on class declarations + node.kind === 221 /* ClassDeclaration */ || + // report error on instantiated modules or const-enums only modules if preserveConstEnums is set + (node.kind === 225 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node)) || + // report error on regular enums and const enums if preserveConstEnums is set + (node.kind === 224 /* EnumDeclaration */ && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums)); + if (reportError) { + currentFlow = reportedUnreachableFlow; + // unreachable code is reported if + // - user has explicitly asked about it AND + // - statement is in not ambient context (statements in ambient context is already an error + // so we should not report extras) AND + // - node is not variable statement OR + // - node is block scoped variable statement OR + // - node is not block scoped variable statement and at least one variable declaration has initializer + // Rationale: we don't want to report errors on non-initialized var's since they are hoisted + // On the other side we do want to report errors on non-initialized 'lets' because of TDZ + var reportUnreachableCode = !options.allowUnreachableCode && + !ts.isInAmbientContext(node) && + (node.kind !== 200 /* VariableStatement */ || + ts.getCombinedNodeFlags(node.declarationList) & 3072 /* BlockScoped */ || + ts.forEach(node.declarationList.declarations, function (d) { return d.initializer; })); + if (reportUnreachableCode) { + errorOnFirstToken(node, ts.Diagnostics.Unreachable_code_detected); } - case 8 /* ReportedUnreachable */: - return true; - default: - return false; + } } - function shouldReportErrorOnModuleDeclaration(node) { - var instanceState = getModuleInstanceState(node); - return instanceState === 1 /* Instantiated */ || (instanceState === 2 /* ConstEnumOnly */ && options.preserveConstEnums); - } - } - function initializeReachabilityStateIfNecessary() { - if (labelIndexMap) { - return; - } - currentReachabilityState = 2 /* Reachable */; - labelIndexMap = {}; - labelStack = []; - implicitLabels = []; + return true; } } })(ts || (ts = {})); @@ -14980,6 +15402,7 @@ var ts; var nextSymbolId = 1; var nextNodeId = 1; var nextMergeId = 1; + var nextFlowId = 1; function getNodeId(node) { if (!node.id) { node.id = nextNodeId; @@ -15043,11 +15466,13 @@ var ts; getIndexTypeOfType: getIndexTypeOfType, getBaseTypes: getBaseTypes, getReturnTypeOfSignature: getReturnTypeOfSignature, + getNonNullableType: getNonNullableType, getSymbolsInScope: getSymbolsInScope, getSymbolAtLocation: getSymbolAtLocation, getShorthandAssignmentValueSymbol: getShorthandAssignmentValueSymbol, getExportSpecifierLocalTargetSymbol: getExportSpecifierLocalTargetSymbol, getTypeAtLocation: getTypeOfNode, + getPropertySymbolOfDestructuringAssignment: getPropertySymbolOfDestructuringAssignment, typeToString: typeToString, getSymbolDisplayBuilder: getSymbolDisplayBuilder, symbolToString: symbolToString, @@ -15080,8 +15505,8 @@ var ts; var nullType = createIntrinsicType(64 /* Null */ | nullableWideningFlags, "null"); var emptyArrayElementType = createIntrinsicType(32 /* Undefined */ | 2097152 /* ContainsUndefinedOrNull */, "undefined"); var unknownType = createIntrinsicType(1 /* Any */, "unknown"); + var neverType = createIntrinsicType(134217728 /* Never */, "never"); var emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); - var emptyUnionType = emptyObjectType; var emptyGenericType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); emptyGenericType.instantiations = {}; var anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); @@ -15126,6 +15551,9 @@ var ts; var getGlobalThenableType; var jsxElementClassType; var deferredNodes; + var flowLoopStart = 0; + var flowLoopCount = 0; + var visitedFlowCount = 0; var tupleTypes = {}; var unionTypes = {}; var intersectionTypes = {}; @@ -15136,30 +15564,83 @@ var ts; var mergedSymbols = []; var symbolLinks = []; var nodeLinks = []; + var flowLoopCaches = []; + var flowLoopNodes = []; + var flowLoopKeys = []; + var flowLoopTypes = []; + var visitedFlowNodes = []; + var visitedFlowTypes = []; var potentialThisCollisions = []; var awaitedTypeStack = []; var diagnostics = ts.createDiagnosticCollection(); - var primitiveTypeInfo = { - "string": { - type: stringType, - flags: 258 /* StringLike */ - }, - "number": { - type: numberType, - flags: 132 /* NumberLike */ - }, - "boolean": { - type: booleanType, - flags: 8 /* Boolean */ - }, - "symbol": { - type: esSymbolType, - flags: 16777216 /* ESSymbol */ - }, - "undefined": { - type: undefinedType, - flags: 2097152 /* ContainsUndefinedOrNull */ - } + var TypeFacts; + (function (TypeFacts) { + TypeFacts[TypeFacts["None"] = 0] = "None"; + TypeFacts[TypeFacts["TypeofEQString"] = 1] = "TypeofEQString"; + TypeFacts[TypeFacts["TypeofEQNumber"] = 2] = "TypeofEQNumber"; + TypeFacts[TypeFacts["TypeofEQBoolean"] = 4] = "TypeofEQBoolean"; + TypeFacts[TypeFacts["TypeofEQSymbol"] = 8] = "TypeofEQSymbol"; + TypeFacts[TypeFacts["TypeofEQObject"] = 16] = "TypeofEQObject"; + TypeFacts[TypeFacts["TypeofEQFunction"] = 32] = "TypeofEQFunction"; + TypeFacts[TypeFacts["TypeofEQHostObject"] = 64] = "TypeofEQHostObject"; + TypeFacts[TypeFacts["TypeofNEString"] = 128] = "TypeofNEString"; + TypeFacts[TypeFacts["TypeofNENumber"] = 256] = "TypeofNENumber"; + TypeFacts[TypeFacts["TypeofNEBoolean"] = 512] = "TypeofNEBoolean"; + TypeFacts[TypeFacts["TypeofNESymbol"] = 1024] = "TypeofNESymbol"; + TypeFacts[TypeFacts["TypeofNEObject"] = 2048] = "TypeofNEObject"; + TypeFacts[TypeFacts["TypeofNEFunction"] = 4096] = "TypeofNEFunction"; + TypeFacts[TypeFacts["TypeofNEHostObject"] = 8192] = "TypeofNEHostObject"; + TypeFacts[TypeFacts["EQUndefined"] = 16384] = "EQUndefined"; + TypeFacts[TypeFacts["EQNull"] = 32768] = "EQNull"; + TypeFacts[TypeFacts["EQUndefinedOrNull"] = 65536] = "EQUndefinedOrNull"; + TypeFacts[TypeFacts["NEUndefined"] = 131072] = "NEUndefined"; + TypeFacts[TypeFacts["NENull"] = 262144] = "NENull"; + TypeFacts[TypeFacts["NEUndefinedOrNull"] = 524288] = "NEUndefinedOrNull"; + TypeFacts[TypeFacts["Truthy"] = 1048576] = "Truthy"; + TypeFacts[TypeFacts["Falsy"] = 2097152] = "Falsy"; + TypeFacts[TypeFacts["All"] = 4194303] = "All"; + // The following members encode facts about particular kinds of types for use in the getTypeFacts function. + // The presence of a particular fact means that the given test is true for some (and possibly all) values + // of that kind of type. + TypeFacts[TypeFacts["StringStrictFacts"] = 4079361] = "StringStrictFacts"; + TypeFacts[TypeFacts["StringFacts"] = 4194049] = "StringFacts"; + TypeFacts[TypeFacts["NumberStrictFacts"] = 4079234] = "NumberStrictFacts"; + TypeFacts[TypeFacts["NumberFacts"] = 4193922] = "NumberFacts"; + TypeFacts[TypeFacts["BooleanStrictFacts"] = 4078980] = "BooleanStrictFacts"; + TypeFacts[TypeFacts["BooleanFacts"] = 4193668] = "BooleanFacts"; + TypeFacts[TypeFacts["SymbolStrictFacts"] = 1981320] = "SymbolStrictFacts"; + TypeFacts[TypeFacts["SymbolFacts"] = 4193160] = "SymbolFacts"; + TypeFacts[TypeFacts["ObjectStrictFacts"] = 1972176] = "ObjectStrictFacts"; + TypeFacts[TypeFacts["ObjectFacts"] = 4184016] = "ObjectFacts"; + TypeFacts[TypeFacts["FunctionStrictFacts"] = 1970144] = "FunctionStrictFacts"; + TypeFacts[TypeFacts["FunctionFacts"] = 4181984] = "FunctionFacts"; + TypeFacts[TypeFacts["UndefinedFacts"] = 2457472] = "UndefinedFacts"; + TypeFacts[TypeFacts["NullFacts"] = 2340752] = "NullFacts"; + })(TypeFacts || (TypeFacts = {})); + var typeofEQFacts = { + "string": 1 /* TypeofEQString */, + "number": 2 /* TypeofEQNumber */, + "boolean": 4 /* TypeofEQBoolean */, + "symbol": 8 /* TypeofEQSymbol */, + "undefined": 16384 /* EQUndefined */, + "object": 16 /* TypeofEQObject */, + "function": 32 /* TypeofEQFunction */ + }; + var typeofNEFacts = { + "string": 128 /* TypeofNEString */, + "number": 256 /* TypeofNENumber */, + "boolean": 512 /* TypeofNEBoolean */, + "symbol": 1024 /* TypeofNESymbol */, + "undefined": 131072 /* NEUndefined */, + "object": 2048 /* TypeofNEObject */, + "function": 4096 /* TypeofNEFunction */ + }; + var typeofTypesByName = { + "string": stringType, + "number": numberType, + "boolean": booleanType, + "symbol": esSymbolType, + "undefined": undefinedType }; var jsxElementType; /** Things we lazy load from the JSX namespace */ @@ -15275,7 +15756,7 @@ var ts; target.flags |= source.flags; if (source.valueDeclaration && (!target.valueDeclaration || - (target.valueDeclaration.kind === 224 /* ModuleDeclaration */ && source.valueDeclaration.kind !== 224 /* ModuleDeclaration */))) { + (target.valueDeclaration.kind === 225 /* ModuleDeclaration */ && source.valueDeclaration.kind !== 225 /* ModuleDeclaration */))) { // other kinds of value declarations take precedence over modules target.valueDeclaration = source.valueDeclaration; } @@ -15344,7 +15825,11 @@ var ts; } else { // find a module that about to be augmented - var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found); + // do not validate names of augmentations that are defined in ambient context + var moduleNotFoundError = !ts.isInAmbientContext(moduleName.parent.parent) + ? ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found + : undefined; + var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, moduleNotFoundError); if (!mainModule) { return; } @@ -15388,7 +15873,7 @@ var ts; return nodeLinks[nodeId] || (nodeLinks[nodeId] = {}); } function isGlobalSourceFile(node) { - return node.kind === 255 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node); + return node.kind === 256 /* SourceFile */ && !ts.isExternalOrCommonJsModule(node); } function getSymbol(symbols, name, meaning) { if (meaning && ts.hasProperty(symbols, name)) { @@ -15437,7 +15922,7 @@ var ts; if (declaration.pos <= usage.pos) { // declaration is before usage // still might be illegal if usage is in the initializer of the variable declaration - return declaration.kind !== 217 /* VariableDeclaration */ || + return declaration.kind !== 218 /* VariableDeclaration */ || !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage); } // declaration is after usage @@ -15445,18 +15930,26 @@ var ts; return isUsedInFunctionOrNonStaticProperty(declaration, usage); function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) { var container = ts.getEnclosingBlockScopeContainer(declaration); - if (declaration.parent.parent.kind === 199 /* VariableStatement */ || - declaration.parent.parent.kind === 205 /* ForStatement */) { - // variable statement/for statement case, - // use site should not be inside variable declaration (initializer of declaration or binding element) - return isSameScopeDescendentOf(usage, declaration, container); + switch (declaration.parent.parent.kind) { + case 200 /* VariableStatement */: + case 206 /* ForStatement */: + case 208 /* ForOfStatement */: + // variable statement/for/for-of statement case, + // use site should not be inside variable declaration (initializer of declaration or binding element) + if (isSameScopeDescendentOf(usage, declaration, container)) { + return true; + } + break; } - else if (declaration.parent.parent.kind === 207 /* ForOfStatement */ || - declaration.parent.parent.kind === 206 /* ForInStatement */) { - // ForIn/ForOf case - use site should not be used in expression part - var expression = declaration.parent.parent.expression; - return isSameScopeDescendentOf(usage, expression, container); + switch (declaration.parent.parent.kind) { + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + // ForIn/ForOf case - use site should not be used in expression part + if (isSameScopeDescendentOf(usage, declaration.parent.parent.expression, container)) { + return true; + } } + return false; } function isUsedInFunctionOrNonStaticProperty(declaration, usage) { var container = ts.getEnclosingBlockScopeContainer(declaration); @@ -15469,7 +15962,7 @@ var ts; return true; } var initializerOfNonStaticProperty = current.parent && - current.parent.kind === 144 /* PropertyDeclaration */ && + current.parent.kind === 145 /* PropertyDeclaration */ && (current.parent.flags & 32 /* Static */) === 0 && current.parent.initializer === current; if (initializerOfNonStaticProperty) { @@ -15501,11 +15994,11 @@ var ts; // - parameters are only in the scope of function body // This restriction does not apply to JSDoc comment types because they are parented // at a higher level than type parameters would normally be - if (meaning & result.flags & 793056 /* Type */ && lastLocation.kind !== 272 /* JSDocComment */) { + if (meaning & result.flags & 793056 /* Type */ && lastLocation.kind !== 273 /* JSDocComment */) { useResult = result.flags & 262144 /* TypeParameter */ ? lastLocation === location.type || - lastLocation.kind === 141 /* Parameter */ || - lastLocation.kind === 140 /* TypeParameter */ + lastLocation.kind === 142 /* Parameter */ || + lastLocation.kind === 141 /* TypeParameter */ : false; } if (meaning & 107455 /* Value */ && result.flags & 1 /* FunctionScopedVariable */) { @@ -15514,9 +16007,9 @@ var ts; // however it is detected separately when checking initializers of parameters // to make sure that they reference no variables declared after them. useResult = - lastLocation.kind === 141 /* Parameter */ || + lastLocation.kind === 142 /* Parameter */ || (lastLocation === location.type && - result.valueDeclaration.kind === 141 /* Parameter */); + result.valueDeclaration.kind === 142 /* Parameter */); } } if (useResult) { @@ -15528,12 +16021,12 @@ var ts; } } switch (location.kind) { - case 255 /* SourceFile */: + case 256 /* SourceFile */: if (!ts.isExternalOrCommonJsModule(location)) break; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: var moduleExports = getSymbolOfNode(location).exports; - if (location.kind === 255 /* SourceFile */ || ts.isAmbientModule(location)) { + if (location.kind === 256 /* SourceFile */ || ts.isAmbientModule(location)) { // It's an external module. First see if the module has an export default and if the local // name of that export default matches. if (result = moduleExports["default"]) { @@ -15556,7 +16049,7 @@ var ts; // which is not the desired behavior. if (ts.hasProperty(moduleExports, name) && moduleExports[name].flags === 8388608 /* Alias */ && - ts.getDeclarationOfKind(moduleExports[name], 237 /* ExportSpecifier */)) { + ts.getDeclarationOfKind(moduleExports[name], 238 /* ExportSpecifier */)) { break; } } @@ -15564,13 +16057,13 @@ var ts; break loop; } break; - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & 8 /* EnumMember */)) { break loop; } break; - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: // TypeScript 1.0 spec (April 2014): 8.4.1 // Initializer expressions for instance member variables are evaluated in the scope // of the class constructor body but are not permitted to reference parameters or @@ -15587,9 +16080,9 @@ var ts; } } break; - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 221 /* InterfaceDeclaration */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: if (result = getSymbol(getSymbolOfNode(location).members, name, meaning & 793056 /* Type */)) { if (lastLocation && lastLocation.flags & 32 /* Static */) { // TypeScript 1.0 spec (April 2014): 3.4.1 @@ -15600,7 +16093,7 @@ var ts; } break loop; } - if (location.kind === 191 /* ClassExpression */ && meaning & 32 /* Class */) { + if (location.kind === 192 /* ClassExpression */ && meaning & 32 /* Class */) { var className = location.name; if (className && name === className.text) { result = location.symbol; @@ -15616,9 +16109,9 @@ var ts; // [foo()]() { } // <-- Reference to T from class's own computed property // } // - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: grandparent = location.parent.parent; - if (ts.isClassLike(grandparent) || grandparent.kind === 221 /* InterfaceDeclaration */) { + if (ts.isClassLike(grandparent) || grandparent.kind === 222 /* InterfaceDeclaration */) { // A reference to this grandparent's type parameters would be an error if (result = getSymbol(getSymbolOfNode(grandparent).members, name, meaning & 793056 /* Type */)) { error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type); @@ -15626,19 +16119,19 @@ var ts; } } break; - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 219 /* FunctionDeclaration */: - case 179 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 180 /* ArrowFunction */: if (meaning & 3 /* Variable */ && name === "arguments") { result = argumentsSymbol; break loop; } break; - case 178 /* FunctionExpression */: + case 179 /* FunctionExpression */: if (meaning & 3 /* Variable */ && name === "arguments") { result = argumentsSymbol; break loop; @@ -15651,7 +16144,7 @@ var ts; } } break; - case 142 /* Decorator */: + case 143 /* Decorator */: // Decorators are resolved at the class declaration. Resolving at the parameter // or member would result in looking up locals in the method. // @@ -15660,7 +16153,7 @@ var ts; // method(@y x, y) {} // <-- decorator y should be resolved at the class declaration, not the parameter. // } // - if (location.parent && location.parent.kind === 141 /* Parameter */) { + if (location.parent && location.parent.kind === 142 /* Parameter */) { location = location.parent; } // @@ -15754,7 +16247,7 @@ var ts; // Block-scoped variables cannot be used before their definition var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) ? d : undefined; }); ts.Debug.assert(declaration !== undefined, "Block-scoped variable declaration is undefined"); - if (!isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 217 /* VariableDeclaration */), errorLocation)) { + if (!isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 218 /* VariableDeclaration */), errorLocation)) { error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(declaration.name)); } } @@ -15775,10 +16268,10 @@ var ts; } function getAnyImportSyntax(node) { if (ts.isAliasSymbolDeclaration(node)) { - if (node.kind === 228 /* ImportEqualsDeclaration */) { + if (node.kind === 229 /* ImportEqualsDeclaration */) { return node; } - while (node && node.kind !== 229 /* ImportDeclaration */) { + while (node && node.kind !== 230 /* ImportDeclaration */) { node = node.parent; } return node; @@ -15788,7 +16281,7 @@ var ts; return ts.forEach(symbol.declarations, function (d) { return ts.isAliasSymbolDeclaration(d) ? d : undefined; }); } function getTargetOfImportEqualsDeclaration(node) { - if (node.moduleReference.kind === 239 /* ExternalModuleReference */) { + if (node.moduleReference.kind === 240 /* ExternalModuleReference */) { return resolveExternalModuleSymbol(resolveExternalModuleName(node, ts.getExternalModuleImportEqualsDeclarationExpression(node))); } return getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, node); @@ -15875,6 +16368,8 @@ var ts; else { symbolFromVariable = getPropertyOfVariable(targetSymbol, name_9.text); } + // if symbolFromVariable is export - get its final target + symbolFromVariable = resolveSymbol(symbolFromVariable); var symbolFromModule = getExportOfModule(targetSymbol, name_9.text); var symbol = symbolFromModule && symbolFromVariable ? combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) : @@ -15902,19 +16397,19 @@ var ts; } function getTargetOfAliasDeclaration(node) { switch (node.kind) { - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: return getTargetOfImportEqualsDeclaration(node); - case 230 /* ImportClause */: + case 231 /* ImportClause */: return getTargetOfImportClause(node); - case 231 /* NamespaceImport */: + case 232 /* NamespaceImport */: return getTargetOfNamespaceImport(node); - case 233 /* ImportSpecifier */: + case 234 /* ImportSpecifier */: return getTargetOfImportSpecifier(node); - case 237 /* ExportSpecifier */: + case 238 /* ExportSpecifier */: return getTargetOfExportSpecifier(node); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return getTargetOfExportAssignment(node); - case 227 /* GlobalModuleExportDeclaration */: + case 228 /* GlobalModuleExportDeclaration */: return getTargetOfGlobalModuleExportDeclaration(node); } } @@ -15944,8 +16439,8 @@ var ts; var symbol = getSymbolOfNode(node); var target = resolveAlias(symbol); if (target) { - var markAlias = (target === unknownSymbol && compilerOptions.isolatedModules) || - (target !== unknownSymbol && (target.flags & 107455 /* Value */) && !isConstEnumOrConstEnumOnlyModule(target)); + var markAlias = target === unknownSymbol || + ((target.flags & 107455 /* Value */) && !isConstEnumOrConstEnumOnlyModule(target)); if (markAlias) { markAliasSymbolAsReferenced(symbol); } @@ -15959,11 +16454,11 @@ var ts; if (!links.referenced) { links.referenced = true; var node = getDeclarationOfAliasSymbol(symbol); - if (node.kind === 234 /* ExportAssignment */) { + if (node.kind === 235 /* ExportAssignment */) { // export default checkExpressionCached(node.expression); } - else if (node.kind === 237 /* ExportSpecifier */) { + else if (node.kind === 238 /* ExportSpecifier */) { // export { } or export { as foo } checkExpressionCached(node.propertyName || node.name); } @@ -15976,7 +16471,7 @@ var ts; // This function is only for imports with entity names function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, importDeclaration) { if (!importDeclaration) { - importDeclaration = ts.getAncestor(entityName, 228 /* ImportEqualsDeclaration */); + importDeclaration = ts.getAncestor(entityName, 229 /* ImportEqualsDeclaration */); ts.Debug.assert(importDeclaration !== undefined); } // There are three things we might try to look for. In the following examples, @@ -15989,13 +16484,13 @@ var ts; entityName = entityName.parent; } // Check for case 1 and 3 in the above example - if (entityName.kind === 69 /* Identifier */ || entityName.parent.kind === 138 /* QualifiedName */) { + if (entityName.kind === 69 /* Identifier */ || entityName.parent.kind === 139 /* QualifiedName */) { return resolveEntityName(entityName, 1536 /* Namespace */); } else { // Case 2 in above example // entityName.kind could be a QualifiedName or a Missing identifier - ts.Debug.assert(entityName.parent.kind === 228 /* ImportEqualsDeclaration */); + ts.Debug.assert(entityName.parent.kind === 229 /* ImportEqualsDeclaration */); return resolveEntityName(entityName, 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */); } } @@ -16015,9 +16510,9 @@ var ts; return undefined; } } - else if (name.kind === 138 /* QualifiedName */ || name.kind === 171 /* PropertyAccessExpression */) { - var left = name.kind === 138 /* QualifiedName */ ? name.left : name.expression; - var right = name.kind === 138 /* QualifiedName */ ? name.right : name.name; + else if (name.kind === 139 /* QualifiedName */ || name.kind === 172 /* PropertyAccessExpression */) { + var left = name.kind === 139 /* QualifiedName */ ? name.left : name.expression; + var right = name.kind === 139 /* QualifiedName */ ? name.right : name.name; var namespace = resolveEntityName(left, 1536 /* Namespace */, ignoreErrors); if (!namespace || namespace === unknownSymbol || ts.nodeIsMissing(right)) { return undefined; @@ -16203,7 +16698,7 @@ var ts; var members = node.members; for (var _i = 0, members_1 = members; _i < members_1.length; _i++) { var member = members_1[_i]; - if (member.kind === 147 /* Constructor */ && ts.nodeIsPresent(member.body)) { + if (member.kind === 148 /* Constructor */ && ts.nodeIsPresent(member.body)) { return member; } } @@ -16274,11 +16769,11 @@ var ts; } } switch (location_1.kind) { - case 255 /* SourceFile */: + case 256 /* SourceFile */: if (!ts.isExternalOrCommonJsModule(location_1)) { break; } - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: if (result = callback(getSymbolOfNode(location_1).exports)) { return result; } @@ -16319,7 +16814,7 @@ var ts; return ts.forEachValue(symbols, function (symbolFromSymbolTable) { if (symbolFromSymbolTable.flags & 8388608 /* Alias */ && symbolFromSymbolTable.name !== "export=" - && !ts.getDeclarationOfKind(symbolFromSymbolTable, 237 /* ExportSpecifier */)) { + && !ts.getDeclarationOfKind(symbolFromSymbolTable, 238 /* ExportSpecifier */)) { if (!useOnlyExternalAliasing || // Is this external alias, then use it to name ts.forEach(symbolFromSymbolTable.declarations, ts.isExternalModuleImportEqualsDeclaration)) { @@ -16358,7 +16853,7 @@ var ts; return true; } // Qualify if the symbol from symbol table has same meaning as expected - symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 237 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable; + symbolFromSymbolTable = (symbolFromSymbolTable.flags & 8388608 /* Alias */ && !ts.getDeclarationOfKind(symbolFromSymbolTable, 238 /* ExportSpecifier */)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable; if (symbolFromSymbolTable.flags & meaning) { qualify = true; return true; @@ -16373,10 +16868,10 @@ var ts; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; switch (declaration.kind) { - case 144 /* PropertyDeclaration */: - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 145 /* PropertyDeclaration */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: continue; default: return false; @@ -16449,7 +16944,7 @@ var ts; } } function hasExternalModuleSymbol(declaration) { - return ts.isAmbientModule(declaration) || (declaration.kind === 255 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration)); + return ts.isAmbientModule(declaration) || (declaration.kind === 256 /* SourceFile */ && ts.isExternalOrCommonJsModule(declaration)); } function hasVisibleDeclarations(symbol) { var aliasesToMakeVisible; @@ -16485,12 +16980,12 @@ var ts; function isEntityNameVisible(entityName, enclosingDeclaration) { // get symbol of the first identifier of the entityName var meaning; - if (entityName.parent.kind === 157 /* TypeQuery */ || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { + if (entityName.parent.kind === 158 /* TypeQuery */ || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { // Typeof value meaning = 107455 /* Value */ | 1048576 /* ExportValue */; } - else if (entityName.kind === 138 /* QualifiedName */ || entityName.kind === 171 /* PropertyAccessExpression */ || - entityName.parent.kind === 228 /* ImportEqualsDeclaration */) { + else if (entityName.kind === 139 /* QualifiedName */ || entityName.kind === 172 /* PropertyAccessExpression */ || + entityName.parent.kind === 229 /* ImportEqualsDeclaration */) { // Left identifier from type reference or TypeAlias // Entity name of the import declaration meaning = 1536 /* Namespace */; @@ -16561,10 +17056,10 @@ var ts; function getTypeAliasForTypeLiteral(type) { if (type.symbol && type.symbol.flags & 2048 /* TypeLiteral */) { var node = type.symbol.declarations[0].parent; - while (node.kind === 163 /* ParenthesizedType */) { + while (node.kind === 164 /* ParenthesizedType */) { node = node.parent; } - if (node.kind === 222 /* TypeAliasDeclaration */) { + if (node.kind === 223 /* TypeAliasDeclaration */) { return getSymbolOfNode(node); } } @@ -16572,7 +17067,7 @@ var ts; } function isTopLevelInExternalModuleAugmentation(node) { return node && node.parent && - node.parent.kind === 225 /* ModuleBlock */ && + node.parent.kind === 226 /* ModuleBlock */ && ts.isExternalModuleAugmentation(node.parent.parent); } function getSymbolDisplayBuilder() { @@ -16583,10 +17078,10 @@ var ts; return ts.declarationNameToString(declaration.name); } switch (declaration.kind) { - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: return "(Anonymous class)"; - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return "(Anonymous function)"; } } @@ -16594,11 +17089,35 @@ var ts; } /** * Writes only the name of the symbol out to the writer. Uses the original source text - * for the name of the symbol if it is available to match how the user inputted the name. + * for the name of the symbol if it is available to match how the user wrote the name. */ function appendSymbolNameOnly(symbol, writer) { writer.writeSymbol(getNameOfSymbol(symbol), symbol); } + /** + * Writes a property access or element access with the name of the symbol out to the writer. + * Uses the original source text for the name of the symbol if it is available to match how the user wrote the name, + * ensuring that any names written with literals use element accesses. + */ + function appendPropertyOrElementAccessForSymbol(symbol, writer) { + var symbolName = getNameOfSymbol(symbol); + var firstChar = symbolName.charCodeAt(0); + var needsElementAccess = !ts.isIdentifierStart(firstChar, languageVersion); + if (needsElementAccess) { + writePunctuation(writer, 19 /* OpenBracketToken */); + if (ts.isSingleOrDoubleQuote(firstChar)) { + writer.writeStringLiteral(symbolName); + } + else { + writer.writeSymbol(symbolName, symbol); + } + writePunctuation(writer, 20 /* CloseBracketToken */); + } + else { + writePunctuation(writer, 21 /* DotToken */); + writer.writeSymbol(symbolName, symbol); + } + } /** * Enclosing declaration is optional when we don't want to get qualified name in the enclosing declaration scope * Meaning needs to be specified if the enclosing declaration is given @@ -16616,10 +17135,12 @@ var ts; buildTypeParameterDisplayFromSymbol(parentSymbol, writer, enclosingDeclaration); } } - writePunctuation(writer, 21 /* DotToken */); + appendPropertyOrElementAccessForSymbol(symbol, writer); + } + else { + appendSymbolNameOnly(symbol, writer); } parentSymbol = symbol; - appendSymbolNameOnly(symbol, writer); } // const the writer know we just wrote out a symbol. The declaration emitter writer uses // this to determine if an import it has previously seen (and not written out) needs @@ -16673,7 +17194,7 @@ var ts; return writeType(type, globalFlags); function writeType(type, flags) { // Write undefined/null type as any - if (type.flags & 16777343 /* Intrinsic */) { + if (type.flags & 150995071 /* Intrinsic */) { // Special handling for unknown / resolving types, they should show up as any and not unknown or __resolving writer.writeKeyword(!(globalFlags & 16 /* WriteOwnNameForAnyLike */) && isTypeAny(type) ? "any" @@ -16733,7 +17254,7 @@ var ts; } if (pos < end) { writePunctuation(writer, 25 /* LessThanToken */); - writeType(typeArguments[pos], 0 /* None */); + writeType(typeArguments[pos], 256 /* InFirstTypeArgument */); pos++; while (pos < end) { writePunctuation(writer, 24 /* CommaToken */); @@ -16762,14 +17283,14 @@ var ts; while (i < length_1) { // Find group of type arguments for type parameters with the same declaring container. var start = i; - var parent_5 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); + var parent_6 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); do { i++; - } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_5); + } while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent_6); // When type parameters are their own type arguments for the whole group (i.e. we have // the default outer type arguments), we don't show the group. if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) { - writeSymbolTypeReference(parent_5, typeArguments, start, i, flags); + writeSymbolTypeReference(parent_6, typeArguments, start, i, flags); writePunctuation(writer, 21 /* DotToken */); } } @@ -16797,10 +17318,10 @@ var ts; if (symbol) { // Always use 'typeof T' for type of class, enum, and module objects if (symbol.flags & (32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) { - writeTypeofSymbol(type, flags); + writeTypeOfSymbol(type, flags); } else if (shouldWriteTypeOfFunctionSymbol()) { - writeTypeofSymbol(type, flags); + writeTypeOfSymbol(type, flags); } else if (ts.contains(symbolStack, symbol)) { // If type is an anonymous type literal in a type alias declaration, use type alias name @@ -16835,7 +17356,7 @@ var ts; var isNonLocalFunctionSymbol = !!(symbol.flags & 16 /* Function */) && (symbol.parent || ts.forEach(symbol.declarations, function (declaration) { - return declaration.parent.kind === 255 /* SourceFile */ || declaration.parent.kind === 225 /* ModuleBlock */; + return declaration.parent.kind === 256 /* SourceFile */ || declaration.parent.kind === 226 /* ModuleBlock */; })); if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { // typeof is allowed only for static/non local functions @@ -16844,7 +17365,7 @@ var ts; } } } - function writeTypeofSymbol(type, typeFormatFlags) { + function writeTypeOfSymbol(type, typeFormatFlags) { writeKeyword(writer, 101 /* TypeOfKeyword */); writeSpace(writer); buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455 /* Value */, 0 /* None */, typeFormatFlags); @@ -16852,7 +17373,7 @@ var ts; function writeIndexSignature(info, keyword) { if (info) { if (info.isReadonly) { - writeKeyword(writer, 127 /* ReadonlyKeyword */); + writeKeyword(writer, 128 /* ReadonlyKeyword */); writeSpace(writer); } writePunctuation(writer, 19 /* OpenBracketToken */); @@ -16870,7 +17391,7 @@ var ts; } function writePropertyWithModifiers(prop) { if (isReadonlySymbol(prop)) { - writeKeyword(writer, 127 /* ReadonlyKeyword */); + writeKeyword(writer, 128 /* ReadonlyKeyword */); writeSpace(writer); } buildSymbolDisplay(prop, writer); @@ -16878,6 +17399,18 @@ var ts; writePunctuation(writer, 53 /* QuestionToken */); } } + function shouldAddParenthesisAroundFunctionType(callSignature, flags) { + if (flags & 64 /* InElementType */) { + return true; + } + else if (flags & 256 /* InFirstTypeArgument */) { + // Add parenthesis around function type for the first type argument to avoid ambiguity + var typeParameters = callSignature.target && (flags & 32 /* WriteTypeArgumentsOfSignature */) ? + callSignature.target.typeParameters : callSignature.typeParameters; + return typeParameters && typeParameters.length !== 0; + } + return false; + } function writeLiteralType(type, flags) { var resolved = resolveStructuredTypeMembers(type); if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) { @@ -16887,11 +17420,12 @@ var ts; return; } if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { - if (flags & 64 /* InElementType */) { + var parenthesizeSignature = shouldAddParenthesisAroundFunctionType(resolved.callSignatures[0], flags); + if (parenthesizeSignature) { writePunctuation(writer, 17 /* OpenParenToken */); } buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 8 /* WriteArrowStyleSignature */, /*kind*/ undefined, symbolStack); - if (flags & 64 /* InElementType */) { + if (parenthesizeSignature) { writePunctuation(writer, 18 /* CloseParenToken */); } return; @@ -16926,8 +17460,8 @@ var ts; writePunctuation(writer, 23 /* SemicolonToken */); writer.writeLine(); } - writeIndexSignature(resolved.stringIndexInfo, 131 /* StringKeyword */); - writeIndexSignature(resolved.numberIndexInfo, 129 /* NumberKeyword */); + writeIndexSignature(resolved.stringIndexInfo, 132 /* StringKeyword */); + writeIndexSignature(resolved.numberIndexInfo, 130 /* NumberKeyword */); for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) { var p = _e[_d]; var t = getTypeOfSymbol(p); @@ -16991,12 +17525,12 @@ var ts; } function buildBindingPatternDisplay(bindingPattern, writer, enclosingDeclaration, flags, symbolStack) { // We have to explicitly emit square bracket and bracket because these tokens are not stored inside the node. - if (bindingPattern.kind === 166 /* ObjectBindingPattern */) { + if (bindingPattern.kind === 167 /* ObjectBindingPattern */) { writePunctuation(writer, 15 /* OpenBraceToken */); buildDisplayForCommaSeparatedList(bindingPattern.elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); }); writePunctuation(writer, 16 /* CloseBraceToken */); } - else if (bindingPattern.kind === 167 /* ArrayBindingPattern */) { + else if (bindingPattern.kind === 168 /* ArrayBindingPattern */) { writePunctuation(writer, 19 /* OpenBracketToken */); var elements = bindingPattern.elements; buildDisplayForCommaSeparatedList(elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); }); @@ -17007,10 +17541,10 @@ var ts; } } function buildBindingElementDisplay(bindingElement, writer, enclosingDeclaration, flags, symbolStack) { - if (bindingElement.kind === 192 /* OmittedExpression */) { + if (bindingElement.kind === 193 /* OmittedExpression */) { return; } - ts.Debug.assert(bindingElement.kind === 168 /* BindingElement */); + ts.Debug.assert(bindingElement.kind === 169 /* BindingElement */); if (bindingElement.propertyName) { writer.writeSymbol(ts.getTextOfNode(bindingElement.propertyName), bindingElement.symbol); writePunctuation(writer, 54 /* ColonToken */); @@ -17045,12 +17579,14 @@ var ts; function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration, flags, symbolStack) { if (typeParameters && typeParameters.length) { writePunctuation(writer, 25 /* LessThanToken */); + var flags_1 = 256 /* InFirstTypeArgument */; for (var i = 0; i < typeParameters.length; i++) { if (i > 0) { writePunctuation(writer, 24 /* CommaToken */); writeSpace(writer); + flags_1 = 0 /* None */; } - buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, 0 /* None */); + buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, flags_1); } writePunctuation(writer, 27 /* GreaterThanToken */); } @@ -17141,74 +17677,74 @@ var ts; return false; function determineIfDeclarationIsVisible() { switch (node.kind) { - case 168 /* BindingElement */: + case 169 /* BindingElement */: return isDeclarationVisible(node.parent.parent); - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: if (ts.isBindingPattern(node.name) && !node.name.elements.length) { // If the binding pattern is empty, this variable declaration is not visible return false; } // Otherwise fall through - case 224 /* ModuleDeclaration */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 219 /* FunctionDeclaration */: - case 223 /* EnumDeclaration */: - case 228 /* ImportEqualsDeclaration */: + case 225 /* ModuleDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 220 /* FunctionDeclaration */: + case 224 /* EnumDeclaration */: + case 229 /* ImportEqualsDeclaration */: // external module augmentation is always visible if (ts.isExternalModuleAugmentation(node)) { return true; } - var parent_6 = getDeclarationContainer(node); + var parent_7 = getDeclarationContainer(node); // If the node is not exported or it is not ambient module element (except import declaration) if (!(ts.getCombinedNodeFlags(node) & 1 /* Export */) && - !(node.kind !== 228 /* ImportEqualsDeclaration */ && parent_6.kind !== 255 /* SourceFile */ && ts.isInAmbientContext(parent_6))) { - return isGlobalSourceFile(parent_6); + !(node.kind !== 229 /* ImportEqualsDeclaration */ && parent_7.kind !== 256 /* SourceFile */ && ts.isInAmbientContext(parent_7))) { + return isGlobalSourceFile(parent_7); } // Exported members/ambient module elements (exception import declaration) are visible if parent is visible - return isDeclarationVisible(parent_6); - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + return isDeclarationVisible(parent_7); + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: if (node.flags & (8 /* Private */ | 16 /* Protected */)) { // Private/protected properties/methods are not visible return false; } // Public properties/methods are visible if its parents are visible, so const it fall into next case statement - case 147 /* Constructor */: - case 151 /* ConstructSignature */: - case 150 /* CallSignature */: - case 152 /* IndexSignature */: - case 141 /* Parameter */: - case 225 /* ModuleBlock */: - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 158 /* TypeLiteral */: - case 154 /* TypeReference */: - case 159 /* ArrayType */: - case 160 /* TupleType */: - case 161 /* UnionType */: - case 162 /* IntersectionType */: - case 163 /* ParenthesizedType */: + case 148 /* Constructor */: + case 152 /* ConstructSignature */: + case 151 /* CallSignature */: + case 153 /* IndexSignature */: + case 142 /* Parameter */: + case 226 /* ModuleBlock */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 159 /* TypeLiteral */: + case 155 /* TypeReference */: + case 160 /* ArrayType */: + case 161 /* TupleType */: + case 162 /* UnionType */: + case 163 /* IntersectionType */: + case 164 /* ParenthesizedType */: return isDeclarationVisible(node.parent); // Default binding, import specifier and namespace import is visible // only on demand so by default it is not visible - case 230 /* ImportClause */: - case 231 /* NamespaceImport */: - case 233 /* ImportSpecifier */: + case 231 /* ImportClause */: + case 232 /* NamespaceImport */: + case 234 /* ImportSpecifier */: return false; // Type parameters are always visible - case 140 /* TypeParameter */: + case 141 /* TypeParameter */: // Source file is always visible - case 255 /* SourceFile */: + case 256 /* SourceFile */: return true; // Export assignments do not create name bindings outside the module - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return false; default: return false; @@ -17217,10 +17753,10 @@ var ts; } function collectLinkedAliases(node) { var exportSymbol; - if (node.parent && node.parent.kind === 234 /* ExportAssignment */) { + if (node.parent && node.parent.kind === 235 /* ExportAssignment */) { exportSymbol = resolveName(node.parent, node.text, 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */ | 8388608 /* Alias */, ts.Diagnostics.Cannot_find_name_0, node); } - else if (node.parent.kind === 237 /* ExportSpecifier */) { + else if (node.parent.kind === 238 /* ExportSpecifier */) { var exportSpecifier = node.parent; exportSymbol = exportSpecifier.parent.parent.moduleSpecifier ? getExternalModuleMember(exportSpecifier.parent.parent, exportSpecifier) : @@ -17242,7 +17778,7 @@ var ts; // Add the referenced top container visible var internalModuleReference = declaration.moduleReference; var firstIdentifier = getFirstIdentifier(internalModuleReference); - var importSymbol = resolveName(declaration, firstIdentifier.text, 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */, ts.Diagnostics.Cannot_find_name_0, firstIdentifier); + var importSymbol = resolveName(declaration, firstIdentifier.text, 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */, undefined, undefined); if (importSymbol) { buildVisibleNodeList(importSymbol.declarations); } @@ -17314,12 +17850,12 @@ var ts; node = ts.getRootDeclaration(node); while (node) { switch (node.kind) { - case 217 /* VariableDeclaration */: - case 218 /* VariableDeclarationList */: - case 233 /* ImportSpecifier */: - case 232 /* NamedImports */: - case 231 /* NamespaceImport */: - case 230 /* ImportClause */: + case 218 /* VariableDeclaration */: + case 219 /* VariableDeclarationList */: + case 234 /* ImportSpecifier */: + case 233 /* NamedImports */: + case 232 /* NamespaceImport */: + case 231 /* ImportClause */: node = node.parent; break; default: @@ -17356,7 +17892,7 @@ var ts; case 9 /* StringLiteral */: case 8 /* NumericLiteral */: return name.text; - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: if (ts.isStringOrNumericLiteral(name.expression.kind)) { return name.expression.text; } @@ -17364,7 +17900,7 @@ var ts; return undefined; } function isComputedNonLiteralName(name) { - return name.kind === 139 /* ComputedPropertyName */ && !ts.isStringOrNumericLiteral(name.expression.kind); + return name.kind === 140 /* ComputedPropertyName */ && !ts.isStringOrNumericLiteral(name.expression.kind); } /** Return the inferred type for a binding element */ function getTypeForBindingElement(declaration) { @@ -17384,7 +17920,7 @@ var ts; return parentType; } var type; - if (pattern.kind === 166 /* ObjectBindingPattern */) { + if (pattern.kind === 167 /* ObjectBindingPattern */) { // Use explicitly specified property name ({ p: xxx } form), or otherwise the implied name ({ p } form) var name_10 = declaration.propertyName || declaration.name; if (isComputedNonLiteralName(name_10)) { @@ -17434,7 +17970,7 @@ var ts; // In strict null checking mode, if a default value of a non-undefined type is specified, remove // undefined from the final type. if (strictNullChecks && declaration.initializer && !(getNullableKind(checkExpressionCached(declaration.initializer)) & 32 /* Undefined */)) { - type = removeNullableKind(type, 32 /* Undefined */); + type = getTypeWithFacts(type, 131072 /* NEUndefined */); } return type; } @@ -17450,16 +17986,16 @@ var ts; if (typeTag && typeTag.typeExpression) { return typeTag.typeExpression.type; } - if (declaration.kind === 217 /* VariableDeclaration */ && - declaration.parent.kind === 218 /* VariableDeclarationList */ && - declaration.parent.parent.kind === 199 /* VariableStatement */) { + if (declaration.kind === 218 /* VariableDeclaration */ && + declaration.parent.kind === 219 /* VariableDeclarationList */ && + declaration.parent.parent.kind === 200 /* VariableStatement */) { // @type annotation might have been on the variable statement, try that instead. var annotation = ts.getJSDocTypeTag(declaration.parent.parent); if (annotation && annotation.typeExpression) { return annotation.typeExpression.type; } } - else if (declaration.kind === 141 /* Parameter */) { + else if (declaration.kind === 142 /* Parameter */) { // If it's a parameter, see if the parent has a jsdoc comment with an @param // annotation. var paramTag = ts.getCorrespondingJSDocParameterTag(declaration); @@ -17469,6 +18005,9 @@ var ts; } return undefined; } + function addOptionality(type, optional) { + return strictNullChecks && optional ? addNullableKind(type, 32 /* Undefined */) : type; + } // Return the inferred type for a variable, parameter, or property declaration function getTypeForVariableLikeDeclaration(declaration) { if (declaration.flags & 134217728 /* JavaScriptFile */) { @@ -17481,10 +18020,10 @@ var ts; } } // A variable declared in a for..in statement is always of type string - if (declaration.parent.parent.kind === 206 /* ForInStatement */) { + if (declaration.parent.parent.kind === 207 /* ForInStatement */) { return stringType; } - if (declaration.parent.parent.kind === 207 /* ForOfStatement */) { + if (declaration.parent.parent.kind === 208 /* ForOfStatement */) { // checkRightHandSideOfForOf will return undefined if the for-of expression type was // missing properties/signatures required to get its iteratedType (like // [Symbol.iterator] or next). This may be because we accessed properties from anyType, @@ -17496,16 +18035,20 @@ var ts; } // Use type from type annotation if one is present if (declaration.type) { - var type = getTypeFromTypeNode(declaration.type); - return strictNullChecks && declaration.questionToken ? addNullableKind(type, 32 /* Undefined */) : type; + return addOptionality(getTypeFromTypeNode(declaration.type), /*optional*/ !!declaration.questionToken); } - if (declaration.kind === 141 /* Parameter */) { + if (declaration.kind === 142 /* Parameter */) { var func = declaration.parent; // For a parameter of a set accessor, use the type of the get accessor if one is present - if (func.kind === 149 /* SetAccessor */ && !ts.hasDynamicName(func)) { - var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 148 /* GetAccessor */); + if (func.kind === 150 /* SetAccessor */ && !ts.hasDynamicName(func)) { + var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 149 /* GetAccessor */); if (getter) { - return getReturnTypeOfSignature(getSignatureFromDeclaration(getter)); + var signature = getSignatureFromDeclaration(getter); + var thisParameter = getAccessorThisParameter(func); + if (thisParameter && declaration === thisParameter) { + return signature.thisType; + } + return getReturnTypeOfSignature(signature); } } // Use contextual parameter type if one is available @@ -17513,15 +18056,15 @@ var ts; ? getContextuallyTypedThisType(func) : getContextuallyTypedParameterType(declaration); if (type) { - return strictNullChecks && declaration.questionToken ? addNullableKind(type, 32 /* Undefined */) : type; + return addOptionality(type, /*optional*/ !!declaration.questionToken); } } // Use the type of the initializer expression if one is present if (declaration.initializer) { - return checkExpressionCached(declaration.initializer); + return addOptionality(checkExpressionCached(declaration.initializer), /*optional*/ !!declaration.questionToken); } // If it is a short-hand property assignment, use the type of the identifier - if (declaration.kind === 253 /* ShorthandPropertyAssignment */) { + if (declaration.kind === 254 /* ShorthandPropertyAssignment */) { return checkIdentifier(declaration.name); } // If the declaration specifies a binding pattern, use the type implied by the binding pattern @@ -17543,7 +18086,7 @@ var ts; if (ts.isBindingPattern(element.name)) { return getTypeFromBindingPattern(element.name, includePatternInType); } - if (compilerOptions.noImplicitAny) { + if (compilerOptions.noImplicitAny && !declarationBelongsToPrivateAmbientMember(element)) { reportImplicitAnyError(element, anyType); } return anyType; @@ -17582,7 +18125,7 @@ var ts; return languageVersion >= 2 /* ES6 */ ? createIterableType(anyType) : anyArrayType; } // If the pattern has at least one element, and no rest element, then it should imply a tuple type. - var elementTypes = ts.map(elements, function (e) { return e.kind === 192 /* OmittedExpression */ ? anyType : getTypeFromBindingElement(e, includePatternInType); }); + var elementTypes = ts.map(elements, function (e) { return e.kind === 193 /* OmittedExpression */ ? anyType : getTypeFromBindingElement(e, includePatternInType); }); if (includePatternInType) { var result = createNewTupleType(elementTypes); result.pattern = pattern; @@ -17598,7 +18141,7 @@ var ts; // parameter with no type annotation or initializer, the type implied by the binding pattern becomes the type of // the parameter. function getTypeFromBindingPattern(pattern, includePatternInType) { - return pattern.kind === 166 /* ObjectBindingPattern */ + return pattern.kind === 167 /* ObjectBindingPattern */ ? getTypeFromObjectBindingPattern(pattern, includePatternInType) : getTypeFromArrayBindingPattern(pattern, includePatternInType); } @@ -17620,7 +18163,7 @@ var ts; // During a normal type check we'll never get to here with a property assignment (the check of the containing // object literal uses a different path). We exclude widening only so that language services and type verification // tools see the actual type. - if (declaration.kind === 252 /* PropertyAssignment */) { + if (declaration.kind === 253 /* PropertyAssignment */) { return type; } return getWidenedType(type); @@ -17629,13 +18172,17 @@ var ts; type = declaration.dotDotDotToken ? anyArrayType : anyType; // Report implicit any errors unless this is a private property within an ambient declaration if (reportErrors && compilerOptions.noImplicitAny) { - var root = ts.getRootDeclaration(declaration); - if (!isPrivateWithinAmbient(root) && !(root.kind === 141 /* Parameter */ && isPrivateWithinAmbient(root.parent))) { + if (!declarationBelongsToPrivateAmbientMember(declaration)) { reportImplicitAnyError(declaration, type); } } return type; } + function declarationBelongsToPrivateAmbientMember(declaration) { + var root = ts.getRootDeclaration(declaration); + var memberDeclaration = root.kind === 142 /* Parameter */ ? root.parent : root; + return isPrivateWithinAmbient(memberDeclaration); + } function getTypeOfVariableOrParameterOrProperty(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { @@ -17645,21 +18192,21 @@ var ts; } // Handle catch clause variables var declaration = symbol.valueDeclaration; - if (declaration.parent.kind === 251 /* CatchClause */) { + if (declaration.parent.kind === 252 /* CatchClause */) { return links.type = anyType; } // Handle export default expressions - if (declaration.kind === 234 /* ExportAssignment */) { + if (declaration.kind === 235 /* ExportAssignment */) { return links.type = checkExpression(declaration.expression); } // Handle module.exports = expr - if (declaration.kind === 186 /* BinaryExpression */) { + if (declaration.kind === 187 /* BinaryExpression */) { return links.type = getUnionType(ts.map(symbol.declarations, function (decl) { return checkExpressionCached(decl.right); })); } - if (declaration.kind === 171 /* PropertyAccessExpression */) { + if (declaration.kind === 172 /* PropertyAccessExpression */) { // Declarations only exist for property access expressions for certain // special assignment kinds - if (declaration.parent.kind === 186 /* BinaryExpression */) { + if (declaration.parent.kind === 187 /* BinaryExpression */) { // Handle exports.p = expr or this.p = expr or className.prototype.method = expr return links.type = checkExpressionCached(declaration.parent.right); } @@ -17689,7 +18236,7 @@ var ts; } function getAnnotatedAccessorType(accessor) { if (accessor) { - if (accessor.kind === 148 /* GetAccessor */) { + if (accessor.kind === 149 /* GetAccessor */) { return accessor.type && getTypeFromTypeNode(accessor.type); } else { @@ -17699,11 +18246,20 @@ var ts; } return undefined; } + function getAnnotatedAccessorThisType(accessor) { + if (accessor) { + var parameter = getAccessorThisParameter(accessor); + if (parameter && parameter.type) { + return getTypeFromTypeNode(accessor.parameters[0].type); + } + } + return undefined; + } function getTypeOfAccessors(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - var getter = ts.getDeclarationOfKind(symbol, 148 /* GetAccessor */); - var setter = ts.getDeclarationOfKind(symbol, 149 /* SetAccessor */); + var getter = ts.getDeclarationOfKind(symbol, 149 /* GetAccessor */); + var setter = ts.getDeclarationOfKind(symbol, 150 /* SetAccessor */); if (getter && getter.flags & 134217728 /* JavaScriptFile */) { var jsDocType = getTypeForVariableLikeDeclarationFromJSDocComment(getter); if (jsDocType) { @@ -17741,7 +18297,7 @@ var ts; if (!popTypeResolution()) { type = anyType; if (compilerOptions.noImplicitAny) { - var getter_1 = ts.getDeclarationOfKind(symbol, 148 /* GetAccessor */); + var getter_1 = ts.getDeclarationOfKind(symbol, 149 /* GetAccessor */); 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)); } } @@ -17752,7 +18308,9 @@ var ts; function getTypeOfFuncClassEnumModule(symbol) { var links = getSymbolLinks(symbol); if (!links.type) { - links.type = createObjectType(65536 /* Anonymous */, symbol); + var type = createObjectType(65536 /* Anonymous */, symbol); + links.type = strictNullChecks && symbol.flags & 536870912 /* Optional */ ? + addNullableKind(type, 32 /* Undefined */) : type; } return links.type; } @@ -17841,9 +18399,9 @@ var ts; if (!node) { return typeParameters; } - if (node.kind === 220 /* ClassDeclaration */ || node.kind === 191 /* ClassExpression */ || - node.kind === 219 /* FunctionDeclaration */ || node.kind === 178 /* FunctionExpression */ || - node.kind === 146 /* MethodDeclaration */ || node.kind === 179 /* ArrowFunction */) { + if (node.kind === 221 /* ClassDeclaration */ || node.kind === 192 /* ClassExpression */ || + node.kind === 220 /* FunctionDeclaration */ || node.kind === 179 /* FunctionExpression */ || + node.kind === 147 /* MethodDeclaration */ || node.kind === 180 /* ArrowFunction */) { var declarations = node.typeParameters; if (declarations) { return appendTypeParameters(appendOuterTypeParameters(typeParameters, node), declarations); @@ -17853,7 +18411,7 @@ var ts; } // The outer type parameters are those defined by enclosing generic classes, methods, or functions. function getOuterTypeParametersOfClassOrInterface(symbol) { - var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 221 /* InterfaceDeclaration */); + var declaration = symbol.flags & 32 /* Class */ ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 222 /* InterfaceDeclaration */); return appendOuterTypeParameters(undefined, declaration); } // The local type parameters are the combined set of type parameters from all declarations of the class, @@ -17862,8 +18420,8 @@ var ts; var result; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var node = _a[_i]; - if (node.kind === 221 /* InterfaceDeclaration */ || node.kind === 220 /* ClassDeclaration */ || - node.kind === 191 /* ClassExpression */ || node.kind === 222 /* TypeAliasDeclaration */) { + if (node.kind === 222 /* InterfaceDeclaration */ || node.kind === 221 /* ClassDeclaration */ || + node.kind === 192 /* ClassExpression */ || node.kind === 223 /* TypeAliasDeclaration */) { var declaration = node; if (declaration.typeParameters) { result = appendTypeParameters(result, declaration.typeParameters); @@ -18003,7 +18561,7 @@ var ts; type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray; for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 221 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) { + if (declaration.kind === 222 /* InterfaceDeclaration */ && ts.getInterfaceBaseTypeNodes(declaration)) { for (var _b = 0, _c = ts.getInterfaceBaseTypeNodes(declaration); _b < _c.length; _b++) { var node = _c[_b]; var baseType = getTypeFromTypeNode(node); @@ -18035,7 +18593,7 @@ var ts; function isIndependentInterface(symbol) { for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 221 /* InterfaceDeclaration */) { + if (declaration.kind === 222 /* InterfaceDeclaration */) { if (declaration.flags & 16384 /* ContainsThis */) { return false; } @@ -18091,7 +18649,7 @@ var ts; if (!pushTypeResolution(symbol, 2 /* DeclaredType */)) { return unknownType; } - var declaration = ts.getDeclarationOfKind(symbol, 222 /* TypeAliasDeclaration */); + var declaration = ts.getDeclarationOfKind(symbol, 223 /* TypeAliasDeclaration */); var type = getTypeFromTypeNode(declaration.type); if (popTypeResolution()) { links.typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); @@ -18124,7 +18682,7 @@ var ts; if (!links.declaredType) { var type = createType(512 /* TypeParameter */); type.symbol = symbol; - if (!ts.getDeclarationOfKind(symbol, 140 /* TypeParameter */).constraint) { + if (!ts.getDeclarationOfKind(symbol, 141 /* TypeParameter */).constraint) { type.constraint = noConstraintType; } links.declaredType = type; @@ -18175,18 +18733,19 @@ var ts; function isIndependentType(node) { switch (node.kind) { case 117 /* AnyKeyword */: - case 131 /* StringKeyword */: - case 129 /* NumberKeyword */: + case 132 /* StringKeyword */: + case 130 /* NumberKeyword */: case 120 /* BooleanKeyword */: - case 132 /* SymbolKeyword */: + case 133 /* SymbolKeyword */: case 103 /* VoidKeyword */: - case 134 /* UndefinedKeyword */: + case 135 /* UndefinedKeyword */: case 93 /* NullKeyword */: - case 165 /* StringLiteralType */: + case 127 /* NeverKeyword */: + case 166 /* StringLiteralType */: return true; - case 159 /* ArrayType */: + case 160 /* ArrayType */: return isIndependentType(node.elementType); - case 154 /* TypeReference */: + case 155 /* TypeReference */: return isIndependentTypeReference(node); } return false; @@ -18199,7 +18758,7 @@ var ts; // A function-like declaration is considered independent (free of this references) if it has a return type // annotation that is considered independent and if each parameter is considered independent. function isIndependentFunctionLikeDeclaration(node) { - if (node.kind !== 147 /* Constructor */ && (!node.type || !isIndependentType(node.type))) { + if (node.kind !== 148 /* Constructor */ && (!node.type || !isIndependentType(node.type))) { return false; } for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) { @@ -18220,12 +18779,12 @@ var ts; var declaration = symbol.declarations[0]; if (declaration) { switch (declaration.kind) { - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return isIndependentVariableLikeDeclaration(declaration); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: return isIndependentFunctionLikeDeclaration(declaration); } } @@ -18761,7 +19320,9 @@ var ts; propTypes.push(getTypeOfSymbol(prop)); } } - return getUnionType(propTypes); + if (propTypes.length) { + return getUnionType(propTypes); + } } return undefined; } @@ -18797,7 +19358,7 @@ var ts; } function isOptionalParameter(node) { if (node.flags & 134217728 /* JavaScriptFile */) { - if (node.type && node.type.kind === 267 /* JSDocOptionalType */) { + if (node.type && node.type.kind === 268 /* JSDocOptionalType */) { return true; } var paramTag = ts.getCorrespondingJSDocParameterTag(node); @@ -18806,7 +19367,7 @@ var ts; return true; } if (paramTag.typeExpression) { - return paramTag.typeExpression.type.kind === 267 /* JSDocOptionalType */; + return paramTag.typeExpression.type.kind === 268 /* JSDocOptionalType */; } } } @@ -18842,20 +19403,12 @@ var ts; function getSignatureFromDeclaration(declaration) { var links = getNodeLinks(declaration); if (!links.resolvedSignature) { - var classType = declaration.kind === 147 /* Constructor */ ? - getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol)) - : undefined; - var typeParameters = classType ? classType.localTypeParameters : - declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : - getTypeParametersFromJSDocTemplate(declaration); var parameters = []; var hasStringLiterals = false; var minArgumentCount = -1; var thisType = undefined; var hasThisParameter = void 0; var isJSConstructSignature = ts.isJSDocConstructSignature(declaration); - var returnType = undefined; - var typePredicate = undefined; // If this is a JSDoc construct signature, then skip the first parameter in the // parameter list. The first parameter represents the return type of the construct // signature. @@ -18874,7 +19427,7 @@ var ts; else { parameters.push(paramSymbol); } - if (param.type && param.type.kind === 165 /* StringLiteralType */) { + if (param.type && param.type.kind === 166 /* StringLiteralType */) { hasStringLiterals = true; } if (param.initializer || param.questionToken || param.dotDotDotToken) { @@ -18887,43 +19440,60 @@ var ts; minArgumentCount = -1; } } + // If only one accessor includes a this-type annotation, the other behaves as if it had the same type annotation + if ((declaration.kind === 149 /* GetAccessor */ || declaration.kind === 150 /* SetAccessor */) && + !ts.hasDynamicName(declaration) && + (!hasThisParameter || thisType === unknownType)) { + var otherKind = declaration.kind === 149 /* GetAccessor */ ? 150 /* SetAccessor */ : 149 /* GetAccessor */; + var setter = ts.getDeclarationOfKind(declaration.symbol, otherKind); + thisType = getAnnotatedAccessorThisType(setter); + } if (minArgumentCount < 0) { minArgumentCount = declaration.parameters.length - (hasThisParameter ? 1 : 0); } if (isJSConstructSignature) { minArgumentCount--; - returnType = getTypeFromTypeNode(declaration.parameters[0].type); - } - else if (classType) { - returnType = classType; - } - else if (declaration.type) { - returnType = getTypeFromTypeNode(declaration.type); - if (declaration.type.kind === 153 /* TypePredicate */) { - typePredicate = createTypePredicateFromTypePredicateNode(declaration.type); - } - } - else { - if (declaration.flags & 134217728 /* JavaScriptFile */) { - var type = getReturnTypeFromJSDocComment(declaration); - if (type && type !== unknownType) { - returnType = type; - } - } - // TypeScript 1.0 spec (April 2014): - // If only one accessor includes a type annotation, the other behaves as if it had the same type annotation. - if (declaration.kind === 148 /* GetAccessor */ && !ts.hasDynamicName(declaration)) { - var setter = ts.getDeclarationOfKind(declaration.symbol, 149 /* SetAccessor */); - returnType = getAnnotatedAccessorType(setter); - } - if (!returnType && ts.nodeIsMissing(declaration.body)) { - returnType = anyType; - } } + var classType = declaration.kind === 148 /* Constructor */ ? + getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol)) + : undefined; + var typeParameters = classType ? classType.localTypeParameters : + declaration.typeParameters ? getTypeParametersFromDeclaration(declaration.typeParameters) : + getTypeParametersFromJSDocTemplate(declaration); + var returnType = getSignatureReturnTypeFromDeclaration(declaration, minArgumentCount, isJSConstructSignature, classType); + var typePredicate = declaration.type && declaration.type.kind === 154 /* TypePredicate */ ? + createTypePredicateFromTypePredicateNode(declaration.type) : + undefined; links.resolvedSignature = createSignature(declaration, typeParameters, thisType, parameters, returnType, typePredicate, minArgumentCount, ts.hasRestParameter(declaration), hasStringLiterals); } return links.resolvedSignature; } + function getSignatureReturnTypeFromDeclaration(declaration, minArgumentCount, isJSConstructSignature, classType) { + if (isJSConstructSignature) { + return getTypeFromTypeNode(declaration.parameters[0].type); + } + else if (classType) { + return classType; + } + else if (declaration.type) { + return getTypeFromTypeNode(declaration.type); + } + if (declaration.flags & 134217728 /* JavaScriptFile */) { + var type = getReturnTypeFromJSDocComment(declaration); + if (type && type !== unknownType) { + return type; + } + } + // TypeScript 1.0 spec (April 2014): + // If only one accessor includes a type annotation, the other behaves as if it had the same type annotation. + if (declaration.kind === 149 /* GetAccessor */ && !ts.hasDynamicName(declaration)) { + var setter = ts.getDeclarationOfKind(declaration.symbol, 150 /* SetAccessor */); + return getAnnotatedAccessorType(setter); + } + if (ts.nodeIsMissing(declaration.body)) { + return anyType; + } + } function getSignaturesOfSymbol(symbol) { if (!symbol) return emptyArray; @@ -18931,20 +19501,20 @@ var ts; for (var i = 0, len = symbol.declarations.length; i < len; i++) { var node = symbol.declarations[i]; switch (node.kind) { - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 268 /* JSDocFunctionType */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 269 /* JSDocFunctionType */: // Don't include signature if node is the implementation of an overloaded function. A node is considered // an implementation node if it has a body and the previous node is of the same kind and immediately // precedes the implementation node (i.e. has the same parent and ends where the implementation starts). @@ -19016,12 +19586,7 @@ var ts; if (!signature.typeParameters) return signature; if (!signature.erasedSignatureCache) { - if (signature.target) { - signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper); - } - else { - signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), /*eraseTypeParameters*/ true); - } + signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), /*eraseTypeParameters*/ true); } return signature.erasedSignatureCache; } @@ -19031,7 +19596,7 @@ var ts; // object type literal or interface (using the new keyword). Each way of declaring a constructor // will result in a different declaration kind. if (!signature.isolatedSignatureType) { - var isConstructor = signature.declaration.kind === 147 /* Constructor */ || signature.declaration.kind === 151 /* ConstructSignature */; + var isConstructor = signature.declaration.kind === 148 /* Constructor */ || signature.declaration.kind === 152 /* ConstructSignature */; var type = createObjectType(65536 /* Anonymous */ | 262144 /* FromSignature */); type.members = emptySymbols; type.properties = emptyArray; @@ -19045,7 +19610,7 @@ var ts; return symbol.members["__index"]; } function getIndexDeclarationOfSymbol(symbol, kind) { - var syntaxKind = kind === 1 /* Number */ ? 129 /* NumberKeyword */ : 131 /* StringKeyword */; + var syntaxKind = kind === 1 /* Number */ ? 130 /* NumberKeyword */ : 132 /* StringKeyword */; var indexSymbol = getIndexSymbol(symbol); if (indexSymbol) { for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) { @@ -19072,7 +19637,7 @@ var ts; return undefined; } function getConstraintDeclaration(type) { - return ts.getDeclarationOfKind(type.symbol, 140 /* TypeParameter */).constraint; + return ts.getDeclarationOfKind(type.symbol, 141 /* TypeParameter */).constraint; } function hasConstraintReferenceTo(type, target) { var checked; @@ -19105,7 +19670,7 @@ var ts; return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint; } function getParentSymbolOfTypeParameter(typeParameter) { - return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 140 /* TypeParameter */).parent); + return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 141 /* TypeParameter */).parent); } function getTypeListId(types) { if (types) { @@ -19205,11 +19770,11 @@ var ts; } function getTypeReferenceName(node) { switch (node.kind) { - case 154 /* TypeReference */: + case 155 /* TypeReference */: return node.typeName; - case 266 /* JSDocTypeReference */: + case 267 /* JSDocTypeReference */: return node.name; - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: // We only support expressions that are simple qualified names. For other // expressions this produces undefined. if (ts.isSupportedExpressionWithTypeArguments(node)) { @@ -19234,7 +19799,7 @@ var ts; if (symbol.flags & 524288 /* TypeAlias */) { return getTypeFromTypeAliasReference(node, symbol); } - if (symbol.flags & 107455 /* Value */ && node.kind === 266 /* JSDocTypeReference */) { + if (symbol.flags & 107455 /* Value */ && node.kind === 267 /* JSDocTypeReference */) { // A JSDocTypeReference may have resolved to a value (as opposed to a type). In // that case, the type of this reference is just the type of the value we resolved // to. @@ -19247,7 +19812,7 @@ var ts; if (!links.resolvedType) { var symbol = void 0; var type = void 0; - if (node.kind === 266 /* JSDocTypeReference */) { + if (node.kind === 267 /* JSDocTypeReference */) { var typeReferenceName = getTypeReferenceName(node); symbol = resolveTypeReferenceName(node, typeReferenceName); type = getTypeReferenceType(node, symbol); @@ -19256,7 +19821,7 @@ var ts; } else { // We only support expressions that are simple qualified names. For other expressions this produces undefined. - var typeNameOrExpression = node.kind === 154 /* TypeReference */ ? node.typeName : + var typeNameOrExpression = node.kind === 155 /* TypeReference */ ? node.typeName : ts.isSupportedExpressionWithTypeArguments(node) ? node.expression : undefined; symbol = typeNameOrExpression && resolveEntityName(typeNameOrExpression, 793056 /* Type */) || unknownSymbol; @@ -19289,9 +19854,9 @@ var ts; for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) { var declaration = declarations_3[_i]; switch (declaration.kind) { - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: return declaration; } } @@ -19392,7 +19957,7 @@ var ts; if (type.flags & 64 /* Null */) typeSet.containsNull = true; } - else if (!ts.contains(typeSet, type)) { + else if (type !== neverType && !ts.contains(typeSet, type)) { typeSet.push(type); } } @@ -19430,7 +19995,10 @@ var ts; // a named type that circularly references itself. function getUnionType(types, noSubtypeReduction) { if (types.length === 0) { - return emptyUnionType; + return neverType; + } + if (types.length === 1) { + return types[0]; } var typeSet = []; addTypesToSet(typeSet, types, 16384 /* Union */); @@ -19447,7 +20015,9 @@ var ts; removeSubtypes(typeSet); } if (typeSet.length === 0) { - return typeSet.containsNull ? nullType : undefinedType; + return typeSet.containsNull ? nullType : + typeSet.containsUndefined ? undefinedType : + neverType; } else if (typeSet.length === 1) { return typeSet[0]; @@ -19526,7 +20096,7 @@ var ts; function getTypeFromStringLiteralTypeNode(node) { var links = getNodeLinks(node); if (!links.resolvedType) { - links.resolvedType = getStringLiteralTypeForText(node.text); + links.resolvedType = getStringLiteralTypeForText(ts.unescapeIdentifier(node.text)); } return links.resolvedType; } @@ -19549,9 +20119,9 @@ var ts; function getThisType(node) { var container = ts.getThisContainer(node, /*includeArrowFunctions*/ false); var parent = container && container.parent; - if (parent && (ts.isClassLike(parent) || parent.kind === 221 /* InterfaceDeclaration */)) { + if (parent && (ts.isClassLike(parent) || parent.kind === 222 /* InterfaceDeclaration */)) { if (!(container.flags & 32 /* Static */) && - (container.kind !== 147 /* Constructor */ || ts.isNodeDescendentOf(node, container.body))) { + (container.kind !== 148 /* Constructor */ || ts.isNodeDescendentOf(node, container.body))) { return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType; } } @@ -19568,68 +20138,71 @@ var ts; function getTypeFromTypeNode(node) { switch (node.kind) { case 117 /* AnyKeyword */: - case 257 /* JSDocAllType */: - case 258 /* JSDocUnknownType */: + case 258 /* JSDocAllType */: + case 259 /* JSDocUnknownType */: return anyType; - case 131 /* StringKeyword */: + case 132 /* StringKeyword */: return stringType; - case 129 /* NumberKeyword */: + case 130 /* NumberKeyword */: return numberType; case 120 /* BooleanKeyword */: return booleanType; - case 132 /* SymbolKeyword */: + case 133 /* SymbolKeyword */: return esSymbolType; case 103 /* VoidKeyword */: return voidType; - case 134 /* UndefinedKeyword */: + case 135 /* UndefinedKeyword */: return undefinedType; case 93 /* NullKeyword */: return nullType; - case 164 /* ThisType */: + case 127 /* NeverKeyword */: + return neverType; + case 165 /* ThisType */: + case 97 /* ThisKeyword */: return getTypeFromThisTypeNode(node); - case 165 /* StringLiteralType */: + case 166 /* StringLiteralType */: return getTypeFromStringLiteralTypeNode(node); - case 154 /* TypeReference */: - case 266 /* JSDocTypeReference */: + case 155 /* TypeReference */: + case 267 /* JSDocTypeReference */: return getTypeFromTypeReference(node); - case 153 /* TypePredicate */: + case 154 /* TypePredicate */: return booleanType; - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: return getTypeFromTypeReference(node); - case 157 /* TypeQuery */: + case 158 /* TypeQuery */: return getTypeFromTypeQueryNode(node); - case 159 /* ArrayType */: - case 259 /* JSDocArrayType */: + case 160 /* ArrayType */: + case 260 /* JSDocArrayType */: return getTypeFromArrayTypeNode(node); - case 160 /* TupleType */: + case 161 /* TupleType */: return getTypeFromTupleTypeNode(node); - case 161 /* UnionType */: - case 260 /* JSDocUnionType */: + case 162 /* UnionType */: + case 261 /* JSDocUnionType */: return getTypeFromUnionTypeNode(node); - case 162 /* IntersectionType */: + case 163 /* IntersectionType */: return getTypeFromIntersectionTypeNode(node); - case 163 /* ParenthesizedType */: - case 262 /* JSDocNullableType */: - case 263 /* JSDocNonNullableType */: - case 270 /* JSDocConstructorType */: - case 271 /* JSDocThisType */: - case 267 /* JSDocOptionalType */: + case 164 /* ParenthesizedType */: + case 263 /* JSDocNullableType */: + case 264 /* JSDocNonNullableType */: + case 271 /* JSDocConstructorType */: + case 272 /* JSDocThisType */: + case 268 /* JSDocOptionalType */: return getTypeFromTypeNode(node.type); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 158 /* TypeLiteral */: - case 268 /* JSDocFunctionType */: - case 264 /* JSDocRecordType */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 159 /* TypeLiteral */: + case 269 /* JSDocFunctionType */: + case 265 /* JSDocRecordType */: return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); // This function assumes that an identifier or qualified name is a type expression // Callers should first ensure this by calling isTypeNode case 69 /* Identifier */: - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: var symbol = getSymbolAtLocation(node); return symbol && getDeclaredTypeOfSymbol(symbol); - case 261 /* JSDocTupleType */: + case 262 /* JSDocTupleType */: return getTypeFromJSDocTupleType(node); - case 269 /* JSDocVariadicType */: + case 270 /* JSDocVariadicType */: return getTypeFromJSDocVariadicType(node); default: return unknownType; @@ -19789,41 +20362,41 @@ var ts; var node = symbol.declarations[0].parent; while (node) { switch (node.kind) { - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 221 /* InterfaceDeclaration */: - case 222 /* TypeAliasDeclaration */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: var declaration = node; if (declaration.typeParameters) { for (var _i = 0, _a = declaration.typeParameters; _i < _a.length; _i++) { var d = _a[_i]; - if (ts.contains(mappedTypes, getDeclaredTypeOfTypeParameter(d.symbol))) { + if (ts.contains(mappedTypes, getDeclaredTypeOfTypeParameter(getSymbolOfNode(d)))) { return true; } } } - if (ts.isClassLike(node) || node.kind === 221 /* InterfaceDeclaration */) { + if (ts.isClassLike(node) || node.kind === 222 /* InterfaceDeclaration */) { var thisType = getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType; if (thisType && ts.contains(mappedTypes, thisType)) { return true; } } break; - case 224 /* ModuleDeclaration */: - case 255 /* SourceFile */: + case 225 /* ModuleDeclaration */: + case 256 /* SourceFile */: return false; } node = node.parent; @@ -19868,36 +20441,39 @@ var ts; // Returns true if the given expression contains (at any level of nesting) a function or arrow expression // that is subject to contextual typing. function isContextSensitive(node) { - ts.Debug.assert(node.kind !== 146 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 147 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); switch (node.kind) { - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return isContextSensitiveFunctionLikeDeclaration(node); - case 170 /* ObjectLiteralExpression */: + case 171 /* ObjectLiteralExpression */: return ts.forEach(node.properties, isContextSensitive); - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: return ts.forEach(node.elements, isContextSensitive); - case 187 /* ConditionalExpression */: + case 188 /* ConditionalExpression */: return isContextSensitive(node.whenTrue) || isContextSensitive(node.whenFalse); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return node.operatorToken.kind === 52 /* BarBarToken */ && (isContextSensitive(node.left) || isContextSensitive(node.right)); - case 252 /* PropertyAssignment */: + case 253 /* PropertyAssignment */: return isContextSensitive(node.initializer); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: return isContextSensitiveFunctionLikeDeclaration(node); - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return isContextSensitive(node.expression); } return false; } function isContextSensitiveFunctionLikeDeclaration(node) { var areAllParametersUntyped = !ts.forEach(node.parameters, function (p) { return p.type; }); - var isNullaryArrow = node.kind === 179 /* ArrowFunction */ && !node.parameters.length; + var isNullaryArrow = node.kind === 180 /* ArrowFunction */ && !node.parameters.length; return !node.typeParameters && areAllParametersUntyped && !isNullaryArrow; } + function isContextSensitiveFunctionOrObjectLiteralMethod(func) { + return (isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) && isContextSensitiveFunctionLikeDeclaration(func); + } function getTypeWithoutSignatures(type) { if (type.flags & 80896 /* ObjectType */) { var resolved = resolveStructuredTypeMembers(type); @@ -20142,33 +20718,35 @@ var ts; if (relation === identityRelation) { return isIdenticalTo(source, target); } - if (isTypeAny(target)) - return -1 /* True */; - if (source.flags & 32 /* Undefined */) { - if (!strictNullChecks || target.flags & (32 /* Undefined */ | 16 /* Void */) || source === emptyArrayElementType) + if (!(target.flags & 134217728 /* Never */)) { + if (target.flags & 1 /* Any */) return -1 /* True */; - } - if (source.flags & 64 /* Null */) { - if (!strictNullChecks || target.flags & 64 /* Null */) - return -1 /* True */; - } - if (source.flags & 128 /* Enum */ && target === numberType) - return -1 /* True */; - if (source.flags & 128 /* Enum */ && target.flags & 128 /* Enum */) { - if (result = enumRelatedTo(source, target, reportErrors)) { - return result; + if (source.flags & 32 /* Undefined */) { + if (!strictNullChecks || target.flags & (32 /* Undefined */ | 16 /* Void */) || source === emptyArrayElementType) + return -1 /* True */; } - } - if (source.flags & 256 /* StringLiteral */ && target === stringType) - return -1 /* True */; - if (relation === assignableRelation || relation === comparableRelation) { - if (isTypeAny(source)) + if (source.flags & 64 /* Null */) { + if (!strictNullChecks || target.flags & 64 /* Null */) + return -1 /* True */; + } + if (source.flags & 128 /* Enum */ && target === numberType) return -1 /* True */; - if (source === numberType && target.flags & 128 /* Enum */) + if (source.flags & 128 /* Enum */ && target.flags & 128 /* Enum */) { + if (result = enumRelatedTo(source, target, reportErrors)) { + return result; + } + } + if (source.flags & 256 /* StringLiteral */ && target === stringType) return -1 /* True */; - } - if (source.flags & 8 /* Boolean */ && target.flags & 8 /* Boolean */) { - return -1 /* True */; + if (relation === assignableRelation || relation === comparableRelation) { + if (source.flags & (1 /* Any */ | 134217728 /* Never */)) + return -1 /* True */; + if (source === numberType && target.flags & 128 /* Enum */) + return -1 /* True */; + } + if (source.flags & 8 /* Boolean */ && target.flags & 8 /* Boolean */) { + return -1 /* True */; + } } if (source.flags & 1048576 /* FreshObjectLiteral */) { if (hasExcessProperties(source, target, reportErrors)) { @@ -20237,6 +20815,8 @@ var ts; if (!constraint || constraint.flags & 1 /* Any */) { constraint = emptyObjectType; } + // The constraint may need to be further instantiated with its 'this' type. + constraint = getTypeWithThisArgument(constraint, source); // Report constraint errors only if the constraint is not the empty object type var reportConstraintErrors = reportErrors && constraint !== emptyObjectType; if (result = isRelatedTo(constraint, target, reportConstraintErrors)) { @@ -20300,7 +20880,7 @@ var ts; if (type.flags & 80896 /* ObjectType */) { var resolved = resolveStructuredTypeMembers(type); if ((relation === assignableRelation || relation === comparableRelation) && - (type === globalObjectType || resolved.properties.length === 0) || + (type === globalObjectType || isEmptyObjectType(resolved)) || resolved.stringIndexInfo || resolved.numberIndexInfo || getPropertyOfType(type, name)) { return true; } @@ -20315,6 +20895,13 @@ var ts; } return false; } + function isEmptyObjectType(t) { + return t.properties.length === 0 && + t.callSignatures.length === 0 && + t.constructSignatures.length === 0 && + !t.stringIndexInfo && + !t.numberIndexInfo; + } function hasExcessProperties(source, target, reportErrors) { if (!(target.flags & 67108864 /* ObjectLiteralPatternWithComputedProperties */) && maybeTypeOfKind(target, 80896 /* ObjectType */)) { for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) { @@ -21022,10 +21609,6 @@ var ts; } return flags & 96 /* Nullable */; } - function getNullableTypeOfKind(kind) { - return kind & 64 /* Null */ ? kind & 32 /* Undefined */ ? - getUnionType([nullType, undefinedType]) : nullType : undefinedType; - } function addNullableKind(type, kind) { if ((getNullableKind(type) & kind) !== kind) { var types = [type]; @@ -21039,32 +21622,8 @@ var ts; } return type; } - function removeNullableKind(type, kind) { - if (type.flags & 16384 /* Union */ && getNullableKind(type) & kind) { - var firstType = void 0; - var types = void 0; - for (var _i = 0, _a = type.types; _i < _a.length; _i++) { - var t = _a[_i]; - if (!(t.flags & kind)) { - if (!firstType) { - firstType = t; - } - else { - if (!types) { - types = [firstType]; - } - types.push(t); - } - } - } - if (firstType) { - type = types ? getUnionType(types) : firstType; - } - } - return type; - } function getNonNullableType(type) { - return strictNullChecks ? removeNullableKind(type, 96 /* Nullable */) : type; + return strictNullChecks ? getTypeWithFacts(type, 524288 /* NEUndefinedOrNull */) : type; } /** * Return true if type was inferred from an object literal or written as an object type literal @@ -21188,25 +21747,25 @@ var ts; var typeAsString = typeToString(getWidenedType(type)); var diagnostic; switch (declaration.kind) { - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type; break; - case 141 /* Parameter */: + case 142 /* Parameter */: diagnostic = declaration.dotDotDotToken ? ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : ts.Diagnostics.Parameter_0_implicitly_has_an_1_type; break; - case 168 /* BindingElement */: + case 169 /* BindingElement */: diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type; break; - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: if (!declaration.name) { error(declaration, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString); return; @@ -21538,18 +22097,7 @@ var ts; return context.inferredTypes; } // EXPRESSION TYPE CHECKING - function createTransientIdentifier(symbol, location) { - var result = ts.createNode(69 /* Identifier */); - result.text = symbol.name; - result.resolvedSymbol = symbol; - result.parent = location; - result.id = -1; - return result; - } function getResolvedSymbol(node) { - if (node.id === -1) { - return node.resolvedSymbol; - } var links = getNodeLinks(node); if (!links.resolvedSymbol) { links.resolvedSymbol = !ts.nodeIsMissing(node) && resolveName(node, node.text, 107455 /* Value */ | 1048576 /* ExportValue */, ts.Diagnostics.Cannot_find_name_0, node) || unknownSymbol; @@ -21562,10 +22110,10 @@ var ts; // The expression is restricted to a single identifier or a sequence of identifiers separated by periods while (node) { switch (node.kind) { - case 157 /* TypeQuery */: + case 158 /* TypeQuery */: return true; case 69 /* Identifier */: - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: node = node.parent; continue; default: @@ -21574,11 +22122,11 @@ var ts; } ts.Debug.fail("should not get here"); } - // Return the assignment key for a "dotted name" (i.e. a sequence of identifiers + // Return the flow cache key for a "dotted name" (i.e. a sequence of identifiers // separated by dots). The key consists of the id of the symbol referenced by the // leftmost identifier followed by zero or more property names separated by dots. // The result is undefined if the reference isn't a dotted name. - function getAssignmentKey(node) { + function getFlowCacheKey(node) { if (node.kind === 69 /* Identifier */) { var symbol = getResolvedSymbol(node); return symbol !== unknownSymbol ? "" + getSymbolId(symbol) : undefined; @@ -21586,118 +22134,12 @@ var ts; if (node.kind === 97 /* ThisKeyword */) { return "0"; } - if (node.kind === 171 /* PropertyAccessExpression */) { - var key = getAssignmentKey(node.expression); + if (node.kind === 172 /* PropertyAccessExpression */) { + var key = getFlowCacheKey(node.expression); return key && key + "." + node.name.text; } return undefined; } - function hasInitializer(node) { - return !!(node.initializer || ts.isBindingPattern(node.parent) && hasInitializer(node.parent.parent)); - } - // For a given node compute a map of which dotted names are assigned within - // the node. - function getAssignmentMap(node) { - var assignmentMap = {}; - visit(node); - return assignmentMap; - function visitReference(node) { - if (isAssignmentTarget(node) || isCompoundAssignmentTarget(node)) { - var key = getAssignmentKey(node); - if (key) { - assignmentMap[key] = true; - } - } - ts.forEachChild(node, visit); - } - function visitVariableDeclaration(node) { - if (!ts.isBindingPattern(node.name) && hasInitializer(node)) { - assignmentMap[getSymbolId(getSymbolOfNode(node))] = true; - } - ts.forEachChild(node, visit); - } - function visit(node) { - switch (node.kind) { - case 69 /* Identifier */: - case 171 /* PropertyAccessExpression */: - visitReference(node); - break; - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: - visitVariableDeclaration(node); - break; - case 186 /* BinaryExpression */: - case 166 /* ObjectBindingPattern */: - case 167 /* ArrayBindingPattern */: - case 169 /* ArrayLiteralExpression */: - case 170 /* ObjectLiteralExpression */: - case 172 /* ElementAccessExpression */: - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 176 /* TypeAssertionExpression */: - case 194 /* AsExpression */: - case 195 /* NonNullExpression */: - case 177 /* ParenthesizedExpression */: - case 184 /* PrefixUnaryExpression */: - case 180 /* DeleteExpression */: - case 183 /* AwaitExpression */: - case 181 /* TypeOfExpression */: - case 182 /* VoidExpression */: - case 185 /* PostfixUnaryExpression */: - case 189 /* YieldExpression */: - case 187 /* ConditionalExpression */: - case 190 /* SpreadElementExpression */: - case 198 /* Block */: - case 199 /* VariableStatement */: - case 201 /* ExpressionStatement */: - case 202 /* IfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 210 /* ReturnStatement */: - case 211 /* WithStatement */: - case 212 /* SwitchStatement */: - case 226 /* CaseBlock */: - case 248 /* CaseClause */: - case 249 /* DefaultClause */: - case 213 /* LabeledStatement */: - case 214 /* ThrowStatement */: - case 215 /* TryStatement */: - case 251 /* CatchClause */: - case 240 /* JsxElement */: - case 241 /* JsxSelfClosingElement */: - case 245 /* JsxAttribute */: - case 246 /* JsxSpreadAttribute */: - case 242 /* JsxOpeningElement */: - case 247 /* JsxExpression */: - ts.forEachChild(node, visit); - break; - } - } - } - function isReferenceAssignedWithin(reference, node) { - if (reference.kind !== 97 /* ThisKeyword */) { - var key = getAssignmentKey(reference); - if (key) { - var links = getNodeLinks(node); - return (links.assignmentMap || (links.assignmentMap = getAssignmentMap(node)))[key]; - } - } - return false; - } - function isAnyPartOfReferenceAssignedWithin(reference, node) { - while (true) { - if (isReferenceAssignedWithin(reference, node)) { - return true; - } - if (reference.kind !== 171 /* PropertyAccessExpression */) { - return false; - } - reference = reference.expression; - } - } function isNullOrUndefinedLiteral(node) { return node.kind === 93 /* NullKeyword */ || node.kind === 69 /* Identifier */ && getResolvedSymbol(node) === undefinedSymbol; @@ -21707,7 +22149,7 @@ var ts; case 69 /* Identifier */: case 97 /* ThisKeyword */: return node; - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return getLeftmostIdentifierOrThis(node.expression); } return undefined; @@ -21719,101 +22161,407 @@ var ts; return getResolvedSymbol(source) === getResolvedSymbol(target); case 97 /* ThisKeyword */: return true; - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return source.name.text === target.name.text && isMatchingReference(source.expression, target.expression); } } return false; } - // Get the narrowed type of a given symbol at a given location - function getNarrowedTypeOfReference(type, reference) { - if (!(type.flags & (1 /* Any */ | 80896 /* ObjectType */ | 16384 /* Union */ | 512 /* TypeParameter */))) { - return type; - } - var leftmostNode = getLeftmostIdentifierOrThis(reference); - if (!leftmostNode) { - return type; - } - var top; - if (leftmostNode.kind === 69 /* Identifier */) { - var leftmostSymbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(leftmostNode)); - if (!leftmostSymbol) { - return type; + function containsMatchingReference(source, target) { + while (source.kind === 172 /* PropertyAccessExpression */) { + source = source.expression; + if (isMatchingReference(source, target)) { + return true; } - var declaration = leftmostSymbol.valueDeclaration; - if (!declaration || declaration.kind !== 217 /* VariableDeclaration */ && declaration.kind !== 141 /* Parameter */ && declaration.kind !== 168 /* BindingElement */) { - return type; - } - top = getDeclarationContainer(declaration); } - var originalType = type; - var nodeStack = []; - var node = reference; - loop: while (node.parent) { - var child = node; - node = node.parent; - switch (node.kind) { - case 202 /* IfStatement */: - case 187 /* ConditionalExpression */: - case 186 /* BinaryExpression */: - nodeStack.push({ node: node, child: child }); - break; - case 255 /* SourceFile */: - case 224 /* ModuleDeclaration */: - break loop; - default: - if (node === top || ts.isFunctionLikeKind(node.kind)) { - break loop; + return false; + } + 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 === 172 /* PropertyAccessExpression */ && + 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 & 16384 /* Union */)) { + 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; + } + // Remove those constituent types of declaredType to which no constituent type of assignedType is assignable. + // For example, when a variable of type number | string | boolean is assigned a value of type number | boolean, + // we remove type string. + function getAssignmentReducedType(declaredType, assignedType) { + if (declaredType !== assignedType && declaredType.flags & 16384 /* Union */) { + var reducedTypes = ts.filter(declaredType.types, function (t) { return typeMaybeAssignableTo(assignedType, t); }); + if (reducedTypes.length) { + return reducedTypes.length === 1 ? reducedTypes[0] : getUnionType(reducedTypes); + } + } + return declaredType; + } + function getTypeFacts(type) { + var flags = type.flags; + if (flags & 258 /* StringLike */) { + return strictNullChecks ? 4079361 /* StringStrictFacts */ : 4194049 /* StringFacts */; + } + if (flags & 132 /* NumberLike */) { + return strictNullChecks ? 4079234 /* NumberStrictFacts */ : 4193922 /* NumberFacts */; + } + if (flags & 8 /* Boolean */) { + return strictNullChecks ? 4078980 /* BooleanStrictFacts */ : 4193668 /* BooleanFacts */; + } + if (flags & 80896 /* ObjectType */) { + var resolved = resolveStructuredTypeMembers(type); + return resolved.callSignatures.length || resolved.constructSignatures.length || isTypeSubtypeOf(type, globalFunctionType) ? + strictNullChecks ? 1970144 /* FunctionStrictFacts */ : 4181984 /* FunctionFacts */ : + strictNullChecks ? 1972176 /* ObjectStrictFacts */ : 4184016 /* ObjectFacts */; + } + if (flags & (16 /* Void */ | 32 /* Undefined */)) { + return 2457472 /* UndefinedFacts */; + } + if (flags & 64 /* Null */) { + return 2340752 /* NullFacts */; + } + if (flags & 16777216 /* ESSymbol */) { + return strictNullChecks ? 1981320 /* SymbolStrictFacts */ : 4193160 /* SymbolFacts */; + } + if (flags & 512 /* TypeParameter */) { + var constraint = getConstraintOfTypeParameter(type); + return constraint ? getTypeFacts(constraint) : 4194303 /* All */; + } + if (flags & 32768 /* Intersection */) { + return ts.reduceLeft(type.types, function (flags, type) { return flags |= getTypeFacts(type); }, 0 /* None */); + } + return 4194303 /* All */; + } + function getTypeWithFacts(type, include) { + if (!(type.flags & 16384 /* Union */)) { + return getTypeFacts(type) & include ? type : neverType; + } + var firstType; + var types; + for (var _i = 0, _a = type.types; _i < _a.length; _i++) { + var t = _a[_i]; + if (getTypeFacts(t) & include) { + if (!firstType) { + firstType = t; + } + else { + if (!types) { + types = [firstType]; } - break; + types.push(t); + } } } - var nodes; - while (nodes = nodeStack.pop()) { - var node_1 = nodes.node, child = nodes.child; - switch (node_1.kind) { - case 202 /* IfStatement */: - // In a branch of an if statement, narrow based on controlling expression - if (child !== node_1.expression) { - type = narrowType(type, node_1.expression, /*assumeTrue*/ child === node_1.thenStatement); - } - break; - case 187 /* ConditionalExpression */: - // In a branch of a conditional expression, narrow based on controlling condition - if (child !== node_1.condition) { - type = narrowType(type, node_1.condition, /*assumeTrue*/ child === node_1.whenTrue); - } - break; - case 186 /* BinaryExpression */: - // In the right operand of an && or ||, narrow based on left operand - if (child === node_1.right) { - if (node_1.operatorToken.kind === 51 /* AmpersandAmpersandToken */) { - type = narrowType(type, node_1.left, /*assumeTrue*/ true); - } - else if (node_1.operatorToken.kind === 52 /* BarBarToken */) { - type = narrowType(type, node_1.left, /*assumeTrue*/ false); - } - } - break; - default: - ts.Debug.fail("Unreachable!"); - } - // Use original type if construct contains assignments to variable - if (type !== originalType && isAnyPartOfReferenceAssignedWithin(reference, node_1)) { - type = originalType; - } - } - // Preserve old top-level behavior - if the branch is really an empty set, revert to prior type - if (type === emptyUnionType) { - type = originalType; + return firstType ? types ? getUnionType(types, /*noSubtypeReduction*/ true) : firstType : neverType; + } + function getTypeWithDefault(type, defaultExpression) { + if (defaultExpression) { + var defaultType = checkExpression(defaultExpression); + return getUnionType([getTypeWithFacts(type, 131072 /* NEUndefined */), defaultType]); } return type; + } + function getTypeOfDestructuredProperty(type, name) { + var text = getTextOfPropertyName(name); + return getTypeOfPropertyOfType(type, text) || + isNumericLiteralName(text) && getIndexTypeOfType(type, 1 /* Number */) || + getIndexTypeOfType(type, 0 /* String */) || + unknownType; + } + function getTypeOfDestructuredArrayElement(type, index) { + return isTupleLikeType(type) && getTypeOfPropertyOfType(type, "" + index) || + checkIteratedTypeOrElementType(type, /*errorNode*/ undefined, /*allowStringInput*/ false) || + unknownType; + } + function getTypeOfDestructuredSpreadElement(type) { + return createArrayType(checkIteratedTypeOrElementType(type, /*errorNode*/ undefined, /*allowStringInput*/ false) || unknownType); + } + function getAssignedTypeOfBinaryExpression(node) { + return node.parent.kind === 170 /* ArrayLiteralExpression */ || node.parent.kind === 253 /* PropertyAssignment */ ? + getTypeWithDefault(getAssignedType(node), node.right) : + checkExpression(node.right); + } + function getAssignedTypeOfArrayLiteralElement(node, element) { + return getTypeOfDestructuredArrayElement(getAssignedType(node), ts.indexOf(node.elements, element)); + } + function getAssignedTypeOfSpreadElement(node) { + return getTypeOfDestructuredSpreadElement(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 207 /* ForInStatement */: + return stringType; + case 208 /* ForOfStatement */: + return checkRightHandSideOfForOf(parent.expression) || unknownType; + case 187 /* BinaryExpression */: + return getAssignedTypeOfBinaryExpression(parent); + case 181 /* DeleteExpression */: + return undefinedType; + case 170 /* ArrayLiteralExpression */: + return getAssignedTypeOfArrayLiteralElement(parent, node); + case 191 /* SpreadElementExpression */: + return getAssignedTypeOfSpreadElement(parent); + case 253 /* PropertyAssignment */: + return getAssignedTypeOfPropertyAssignment(parent); + case 254 /* ShorthandPropertyAssignment */: + return getAssignedTypeOfShorthandPropertyAssignment(parent); + } + return unknownType; + } + function getInitialTypeOfBindingElement(node) { + var pattern = node.parent; + var parentType = getInitialType(pattern.parent); + var type = pattern.kind === 167 /* ObjectBindingPattern */ ? + getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) : + !node.dotDotDotToken ? + getTypeOfDestructuredArrayElement(parentType, ts.indexOf(pattern.elements, node)) : + getTypeOfDestructuredSpreadElement(parentType); + return getTypeWithDefault(type, node.initializer); + } + function getTypeOfInitializer(node) { + // Return the cached type if one is available. If the type of the variable was inferred + // from its initializer, we'll already have cached the type. Otherwise we compute it now + // without caching such that transient types are reflected. + var links = getNodeLinks(node); + return links.resolvedType || checkExpression(node); + } + function getInitialTypeOfVariableDeclaration(node) { + if (node.initializer) { + return getTypeOfInitializer(node.initializer); + } + if (node.parent.parent.kind === 207 /* ForInStatement */) { + return stringType; + } + if (node.parent.parent.kind === 208 /* ForOfStatement */) { + return checkRightHandSideOfForOf(node.parent.parent.expression) || unknownType; + } + return unknownType; + } + function getInitialType(node) { + return node.kind === 218 /* VariableDeclaration */ ? + getInitialTypeOfVariableDeclaration(node) : + getInitialTypeOfBindingElement(node); + } + function getFlowTypeOfReference(reference, declaredType, assumeInitialized) { + var key; + if (!reference.flowNode || assumeInitialized && !(declaredType.flags & 97793 /* Narrowable */)) { + return declaredType; + } + var initialType = assumeInitialized ? declaredType : addNullableKind(declaredType, 32 /* Undefined */); + var visitedFlowStart = visitedFlowCount; + var result = getTypeAtFlowNode(reference.flowNode); + visitedFlowCount = visitedFlowStart; + if (reference.parent.kind === 196 /* NonNullExpression */ && getTypeWithFacts(result, 524288 /* NEUndefinedOrNull */) === neverType) { + return declaredType; + } + return result; + function getTypeAtFlowNode(flow) { + while (true) { + if (flow.flags & 256 /* Shared */) { + // We cache results of flow type resolution for shared nodes that were previously visited in + // the same getFlowTypeOfReference invocation. A node is considered shared when it is the + // antecedent of more than one node. + for (var i = visitedFlowStart; i < visitedFlowCount; i++) { + if (visitedFlowNodes[i] === flow) { + return visitedFlowTypes[i]; + } + } + } + var type = void 0; + if (flow.flags & 16 /* Assignment */) { + type = getTypeAtFlowAssignment(flow); + if (!type) { + flow = flow.antecedent; + continue; + } + } + else if (flow.flags & 96 /* Condition */) { + type = getTypeAtFlowCondition(flow); + } + else if (flow.flags & 12 /* Label */) { + if (flow.antecedents.length === 1) { + flow = flow.antecedents[0]; + continue; + } + type = flow.flags & 4 /* BranchLabel */ ? + getTypeAtFlowBranchLabel(flow) : + getTypeAtFlowLoopLabel(flow); + } + else if (flow.flags & 1 /* Unreachable */) { + // Unreachable code errors are reported in the binding phase. Here we + // simply return the declared type to reduce follow-on errors. + type = declaredType; + } + else { + // At the top of the flow we have the initial type. + type = initialType; + } + if (flow.flags & 256 /* Shared */) { + // Record visited node and the associated type in the cache. + visitedFlowNodes[visitedFlowCount] = flow; + visitedFlowTypes[visitedFlowCount] = type; + visitedFlowCount++; + } + return type; + } + } + function getTypeAtFlowAssignment(flow) { + var node = flow.node; + // Assignments only narrow the computed type if the declared type is a union type. Thus, we + // only need to evaluate the assigned type if the declared type is a union type. + if ((node.kind === 218 /* VariableDeclaration */ || node.kind === 169 /* BindingElement */) && + reference.kind === 69 /* Identifier */ && + getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(reference)) === getSymbolOfNode(node)) { + return declaredType.flags & 16384 /* Union */ ? + getAssignmentReducedType(declaredType, getInitialType(node)) : + declaredType; + } + // If the node is not a variable declaration or binding element, it is an identifier + // or a dotted name that is the target of an assignment. If we have a match, reduce + // the declared type by the assigned type. + if (isMatchingReference(reference, node)) { + return declaredType.flags & 16384 /* Union */ ? + getAssignmentReducedType(declaredType, getAssignedType(node)) : + declaredType; + } + // We didn't have a direct match. However, if the reference is a dotted name, this + // may be an assignment to a left hand part of the reference. For example, for a + // reference 'x.y.z', we may be at an assignment to 'x.y' or 'x'. In that case, + // return the declared type. + if (containsMatchingReference(reference, node)) { + return declaredType; + } + // Assignment doesn't affect reference + return undefined; + } + function getTypeAtFlowCondition(flow) { + var type = getTypeAtFlowNode(flow.antecedent); + if (type !== neverType) { + // If we have an antecedent type (meaning we're reachable in some way), we first + // attempt to narrow the antecedent type. If that produces the nothing type, then + // we take the type guard as an indication that control could reach here in a + // manner not understood by the control flow analyzer (e.g. a function argument + // has an invalid type, or a nested function has possibly made an assignment to a + // captured variable). We proceed by reverting to the declared type and then + // narrow that. + var assumeTrue = (flow.flags & 32 /* TrueCondition */) !== 0; + type = narrowType(type, flow.expression, assumeTrue); + if (type === neverType) { + type = narrowType(declaredType, flow.expression, assumeTrue); + } + } + return type; + } + function getTypeAtFlowBranchLabel(flow) { + var antecedentTypes = []; + for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) { + var antecedent = _a[_i]; + var type = getTypeAtFlowNode(antecedent); + // If the type at a particular antecedent path is the declared type and the + // reference is known to always be assigned (i.e. when declared and initial types + // are the same), there is no reason to process more antecedents since the only + // possible outcome is subtypes that will be removed in the final union type anyway. + if (type === declaredType && declaredType === initialType) { + return type; + } + if (!ts.contains(antecedentTypes, type)) { + antecedentTypes.push(type); + } + } + return getUnionType(antecedentTypes); + } + function getTypeAtFlowLoopLabel(flow) { + // If we have previously computed the control flow type for the reference at + // this flow loop junction, return the cached type. + var id = getFlowNodeId(flow); + var cache = flowLoopCaches[id] || (flowLoopCaches[id] = {}); + if (!key) { + key = getFlowCacheKey(reference); + } + if (cache[key]) { + return cache[key]; + } + // If this flow loop junction and reference are already being processed, return + // the union of the types computed for each branch so far. We should never see + // an empty array here because the first antecedent of a loop junction is always + // the non-looping control flow path that leads to the top. + for (var i = flowLoopStart; i < flowLoopCount; i++) { + if (flowLoopNodes[i] === flow && flowLoopKeys[i] === key) { + return getUnionType(flowLoopTypes[i]); + } + } + // Add the flow loop junction and reference to the in-process stack and analyze + // each antecedent code path. + var antecedentTypes = []; + 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 type = getTypeAtFlowNode(antecedent); + flowLoopCount--; + // If we see a value appear in the cache it is a sign that control flow analysis + // was restarted and completed by checkExpressionCached. We can simply pick up + // the resulting type and bail out. + if (cache[key]) { + return cache[key]; + } + if (!ts.contains(antecedentTypes, type)) { + antecedentTypes.push(type); + } + // If the type at a particular antecedent path is the declared type there is no + // reason to process more antecedents since the only possible outcome is subtypes + // that will be removed in the final union type anyway. + if (type === declaredType) { + break; + } + } + return cache[key] = getUnionType(antecedentTypes); + } function narrowTypeByTruthiness(type, expr, assumeTrue) { - return strictNullChecks && assumeTrue && isMatchingReference(expr, reference) ? getNonNullableType(type) : type; + return isMatchingReference(reference, expr) ? getTypeWithFacts(type, assumeTrue ? 1048576 /* Truthy */ : 2097152 /* Falsy */) : type; } function narrowTypeByBinaryExpression(type, expr, assumeTrue) { switch (expr.operatorToken.kind) { + case 56 /* EqualsToken */: + return narrowTypeByTruthiness(type, expr.left, assumeTrue); case 30 /* EqualsEqualsToken */: case 31 /* ExclamationEqualsToken */: case 32 /* EqualsEqualsEqualsToken */: @@ -21821,16 +22569,14 @@ var ts; if (isNullOrUndefinedLiteral(expr.right)) { return narrowTypeByNullCheck(type, expr, assumeTrue); } - if (expr.left.kind === 181 /* TypeOfExpression */ && expr.right.kind === 9 /* StringLiteral */) { + if (expr.left.kind === 182 /* TypeOfExpression */ && expr.right.kind === 9 /* StringLiteral */) { return narrowTypeByTypeof(type, expr, assumeTrue); } break; - case 51 /* AmpersandAmpersandToken */: - return narrowTypeByAnd(type, expr, assumeTrue); - case 52 /* BarBarToken */: - return narrowTypeByOr(type, expr, assumeTrue); case 91 /* InstanceOfKeyword */: return narrowTypeByInstanceof(type, expr, assumeTrue); + case 24 /* CommaToken */: + return narrowType(type, expr.right, assumeTrue); } return type; } @@ -21840,88 +22586,59 @@ var ts; if (operator === 31 /* ExclamationEqualsToken */ || operator === 33 /* ExclamationEqualsEqualsToken */) { assumeTrue = !assumeTrue; } - if (!strictNullChecks || !isMatchingReference(expr.left, reference)) { + if (!strictNullChecks || !isMatchingReference(reference, expr.left)) { return type; } var doubleEquals = operator === 30 /* EqualsEqualsToken */ || operator === 31 /* ExclamationEqualsToken */; - var exprNullableKind = doubleEquals ? 96 /* Nullable */ : - expr.right.kind === 93 /* NullKeyword */ ? 64 /* Null */ : 32 /* Undefined */; - if (assumeTrue) { - var nullableKind = getNullableKind(type) & exprNullableKind; - return nullableKind ? getNullableTypeOfKind(nullableKind) : type; - } - return removeNullableKind(type, exprNullableKind); + var facts = doubleEquals ? + assumeTrue ? 65536 /* EQUndefinedOrNull */ : 524288 /* NEUndefinedOrNull */ : + expr.right.kind === 93 /* NullKeyword */ ? + assumeTrue ? 32768 /* EQNull */ : 262144 /* NENull */ : + assumeTrue ? 16384 /* EQUndefined */ : 131072 /* NEUndefined */; + return getTypeWithFacts(type, facts); } function narrowTypeByTypeof(type, expr, assumeTrue) { // We have '==', '!=', '====', or !==' operator with 'typeof xxx' on the left // and string literal on the right var left = expr.left; var right = expr.right; - if (!isMatchingReference(left.expression, reference)) { + if (!isMatchingReference(reference, left.expression)) { + // For a reference of the form 'x.y', a 'typeof x === ...' type guard resets the + // narrowed type of 'y' to its declared type. + if (containsMatchingReference(reference, left.expression)) { + return declaredType; + } return type; } if (expr.operatorToken.kind === 31 /* ExclamationEqualsToken */ || expr.operatorToken.kind === 33 /* ExclamationEqualsEqualsToken */) { assumeTrue = !assumeTrue; } - var typeInfo = primitiveTypeInfo[right.text]; - // Don't narrow `undefined` - if (typeInfo && typeInfo.type === undefinedType) { - return type; - } - var flags; - if (typeInfo) { - flags = typeInfo.flags; - } - else { - assumeTrue = !assumeTrue; - flags = 132 /* NumberLike */ | 258 /* StringLike */ | 16777216 /* ESSymbol */ | 8 /* Boolean */; - } - // At this point we can bail if it's not a union - if (!(type.flags & 16384 /* Union */)) { - // If we're on the true branch and the type is a subtype, we should return the primitive type - if (assumeTrue && typeInfo && isTypeSubtypeOf(typeInfo.type, type)) { - return typeInfo.type; + if (assumeTrue && !(type.flags & 16384 /* Union */)) { + // We narrow a non-union type to an exact primitive type if the non-union type + // is a supertype of that primtive type. For example, type 'any' can be narrowed + // to one of the primitive types. + var targetType = ts.getProperty(typeofTypesByName, right.text); + if (targetType && isTypeSubtypeOf(targetType, type)) { + return targetType; } - // If the active non-union type would be removed from a union by this type guard, return an empty union - return filterUnion(type) ? type : emptyUnionType; - } - return getUnionType(ts.filter(type.types, filterUnion), /*noSubtypeReduction*/ true); - function filterUnion(type) { - return assumeTrue === !!(type.flags & flags); - } - } - function narrowTypeByAnd(type, expr, assumeTrue) { - if (assumeTrue) { - // The assumed result is true, therefore we narrow assuming each operand to be true. - return narrowType(narrowType(type, expr.left, /*assumeTrue*/ true), expr.right, /*assumeTrue*/ true); - } - else { - // The assumed result is false. This means either the first operand was false, or the first operand was true - // and the second operand was false. We narrow with those assumptions and union the two resulting types. - return getUnionType([ - narrowType(type, expr.left, /*assumeTrue*/ false), - narrowType(type, expr.right, /*assumeTrue*/ false) - ]); - } - } - function narrowTypeByOr(type, expr, assumeTrue) { - if (assumeTrue) { - // The assumed result is true. This means either the first operand was true, or the first operand was false - // and the second operand was true. We narrow with those assumptions and union the two resulting types. - return getUnionType([ - narrowType(type, expr.left, /*assumeTrue*/ true), - narrowType(type, expr.right, /*assumeTrue*/ true) - ]); - } - else { - // The assumed result is false, therefore we narrow assuming each operand to be false. - return narrowType(narrowType(type, expr.left, /*assumeTrue*/ false), expr.right, /*assumeTrue*/ false); } + var facts = assumeTrue ? + ts.getProperty(typeofEQFacts, right.text) || 64 /* TypeofEQHostObject */ : + ts.getProperty(typeofNEFacts, right.text) || 8192 /* TypeofNEHostObject */; + return getTypeWithFacts(type, facts); } function narrowTypeByInstanceof(type, expr, assumeTrue) { - // Check that type is not any, assumed result is true, and we have variable symbol on the left - if (isTypeAny(type) || !isMatchingReference(expr.left, reference)) { + if (!isMatchingReference(reference, expr.left)) { + // For a reference of the form 'x.y', an 'x instanceof T' type guard resets the + // narrowed type of 'y' to its declared type. + if (containsMatchingReference(reference, expr.left)) { + return declaredType; + } + return type; + } + // We never narrow type any in an instanceof guard + if (isTypeAny(type)) { return type; } // Check that right operand is a function type with a prototype property @@ -21956,30 +22673,30 @@ var ts; } return type; } - function getNarrowedType(originalType, narrowedTypeCandidate, assumeTrue) { + function getNarrowedType(type, candidate, assumeTrue) { if (!assumeTrue) { - if (originalType.flags & 16384 /* Union */) { - return getUnionType(ts.filter(originalType.types, function (t) { return !isTypeSubtypeOf(t, narrowedTypeCandidate); })); - } - return originalType; + return type.flags & 16384 /* Union */ ? + getUnionType(ts.filter(type.types, function (t) { return !isTypeSubtypeOf(t, candidate); })) : + type; } - // If the current type is a union type, remove all constituents that aren't assignable to target. If that produces - // 0 candidates, fall back to the assignability check - if (originalType.flags & 16384 /* Union */) { - var assignableConstituents = ts.filter(originalType.types, function (t) { return isTypeAssignableTo(t, narrowedTypeCandidate); }); + // If the current type is a union type, remove all constituents that aren't assignable to + // the candidate type. If one or more constituents remain, return a union of those. + if (type.flags & 16384 /* Union */) { + var assignableConstituents = ts.filter(type.types, function (t) { return isTypeAssignableTo(t, candidate); }); if (assignableConstituents.length) { return getUnionType(assignableConstituents); } } - var targetType = originalType.flags & 512 /* TypeParameter */ ? getApparentType(originalType) : originalType; - if (isTypeAssignableTo(narrowedTypeCandidate, targetType)) { - // Narrow to the target type if it's assignable to the current type - return narrowedTypeCandidate; - } - return originalType; + // If the candidate type is assignable to the target type, narrow to the candidate type. + // Otherwise, if the current type is assignable to the candidate, keep the current type. + // Otherwise, the types are completely unrelated, so narrow to the empty type. + var targetType = type.flags & 512 /* TypeParameter */ ? getApparentType(type) : type; + return isTypeAssignableTo(candidate, targetType) ? candidate : + isTypeAssignableTo(type, candidate) ? type : + neverType; } function narrowTypeByTypePredicate(type, callExpression, assumeTrue) { - if (type.flags & 1 /* Any */) { + if (type.flags & 1 /* Any */ || !hasMatchingArgument(callExpression, reference)) { return type; } var signature = getResolvedSignature(callExpression); @@ -21989,18 +22706,26 @@ var ts; } if (ts.isIdentifierTypePredicate(predicate)) { var predicateArgument = callExpression.arguments[predicate.parameterIndex]; - if (predicateArgument && isMatchingReference(predicateArgument, reference)) { - return getNarrowedType(type, predicate.type, assumeTrue); + if (predicateArgument) { + if (isMatchingReference(reference, predicateArgument)) { + return getNarrowedType(type, predicate.type, assumeTrue); + } + if (containsMatchingReference(reference, predicateArgument)) { + return declaredType; + } } } else { var invokedExpression = skipParenthesizedNodes(callExpression.expression); - if (invokedExpression.kind === 172 /* ElementAccessExpression */ || invokedExpression.kind === 171 /* PropertyAccessExpression */) { + if (invokedExpression.kind === 173 /* ElementAccessExpression */ || invokedExpression.kind === 172 /* PropertyAccessExpression */) { var accessExpression = invokedExpression; var possibleReference = skipParenthesizedNodes(accessExpression.expression); - if (isMatchingReference(possibleReference, reference)) { + if (isMatchingReference(reference, possibleReference)) { return getNarrowedType(type, predicate.type, assumeTrue); } + if (containsMatchingReference(reference, possibleReference)) { + return declaredType; + } } } return type; @@ -22011,15 +22736,15 @@ var ts; switch (expr.kind) { case 69 /* Identifier */: case 97 /* ThisKeyword */: - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return narrowTypeByTruthiness(type, expr, assumeTrue); - case 173 /* CallExpression */: + case 174 /* CallExpression */: return narrowTypeByTypePredicate(type, expr, assumeTrue); - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return narrowType(type, expr.expression, assumeTrue); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return narrowTypeByBinaryExpression(type, expr, assumeTrue); - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: if (expr.operator === 49 /* ExclamationToken */) { return narrowType(type, expr.operand, !assumeTrue); } @@ -22029,123 +22754,34 @@ var ts; } } function getTypeOfSymbolAtLocation(symbol, location) { - // The language service will always care about the narrowed type of a symbol, because that is - // the type the language says the symbol should have. - var type = getTypeOfSymbol(symbol); + // If we have an identifier or a property access at the given location, if the location is + // an dotted name expression, and if the location is not an assignment target, obtain the type + // of the expression (which will reflect control flow analysis). If the expression indeed + // resolved to the given symbol, return the narrowed type. if (location.kind === 69 /* Identifier */) { if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) { location = location.parent; } - // If location is an identifier or property access that references the given - // symbol, use the location as the reference with respect to which we narrow. - if (ts.isExpression(location)) { - checkExpression(location); - if (getNodeLinks(location).resolvedSymbol === symbol) { - return getNarrowedTypeOfReference(type, location); + if (ts.isExpression(location) && !ts.isAssignmentTarget(location)) { + var type = checkExpression(location); + if (getExportSymbolOfValueSymbolIfExported(getNodeLinks(location).resolvedSymbol) === symbol) { + return type; } } } // The location isn't a reference to the given symbol, meaning we're being asked // a hypothetical question of what type the symbol would have if there was a reference - // to it at the given location. To answer that question we manufacture a transient - // identifier at the location and narrow with respect to that identifier. - return getNarrowedTypeOfReference(type, createTransientIdentifier(symbol, location)); + // to it at the given location. Since we have no control flow information for the + // hypotherical reference (control flow information is created and attached by the + // binder), we simply return the declared type of the symbol. + return getTypeOfSymbol(symbol); } function skipParenthesizedNodes(expression) { - while (expression.kind === 177 /* ParenthesizedExpression */) { + while (expression.kind === 178 /* ParenthesizedExpression */) { expression = expression.expression; } return expression; } - function findFirstAssignment(symbol, container) { - return visit(ts.isFunctionLike(container) ? container.body : container); - function visit(node) { - switch (node.kind) { - case 69 /* Identifier */: - var assignment = getAssignmentRoot(node); - return assignment && getResolvedSymbol(node) === symbol ? assignment : undefined; - case 186 /* BinaryExpression */: - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: - case 166 /* ObjectBindingPattern */: - case 167 /* ArrayBindingPattern */: - case 169 /* ArrayLiteralExpression */: - case 170 /* ObjectLiteralExpression */: - case 171 /* PropertyAccessExpression */: - case 172 /* ElementAccessExpression */: - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 176 /* TypeAssertionExpression */: - case 194 /* AsExpression */: - case 195 /* NonNullExpression */: - case 177 /* ParenthesizedExpression */: - case 184 /* PrefixUnaryExpression */: - case 180 /* DeleteExpression */: - case 183 /* AwaitExpression */: - case 181 /* TypeOfExpression */: - case 182 /* VoidExpression */: - case 185 /* PostfixUnaryExpression */: - case 189 /* YieldExpression */: - case 187 /* ConditionalExpression */: - case 190 /* SpreadElementExpression */: - case 199 /* VariableStatement */: - case 201 /* ExpressionStatement */: - case 202 /* IfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 210 /* ReturnStatement */: - case 211 /* WithStatement */: - case 212 /* SwitchStatement */: - case 226 /* CaseBlock */: - case 248 /* CaseClause */: - case 249 /* DefaultClause */: - case 213 /* LabeledStatement */: - case 214 /* ThrowStatement */: - case 215 /* TryStatement */: - case 251 /* CatchClause */: - case 240 /* JsxElement */: - case 241 /* JsxSelfClosingElement */: - case 245 /* JsxAttribute */: - case 246 /* JsxSpreadAttribute */: - case 242 /* JsxOpeningElement */: - case 247 /* JsxExpression */: - case 198 /* Block */: - case 255 /* SourceFile */: - return ts.forEachChild(node, visit); - } - return undefined; - } - } - function checkVariableAssignedBefore(symbol, reference) { - if (!(symbol.flags & 3 /* Variable */)) { - return; - } - var declaration = symbol.valueDeclaration; - if (!declaration || declaration.kind !== 217 /* VariableDeclaration */ || declaration.initializer || ts.isInAmbientContext(declaration)) { - return; - } - var parentParentKind = declaration.parent.parent.kind; - if (parentParentKind === 207 /* ForOfStatement */ || parentParentKind === 206 /* ForInStatement */) { - return; - } - var declarationContainer = ts.getContainingFunction(declaration) || ts.getSourceFileOfNode(declaration); - var referenceContainer = ts.getContainingFunction(reference) || ts.getSourceFileOfNode(reference); - if (declarationContainer !== referenceContainer) { - return; - } - var links = getSymbolLinks(symbol); - if (!links.firstAssignmentChecked) { - links.firstAssignmentChecked = true; - links.firstAssignment = findFirstAssignment(symbol, declarationContainer); - } - if (links.firstAssignment && links.firstAssignment.end <= reference.pos) { - return; - } - error(reference, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); - } function checkIdentifier(node) { var symbol = getResolvedSymbol(node); // As noted in ECMAScript 6 language spec, arrow functions never have an arguments objects. @@ -22156,7 +22792,7 @@ var ts; // can explicitly bound arguments objects if (symbol === argumentsSymbol) { var container = ts.getContainingFunction(node); - if (container.kind === 179 /* ArrowFunction */) { + if (container.kind === 180 /* ArrowFunction */) { if (languageVersion < 2 /* ES6 */) { error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression); } @@ -22174,7 +22810,7 @@ var ts; // behavior of class names in ES6. if (languageVersion === 2 /* ES6 */ && localOrExportSymbol.flags & 32 /* Class */ - && localOrExportSymbol.valueDeclaration.kind === 220 /* ClassDeclaration */ + && localOrExportSymbol.valueDeclaration.kind === 221 /* ClassDeclaration */ && ts.nodeIsDecorated(localOrExportSymbol.valueDeclaration)) { var container = ts.getContainingClass(node); while (container !== undefined) { @@ -22190,10 +22826,20 @@ var ts; checkCollisionWithCapturedThisVariable(node, node); checkNestedBlockScopedBinding(node, symbol); var type = getTypeOfSymbol(localOrExportSymbol); - if (strictNullChecks && !isAssignmentTarget(node) && !(type.flags & 1 /* Any */) && !(getNullableKind(type) & 32 /* Undefined */)) { - checkVariableAssignedBefore(symbol, node); + if (!(localOrExportSymbol.flags & 3 /* Variable */) || ts.isAssignmentTarget(node)) { + return type; } - return getNarrowedTypeOfReference(type, node); + var declaration = localOrExportSymbol.valueDeclaration; + var assumeInitialized = !strictNullChecks || (type.flags & 1 /* Any */) !== 0 || !declaration || + ts.getRootDeclaration(declaration).kind === 142 /* Parameter */ || ts.isInAmbientContext(declaration) || + ts.getContainingFunctionOrModule(declaration) !== ts.getContainingFunctionOrModule(node); + var flowType = getFlowTypeOfReference(node, type, assumeInitialized); + if (!assumeInitialized && !(getNullableKind(type) & 32 /* Undefined */) && getNullableKind(flowType) & 32 /* Undefined */) { + error(node, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); + // Return the declared type to reduce follow-on errors + return type; + } + return flowType; } function isInsideFunction(node, threshold) { var current = node; @@ -22208,7 +22854,7 @@ var ts; function checkNestedBlockScopedBinding(node, symbol) { if (languageVersion >= 2 /* ES6 */ || (symbol.flags & (2 /* BlockScopedVariable */ | 32 /* Class */)) === 0 || - symbol.valueDeclaration.parent.kind === 251 /* CatchClause */) { + symbol.valueDeclaration.parent.kind === 252 /* CatchClause */) { return; } // 1. walk from the use site up to the declaration and check @@ -22233,8 +22879,8 @@ var ts; } // mark variables that are declared in loop initializer and reassigned inside the body of ForStatement. // if body of ForStatement will be converted to function then we'll need a extra machinery to propagate reassigned values back. - if (container.kind === 205 /* ForStatement */ && - ts.getAncestor(symbol.valueDeclaration, 218 /* VariableDeclarationList */).parent === container && + if (container.kind === 206 /* ForStatement */ && + ts.getAncestor(symbol.valueDeclaration, 219 /* VariableDeclarationList */).parent === container && isAssignedInBodyOfForStatement(node, container)) { getNodeLinks(symbol.valueDeclaration).flags |= 2097152 /* NeedsLoopOutParameter */; } @@ -22248,15 +22894,15 @@ var ts; function isAssignedInBodyOfForStatement(node, container) { var current = node; // skip parenthesized nodes - while (current.parent.kind === 177 /* ParenthesizedExpression */) { + while (current.parent.kind === 178 /* ParenthesizedExpression */) { current = current.parent; } // check if node is used as LHS in some assignment expression var isAssigned = false; - if (isAssignmentTarget(current)) { + if (ts.isAssignmentTarget(current)) { isAssigned = true; } - else if ((current.parent.kind === 184 /* PrefixUnaryExpression */ || current.parent.kind === 185 /* PostfixUnaryExpression */)) { + else if ((current.parent.kind === 185 /* PrefixUnaryExpression */ || current.parent.kind === 186 /* PostfixUnaryExpression */)) { var expr = current.parent; isAssigned = expr.operator === 41 /* PlusPlusToken */ || expr.operator === 42 /* MinusMinusToken */; } @@ -22277,7 +22923,7 @@ var ts; } function captureLexicalThis(node, container) { getNodeLinks(node).flags |= 2 /* LexicalThis */; - if (container.kind === 144 /* PropertyDeclaration */ || container.kind === 147 /* Constructor */) { + if (container.kind === 145 /* PropertyDeclaration */ || container.kind === 148 /* Constructor */) { var classNode = container.parent; getNodeLinks(classNode).flags |= 4 /* CaptureThis */; } @@ -22325,7 +22971,7 @@ var ts; // tell whether 'this' needs to be captured. var container = ts.getThisContainer(node, /* includeArrowFunctions */ true); var needToCaptureLexicalThis = false; - if (container.kind === 147 /* Constructor */) { + if (container.kind === 148 /* Constructor */) { var containingClassDecl = container.parent; var baseTypeNode = ts.getClassExtendsHeritageClauseElement(containingClassDecl); // If a containing class does not have extends clause or the class extends null @@ -22346,32 +22992,32 @@ var ts; } } // Now skip arrow functions to get the "real" owner of 'this'. - if (container.kind === 179 /* ArrowFunction */) { + if (container.kind === 180 /* ArrowFunction */) { container = ts.getThisContainer(container, /* includeArrowFunctions */ false); // When targeting es6, arrow function lexically bind "this" so we do not need to do the work of binding "this" in emitted code needToCaptureLexicalThis = (languageVersion < 2 /* ES6 */); } switch (container.kind) { - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body); // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks break; - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location); // do not return here so in case if lexical this is captured - it will be reflected in flags on NodeLinks break; - case 147 /* Constructor */: + case 148 /* Constructor */: if (isInConstructorArgumentInitializer(node, container)) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments); } break; - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: if (container.flags & 32 /* Static */) { error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer); } break; - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name); break; } @@ -22379,6 +23025,21 @@ var ts; captureLexicalThis(node, container); } if (ts.isFunctionLike(container)) { + // If this is a function in a JS file, it might be a class method. Check if it's the RHS + // of a x.prototype.y = function [name]() { .... } + if (container.kind === 179 /* FunctionExpression */ && + ts.isInJavaScriptFile(container.parent) && + ts.getSpecialPropertyAssignmentKind(container.parent) === 3 /* PrototypeProperty */) { + // Get the 'x' of 'x.prototype.y = f' (here, 'f' is 'container') + var className = container.parent // x.prototype.y = f + .left // x.prototype.y + .expression // x.prototype + .expression; // x + var classSymbol = checkExpression(className).symbol; + if (classSymbol && classSymbol.members && (classSymbol.flags & 16 /* Function */)) { + return getInferredClassType(classSymbol); + } + } var type = getContextuallyTypedThisType(container); if (type) { return type; @@ -22387,40 +23048,17 @@ var ts; if (signature.thisType) { return signature.thisType; } - if (container.parent && container.parent.kind === 170 /* ObjectLiteralExpression */) { - // Note: this works because object literal methods are deferred, - // which means that the type of the containing object literal is already known. - var type_1 = checkExpressionCached(container.parent); - if (type_1) { - return type_1; - } - } } if (ts.isClassLike(container.parent)) { var symbol = getSymbolOfNode(container.parent); var type = container.flags & 32 /* Static */ ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType; - return getNarrowedTypeOfReference(type, node); + return getFlowTypeOfReference(node, type, /*assumeInitialized*/ true); } if (ts.isInJavaScriptFile(node)) { var type = getTypeForThisExpressionFromJSDoc(container); if (type && type !== unknownType) { return type; } - // If this is a function in a JS file, it might be a class method. Check if it's the RHS - // of a x.prototype.y = function [name]() { .... } - if (container.kind === 178 /* FunctionExpression */) { - if (ts.getSpecialPropertyAssignmentKind(container.parent) === 3 /* PrototypeProperty */) { - // Get the 'x' of 'x.prototype.y = f' (here, 'f' is 'container') - var className = container.parent // x.prototype.y = f - .left // x.prototype.y - .expression // x.prototype - .expression; // x - var classSymbol = checkExpression(className).symbol; - if (classSymbol && classSymbol.members && (classSymbol.flags & 16 /* Function */)) { - return getInferredClassType(classSymbol); - } - } - } } if (compilerOptions.noImplicitThis) { // With noImplicitThis, functions may not reference 'this' if it has type 'any' @@ -22430,28 +23068,28 @@ var ts; } function getTypeForThisExpressionFromJSDoc(node) { var typeTag = ts.getJSDocTypeTag(node); - if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === 268 /* JSDocFunctionType */) { + if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === 269 /* JSDocFunctionType */) { var jsDocFunctionType = typeTag.typeExpression.type; - if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === 271 /* JSDocThisType */) { + if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === 272 /* JSDocThisType */) { return getTypeFromTypeNode(jsDocFunctionType.parameters[0].type); } } } function isInConstructorArgumentInitializer(node, constructorDecl) { for (var n = node; n && n !== constructorDecl; n = n.parent) { - if (n.kind === 141 /* Parameter */) { + if (n.kind === 142 /* Parameter */) { return true; } } return false; } function checkSuperExpression(node) { - var isCallExpression = node.parent.kind === 173 /* CallExpression */ && node.parent.expression === node; + var isCallExpression = node.parent.kind === 174 /* CallExpression */ && node.parent.expression === node; var container = ts.getSuperContainer(node, /*stopOnFunctions*/ true); var needToCaptureLexicalThis = false; if (!isCallExpression) { // adjust the container reference in case if super is used inside arrow functions with arbitrary deep nesting - while (container && container.kind === 179 /* ArrowFunction */) { + while (container && container.kind === 180 /* ArrowFunction */) { container = ts.getSuperContainer(container, /*stopOnFunctions*/ true); needToCaptureLexicalThis = languageVersion < 2 /* ES6 */; } @@ -22465,16 +23103,16 @@ var ts; // [super.foo()]() {} // } var current = node; - while (current && current !== container && current.kind !== 139 /* ComputedPropertyName */) { + while (current && current !== container && current.kind !== 140 /* ComputedPropertyName */) { current = current.parent; } - if (current && current.kind === 139 /* ComputedPropertyName */) { + if (current && current.kind === 140 /* ComputedPropertyName */) { 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 === 170 /* ObjectLiteralExpression */)) { + else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 171 /* ObjectLiteralExpression */)) { error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions); } else { @@ -22545,8 +23183,8 @@ var ts; // This helper creates an object with a "value" property that wraps the `super` property or indexed access for both get and set. // This is required for destructuring assignments, as a call expression cannot be used as the target of a destructuring assignment // while a property access can. - if (container.kind === 146 /* MethodDeclaration */ && container.flags & 256 /* Async */) { - if (ts.isSuperPropertyOrElementAccess(node.parent) && isAssignmentTarget(node.parent)) { + if (container.kind === 147 /* MethodDeclaration */ && container.flags & 256 /* Async */) { + if (ts.isSuperPropertyOrElementAccess(node.parent) && ts.isAssignmentTarget(node.parent)) { getNodeLinks(container).flags |= 4096 /* AsyncMethodWithSuperBinding */; } else { @@ -22559,7 +23197,7 @@ var ts; // in this case they should also use correct lexical this captureLexicalThis(node.parent, container); } - if (container.parent.kind === 170 /* ObjectLiteralExpression */) { + if (container.parent.kind === 171 /* ObjectLiteralExpression */) { if (languageVersion < 2 /* ES6 */) { error(node, ts.Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher); return unknownType; @@ -22579,7 +23217,7 @@ var ts; } return unknownType; } - if (container.kind === 147 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) { + if (container.kind === 148 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) { // issue custom error message for super property access in constructor arguments (to be aligned with old compiler) error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments); return unknownType; @@ -22594,7 +23232,7 @@ var ts; if (isCallExpression) { // TS 1.0 SPEC (April 2014): 4.8.1 // Super calls are only permitted in constructors of derived classes - return container.kind === 147 /* Constructor */; + return container.kind === 148 /* Constructor */; } else { // TS 1.0 SPEC (April 2014) @@ -22602,21 +23240,21 @@ var ts; // - In a constructor, instance member function, instance member accessor, or instance member variable initializer where this references a derived class instance // - In a static member function or static member accessor // topmost container must be something that is directly nested in the class declaration\object literal expression - if (ts.isClassLike(container.parent) || container.parent.kind === 170 /* ObjectLiteralExpression */) { + if (ts.isClassLike(container.parent) || container.parent.kind === 171 /* ObjectLiteralExpression */) { if (container.flags & 32 /* Static */) { - return container.kind === 146 /* MethodDeclaration */ || - container.kind === 145 /* MethodSignature */ || - container.kind === 148 /* GetAccessor */ || - container.kind === 149 /* SetAccessor */; + return container.kind === 147 /* MethodDeclaration */ || + container.kind === 146 /* MethodSignature */ || + container.kind === 149 /* GetAccessor */ || + container.kind === 150 /* SetAccessor */; } else { - return container.kind === 146 /* MethodDeclaration */ || - container.kind === 145 /* MethodSignature */ || - container.kind === 148 /* GetAccessor */ || - container.kind === 149 /* SetAccessor */ || - container.kind === 144 /* PropertyDeclaration */ || - container.kind === 143 /* PropertySignature */ || - container.kind === 147 /* Constructor */; + return container.kind === 147 /* MethodDeclaration */ || + container.kind === 146 /* MethodSignature */ || + container.kind === 149 /* GetAccessor */ || + container.kind === 150 /* SetAccessor */ || + container.kind === 145 /* PropertyDeclaration */ || + container.kind === 144 /* PropertySignature */ || + container.kind === 148 /* Constructor */; } } } @@ -22624,9 +23262,7 @@ var ts; } } function getContextuallyTypedThisType(func) { - if ((isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) && - isContextSensitive(func) && - func.kind !== 179 /* ArrowFunction */) { + if (isContextSensitiveFunctionOrObjectLiteralMethod(func) && func.kind !== 180 /* ArrowFunction */) { var contextualSignature = getContextualSignature(func); if (contextualSignature) { return contextualSignature.thisType; @@ -22637,31 +23273,61 @@ var ts; // Return contextual type of parameter or undefined if no contextual type is available function getContextuallyTypedParameterType(parameter) { var func = parameter.parent; - if (isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) { - if (isContextSensitive(func)) { - 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 (indexOfParameter < len) { - return getTypeAtPosition(contextualSignature, indexOfParameter); - } - // If last parameter is contextually rest parameter get its type - if (funcHasRestParameters && - indexOfParameter === (func.parameters.length - 1) && - isRestParameterIndex(contextualSignature, func.parameters.length - 1)) { - return getTypeOfSymbol(ts.lastOrUndefined(contextualSignature.parameters)); + if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) { + var iife = getImmediatelyInvokedFunctionExpression(func); + if (iife) { + var indexOfParameter = ts.indexOf(func.parameters, parameter); + if (iife.arguments && indexOfParameter < iife.arguments.length) { + if (parameter.dotDotDotToken) { + var restTypes = []; + for (var i = indexOfParameter; i < iife.arguments.length; i++) { + restTypes.push(getTypeOfExpression(iife.arguments[i])); + } + return createArrayType(getUnionType(restTypes)); } + var links = getNodeLinks(iife); + var cached = links.resolvedSignature; + links.resolvedSignature = anySignature; + var type = checkExpression(iife.arguments[indexOfParameter]); + 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 (indexOfParameter < len) { + return getTypeAtPosition(contextualSignature, indexOfParameter); + } + // If last parameter is contextually rest parameter get its type + if (funcHasRestParameters && + indexOfParameter === (func.parameters.length - 1) && + isRestParameterIndex(contextualSignature, func.parameters.length - 1)) { + return getTypeOfSymbol(ts.lastOrUndefined(contextualSignature.parameters)); } } } return undefined; } + function getImmediatelyInvokedFunctionExpression(func) { + if (isFunctionExpressionOrArrowFunction(func)) { + var prev = func; + var parent_8 = func.parent; + while (parent_8.kind === 178 /* ParenthesizedExpression */) { + prev = parent_8; + parent_8 = parent_8.parent; + } + if (parent_8.kind === 174 /* CallExpression */ && parent_8.expression === prev) { + return parent_8; + } + } + } // In a variable, parameter or property declaration with a type annotation, - // the contextual type of an initializer expression is the type of the variable, parameter or property. - // Otherwise, in a parameter declaration of a contextually typed function expression, - // the contextual type of an initializer expression is the contextual type of the parameter. + // the contextual type of an initializer expression is the type of the variable, parameter or property. + // Otherwise, in a parameter declaration of a contextually typed function expression, + // the contextual type of an initializer expression is the contextual type of the parameter. // Otherwise, in a variable or parameter declaration with a binding pattern name, // the contextual type of an initializer expression is the type implied by the binding pattern. // Otherwise, in a binding pattern inside a variable or parameter declaration, @@ -22672,7 +23338,7 @@ var ts; if (declaration.type) { return getTypeFromTypeNode(declaration.type); } - if (declaration.kind === 141 /* Parameter */) { + if (declaration.kind === 142 /* Parameter */) { var type = getContextuallyTypedParameterType(declaration); if (type) { return type; @@ -22717,7 +23383,7 @@ var ts; } function isInParameterInitializerBeforeContainingFunction(node) { while (node.parent && !ts.isFunctionLike(node.parent)) { - if (node.parent.kind === 141 /* Parameter */ && node.parent.initializer === node) { + if (node.parent.kind === 142 /* Parameter */ && node.parent.initializer === node) { return true; } node = node.parent; @@ -22728,8 +23394,8 @@ var ts; // If the containing function has a return type annotation, is a constructor, or is a get accessor whose // corresponding set accessor has a type annotation, return statements in the function are contextually typed if (functionDecl.type || - functionDecl.kind === 147 /* Constructor */ || - functionDecl.kind === 148 /* GetAccessor */ && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(functionDecl.symbol, 149 /* SetAccessor */))) { + functionDecl.kind === 148 /* Constructor */ || + functionDecl.kind === 149 /* GetAccessor */ && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(functionDecl.symbol, 150 /* SetAccessor */))) { return getReturnTypeOfSignature(getSignatureFromDeclaration(functionDecl)); } // Otherwise, if the containing function is contextually typed by a function type with exactly one call signature @@ -22745,13 +23411,13 @@ var ts; var args = getEffectiveCallArguments(callTarget); var argIndex = ts.indexOf(args, arg); if (argIndex >= 0) { - var signature = getResolvedSignature(callTarget); + var signature = getResolvedOrAnySignature(callTarget); return getTypeAtPosition(signature, argIndex); } return undefined; } function getContextualTypeForSubstitutionExpression(template, substitutionExpression) { - if (template.parent.kind === 175 /* TaggedTemplateExpression */) { + if (template.parent.kind === 176 /* TaggedTemplateExpression */) { return getContextualTypeForArgument(template.parent, substitutionExpression); } return undefined; @@ -22878,13 +23544,13 @@ var ts; var kind = attribute.kind; var jsxElement = attribute.parent; var attrsType = getJsxElementAttributesType(jsxElement); - if (attribute.kind === 245 /* JsxAttribute */) { + if (attribute.kind === 246 /* JsxAttribute */) { if (!attrsType || isTypeAny(attrsType)) { return undefined; } return getTypeOfPropertyOfType(attrsType, attribute.name.text); } - else if (attribute.kind === 246 /* JsxSpreadAttribute */) { + else if (attribute.kind === 247 /* JsxSpreadAttribute */) { return attrsType; } ts.Debug.fail("Expected JsxAttribute or JsxSpreadAttribute, got ts.SyntaxKind[" + kind + "]"); @@ -22922,40 +23588,40 @@ var ts; } var parent = node.parent; switch (parent.kind) { - case 217 /* VariableDeclaration */: - case 141 /* Parameter */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 168 /* BindingElement */: + case 218 /* VariableDeclaration */: + case 142 /* Parameter */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 169 /* BindingElement */: return getContextualTypeForInitializerExpression(node); - case 179 /* ArrowFunction */: - case 210 /* ReturnStatement */: + case 180 /* ArrowFunction */: + case 211 /* ReturnStatement */: return getContextualTypeForReturnExpression(node); - case 189 /* YieldExpression */: + case 190 /* YieldExpression */: return getContextualTypeForYieldOperand(parent); - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: return getContextualTypeForArgument(parent, node); - case 176 /* TypeAssertionExpression */: - case 194 /* AsExpression */: + case 177 /* TypeAssertionExpression */: + case 195 /* AsExpression */: return getTypeFromTypeNode(parent.type); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return getContextualTypeForBinaryOperand(node); - case 252 /* PropertyAssignment */: + case 253 /* PropertyAssignment */: return getContextualTypeForObjectLiteralElement(parent); - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: return getContextualTypeForElementExpression(node); - case 187 /* ConditionalExpression */: + case 188 /* ConditionalExpression */: return getContextualTypeForConditionalOperand(node); - case 196 /* TemplateSpan */: - ts.Debug.assert(parent.parent.kind === 188 /* TemplateExpression */); + case 197 /* TemplateSpan */: + ts.Debug.assert(parent.parent.kind === 189 /* TemplateExpression */); return getContextualTypeForSubstitutionExpression(parent.parent, node); - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return getContextualType(parent); - case 247 /* JsxExpression */: + case 248 /* JsxExpression */: return getContextualType(parent); - case 245 /* JsxAttribute */: - case 246 /* JsxSpreadAttribute */: + case 246 /* JsxAttribute */: + case 247 /* JsxSpreadAttribute */: return getContextualTypeForJsxAttribute(parent); } return undefined; @@ -22972,7 +23638,7 @@ var ts; } } function isFunctionExpressionOrArrowFunction(node) { - return node.kind === 178 /* FunctionExpression */ || node.kind === 179 /* ArrowFunction */; + return node.kind === 179 /* FunctionExpression */ || node.kind === 180 /* ArrowFunction */; } function getContextualSignatureForFunctionLikeDeclaration(node) { // Only function expressions, arrow functions, and object literal methods are contextually typed. @@ -22980,16 +23646,19 @@ var ts; ? getContextualSignature(node) : undefined; } + function getContextualTypeForFunctionLikeDeclaration(node) { + return ts.isObjectLiteralMethod(node) ? + getContextualTypeForObjectLiteralMethod(node) : + getApparentTypeOfContextualType(node); + } // Return the contextual signature for a given expression node. A contextual type provides a // contextual signature if it has a single call signature and if that call signature is non-generic. // If the contextual type is a union type, get the signature from each type possible and if they are // all identical ignoring their return type, the result is same signature but with return type as // union type of return types from these signatures function getContextualSignature(node) { - ts.Debug.assert(node.kind !== 146 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); - var type = ts.isObjectLiteralMethod(node) - ? getContextualTypeForObjectLiteralMethod(node) - : getApparentTypeOfContextualType(node); + ts.Debug.assert(node.kind !== 147 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + var type = getContextualTypeForFunctionLikeDeclaration(node); if (!type) { return undefined; } @@ -23044,41 +23713,6 @@ var ts; function isInferentialContext(mapper) { return mapper && mapper.context; } - // Return the root assignment node of an assignment target - function getAssignmentRoot(node) { - while (node.parent.kind === 177 /* ParenthesizedExpression */) { - node = node.parent; - } - while (true) { - if (node.parent.kind === 252 /* PropertyAssignment */) { - node = node.parent.parent; - } - else if (node.parent.kind === 169 /* ArrayLiteralExpression */) { - node = node.parent; - } - else { - break; - } - } - var parent = node.parent; - return parent.kind === 186 /* BinaryExpression */ && - parent.operatorToken.kind === 56 /* EqualsToken */ && - parent.left === node ? parent : undefined; - } - // A node is an assignment target if it is on the left hand side of an '=' token, if it is parented by a property - // assignment in an object literal that is an assignment target, or if it is parented by an array literal that is - // an assignment target. Examples include 'a = xxx', '{ p: a } = xxx', '[{ p: a}] = xxx'. - function isAssignmentTarget(node) { - return !!getAssignmentRoot(node); - } - function isCompoundAssignmentTarget(node) { - var parent = node.parent; - if (parent.kind === 186 /* BinaryExpression */ && parent.left === node) { - var operator = parent.operatorToken.kind; - return operator >= 56 /* FirstAssignment */ && operator <= 68 /* LastAssignment */; - } - return false; - } function checkSpreadElementExpression(node, contextualMapper) { // It is usually not safe to call checkExpressionCached if we can be contextually typing. // You can tell that we are contextually typing because of the contextualMapper parameter. @@ -23090,17 +23724,17 @@ var ts; return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, /*allowStringInput*/ false); } function hasDefaultValue(node) { - return (node.kind === 168 /* BindingElement */ && !!node.initializer) || - (node.kind === 186 /* BinaryExpression */ && node.operatorToken.kind === 56 /* EqualsToken */); + return (node.kind === 169 /* BindingElement */ && !!node.initializer) || + (node.kind === 187 /* BinaryExpression */ && node.operatorToken.kind === 56 /* EqualsToken */); } function checkArrayLiteral(node, contextualMapper) { var elements = node.elements; var hasSpreadElement = false; var elementTypes = []; - var inDestructuringPattern = isAssignmentTarget(node); + var inDestructuringPattern = ts.isAssignmentTarget(node); for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) { var e = elements_1[_i]; - if (inDestructuringPattern && e.kind === 190 /* SpreadElementExpression */) { + if (inDestructuringPattern && e.kind === 191 /* SpreadElementExpression */) { // Given the following situation: // var c: {}; // [...c] = ["", 0]; @@ -23124,7 +23758,7 @@ var ts; var type = checkExpression(e, contextualMapper); elementTypes.push(type); } - hasSpreadElement = hasSpreadElement || e.kind === 190 /* SpreadElementExpression */; + hasSpreadElement = hasSpreadElement || e.kind === 191 /* SpreadElementExpression */; } if (!hasSpreadElement) { // If array literal is actually a destructuring pattern, mark it as an implied type. We do this such @@ -23139,7 +23773,7 @@ var ts; var pattern = contextualType.pattern; // If array literal is contextually typed by a binding pattern or an assignment pattern, pad the resulting // tuple type with the corresponding binding or assignment element types to make the lengths equal. - if (pattern && (pattern.kind === 167 /* ArrayBindingPattern */ || pattern.kind === 169 /* ArrayLiteralExpression */)) { + if (pattern && (pattern.kind === 168 /* ArrayBindingPattern */ || pattern.kind === 170 /* ArrayLiteralExpression */)) { var patternElements = pattern.elements; for (var i = elementTypes.length; i < patternElements.length; i++) { var patternElement = patternElements[i]; @@ -23147,7 +23781,7 @@ var ts; elementTypes.push(contextualType.elementTypes[i]); } else { - if (patternElement.kind !== 192 /* OmittedExpression */) { + if (patternElement.kind !== 193 /* OmittedExpression */) { error(patternElement, ts.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value); } elementTypes.push(unknownType); @@ -23162,7 +23796,7 @@ var ts; return createArrayType(elementTypes.length ? getUnionType(elementTypes) : emptyArrayElementType); } function isNumericName(name) { - return name.kind === 139 /* ComputedPropertyName */ ? isNumericComputedName(name) : isNumericLiteralName(name.text); + return name.kind === 140 /* ComputedPropertyName */ ? isNumericComputedName(name) : isNumericLiteralName(name.text); } function isNumericComputedName(name) { // It seems odd to consider an expression of type Any to result in a numeric name, @@ -23222,14 +23856,14 @@ var ts; return createIndexInfo(unionType, /*isReadonly*/ false); } function checkObjectLiteral(node, contextualMapper) { - var inDestructuringPattern = isAssignmentTarget(node); + var inDestructuringPattern = ts.isAssignmentTarget(node); // Grammar checking checkGrammarObjectLiteralExpression(node, inDestructuringPattern); var propertiesTable = {}; var propertiesArray = []; var contextualType = getApparentTypeOfContextualType(node); var contextualTypeHasPattern = contextualType && contextualType.pattern && - (contextualType.pattern.kind === 166 /* ObjectBindingPattern */ || contextualType.pattern.kind === 170 /* ObjectLiteralExpression */); + (contextualType.pattern.kind === 167 /* ObjectBindingPattern */ || contextualType.pattern.kind === 171 /* ObjectLiteralExpression */); var typeFlags = 0; var patternWithComputedProperties = false; var hasComputedStringProperty = false; @@ -23237,18 +23871,18 @@ var ts; for (var _i = 0, _a = node.properties; _i < _a.length; _i++) { var memberDecl = _a[_i]; var member = memberDecl.symbol; - if (memberDecl.kind === 252 /* PropertyAssignment */ || - memberDecl.kind === 253 /* ShorthandPropertyAssignment */ || + if (memberDecl.kind === 253 /* PropertyAssignment */ || + memberDecl.kind === 254 /* ShorthandPropertyAssignment */ || ts.isObjectLiteralMethod(memberDecl)) { var type = void 0; - if (memberDecl.kind === 252 /* PropertyAssignment */) { + if (memberDecl.kind === 253 /* PropertyAssignment */) { type = checkPropertyAssignment(memberDecl, contextualMapper); } - else if (memberDecl.kind === 146 /* MethodDeclaration */) { + else if (memberDecl.kind === 147 /* MethodDeclaration */) { type = checkObjectLiteralMethod(memberDecl, contextualMapper); } else { - ts.Debug.assert(memberDecl.kind === 253 /* ShorthandPropertyAssignment */); + ts.Debug.assert(memberDecl.kind === 254 /* ShorthandPropertyAssignment */); type = checkExpression(memberDecl.name, contextualMapper); } typeFlags |= type.flags; @@ -23256,8 +23890,8 @@ var ts; if (inDestructuringPattern) { // If object literal is an assignment pattern and if the assignment pattern specifies a default value // for the property, make the property optional. - var isOptional = (memberDecl.kind === 252 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) || - (memberDecl.kind === 253 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer); + var isOptional = (memberDecl.kind === 253 /* PropertyAssignment */ && hasDefaultValue(memberDecl.initializer)) || + (memberDecl.kind === 254 /* ShorthandPropertyAssignment */ && memberDecl.objectAssignmentInitializer); if (isOptional) { prop.flags |= 536870912 /* Optional */; } @@ -23291,7 +23925,7 @@ var ts; // an ordinary function declaration(section 6.1) with no parameters. // A set accessor declaration is processed in the same manner // as an ordinary function declaration with a single parameter and a Void return type. - ts.Debug.assert(memberDecl.kind === 148 /* GetAccessor */ || memberDecl.kind === 149 /* SetAccessor */); + ts.Debug.assert(memberDecl.kind === 149 /* GetAccessor */ || memberDecl.kind === 150 /* SetAccessor */); checkAccessorDeclaration(memberDecl); } if (ts.hasDynamicName(memberDecl)) { @@ -23349,13 +23983,13 @@ var ts; for (var _i = 0, _a = node.children; _i < _a.length; _i++) { var child = _a[_i]; switch (child.kind) { - case 247 /* JsxExpression */: + case 248 /* JsxExpression */: checkJsxExpression(child); break; - case 240 /* JsxElement */: + case 241 /* JsxElement */: checkJsxElement(child); break; - case 241 /* JsxSelfClosingElement */: + case 242 /* JsxSelfClosingElement */: checkJsxSelfClosingElement(child); break; } @@ -23373,7 +24007,7 @@ var ts; * Returns true iff React would emit this tag name as a string rather than an identifier or qualified name */ function isJsxIntrinsicIdentifier(tagName) { - if (tagName.kind === 138 /* QualifiedName */) { + if (tagName.kind === 139 /* QualifiedName */) { return false; } else { @@ -23484,13 +24118,13 @@ var ts; * element is not a class element, or the class element type cannot be determined, returns 'undefined'. * For example, in the element , the element instance type is `MyClass` (not `typeof MyClass`). */ - function getJsxElementInstanceType(node) { - var valueType = checkExpression(node.tagName); + function getJsxElementInstanceType(node, valueType) { + ts.Debug.assert(!(valueType.flags & 16384 /* Union */)); if (isTypeAny(valueType)) { // Short-circuit if the class tag is using an element type 'any' return anyType; } - // Resolve the signatures, preferring constructors + // Resolve the signatures, preferring constructor var signatures = getSignaturesOfType(valueType, 1 /* Construct */); if (signatures.length === 0) { // No construct signatures, try call signatures @@ -23535,6 +24169,94 @@ var ts; return undefined; } } + /** + * Given React element instance type and the class type, resolve the Jsx type + * Pass elemType to handle individual type in the union typed element type. + */ + function getResolvedJsxType(node, elemType, elemClassType) { + if (!elemType) { + elemType = checkExpression(node.tagName); + } + if (elemType.flags & 16384 /* Union */) { + var types = elemType.types; + return getUnionType(types.map(function (type) { + return getResolvedJsxType(node, type, elemClassType); + })); + } + // Get the element instance type (the result of newing or invoking this tag) + var elemInstanceType = getJsxElementInstanceType(node, elemType); + if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { + // Is this is a stateless function component? See if its single signature's return type is + // assignable to the JSX Element Type + if (jsxElementType) { + var callSignatures = elemType && getSignaturesOfType(elemType, 0 /* Call */); + var callSignature = callSignatures && callSignatures.length > 0 && callSignatures[0]; + var callReturnType = callSignature && getReturnTypeOfSignature(callSignature); + var paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0])); + if (callReturnType && isTypeAssignableTo(callReturnType, jsxElementType)) { + // Intersect in JSX.IntrinsicAttributes if it exists + var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes); + if (intrinsicAttributes !== unknownType) { + paramType = intersectTypes(intrinsicAttributes, paramType); + } + return paramType; + } + } + } + // Issue an error if this return type isn't assignable to JSX.ElementClass + if (elemClassType) { + checkTypeRelatedTo(elemInstanceType, elemClassType, assignableRelation, node, 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) { + // There is no type ElementAttributesProperty, return 'any' + return anyType; + } + else if (propsName === "") { + // If there is no e.g. 'props' member in ElementAttributesProperty, use the element class type instead + return elemInstanceType; + } + else { + var attributesType = getTypeOfPropertyOfType(elemInstanceType, propsName); + if (!attributesType) { + // There is no property named 'props' on this instance type + return emptyObjectType; + } + else if (isTypeAny(attributesType) || (attributesType === unknownType)) { + // Props is of type 'any' or unknown + return attributesType; + } + else if (attributesType.flags & 16384 /* Union */) { + // Props cannot be a union type + error(node.tagName, ts.Diagnostics.JSX_element_attributes_type_0_may_not_be_a_union_type, typeToString(attributesType)); + return anyType; + } + else { + // Normal case -- add in IntrinsicClassElements and IntrinsicElements + 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; + } + } + } /** * Given an opening/self-closing element, get the 'element attributes type', i.e. the type that tells * us which attributes are valid on a given element. @@ -23550,85 +24272,14 @@ var ts; else if (links.jsxFlags & 2 /* IntrinsicIndexedElement */) { return links.resolvedJsxType = getIndexInfoOfSymbol(symbol, 0 /* String */).type; } + else { + return links.resolvedJsxType = unknownType; + } } else { - // Get the element instance type (the result of newing or invoking this tag) - var elemInstanceType = getJsxElementInstanceType(node); var elemClassType = getJsxGlobalElementClassType(); - if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { - // Is this is a stateless function component? See if its single signature's return type is - // assignable to the JSX Element Type - if (jsxElementType) { - var elemType = checkExpression(node.tagName); - var callSignatures = elemType && getSignaturesOfType(elemType, 0 /* Call */); - var callSignature = callSignatures && callSignatures.length > 0 && callSignatures[0]; - var callReturnType = callSignature && getReturnTypeOfSignature(callSignature); - var paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0])); - if (callReturnType && isTypeAssignableTo(callReturnType, jsxElementType)) { - // Intersect in JSX.IntrinsicAttributes if it exists - var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes); - if (intrinsicAttributes !== unknownType) { - paramType = intersectTypes(intrinsicAttributes, paramType); - } - return links.resolvedJsxType = paramType; - } - } - } - // Issue an error if this return type isn't assignable to JSX.ElementClass - if (elemClassType) { - checkTypeRelatedTo(elemInstanceType, elemClassType, assignableRelation, node, ts.Diagnostics.JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements); - } - if (isTypeAny(elemInstanceType)) { - return links.resolvedJsxType = elemInstanceType; - } - var propsName = getJsxElementPropertiesName(); - if (propsName === undefined) { - // There is no type ElementAttributesProperty, return 'any' - return links.resolvedJsxType = anyType; - } - else if (propsName === "") { - // If there is no e.g. 'props' member in ElementAttributesProperty, use the element class type instead - return links.resolvedJsxType = elemInstanceType; - } - else { - var attributesType = getTypeOfPropertyOfType(elemInstanceType, propsName); - if (!attributesType) { - // There is no property named 'props' on this instance type - return links.resolvedJsxType = emptyObjectType; - } - else if (isTypeAny(attributesType) || (attributesType === unknownType)) { - // Props is of type 'any' or unknown - return links.resolvedJsxType = attributesType; - } - else if (attributesType.flags & 16384 /* Union */) { - // Props cannot be a union type - error(node.tagName, ts.Diagnostics.JSX_element_attributes_type_0_may_not_be_a_union_type, typeToString(attributesType)); - return links.resolvedJsxType = anyType; - } - else { - // Normal case -- add in IntrinsicClassElements and IntrinsicElements - 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 links.resolvedJsxType = apparentAttributesType; - } - } + return links.resolvedJsxType = getResolvedJsxType(node, undefined, elemClassType); } - return links.resolvedJsxType = unknownType; } return links.resolvedJsxType; } @@ -23682,11 +24333,11 @@ var ts; // thus should have their types ignored var sawSpreadedAny = false; for (var i = node.attributes.length - 1; i >= 0; i--) { - if (node.attributes[i].kind === 245 /* JsxAttribute */) { + if (node.attributes[i].kind === 246 /* JsxAttribute */) { checkJsxAttribute((node.attributes[i]), targetAttributesType, nameTable); } else { - ts.Debug.assert(node.attributes[i].kind === 246 /* JsxSpreadAttribute */); + ts.Debug.assert(node.attributes[i].kind === 247 /* JsxSpreadAttribute */); var spreadType = checkJsxSpreadAttribute((node.attributes[i]), targetAttributesType, nameTable); if (isTypeAny(spreadType)) { sawSpreadedAny = true; @@ -23716,7 +24367,7 @@ var ts; // If a symbol is a synthesized symbol with no value declaration, we assume it is a property. Example of this are the synthesized // '.prototype' property as well as synthesized tuple index properties. function getDeclarationKindFromSymbol(s) { - return s.valueDeclaration ? s.valueDeclaration.kind : 144 /* PropertyDeclaration */; + return s.valueDeclaration ? s.valueDeclaration.kind : 145 /* PropertyDeclaration */; } function getDeclarationFlagsFromSymbol(s) { return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : s.flags & 134217728 /* Prototype */ ? 4 /* Public */ | 32 /* Static */ : 0; @@ -23732,7 +24383,7 @@ var ts; function checkClassPropertyAccess(node, left, type, prop) { var flags = getDeclarationFlagsFromSymbol(prop); var declaringClass = getDeclaredTypeOfSymbol(getParentOfSymbol(prop)); - var errorNode = node.kind === 171 /* PropertyAccessExpression */ || node.kind === 217 /* VariableDeclaration */ ? + var errorNode = node.kind === 172 /* PropertyAccessExpression */ || node.kind === 218 /* VariableDeclaration */ ? node.name : node.right; if (left.kind === 95 /* SuperKeyword */) { @@ -23743,7 +24394,7 @@ var ts; // - In a static member function or static member accessor // where this references the constructor function object of a derived class, // a super property access is permitted and must specify a public static member function of the base class. - if (languageVersion < 2 /* ES6 */ && getDeclarationKindFromSymbol(prop) !== 146 /* MethodDeclaration */) { + if (languageVersion < 2 /* ES6 */ && getDeclarationKindFromSymbol(prop) !== 147 /* MethodDeclaration */) { // `prop` refers to a *property* declared in the super class // rather than a *method*, so it does not satisfy the above criteria. error(errorNode, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword); @@ -23805,8 +24456,14 @@ var ts; } function checkNonNullExpression(node) { var type = checkExpression(node); - if (strictNullChecks && getNullableKind(type)) { - error(node, ts.Diagnostics.Object_is_possibly_null_or_undefined); + if (strictNullChecks) { + var kind = getNullableKind(type); + if (kind) { + error(node, kind & 32 /* Undefined */ ? kind & 64 /* Null */ ? + ts.Diagnostics.Object_is_possibly_null_or_undefined : + ts.Diagnostics.Object_is_possibly_undefined : + ts.Diagnostics.Object_is_possibly_null); + } return getNonNullableType(type); } return type; @@ -23839,11 +24496,28 @@ var ts; checkClassPropertyAccess(node, left, apparentType, prop); } var propType = getTypeOfSymbol(prop); - return node.kind === 171 /* PropertyAccessExpression */ && prop.flags & 4 /* Property */ ? - getNarrowedTypeOfReference(propType, node) : propType; + if (node.kind !== 172 /* PropertyAccessExpression */ || ts.isAssignmentTarget(node) || + !(propType.flags & 16384 /* Union */) && !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */))) { + return propType; + } + var leftmostNode = getLeftmostIdentifierOrThis(node); + if (!leftmostNode) { + return propType; + } + if (leftmostNode.kind === 69 /* Identifier */) { + var leftmostSymbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(leftmostNode)); + if (!leftmostSymbol) { + return propType; + } + var declaration = leftmostSymbol.valueDeclaration; + if (!declaration || declaration.kind !== 218 /* VariableDeclaration */ && declaration.kind !== 142 /* Parameter */ && declaration.kind !== 169 /* BindingElement */) { + return propType; + } + } + return getFlowTypeOfReference(node, propType, /*assumeInitialized*/ true); } function isValidPropertyAccess(node, propertyName) { - var left = node.kind === 171 /* PropertyAccessExpression */ + var left = node.kind === 172 /* PropertyAccessExpression */ ? node.expression : node.left; var type = checkExpression(left); @@ -23860,7 +24534,7 @@ var ts; */ function getForInVariableSymbol(node) { var initializer = node.initializer; - if (initializer.kind === 218 /* VariableDeclarationList */) { + if (initializer.kind === 219 /* VariableDeclarationList */) { var variable = initializer.declarations[0]; if (variable && !ts.isBindingPattern(variable.name)) { return getSymbolOfNode(variable); @@ -23889,7 +24563,7 @@ var ts; var child = expr; var node = expr.parent; while (node) { - if (node.kind === 206 /* ForInStatement */ && + if (node.kind === 207 /* ForInStatement */ && child === node.statement && getForInVariableSymbol(node) === symbol && hasNumericPropertyNames(checkExpression(node.expression))) { @@ -23906,7 +24580,7 @@ var ts; // Grammar checking if (!node.argumentExpression) { var sourceFile = ts.getSourceFileOfNode(node); - if (node.parent.kind === 174 /* NewExpression */ && node.parent.expression === node) { + if (node.parent.kind === 175 /* NewExpression */ && 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); @@ -23991,7 +24665,7 @@ var ts; if (indexArgumentExpression.kind === 9 /* StringLiteral */ || indexArgumentExpression.kind === 8 /* NumericLiteral */) { return indexArgumentExpression.text; } - if (indexArgumentExpression.kind === 172 /* ElementAccessExpression */ || indexArgumentExpression.kind === 171 /* PropertyAccessExpression */) { + if (indexArgumentExpression.kind === 173 /* ElementAccessExpression */ || indexArgumentExpression.kind === 172 /* PropertyAccessExpression */) { var value = getConstantValue(indexArgumentExpression); if (value !== undefined) { return value.toString(); @@ -24046,10 +24720,10 @@ var ts; return true; } function resolveUntypedCall(node) { - if (node.kind === 175 /* TaggedTemplateExpression */) { + if (node.kind === 176 /* TaggedTemplateExpression */) { checkExpression(node.template); } - else if (node.kind !== 142 /* Decorator */) { + else if (node.kind !== 143 /* Decorator */) { ts.forEach(node.arguments, function (argument) { checkExpression(argument); }); @@ -24079,13 +24753,13 @@ var ts; for (var _i = 0, signatures_2 = signatures; _i < signatures_2.length; _i++) { var signature = signatures_2[_i]; var symbol = signature.declaration && getSymbolOfNode(signature.declaration); - var parent_7 = signature.declaration && signature.declaration.parent; + var parent_9 = signature.declaration && signature.declaration.parent; if (!lastSymbol || symbol === lastSymbol) { - if (lastParent && parent_7 === lastParent) { + if (lastParent && parent_9 === lastParent) { index++; } else { - lastParent = parent_7; + lastParent = parent_9; index = cutoffIndex; } } @@ -24093,7 +24767,7 @@ var ts; // current declaration belongs to a different symbol // set cutoffIndex so re-orderings in the future won't change result set from 0 to cutoffIndex index = cutoffIndex = result.length; - lastParent = parent_7; + lastParent = parent_9; } lastSymbol = symbol; // specialized signatures always need to be placed before non-specialized signatures regardless @@ -24115,7 +24789,7 @@ var ts; function getSpreadArgumentIndex(args) { for (var i = 0; i < args.length; i++) { var arg = args[i]; - if (arg && arg.kind === 190 /* SpreadElementExpression */) { + if (arg && arg.kind === 191 /* SpreadElementExpression */) { return i; } } @@ -24127,13 +24801,13 @@ var ts; var callIsIncomplete; // In incomplete call we want to be lenient when we have too few arguments var isDecorator; var spreadArgIndex = -1; - if (node.kind === 175 /* TaggedTemplateExpression */) { + if (node.kind === 176 /* TaggedTemplateExpression */) { var tagExpression = node; // Even if the call is incomplete, we'll have a missing expression as our last argument, // so we can say the count is just the arg list length adjustedArgCount = args.length; typeArguments = undefined; - if (tagExpression.template.kind === 188 /* TemplateExpression */) { + if (tagExpression.template.kind === 189 /* TemplateExpression */) { // If a tagged template expression lacks a tail literal, the call is incomplete. // Specifically, a template only can end in a TemplateTail or a Missing literal. var templateExpression = tagExpression.template; @@ -24150,7 +24824,7 @@ var ts; callIsIncomplete = !!templateLiteral.isUnterminated; } } - else if (node.kind === 142 /* Decorator */) { + else if (node.kind === 143 /* Decorator */) { isDecorator = true; typeArguments = undefined; adjustedArgCount = getEffectiveArgumentCount(node, /*args*/ undefined, signature); @@ -24159,7 +24833,7 @@ var ts; var callExpression = node; if (!callExpression.arguments) { // This only happens when we have something of the form: 'new C' - ts.Debug.assert(callExpression.kind === 174 /* NewExpression */); + ts.Debug.assert(callExpression.kind === 175 /* NewExpression */); return signature.minArgumentCount === 0; } // For IDE scenarios we may have an incomplete call, so a trailing comma is tantamount to adding another argument. @@ -24243,7 +24917,7 @@ var ts; for (var i = 0; i < argCount; i++) { var arg = getEffectiveArgument(node, args, i); // If the effective argument is 'undefined', then it is an argument that is present but is synthetic. - if (arg === undefined || arg.kind !== 192 /* OmittedExpression */) { + if (arg === undefined || arg.kind !== 193 /* OmittedExpression */) { var paramType = getTypeAtPosition(signature, i); var argType = getEffectiveArgumentType(node, i, arg); // If the effective argument type is 'undefined', there is no synthetic type @@ -24299,7 +24973,7 @@ var ts; return typeArgumentsAreAssignable; } function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) { - if (signature.thisType && signature.thisType !== voidType && node.kind !== 174 /* NewExpression */) { + if (signature.thisType && signature.thisType !== voidType && node.kind !== 175 /* NewExpression */) { // If the called expression is not of the form `x.f` or `x["f"]`, then sourceType = voidType // If the signature's 'this' type is voidType, then the check is skipped -- anything is compatible. // If the expression is a new expression, then the check is skipped. @@ -24316,7 +24990,7 @@ var ts; for (var i = 0; i < argCount; i++) { var arg = getEffectiveArgument(node, args, i); // If the effective argument is 'undefined', then it is an argument that is present but is synthetic. - if (arg === undefined || arg.kind !== 192 /* OmittedExpression */) { + if (arg === undefined || arg.kind !== 193 /* OmittedExpression */) { // Check spread elements against rest type (from arity check we know spread argument corresponds to a rest parameter) var paramType = getTypeAtPosition(signature, i); var argType = getEffectiveArgumentType(node, i, arg); @@ -24340,12 +25014,12 @@ var ts; * Returns the this argument in calls like x.f(...) and x[f](...). Undefined otherwise. */ function getThisArgumentOfCall(node) { - if (node.kind === 173 /* CallExpression */) { + if (node.kind === 174 /* CallExpression */) { var callee = node.expression; - if (callee.kind === 171 /* PropertyAccessExpression */) { + if (callee.kind === 172 /* PropertyAccessExpression */) { return callee.expression; } - else if (callee.kind === 172 /* ElementAccessExpression */) { + else if (callee.kind === 173 /* ElementAccessExpression */) { return callee.expression; } } @@ -24361,16 +25035,16 @@ var ts; */ function getEffectiveCallArguments(node) { var args; - if (node.kind === 175 /* TaggedTemplateExpression */) { + if (node.kind === 176 /* TaggedTemplateExpression */) { var template = node.template; args = [undefined]; - if (template.kind === 188 /* TemplateExpression */) { + if (template.kind === 189 /* TemplateExpression */) { ts.forEach(template.templateSpans, function (span) { args.push(span.expression); }); } } - else if (node.kind === 142 /* Decorator */) { + else if (node.kind === 143 /* Decorator */) { // For a decorator, we return undefined as we will determine // the number and types of arguments for a decorator using // `getEffectiveArgumentCount` and `getEffectiveArgumentType` below. @@ -24395,19 +25069,19 @@ var ts; * Otherwise, the argument count is the length of the 'args' array. */ function getEffectiveArgumentCount(node, args, signature) { - if (node.kind === 142 /* Decorator */) { + if (node.kind === 143 /* Decorator */) { switch (node.parent.kind) { - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: // A class decorator will have one argument (see `ClassDecorator` in core.d.ts) return 1; - case 144 /* PropertyDeclaration */: + case 145 /* PropertyDeclaration */: // A property declaration decorator will have two arguments (see // `PropertyDecorator` in core.d.ts) return 2; - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: // A method or accessor declaration decorator will have two or three arguments (see // `PropertyDecorator` and `MethodDecorator` in core.d.ts) // If we are emitting decorators for ES3, we will only pass two arguments. @@ -24417,7 +25091,7 @@ var ts; // If the method decorator signature only accepts a target and a key, we will only // type check those arguments. return signature.parameters.length >= 3 ? 3 : 2; - case 141 /* Parameter */: + case 142 /* Parameter */: // A parameter declaration decorator will have three arguments (see // `ParameterDecorator` in core.d.ts) return 3; @@ -24441,25 +25115,25 @@ var ts; */ function getEffectiveDecoratorFirstArgumentType(node) { // The first argument to a decorator is its `target`. - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { // For a class decorator, the `target` is the type of the class (e.g. the // "static" or "constructor" side of the class) var classSymbol = getSymbolOfNode(node); return getTypeOfSymbol(classSymbol); } - if (node.kind === 141 /* Parameter */) { + if (node.kind === 142 /* Parameter */) { // For a parameter decorator, the `target` is the parent type of the // parameter's containing method. node = node.parent; - if (node.kind === 147 /* Constructor */) { + if (node.kind === 148 /* Constructor */) { var classSymbol = getSymbolOfNode(node); return getTypeOfSymbol(classSymbol); } } - if (node.kind === 144 /* PropertyDeclaration */ || - node.kind === 146 /* MethodDeclaration */ || - node.kind === 148 /* GetAccessor */ || - node.kind === 149 /* SetAccessor */) { + if (node.kind === 145 /* PropertyDeclaration */ || + node.kind === 147 /* MethodDeclaration */ || + node.kind === 149 /* GetAccessor */ || + node.kind === 150 /* SetAccessor */) { // For a property or method decorator, the `target` is the // "static"-side type of the parent of the member if the member is // declared "static"; otherwise, it is the "instance"-side type of the @@ -24486,21 +25160,21 @@ var ts; */ function getEffectiveDecoratorSecondArgumentType(node) { // The second argument to a decorator is its `propertyKey` - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { ts.Debug.fail("Class decorators should not have a second synthetic argument."); return unknownType; } - if (node.kind === 141 /* Parameter */) { + if (node.kind === 142 /* Parameter */) { node = node.parent; - if (node.kind === 147 /* Constructor */) { + if (node.kind === 148 /* Constructor */) { // For a constructor parameter decorator, the `propertyKey` will be `undefined`. return anyType; } } - if (node.kind === 144 /* PropertyDeclaration */ || - node.kind === 146 /* MethodDeclaration */ || - node.kind === 148 /* GetAccessor */ || - node.kind === 149 /* SetAccessor */) { + if (node.kind === 145 /* PropertyDeclaration */ || + node.kind === 147 /* MethodDeclaration */ || + node.kind === 149 /* GetAccessor */ || + node.kind === 150 /* SetAccessor */) { // The `propertyKey` for a property or method decorator will be a // string literal type if the member name is an identifier, number, or string; // otherwise, if the member name is a computed property name it will @@ -24511,7 +25185,7 @@ var ts; case 8 /* NumericLiteral */: case 9 /* StringLiteral */: return getStringLiteralTypeForText(element.name.text); - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: var nameType = checkComputedPropertyName(element.name); if (isTypeOfKind(nameType, 16777216 /* ESSymbol */)) { return nameType; @@ -24537,21 +25211,21 @@ var ts; function getEffectiveDecoratorThirdArgumentType(node) { // The third argument to a decorator is either its `descriptor` for a method decorator // or its `parameterIndex` for a parameter decorator - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { ts.Debug.fail("Class decorators should not have a third synthetic argument."); return unknownType; } - if (node.kind === 141 /* Parameter */) { + if (node.kind === 142 /* Parameter */) { // The `parameterIndex` for a parameter decorator is always a number return numberType; } - if (node.kind === 144 /* PropertyDeclaration */) { + if (node.kind === 145 /* PropertyDeclaration */) { ts.Debug.fail("Property decorators should not have a third synthetic argument."); return unknownType; } - if (node.kind === 146 /* MethodDeclaration */ || - node.kind === 148 /* GetAccessor */ || - node.kind === 149 /* SetAccessor */) { + if (node.kind === 147 /* MethodDeclaration */ || + node.kind === 149 /* GetAccessor */ || + node.kind === 150 /* SetAccessor */) { // The `descriptor` for a method decorator will be a `TypedPropertyDescriptor` // for the type of the member. var propertyType = getTypeOfNode(node); @@ -24583,10 +25257,10 @@ var ts; // Decorators provide special arguments, a tagged template expression provides // a special first argument, and string literals get string literal types // unless we're reporting errors - if (node.kind === 142 /* Decorator */) { + if (node.kind === 143 /* Decorator */) { return getEffectiveDecoratorArgumentType(node, argIndex); } - else if (argIndex === 0 && node.kind === 175 /* TaggedTemplateExpression */) { + else if (argIndex === 0 && node.kind === 176 /* TaggedTemplateExpression */) { return getGlobalTemplateStringsArrayType(); } // This is not a synthetic argument, so we return 'undefined' @@ -24598,8 +25272,8 @@ var ts; */ function getEffectiveArgument(node, args, argIndex) { // For a decorator or the first argument of a tagged template expression we return undefined. - if (node.kind === 142 /* Decorator */ || - (argIndex === 0 && node.kind === 175 /* TaggedTemplateExpression */)) { + if (node.kind === 143 /* Decorator */ || + (argIndex === 0 && node.kind === 176 /* TaggedTemplateExpression */)) { return undefined; } return args[argIndex]; @@ -24608,11 +25282,11 @@ var ts; * Gets the error node to use when reporting errors for an effective argument. */ function getEffectiveArgumentErrorNode(node, argIndex, arg) { - if (node.kind === 142 /* Decorator */) { + if (node.kind === 143 /* Decorator */) { // For a decorator, we use the expression of the decorator for error reporting. return node.expression; } - else if (argIndex === 0 && node.kind === 175 /* TaggedTemplateExpression */) { + else if (argIndex === 0 && node.kind === 176 /* TaggedTemplateExpression */) { // For a the first argument of a tagged template expression, we use the template of the tag for error reporting. return node.template; } @@ -24621,8 +25295,8 @@ var ts; } } function resolveCall(node, signatures, candidatesOutArray, headMessage) { - var isTaggedTemplate = node.kind === 175 /* TaggedTemplateExpression */; - var isDecorator = node.kind === 142 /* Decorator */; + var isTaggedTemplate = node.kind === 176 /* TaggedTemplateExpression */; + var isDecorator = node.kind === 143 /* Decorator */; var typeArguments; if (!isTaggedTemplate && !isDecorator) { typeArguments = node.typeArguments; @@ -25000,16 +25674,16 @@ var ts; */ function getDiagnosticHeadMessageForDecoratorResolution(node) { switch (node.parent.kind) { - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression; - case 141 /* Parameter */: + case 142 /* Parameter */: return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression; - case 144 /* PropertyDeclaration */: + case 145 /* PropertyDeclaration */: return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression; - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression; } } @@ -25036,6 +25710,19 @@ var ts; } return resolveCall(node, callSignatures, candidatesOutArray, headMessage); } + function resolveSignature(node, candidatesOutArray) { + switch (node.kind) { + case 174 /* CallExpression */: + return resolveCallExpression(node, candidatesOutArray); + case 175 /* NewExpression */: + return resolveNewExpression(node, candidatesOutArray); + case 176 /* TaggedTemplateExpression */: + return resolveTaggedTemplateExpression(node, candidatesOutArray); + case 143 /* Decorator */: + return resolveDecorator(node, candidatesOutArray); + } + ts.Debug.fail("Branch in 'resolveSignature' should be unreachable."); + } // candidatesOutArray is passed by signature help in the language service, and collectCandidates // must fill it up with the appropriate candidate signatures function getResolvedSignature(node, candidatesOutArray) { @@ -25044,25 +25731,22 @@ var ts; // However, it is possible that either candidatesOutArray was not passed in the first time, // or that a different candidatesOutArray was passed in. Therefore, we need to redo the work // to correctly fill the candidatesOutArray. - if (!links.resolvedSignature || candidatesOutArray) { - links.resolvedSignature = anySignature; - if (node.kind === 173 /* CallExpression */) { - links.resolvedSignature = resolveCallExpression(node, candidatesOutArray); - } - else if (node.kind === 174 /* NewExpression */) { - links.resolvedSignature = resolveNewExpression(node, candidatesOutArray); - } - else if (node.kind === 175 /* TaggedTemplateExpression */) { - links.resolvedSignature = resolveTaggedTemplateExpression(node, candidatesOutArray); - } - else if (node.kind === 142 /* Decorator */) { - links.resolvedSignature = resolveDecorator(node, candidatesOutArray); - } - else { - ts.Debug.fail("Branch in 'getResolvedSignature' should be unreachable."); - } + var cached = links.resolvedSignature; + if (cached && cached !== anySignature && !candidatesOutArray) { + return cached; } - return links.resolvedSignature; + links.resolvedSignature = anySignature; + var result = resolveSignature(node, candidatesOutArray); + // If signature resolution originated in control flow type analysis (for example to compute the + // assigned type in a flow assignment) we don't cache the result as it may be based on temporary + // types from the control flow analysis. + links.resolvedSignature = flowLoopStart === flowLoopCount ? result : cached; + return result; + } + function getResolvedOrAnySignature(node) { + // If we're already in the process of resolving the given signature, don't resolve again as + // that could cause infinite recursion. Instead, return anySignature. + return getNodeLinks(node).resolvedSignature === anySignature ? anySignature : getResolvedSignature(node); } function getInferredClassType(symbol) { var links = getSymbolLinks(symbol); @@ -25083,12 +25767,12 @@ var ts; if (node.expression.kind === 95 /* SuperKeyword */) { return voidType; } - if (node.kind === 174 /* NewExpression */) { + if (node.kind === 175 /* NewExpression */) { var declaration = signature.declaration; if (declaration && - declaration.kind !== 147 /* Constructor */ && - declaration.kind !== 151 /* ConstructSignature */ && - declaration.kind !== 156 /* ConstructorType */ && + declaration.kind !== 148 /* Constructor */ && + declaration.kind !== 152 /* ConstructSignature */ && + declaration.kind !== 157 /* ConstructorType */ && !ts.isJSDocConstructSignature(declaration)) { // When resolved signature is a call signature (and not a construct signature) the result type is any, unless // the declaring function had members created through 'x.prototype.y = expr' or 'this.y = expr' psuedodeclarations @@ -25160,7 +25844,7 @@ var ts; if (ts.isBindingPattern(node.name)) { for (var _i = 0, _a = node.name.elements; _i < _a.length; _i++) { var element = _a[_i]; - if (element.kind !== 192 /* OmittedExpression */) { + if (element.kind !== 193 /* OmittedExpression */) { if (element.name.kind === 69 /* Identifier */) { getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element); } @@ -25173,6 +25857,12 @@ var ts; var links = getSymbolLinks(parameter); if (!links.type) { links.type = instantiateType(contextualType, mapper); + // if inference didn't come up with anything but {}, fall back to the binding pattern if present. + if (links.type === emptyObjectType && + (parameter.valueDeclaration.name.kind === 167 /* ObjectBindingPattern */ || + parameter.valueDeclaration.name.kind === 168 /* ArrayBindingPattern */)) { + links.type = getTypeFromBindingPattern(parameter.valueDeclaration.name); + } assignBindingElementTypes(parameter.valueDeclaration); } else if (isInferentialContext(mapper)) { @@ -25232,7 +25922,7 @@ var ts; } var isAsync = ts.isAsyncFunctionLike(func); var type; - if (func.body.kind !== 198 /* Block */) { + if (func.body.kind !== 199 /* Block */) { type = checkExpressionCached(func.body, contextualMapper); if (isAsync) { // From within an async function you can return either a non-promise value or a promise. Any @@ -25258,6 +25948,9 @@ var ts; else { var hasImplicitReturn = !!(func.flags & 32768 /* HasImplicitReturn */); types = checkAndAggregateReturnExpressionTypes(func.body, contextualMapper, isAsync, hasImplicitReturn); + if (!types) { + return neverType; + } if (types.length === 0) { if (isAsync) { // For an async function, the return type will not be void, but rather a Promise for void. @@ -25268,9 +25961,7 @@ var ts; } return promiseType; } - else { - return voidType; - } + return voidType; } } // When yield/return statements are contextually typed we allow the return type to be a union type. @@ -25341,7 +26032,7 @@ var ts; // the native Promise type by the caller. type = checkAwaitedType(type, body.parent, ts.Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member); } - if (!ts.contains(aggregatedTypes, type)) { + if (type !== neverType && !ts.contains(aggregatedTypes, type)) { aggregatedTypes.push(type); } } @@ -25349,6 +26040,9 @@ var ts; hasOmittedExpressions = true; } }); + if (aggregatedTypes.length === 0 && !hasOmittedExpressions && !hasImplicitReturn) { + return undefined; + } if (strictNullChecks && aggregatedTypes.length && (hasOmittedExpressions || hasImplicitReturn)) { if (!ts.contains(aggregatedTypes, undefinedType)) { aggregatedTypes.push(undefinedType); @@ -25375,11 +26069,14 @@ var ts; } // If all we have is a function signature, or an arrow function with an expression body, then there is nothing to check. // also if HasImplicitReturn flag is not set this means that all codepaths in function body end with return or throw - if (ts.nodeIsMissing(func.body) || func.body.kind !== 198 /* Block */ || !(func.flags & 32768 /* HasImplicitReturn */)) { + if (ts.nodeIsMissing(func.body) || func.body.kind !== 199 /* Block */ || !(func.flags & 32768 /* HasImplicitReturn */)) { return; } var hasExplicitReturn = func.flags & 65536 /* HasExplicitReturn */; - if (returnType && !hasExplicitReturn) { + if (returnType === neverType) { + error(func.type, ts.Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point); + } + else if (returnType && !hasExplicitReturn) { // minimal check: function has syntactic return type annotation and no explicit return statements in the body // this function does not conform to the specification. // NOTE: having returnType !== undefined is a precondition for entering this branch so func.type will always be present @@ -25405,10 +26102,10 @@ var ts; } } function checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper) { - ts.Debug.assert(node.kind !== 146 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 147 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); // Grammar checking var hasGrammarError = checkGrammarFunctionLikeDeclaration(node); - if (!hasGrammarError && node.kind === 178 /* FunctionExpression */) { + if (!hasGrammarError && node.kind === 179 /* FunctionExpression */) { checkGrammarForGenerator(node); } // The identityMapper object is used to indicate that function expressions are wildcards @@ -25449,14 +26146,14 @@ var ts; } } } - if (produceDiagnostics && node.kind !== 146 /* MethodDeclaration */ && node.kind !== 145 /* MethodSignature */) { + if (produceDiagnostics && node.kind !== 147 /* MethodDeclaration */ && node.kind !== 146 /* MethodSignature */) { checkCollisionWithCapturedSuperVariable(node, node.name); checkCollisionWithCapturedThisVariable(node, node.name); } return type; } function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) { - ts.Debug.assert(node.kind !== 146 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); + ts.Debug.assert(node.kind !== 147 /* MethodDeclaration */ || ts.isObjectLiteralMethod(node)); var isAsync = ts.isAsyncFunctionLike(node); var returnOrPromisedType = node.type && (isAsync ? checkAsyncFunctionReturnType(node) : getTypeFromTypeNode(node.type)); if (!node.asteriskToken) { @@ -25472,7 +26169,7 @@ var ts; // checkFunctionExpressionBodies). So it must be done now. getReturnTypeOfSignature(getSignatureFromDeclaration(node)); } - if (node.body.kind === 198 /* Block */) { + if (node.body.kind === 199 /* Block */) { checkSourceElement(node.body); } else { @@ -25516,23 +26213,23 @@ var ts; if (isReadonlySymbol(symbol)) { // Allow assignments to readonly properties within constructors of the same class declaration. if (symbol.flags & 4 /* Property */ && - (expr.kind === 171 /* PropertyAccessExpression */ || expr.kind === 172 /* ElementAccessExpression */) && + (expr.kind === 172 /* PropertyAccessExpression */ || expr.kind === 173 /* ElementAccessExpression */) && expr.expression.kind === 97 /* ThisKeyword */) { var func = ts.getContainingFunction(expr); - return !(func && func.kind === 147 /* Constructor */ && func.parent === symbol.valueDeclaration.parent); + return !(func && func.kind === 148 /* Constructor */ && func.parent === symbol.valueDeclaration.parent); } return true; } return false; } function isReferenceThroughNamespaceImport(expr) { - if (expr.kind === 171 /* PropertyAccessExpression */ || expr.kind === 172 /* ElementAccessExpression */) { + if (expr.kind === 172 /* PropertyAccessExpression */ || expr.kind === 173 /* ElementAccessExpression */) { var node = skipParenthesizedNodes(expr.expression); if (node.kind === 69 /* Identifier */) { var symbol = getNodeLinks(node).resolvedSymbol; if (symbol.flags & 8388608 /* Alias */) { var declaration = getDeclarationOfAliasSymbol(symbol); - return declaration && declaration.kind === 231 /* NamespaceImport */; + return declaration && declaration.kind === 232 /* NamespaceImport */; } } } @@ -25541,7 +26238,7 @@ var ts; function checkReferenceExpression(expr, invalidReferenceMessage, constantVariableMessage) { // References are combinations of identifiers, parentheses, and property accesses. var node = skipParenthesizedNodes(expr); - if (node.kind !== 69 /* Identifier */ && node.kind !== 171 /* PropertyAccessExpression */ && node.kind !== 172 /* ElementAccessExpression */) { + if (node.kind !== 69 /* Identifier */ && node.kind !== 172 /* PropertyAccessExpression */ && node.kind !== 173 /* ElementAccessExpression */) { error(expr, invalidReferenceMessage); return false; } @@ -25564,7 +26261,7 @@ var ts; } } } - else if (node.kind === 172 /* ElementAccessExpression */) { + else if (node.kind === 173 /* ElementAccessExpression */) { if (links.resolvedIndexInfo && links.resolvedIndexInfo.isReadonly) { error(expr, constantVariableMessage); return false; @@ -25712,38 +26409,41 @@ var ts; var properties = node.properties; for (var _i = 0, properties_3 = properties; _i < properties_3.length; _i++) { var p = properties_3[_i]; - if (p.kind === 252 /* PropertyAssignment */ || p.kind === 253 /* ShorthandPropertyAssignment */) { - var name_13 = p.name; - if (name_13.kind === 139 /* ComputedPropertyName */) { - checkComputedPropertyName(name_13); - } - if (isComputedNonLiteralName(name_13)) { - continue; - } - var text = getTextOfPropertyName(name_13); - var type = isTypeAny(sourceType) - ? sourceType - : getTypeOfPropertyOfType(sourceType, text) || - isNumericLiteralName(text) && getIndexTypeOfType(sourceType, 1 /* Number */) || - getIndexTypeOfType(sourceType, 0 /* String */); - if (type) { - if (p.kind === 253 /* ShorthandPropertyAssignment */) { - checkDestructuringAssignment(p, type); - } - else { - // non-shorthand property assignments should always have initializers - checkDestructuringAssignment(p.initializer, type); - } + checkObjectLiteralDestructuringPropertyAssignment(sourceType, p, contextualMapper); + } + return sourceType; + } + function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType, property, contextualMapper) { + if (property.kind === 253 /* PropertyAssignment */ || property.kind === 254 /* ShorthandPropertyAssignment */) { + var name_13 = property.name; + if (name_13.kind === 140 /* ComputedPropertyName */) { + checkComputedPropertyName(name_13); + } + if (isComputedNonLiteralName(name_13)) { + return undefined; + } + var text = getTextOfPropertyName(name_13); + var type = isTypeAny(objectLiteralType) + ? objectLiteralType + : getTypeOfPropertyOfType(objectLiteralType, text) || + isNumericLiteralName(text) && getIndexTypeOfType(objectLiteralType, 1 /* Number */) || + getIndexTypeOfType(objectLiteralType, 0 /* String */); + if (type) { + if (property.kind === 254 /* ShorthandPropertyAssignment */) { + return checkDestructuringAssignment(property, type); } else { - error(name_13, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(sourceType), ts.declarationNameToString(name_13)); + // non-shorthand property assignments should always have initializers + return checkDestructuringAssignment(property.initializer, type); } } else { - error(p, ts.Diagnostics.Property_assignment_expected); + error(name_13, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name_13)); } } - return sourceType; + else { + error(property, ts.Diagnostics.Property_assignment_expected); + } } function checkArrayLiteralAssignment(node, sourceType, contextualMapper) { // This elementType will be used if the specific property corresponding to this index is not @@ -25752,48 +26452,53 @@ var ts; var elementType = checkIteratedTypeOrElementType(sourceType, node, /*allowStringInput*/ false) || unknownType; var elements = node.elements; for (var i = 0; i < elements.length; i++) { - var e = elements[i]; - if (e.kind !== 192 /* OmittedExpression */) { - if (e.kind !== 190 /* SpreadElementExpression */) { - var propName = "" + i; - var type = isTypeAny(sourceType) - ? sourceType - : isTupleLikeType(sourceType) - ? getTypeOfPropertyOfType(sourceType, propName) - : elementType; - if (type) { - checkDestructuringAssignment(e, type, contextualMapper); - } - else { - if (isTupleType(sourceType)) { - error(e, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), sourceType.elementTypes.length, elements.length); - } - else { - error(e, ts.Diagnostics.Type_0_has_no_property_1, typeToString(sourceType), propName); - } - } + checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, elementType, contextualMapper); + } + return sourceType; + } + function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, contextualMapper) { + var elements = node.elements; + var element = elements[elementIndex]; + if (element.kind !== 193 /* OmittedExpression */) { + if (element.kind !== 191 /* SpreadElementExpression */) { + var propName = "" + elementIndex; + var type = isTypeAny(sourceType) + ? sourceType + : isTupleLikeType(sourceType) + ? getTypeOfPropertyOfType(sourceType, propName) + : elementType; + if (type) { + return checkDestructuringAssignment(element, type, contextualMapper); } else { - if (i < elements.length - 1) { - error(e, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern); + if (isTupleType(sourceType)) { + error(element, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), sourceType.elementTypes.length, elements.length); } else { - var restExpression = e.expression; - if (restExpression.kind === 186 /* BinaryExpression */ && restExpression.operatorToken.kind === 56 /* EqualsToken */) { - error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); - } - else { - checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper); - } + 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_an_array_destructuring_pattern); + } + else { + var restExpression = element.expression; + if (restExpression.kind === 187 /* BinaryExpression */ && restExpression.operatorToken.kind === 56 /* EqualsToken */) { + error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer); + } + else { + return checkDestructuringAssignment(restExpression, createArrayType(elementType), contextualMapper); } } } } - return sourceType; + return undefined; } function checkDestructuringAssignment(exprOrAssignment, sourceType, contextualMapper) { var target; - if (exprOrAssignment.kind === 253 /* ShorthandPropertyAssignment */) { + if (exprOrAssignment.kind === 254 /* ShorthandPropertyAssignment */) { var prop = exprOrAssignment; if (prop.objectAssignmentInitializer) { checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, contextualMapper); @@ -25803,14 +26508,14 @@ var ts; else { target = exprOrAssignment; } - if (target.kind === 186 /* BinaryExpression */ && target.operatorToken.kind === 56 /* EqualsToken */) { + if (target.kind === 187 /* BinaryExpression */ && target.operatorToken.kind === 56 /* EqualsToken */) { checkBinaryExpression(target, contextualMapper); target = target.left; } - if (target.kind === 170 /* ObjectLiteralExpression */) { + if (target.kind === 171 /* ObjectLiteralExpression */) { return checkObjectLiteralAssignment(target, sourceType, contextualMapper); } - if (target.kind === 169 /* ArrayLiteralExpression */) { + if (target.kind === 170 /* ArrayLiteralExpression */) { return checkArrayLiteralAssignment(target, sourceType, contextualMapper); } return checkReferenceAssignment(target, sourceType, contextualMapper); @@ -25822,12 +26527,15 @@ var ts; } return sourceType; } + function isTypeEqualityComparableTo(source, target) { + return (target.flags & 96 /* Nullable */) !== 0 || isTypeComparableTo(source, target); + } function checkBinaryExpression(node, contextualMapper) { return checkBinaryLikeExpression(node.left, node.operatorToken, node.right, contextualMapper, node); } function checkBinaryLikeExpression(left, operatorToken, right, contextualMapper, errorNode) { var operator = operatorToken.kind; - if (operator === 56 /* EqualsToken */ && (left.kind === 170 /* ObjectLiteralExpression */ || left.kind === 169 /* ArrayLiteralExpression */)) { + if (operator === 56 /* EqualsToken */ && (left.kind === 171 /* ObjectLiteralExpression */ || left.kind === 170 /* ArrayLiteralExpression */)) { return checkDestructuringAssignment(left, checkExpression(right, contextualMapper), contextualMapper); } var leftType = checkExpression(left, contextualMapper); @@ -25929,15 +26637,17 @@ var ts; case 27 /* GreaterThanToken */: case 28 /* LessThanEqualsToken */: case 29 /* GreaterThanEqualsToken */: - if (!checkForDisallowedESSymbolOperand(operator)) { - return booleanType; + if (checkForDisallowedESSymbolOperand(operator)) { + if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) { + reportOperatorError(); + } } - // Fall through + return booleanType; case 30 /* EqualsEqualsToken */: case 31 /* ExclamationEqualsToken */: case 32 /* EqualsEqualsEqualsToken */: case 33 /* ExclamationEqualsEqualsToken */: - if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) { + if (!isTypeEqualityComparableTo(leftType, rightType) && !isTypeEqualityComparableTo(rightType, leftType)) { reportOperatorError(); } return booleanType; @@ -26088,7 +26798,13 @@ var ts; function checkExpressionCached(node, contextualMapper) { var links = getNodeLinks(node); if (!links.resolvedType) { + // When computing a type that we're going to cache, we need to ignore any ongoing control flow + // analysis because variables may have transient types in indeterminable states. Moving flowLoopStart + // to the top of the stack ensures all transient types are computed from a known point. + var saveFlowLoopStart = flowLoopStart; + flowLoopStart = flowLoopCount; links.resolvedType = checkExpression(node, contextualMapper); + flowLoopStart = saveFlowLoopStart; } return links.resolvedType; } @@ -26096,7 +26812,7 @@ var ts; // Do not use hasDynamicName here, because that returns false for well known symbols. // We want to perform checkComputedPropertyName for all computed properties, including // well known symbols. - if (node.name.kind === 139 /* ComputedPropertyName */) { + if (node.name.kind === 140 /* ComputedPropertyName */) { checkComputedPropertyName(node.name); } return checkExpression(node.initializer, contextualMapper); @@ -26107,7 +26823,7 @@ var ts; // Do not use hasDynamicName here, because that returns false for well known symbols. // We want to perform checkComputedPropertyName for all computed properties, including // well known symbols. - if (node.name.kind === 139 /* ComputedPropertyName */) { + if (node.name.kind === 140 /* ComputedPropertyName */) { checkComputedPropertyName(node.name); } var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); @@ -26130,14 +26846,14 @@ var ts; } // Checks an expression and returns its type. The contextualMapper parameter serves two purposes: When // contextualMapper is not undefined and not equal to the identityMapper function object it indicates that the - // expression is being inferentially typed (section 4.12.2 in spec) and provides the type mapper to use in + // expression is being inferentially typed (section 4.15.2 in spec) and provides the type mapper to use in // conjunction with the generic contextual type. When contextualMapper is equal to the identityMapper function // object, it serves as an indicator that all contained function and arrow expressions should be considered to // have the wildcard function type; this form of type check is used during overload resolution to exclude // contextually typed function and arrow expressions in the initial phase. function checkExpression(node, contextualMapper) { var type; - if (node.kind === 138 /* QualifiedName */) { + if (node.kind === 139 /* QualifiedName */) { type = checkQualifiedName(node); } else { @@ -26149,9 +26865,9 @@ var ts; // - 'left' in property access // - 'object' in indexed access // - target in rhs of import statement - var ok = (node.parent.kind === 171 /* PropertyAccessExpression */ && node.parent.expression === node) || - (node.parent.kind === 172 /* ElementAccessExpression */ && node.parent.expression === node) || - ((node.kind === 69 /* Identifier */ || node.kind === 138 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node)); + var ok = (node.parent.kind === 172 /* PropertyAccessExpression */ && node.parent.expression === node) || + (node.parent.kind === 173 /* ElementAccessExpression */ && node.parent.expression === node) || + ((node.kind === 69 /* Identifier */ || node.kind === 139 /* QualifiedName */) && 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); } @@ -26178,7 +26894,7 @@ var ts; return booleanType; case 8 /* NumericLiteral */: return checkNumericLiteral(node); - case 188 /* TemplateExpression */: + case 189 /* TemplateExpression */: return checkTemplateExpression(node); case 9 /* StringLiteral */: return checkStringLiteralExpression(node); @@ -26186,60 +26902,60 @@ var ts; return stringType; case 10 /* RegularExpressionLiteral */: return globalRegExpType; - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: return checkArrayLiteral(node, contextualMapper); - case 170 /* ObjectLiteralExpression */: + case 171 /* ObjectLiteralExpression */: return checkObjectLiteral(node, contextualMapper); - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return checkPropertyAccessExpression(node); - case 172 /* ElementAccessExpression */: + case 173 /* ElementAccessExpression */: return checkIndexedAccess(node); - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: return checkCallExpression(node); - case 175 /* TaggedTemplateExpression */: + case 176 /* TaggedTemplateExpression */: return checkTaggedTemplateExpression(node); - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return checkExpression(node.expression, contextualMapper); - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: return checkClassExpression(node); - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); - case 181 /* TypeOfExpression */: + case 182 /* TypeOfExpression */: return checkTypeOfExpression(node); - case 176 /* TypeAssertionExpression */: - case 194 /* AsExpression */: + case 177 /* TypeAssertionExpression */: + case 195 /* AsExpression */: return checkAssertion(node); - case 195 /* NonNullExpression */: + case 196 /* NonNullExpression */: return checkNonNullAssertion(node); - case 180 /* DeleteExpression */: + case 181 /* DeleteExpression */: return checkDeleteExpression(node); - case 182 /* VoidExpression */: + case 183 /* VoidExpression */: return checkVoidExpression(node); - case 183 /* AwaitExpression */: + case 184 /* AwaitExpression */: return checkAwaitExpression(node); - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: return checkPrefixUnaryExpression(node); - case 185 /* PostfixUnaryExpression */: + case 186 /* PostfixUnaryExpression */: return checkPostfixUnaryExpression(node); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return checkBinaryExpression(node, contextualMapper); - case 187 /* ConditionalExpression */: + case 188 /* ConditionalExpression */: return checkConditionalExpression(node, contextualMapper); - case 190 /* SpreadElementExpression */: + case 191 /* SpreadElementExpression */: return checkSpreadElementExpression(node, contextualMapper); - case 192 /* OmittedExpression */: + case 193 /* OmittedExpression */: return undefinedType; - case 189 /* YieldExpression */: + case 190 /* YieldExpression */: return checkYieldExpression(node); - case 247 /* JsxExpression */: + case 248 /* JsxExpression */: return checkJsxExpression(node); - case 240 /* JsxElement */: + case 241 /* JsxElement */: return checkJsxElement(node); - case 241 /* JsxSelfClosingElement */: + case 242 /* JsxSelfClosingElement */: return checkJsxSelfClosingElement(node); - case 242 /* JsxOpeningElement */: + case 243 /* JsxOpeningElement */: ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement"); } return unknownType; @@ -26265,9 +26981,9 @@ var ts; checkGrammarDecorators(node) || checkGrammarModifiers(node); checkVariableLikeDeclaration(node); var func = ts.getContainingFunction(node); - if (node.flags & 28 /* AccessibilityModifier */) { + if (node.flags & 92 /* ParameterPropertyModifier */) { func = ts.getContainingFunction(node); - if (!(func.kind === 147 /* Constructor */ && ts.nodeIsPresent(func.body))) { + if (!(func.kind === 148 /* Constructor */ && ts.nodeIsPresent(func.body))) { error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); } } @@ -26278,12 +26994,9 @@ var ts; if (ts.indexOf(func.parameters, node) !== 0) { error(node, ts.Diagnostics.A_this_parameter_must_be_the_first_parameter); } - if (func.kind === 147 /* Constructor */ || func.kind === 151 /* ConstructSignature */ || func.kind === 156 /* ConstructorType */) { + if (func.kind === 148 /* Constructor */ || func.kind === 152 /* ConstructSignature */ || func.kind === 157 /* ConstructorType */) { error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter); } - if (func.kind === 149 /* SetAccessor */) { - error(node, ts.Diagnostics.A_setter_cannot_have_a_this_parameter); - } } // Only check rest parameter type if it's not a binding pattern. Since binding patterns are // not allowed in a rest parameter, we already have an error from checkGrammarParameterList. @@ -26295,9 +27008,9 @@ var ts; if (!node.asteriskToken || !node.body) { return false; } - return node.kind === 146 /* MethodDeclaration */ || - node.kind === 219 /* FunctionDeclaration */ || - node.kind === 178 /* FunctionExpression */; + return node.kind === 147 /* MethodDeclaration */ || + node.kind === 220 /* FunctionDeclaration */ || + node.kind === 179 /* FunctionExpression */; } function getTypePredicateParameterIndex(parameterList, parameter) { if (parameterList) { @@ -26355,16 +27068,16 @@ var ts; } function getTypePredicateParent(node) { switch (node.parent.kind) { - case 179 /* ArrowFunction */: - case 150 /* CallSignature */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 155 /* FunctionType */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - var parent_8 = node.parent; - if (node === parent_8.type) { - return parent_8; + case 180 /* ArrowFunction */: + case 151 /* CallSignature */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 156 /* FunctionType */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + var parent_10 = node.parent; + if (node === parent_10.type) { + return parent_10; } } } @@ -26376,8 +27089,8 @@ var ts; error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName); return true; } - else if (name_15.kind === 167 /* ArrayBindingPattern */ || - name_15.kind === 166 /* ObjectBindingPattern */) { + else if (name_15.kind === 168 /* ArrayBindingPattern */ || + name_15.kind === 167 /* ObjectBindingPattern */) { if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name_15, predicateVariableNode, predicateVariableName)) { return true; } @@ -26386,12 +27099,12 @@ var ts; } function checkSignatureDeclaration(node) { // Grammar checking - if (node.kind === 152 /* IndexSignature */) { + if (node.kind === 153 /* IndexSignature */) { checkGrammarIndexSignature(node); } - else if (node.kind === 155 /* FunctionType */ || node.kind === 219 /* FunctionDeclaration */ || node.kind === 156 /* ConstructorType */ || - node.kind === 150 /* CallSignature */ || node.kind === 147 /* Constructor */ || - node.kind === 151 /* ConstructSignature */) { + else if (node.kind === 156 /* FunctionType */ || node.kind === 220 /* FunctionDeclaration */ || node.kind === 157 /* ConstructorType */ || + node.kind === 151 /* CallSignature */ || node.kind === 148 /* Constructor */ || + node.kind === 152 /* ConstructSignature */) { checkGrammarFunctionLikeDeclaration(node); } checkTypeParameters(node.typeParameters); @@ -26403,10 +27116,10 @@ var ts; checkCollisionWithArgumentsInGeneratedCode(node); if (compilerOptions.noImplicitAny && !node.type) { switch (node.kind) { - case 151 /* ConstructSignature */: + case 152 /* ConstructSignature */: error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; - case 150 /* CallSignature */: + case 151 /* CallSignature */: error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); break; } @@ -26436,7 +27149,7 @@ var ts; } } function checkTypeForDuplicateIndexSignatures(node) { - if (node.kind === 221 /* InterfaceDeclaration */) { + if (node.kind === 222 /* InterfaceDeclaration */) { var nodeSymbol = getSymbolOfNode(node); // in case of merging interface declaration it is possible that we'll enter this check procedure several times for every declaration // to prevent this run check only for the first declaration of a given kind @@ -26456,7 +27169,7 @@ var ts; var declaration = decl; if (declaration.parameters.length === 1 && declaration.parameters[0].type) { switch (declaration.parameters[0].type.kind) { - case 131 /* StringKeyword */: + case 132 /* StringKeyword */: if (!seenStringIndexer) { seenStringIndexer = true; } @@ -26464,7 +27177,7 @@ var ts; error(declaration, ts.Diagnostics.Duplicate_string_index_signature); } break; - case 129 /* NumberKeyword */: + case 130 /* NumberKeyword */: if (!seenNumericIndexer) { seenNumericIndexer = true; } @@ -26531,12 +27244,12 @@ var ts; if (n.kind === 97 /* ThisKeyword */) { error(n, ts.Diagnostics.this_cannot_be_referenced_in_current_location); } - else if (n.kind !== 178 /* FunctionExpression */ && n.kind !== 219 /* FunctionDeclaration */) { + else if (n.kind !== 179 /* FunctionExpression */ && n.kind !== 220 /* FunctionDeclaration */) { ts.forEachChild(n, markThisReferencesAsErrors); } } function isInstancePropertyWithInitializer(n) { - return n.kind === 144 /* PropertyDeclaration */ && + return n.kind === 145 /* PropertyDeclaration */ && !(n.flags & 32 /* Static */) && !!n.initializer; } @@ -26557,7 +27270,7 @@ var ts; // - The constructor declares parameter properties // or the containing class declares instance member variables with initializers. var superCallShouldBeFirst = ts.forEach(node.parent.members, isInstancePropertyWithInitializer) || - ts.forEach(node.parameters, function (p) { return p.flags & (4 /* Public */ | 8 /* Private */ | 16 /* Protected */); }); + ts.forEach(node.parameters, function (p) { return p.flags & 92 /* ParameterPropertyModifier */; }); // Skip past any prologue directives to find the first statement // to ensure that it was a super call. if (superCallShouldBeFirst) { @@ -26565,7 +27278,7 @@ var ts; var superCallStatement = void 0; for (var _i = 0, statements_2 = statements; _i < statements_2.length; _i++) { var statement = statements_2[_i]; - if (statement.kind === 201 /* ExpressionStatement */ && ts.isSuperCallExpression(statement.expression)) { + if (statement.kind === 202 /* ExpressionStatement */ && ts.isSuperCallExpression(statement.expression)) { superCallStatement = statement; break; } @@ -26589,7 +27302,7 @@ var ts; checkGrammarFunctionLikeDeclaration(node) || checkGrammarAccessor(node) || checkGrammarComputedPropertyName(node.name); checkDecorators(node); checkSignatureDeclaration(node); - if (node.kind === 148 /* GetAccessor */) { + if (node.kind === 149 /* GetAccessor */) { if (!ts.isInAmbientContext(node) && ts.nodeIsPresent(node.body) && (node.flags & 32768 /* HasImplicitReturn */)) { if (node.flags & 65536 /* HasExplicitReturn */) { if (compilerOptions.noImplicitReturns) { @@ -26604,13 +27317,13 @@ var ts; // Do not use hasDynamicName here, because that returns false for well known symbols. // We want to perform checkComputedPropertyName for all computed properties, including // well known symbols. - if (node.name.kind === 139 /* ComputedPropertyName */) { + if (node.name.kind === 140 /* ComputedPropertyName */) { checkComputedPropertyName(node.name); } if (!ts.hasDynamicName(node)) { // TypeScript 1.0 spec (April 2014): 8.4.3 // Accessors for the same member name must specify the same accessibility. - var otherKind = node.kind === 148 /* GetAccessor */ ? 149 /* SetAccessor */ : 148 /* GetAccessor */; + var otherKind = node.kind === 149 /* GetAccessor */ ? 150 /* SetAccessor */ : 149 /* GetAccessor */; var otherAccessor = ts.getDeclarationOfKind(node.symbol, otherKind); if (otherAccessor) { if (((node.flags & 28 /* AccessibilityModifier */) !== (otherAccessor.flags & 28 /* AccessibilityModifier */))) { @@ -26619,26 +27332,28 @@ var ts; if (((node.flags & 128 /* Abstract */) !== (otherAccessor.flags & 128 /* Abstract */))) { error(node.name, ts.Diagnostics.Accessors_must_both_be_abstract_or_non_abstract); } - var currentAccessorType = getAnnotatedAccessorType(node); - var otherAccessorType = getAnnotatedAccessorType(otherAccessor); // TypeScript 1.0 spec (April 2014): 4.5 // If both accessors include type annotations, the specified types must be identical. - if (currentAccessorType && otherAccessorType) { - if (!isTypeIdenticalTo(currentAccessorType, otherAccessorType)) { - error(node, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); - } - } + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getAnnotatedAccessorType, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type); + checkAccessorDeclarationTypesIdentical(node, otherAccessor, getAnnotatedAccessorThisType, ts.Diagnostics.get_and_set_accessor_must_have_the_same_this_type); } } getTypeOfAccessors(getSymbolOfNode(node)); } - if (node.parent.kind !== 170 /* ObjectLiteralExpression */) { + if (node.parent.kind !== 171 /* ObjectLiteralExpression */) { checkSourceElement(node.body); } else { checkNodeDeferred(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 checkAccessorDeferred(node) { checkSourceElement(node.body); } @@ -26707,9 +27422,9 @@ var ts; var flags = ts.getCombinedNodeFlags(n); // children of classes (even ambient classes) should not be marked as ambient or export // because those flags have no useful semantics there. - if (n.parent.kind !== 221 /* InterfaceDeclaration */ && - n.parent.kind !== 220 /* ClassDeclaration */ && - n.parent.kind !== 191 /* ClassExpression */ && + if (n.parent.kind !== 222 /* InterfaceDeclaration */ && + n.parent.kind !== 221 /* ClassDeclaration */ && + n.parent.kind !== 192 /* ClassExpression */ && ts.isInAmbientContext(n)) { if (!(flags & 2 /* Ambient */)) { // It is nested in an ambient context, which means it is automatically exported @@ -26797,7 +27512,7 @@ var ts; var errorNode_1 = subsequentNode.name || subsequentNode; // TODO(jfreeman): These are methods, so handle computed name case if (node.name && subsequentNode.name && node.name.text === subsequentNode.name.text) { - var reportError = (node.kind === 146 /* MethodDeclaration */ || node.kind === 145 /* MethodSignature */) && + var reportError = (node.kind === 147 /* MethodDeclaration */ || node.kind === 146 /* MethodSignature */) && (node.flags & 32 /* Static */) !== (subsequentNode.flags & 32 /* Static */); // we can get here in two cases // 1. mixed static and instance class members @@ -26839,7 +27554,7 @@ var ts; var current = declarations_4[_i]; var node = current; var inAmbientContext = ts.isInAmbientContext(node); - var inAmbientContextOrInterface = node.parent.kind === 221 /* InterfaceDeclaration */ || node.parent.kind === 158 /* TypeLiteral */ || inAmbientContext; + var inAmbientContextOrInterface = node.parent.kind === 222 /* InterfaceDeclaration */ || node.parent.kind === 159 /* TypeLiteral */ || inAmbientContext; if (inAmbientContextOrInterface) { // check if declarations are consecutive only if they are non-ambient // 1. ambient declarations can be interleaved @@ -26850,7 +27565,7 @@ var ts; // 2. mixing ambient and non-ambient declarations is a separate error that will be reported - do not want to report an extra one previousDeclaration = undefined; } - if (node.kind === 219 /* FunctionDeclaration */ || node.kind === 146 /* MethodDeclaration */ || node.kind === 145 /* MethodSignature */ || node.kind === 147 /* Constructor */) { + if (node.kind === 220 /* FunctionDeclaration */ || node.kind === 147 /* MethodDeclaration */ || node.kind === 146 /* MethodSignature */ || node.kind === 148 /* Constructor */) { var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck); someNodeFlags |= currentNodeFlags; allNodeFlags &= currentNodeFlags; @@ -26893,7 +27608,7 @@ var ts; } // Abstract methods can't have an implementation -- in particular, they don't need one. if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && - !(lastSeenNonAmbientDeclaration.flags & 128 /* Abstract */)) { + !(lastSeenNonAmbientDeclaration.flags & 128 /* Abstract */) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } if (hasOverloads) { @@ -26972,16 +27687,16 @@ var ts; } function getDeclarationSpaces(d) { switch (d.kind) { - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return 2097152 /* ExportType */; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0 /* NonInstantiated */ ? 4194304 /* ExportNamespace */ | 1048576 /* ExportValue */ : 4194304 /* ExportNamespace */; - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: return 2097152 /* ExportType */ | 1048576 /* ExportValue */; - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: var result_1 = 0; var target = resolveAlias(getSymbolOfNode(d)); ts.forEach(target.declarations, function (d) { result_1 |= getDeclarationSpaces(d); }); @@ -27037,7 +27752,7 @@ var ts; if (thenSignatures.length === 0) { return undefined; } - var onfulfilledParameterType = getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)); + var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 131072 /* NEUndefined */); if (onfulfilledParameterType.flags & 1 /* Any */) { return undefined; } @@ -27262,22 +27977,22 @@ var ts; var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node); var errorInfo; switch (node.parent.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: var classSymbol = getSymbolOfNode(node.parent); var classConstructorType = getTypeOfSymbol(classSymbol); expectedReturnType = getUnionType([classConstructorType, voidType]); break; - case 141 /* Parameter */: + case 142 /* Parameter */: expectedReturnType = voidType; errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any); break; - case 144 /* PropertyDeclaration */: + case 145 /* PropertyDeclaration */: expectedReturnType = voidType; errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any); break; - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: var methodType = getTypeOfNode(node.parent); var descriptorType = createTypedPropertyDescriptorType(methodType); expectedReturnType = getUnionType([descriptorType, voidType]); @@ -27290,9 +28005,9 @@ var ts; // When we are emitting type metadata for decorators, we need to try to check the type // as if it were an expression so that we can emit the type in a value position when we // serialize the type metadata. - if (node && node.kind === 154 /* TypeReference */) { + if (node && node.kind === 155 /* TypeReference */) { var root = getFirstIdentifier(node.typeName); - var meaning = root.parent.kind === 154 /* TypeReference */ ? 793056 /* Type */ : 1536 /* Namespace */; + var meaning = root.parent.kind === 155 /* TypeReference */ ? 793056 /* Type */ : 1536 /* Namespace */; // Resolve type so we know which symbol is referenced var rootSymbol = resolveName(root, root.text, meaning | 8388608 /* Alias */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined); // Resolved symbol is alias @@ -27339,20 +28054,20 @@ var ts; if (compilerOptions.emitDecoratorMetadata) { // we only need to perform these checks if we are emitting serialized type metadata for the target of a decorator. switch (node.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: var constructor = ts.getFirstConstructorWithBody(node); if (constructor) { checkParameterTypeAnnotationsAsExpressions(constructor); } break; - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: checkParameterTypeAnnotationsAsExpressions(node); checkReturnTypeAnnotationAsExpression(node); break; - case 144 /* PropertyDeclaration */: - case 141 /* Parameter */: + case 145 /* PropertyDeclaration */: + case 142 /* Parameter */: checkTypeAnnotationAsExpression(node); break; } @@ -27375,7 +28090,7 @@ var ts; // Do not use hasDynamicName here, because that returns false for well known symbols. // We want to perform checkComputedPropertyName for all computed properties, including // well known symbols. - if (node.name && node.name.kind === 139 /* ComputedPropertyName */) { + if (node.name && node.name.kind === 140 /* ComputedPropertyName */) { // This check will account for methods in class/interface declarations, // as well as accessors in classes/object literals checkComputedPropertyName(node.name); @@ -27426,14 +28141,14 @@ var ts; } function checkBlock(node) { // Grammar checking for SyntaxKind.Block - if (node.kind === 198 /* Block */) { + if (node.kind === 199 /* Block */) { checkGrammarStatementInAmbientContext(node); } ts.forEach(node.statements, checkSourceElement); } function checkCollisionWithArgumentsInGeneratedCode(node) { // no rest parameters \ declaration context \ overload - no codegen impact - if (!ts.hasRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) { + if (!ts.hasDeclaredRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) { return; } ts.forEach(node.parameters, function (p) { @@ -27446,12 +28161,12 @@ var ts; if (!(identifier && identifier.text === name)) { return false; } - if (node.kind === 144 /* PropertyDeclaration */ || - node.kind === 143 /* PropertySignature */ || - node.kind === 146 /* MethodDeclaration */ || - node.kind === 145 /* MethodSignature */ || - node.kind === 148 /* GetAccessor */ || - node.kind === 149 /* SetAccessor */) { + if (node.kind === 145 /* PropertyDeclaration */ || + node.kind === 144 /* PropertySignature */ || + node.kind === 147 /* MethodDeclaration */ || + node.kind === 146 /* MethodSignature */ || + node.kind === 149 /* GetAccessor */ || + node.kind === 150 /* SetAccessor */) { // it is ok to have member named '_super' or '_this' - member access is always qualified return false; } @@ -27460,7 +28175,7 @@ var ts; return false; } var root = ts.getRootDeclaration(node); - if (root.kind === 141 /* Parameter */ && ts.nodeIsMissing(root.parent.body)) { + if (root.kind === 142 /* Parameter */ && ts.nodeIsMissing(root.parent.body)) { // just an overload - no codegen impact return false; } @@ -27513,12 +28228,12 @@ var ts; return; } // Uninstantiated modules shouldnt do this check - if (node.kind === 224 /* ModuleDeclaration */ && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { + if (node.kind === 225 /* ModuleDeclaration */ && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { return; } // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent var parent = getDeclarationContainer(node); - if (parent.kind === 255 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) { + if (parent.kind === 256 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent)) { // If the declaration happens to be in external module, report error that require and exports are reserved keywords error(name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name)); } @@ -27528,12 +28243,12 @@ var ts; return; } // Uninstantiated modules shouldnt do this check - if (node.kind === 224 /* ModuleDeclaration */ && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { + if (node.kind === 225 /* ModuleDeclaration */ && ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { return; } // In case of variable declaration, node.parent is variable statement so look at the variable statement's parent var parent = getDeclarationContainer(node); - if (parent.kind === 255 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2097152 /* HasAsyncFunctions */) { + if (parent.kind === 256 /* SourceFile */ && ts.isExternalOrCommonJsModule(parent) && parent.flags & 2097152 /* HasAsyncFunctions */) { // If the declaration happens to be in external module, report error that Promise is a reserved identifier. 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)); } @@ -27568,7 +28283,7 @@ var ts; // skip variable declarations that don't have initializers // NOTE: in ES6 spec initializer is required in variable declarations where name is binding pattern // so we'll always treat binding elements as initialized - if (node.kind === 217 /* VariableDeclaration */ && !node.initializer) { + if (node.kind === 218 /* VariableDeclaration */ && !node.initializer) { return; } var symbol = getSymbolOfNode(node); @@ -27578,17 +28293,17 @@ var ts; localDeclarationSymbol !== symbol && localDeclarationSymbol.flags & 2 /* BlockScopedVariable */) { if (getDeclarationFlagsFromSymbol(localDeclarationSymbol) & 3072 /* BlockScoped */) { - var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 218 /* VariableDeclarationList */); - var container = varDeclList.parent.kind === 199 /* VariableStatement */ && varDeclList.parent.parent + var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 219 /* VariableDeclarationList */); + var container = varDeclList.parent.kind === 200 /* VariableStatement */ && varDeclList.parent.parent ? varDeclList.parent.parent : undefined; // names of block-scoped and function scoped variables can collide only // if block scoped variable is defined in the function\module\source file scope (because of variable hoisting) var namesShareScope = container && - (container.kind === 198 /* Block */ && ts.isFunctionLike(container.parent) || - container.kind === 225 /* ModuleBlock */ || - container.kind === 224 /* ModuleDeclaration */ || - container.kind === 255 /* SourceFile */); + (container.kind === 199 /* Block */ && ts.isFunctionLike(container.parent) || + container.kind === 226 /* ModuleBlock */ || + container.kind === 225 /* ModuleDeclaration */ || + container.kind === 256 /* SourceFile */); // here we know that function scoped variable is shadowed by block scoped one // if they are defined in the same scope - binder has already reported redeclaration error // otherwise if variable has an initializer - show error that initialization will fail @@ -27603,32 +28318,63 @@ var ts; } // Check that a parameter initializer contains no references to parameters declared to the right of itself function checkParameterInitializer(node) { - if (ts.getRootDeclaration(node).kind !== 141 /* Parameter */) { + if (ts.getRootDeclaration(node).kind !== 142 /* Parameter */) { return; } var func = ts.getContainingFunction(node); visit(node.initializer); function visit(n) { - if (n.kind === 69 /* Identifier */) { - var referencedSymbol = getNodeLinks(n).resolvedSymbol; + if (ts.isTypeNode(n) || ts.isDeclarationName(n)) { + // do not dive in types + // skip declaration names (i.e. in object literal expressions) + return; + } + if (n.kind === 172 /* PropertyAccessExpression */) { + // skip property names in property access expression + return visit(n.expression); + } + else if (n.kind === 69 /* Identifier */) { // check FunctionLikeDeclaration.locals (stores parameters\function local variable) - // if it contains entry with a specified name and if this entry matches the resolved symbol - if (referencedSymbol && referencedSymbol !== unknownSymbol && getSymbol(func.locals, referencedSymbol.name, 107455 /* Value */) === referencedSymbol) { - if (referencedSymbol.valueDeclaration.kind === 141 /* Parameter */) { - if (referencedSymbol.valueDeclaration === node) { - error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.declarationNameToString(node.name)); + // if it contains entry with a specified name + var symbol = resolveName(n, n.text, 107455 /* Value */ | 8388608 /* Alias */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined); + 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; + } + // locals map for function contain both parameters and function locals + // so we need to do a bit of extra work to check if reference is legal + var enclosingContainer = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration); + if (enclosingContainer === func) { + if (symbol.valueDeclaration.kind === 142 /* Parameter */) { + // it is ok to reference parameter in initializer if either + // - parameter is located strictly on the left of current parameter declaration + if (symbol.valueDeclaration.pos < node.pos) { return; } - if (referencedSymbol.valueDeclaration.pos < node.pos) { - // legal case - parameter initializer references some parameter strictly on left of current parameter declaration - return; + // - parameter is wrapped in function-like entity + var current = n; + while (current !== node.initializer) { + if (ts.isFunctionLike(current.parent)) { + return; + } + // computed property names/initializers in instance property declaration of class like entities + // are executed in constructor and thus deferred + if (current.parent.kind === 145 /* PropertyDeclaration */ && + !(current.parent.flags & 32 /* Static */) && + ts.isClassLike(current.parent.parent)) { + return; + } + current = current.parent; } } error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.declarationNameToString(node.name), ts.declarationNameToString(n)); } } else { - ts.forEachChild(n, visit); + return ts.forEachChild(n, visit); } } } @@ -27640,24 +28386,24 @@ var ts; // Do not use hasDynamicName here, because that returns false for well known symbols. // We want to perform checkComputedPropertyName for all computed properties, including // well known symbols. - if (node.name.kind === 139 /* ComputedPropertyName */) { + if (node.name.kind === 140 /* ComputedPropertyName */) { checkComputedPropertyName(node.name); if (node.initializer) { checkExpressionCached(node.initializer); } } - if (node.kind === 168 /* BindingElement */) { + if (node.kind === 169 /* BindingElement */) { // check computed properties inside property names of binding elements - if (node.propertyName && node.propertyName.kind === 139 /* ComputedPropertyName */) { + if (node.propertyName && node.propertyName.kind === 140 /* ComputedPropertyName */) { checkComputedPropertyName(node.propertyName); } // check private/protected variable access - var parent_9 = node.parent.parent; - var parentType = getTypeForBindingElementParent(parent_9); + var parent_11 = node.parent.parent; + var parentType = getTypeForBindingElementParent(parent_11); var name_17 = node.propertyName || node.name; var property = getPropertyOfType(parentType, getTextOfPropertyName(name_17)); - if (parent_9.initializer && property && getParentOfSymbol(property)) { - checkClassPropertyAccess(parent_9, parent_9.initializer, parentType, property); + if (parent_11.initializer && property && getParentOfSymbol(property)) { + checkClassPropertyAccess(parent_11, parent_11.initializer, parentType, property); } } // For a binding pattern, check contained binding elements @@ -27665,14 +28411,14 @@ var ts; ts.forEach(node.name.elements, checkSourceElement); } // For a parameter declaration with an initializer, error and exit if the containing function doesn't have a body - if (node.initializer && ts.getRootDeclaration(node).kind === 141 /* Parameter */ && ts.nodeIsMissing(ts.getContainingFunction(node).body)) { + if (node.initializer && ts.getRootDeclaration(node).kind === 142 /* Parameter */ && ts.nodeIsMissing(ts.getContainingFunction(node).body)) { error(node, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation); return; } // For a binding pattern, validate the initializer and exit if (ts.isBindingPattern(node.name)) { // Don't validate for-in initializer as it is already an error - if (node.initializer && node.parent.parent.kind !== 206 /* ForInStatement */) { + if (node.initializer && node.parent.parent.kind !== 207 /* ForInStatement */) { checkTypeAssignableTo(checkExpressionCached(node.initializer), getWidenedTypeForVariableLikeDeclaration(node), node, /*headMessage*/ undefined); checkParameterInitializer(node); } @@ -27683,7 +28429,7 @@ var ts; if (node === symbol.valueDeclaration) { // Node is the primary declaration of the symbol, just validate the initializer // Don't validate for-in initializer as it is already an error - if (node.initializer && node.parent.parent.kind !== 206 /* ForInStatement */) { + if (node.initializer && node.parent.parent.kind !== 207 /* ForInStatement */) { checkTypeAssignableTo(checkExpressionCached(node.initializer), type, node, /*headMessage*/ undefined); checkParameterInitializer(node); } @@ -27699,10 +28445,10 @@ var ts; checkTypeAssignableTo(checkExpressionCached(node.initializer), declarationType, node, /*headMessage*/ undefined); } } - if (node.kind !== 144 /* PropertyDeclaration */ && node.kind !== 143 /* PropertySignature */) { + if (node.kind !== 145 /* PropertyDeclaration */ && node.kind !== 144 /* PropertySignature */) { // We know we don't have a binding pattern or computed name here checkExportsOnMergedDeclarations(node); - if (node.kind === 217 /* VariableDeclaration */ || node.kind === 168 /* BindingElement */) { + if (node.kind === 218 /* VariableDeclaration */ || node.kind === 169 /* BindingElement */) { checkVarDeclaredNamesNotShadowed(node); } checkCollisionWithCapturedSuperVariable(node, node.name); @@ -27726,7 +28472,7 @@ var ts; } function checkGrammarDisallowedModifiersOnObjectLiteralExpressionMethod(node) { // We only disallow modifier on a method declaration if it is a property of object-literal-expression - if (node.modifiers && node.parent.kind === 170 /* ObjectLiteralExpression */) { + if (node.modifiers && node.parent.kind === 171 /* ObjectLiteralExpression */) { if (ts.isAsyncFunctionLike(node)) { if (node.modifiers.length > 1) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); @@ -27747,7 +28493,7 @@ var ts; checkGrammarStatementInAmbientContext(node); checkExpression(node.expression); checkSourceElement(node.thenStatement); - if (node.thenStatement.kind === 200 /* EmptyStatement */) { + if (node.thenStatement.kind === 201 /* EmptyStatement */) { error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement); } checkSourceElement(node.elseStatement); @@ -27767,12 +28513,12 @@ var ts; function checkForStatement(node) { // Grammar checking if (!checkGrammarStatementInAmbientContext(node)) { - if (node.initializer && node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer && node.initializer.kind === 219 /* VariableDeclarationList */) { checkGrammarVariableDeclarationList(node.initializer); } } if (node.initializer) { - if (node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer.kind === 219 /* VariableDeclarationList */) { ts.forEach(node.initializer.declarations, checkVariableDeclaration); } else { @@ -27792,14 +28538,14 @@ var ts; // via checkRightHandSideOfForOf. // If the LHS is an expression, check the LHS, as a destructuring assignment or as a reference. // Then check that the RHS is assignable to it. - if (node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer.kind === 219 /* VariableDeclarationList */) { checkForInOrForOfVariableDeclaration(node); } else { var varExpr = node.initializer; var iteratedType = checkRightHandSideOfForOf(node.expression); // There may be a destructuring assignment on the left side - if (varExpr.kind === 169 /* ArrayLiteralExpression */ || varExpr.kind === 170 /* ObjectLiteralExpression */) { + if (varExpr.kind === 170 /* ArrayLiteralExpression */ || varExpr.kind === 171 /* ObjectLiteralExpression */) { // iteratedType may be undefined. In this case, we still want to check the structure of // varExpr, in particular making sure it's a valid LeftHandSideExpression. But we'd like // to short circuit the type relation checking as much as possible, so we pass the unknownType. @@ -27828,7 +28574,7 @@ var ts; // for (let VarDecl in Expr) Statement // VarDecl must be a variable declaration without a type annotation that declares a variable of type Any, // and Expr must be an expression of type Any, an object type, or a type parameter type. - if (node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer.kind === 219 /* VariableDeclarationList */) { 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); @@ -27842,7 +28588,7 @@ var ts; // and Expr must be an expression of type Any, an object type, or a type parameter type. var varExpr = node.initializer; var leftType = checkExpression(varExpr); - if (varExpr.kind === 169 /* ArrayLiteralExpression */ || varExpr.kind === 170 /* ObjectLiteralExpression */) { + if (varExpr.kind === 170 /* ArrayLiteralExpression */ || varExpr.kind === 171 /* ObjectLiteralExpression */) { error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern); } else if (!isTypeAnyOrAllConstituentTypesHaveKind(leftType, 258 /* StringLike */)) { @@ -27889,7 +28635,9 @@ var ts; return indexType; } } - error(errorNode, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(inputType)); + if (errorNode) { + error(errorNode, ts.Diagnostics.Type_0_is_not_an_array_type, typeToString(inputType)); + } return unknownType; } /** @@ -28043,7 +28791,7 @@ var ts; arrayType = getUnionType(ts.filter(arrayOrStringType.types, function (t) { return !(t.flags & 258 /* StringLike */); })); } else if (arrayOrStringType.flags & 258 /* StringLike */) { - arrayType = emptyUnionType; + arrayType = neverType; } var hasStringConstituent = arrayOrStringType !== arrayType; var reportedError = false; @@ -28054,7 +28802,7 @@ var ts; } // Now that we've removed all the StringLike types, if no constituents remain, then the entire // arrayOrStringType was a string. - if (arrayType === emptyObjectType) { + if (arrayType === neverType) { return stringType; } } @@ -28087,7 +28835,7 @@ var ts; // TODO: Check that target label is valid } function isGetAccessorWithAnnotatedSetAccessor(node) { - return !!(node.kind === 148 /* GetAccessor */ && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 149 /* SetAccessor */))); + return !!(node.kind === 149 /* GetAccessor */ && ts.getSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 150 /* SetAccessor */))); } function isUnwrappedReturnTypeVoidOrAny(func, returnType) { var unwrappedReturnType = ts.isAsyncFunctionLike(func) ? getPromisedType(returnType) : returnType; @@ -28105,7 +28853,7 @@ var ts; if (func) { var signature = getSignatureFromDeclaration(func); var returnType = getReturnTypeOfSignature(signature); - if (strictNullChecks || node.expression) { + if (strictNullChecks || node.expression || returnType === neverType) { var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType; if (func.asteriskToken) { // A generator does not need its return expressions checked against its return type. @@ -28114,12 +28862,12 @@ var ts; // for generators. return; } - if (func.kind === 149 /* SetAccessor */) { + if (func.kind === 150 /* SetAccessor */) { if (node.expression) { error(node.expression, ts.Diagnostics.Setters_cannot_return_a_value); } } - else if (func.kind === 147 /* Constructor */) { + else if (func.kind === 148 /* Constructor */) { if (node.expression && !checkTypeAssignableTo(exprType, returnType, node.expression)) { error(node.expression, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); } @@ -28140,7 +28888,7 @@ var ts; } } } - else if (func.kind !== 147 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { + else if (func.kind !== 148 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { // The function has a return type, but the return statement doesn't have an expression. error(node, ts.Diagnostics.Not_all_code_paths_return_a_value); } @@ -28164,7 +28912,7 @@ var ts; var expressionType = checkExpression(node.expression); ts.forEach(node.caseBlock.clauses, function (clause) { // Grammar check for duplicate default clauses, skip if we already report duplicate default clause - if (clause.kind === 249 /* DefaultClause */ && !hasDuplicateDefaultClause) { + if (clause.kind === 250 /* DefaultClause */ && !hasDuplicateDefaultClause) { if (firstDefaultClause === undefined) { firstDefaultClause = clause; } @@ -28176,7 +28924,7 @@ var ts; hasDuplicateDefaultClause = true; } } - if (produceDiagnostics && clause.kind === 248 /* CaseClause */) { + if (produceDiagnostics && clause.kind === 249 /* CaseClause */) { var caseClause = clause; // TypeScript 1.0 spec (April 2014): 5.9 // In a 'switch' statement, each 'case' expression must be of a type that is comparable @@ -28198,7 +28946,7 @@ var ts; if (ts.isFunctionLike(current)) { break; } - if (current.kind === 213 /* LabeledStatement */ && current.label.text === node.label.text) { + if (current.kind === 214 /* LabeledStatement */ && current.label.text === node.label.text) { var sourceFile = ts.getSourceFileOfNode(node); grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNodeFromSourceText(sourceFile.text, node.label)); break; @@ -28303,7 +29051,7 @@ var ts; // perform property check if property or indexer is declared in 'type' // this allows to rule out cases when both property and indexer are inherited from the base class var errorNode; - if (prop.valueDeclaration.name.kind === 139 /* ComputedPropertyName */ || prop.parent === containingType.symbol) { + if (prop.valueDeclaration.name.kind === 140 /* ComputedPropertyName */ || prop.parent === containingType.symbol) { errorNode = prop.valueDeclaration; } else if (indexDeclaration) { @@ -28361,7 +29109,7 @@ var ts; var firstDecl; for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { var declaration = _a[_i]; - if (declaration.kind === 220 /* ClassDeclaration */ || declaration.kind === 221 /* InterfaceDeclaration */) { + if (declaration.kind === 221 /* ClassDeclaration */ || declaration.kind === 222 /* InterfaceDeclaration */) { if (!firstDecl) { firstDecl = declaration; } @@ -28517,7 +29265,7 @@ var ts; // If there is no declaration for the derived class (as in the case of class expressions), // then the class cannot be declared abstract. if (baseDeclarationFlags & 128 /* Abstract */ && (!derivedClassDecl || !(derivedClassDecl.flags & 128 /* Abstract */))) { - if (derivedClassDecl.kind === 191 /* ClassExpression */) { + if (derivedClassDecl.kind === 192 /* ClassExpression */) { error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType)); } else { @@ -28565,7 +29313,7 @@ var ts; } } function isAccessor(kind) { - return kind === 148 /* GetAccessor */ || kind === 149 /* SetAccessor */; + return kind === 149 /* GetAccessor */ || kind === 150 /* SetAccessor */; } function areTypeParametersIdentical(list1, list2) { if (!list1 && !list2) { @@ -28637,7 +29385,7 @@ var ts; var symbol = getSymbolOfNode(node); checkTypeParameterListsIdentical(node, symbol); // Only check this symbol once - var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 221 /* InterfaceDeclaration */); + var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 222 /* InterfaceDeclaration */); if (node === firstInterfaceDecl) { var type = getDeclaredTypeOfSymbol(symbol); var typeWithThis = getTypeWithThisArgument(type); @@ -28741,7 +29489,7 @@ var ts; return value; function evalConstant(e) { switch (e.kind) { - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: var value_1 = evalConstant(e.operand); if (value_1 === undefined) { return undefined; @@ -28752,7 +29500,7 @@ var ts; case 50 /* TildeToken */: return ~value_1; } return undefined; - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: var left = evalConstant(e.left); if (left === undefined) { return undefined; @@ -28777,11 +29525,11 @@ var ts; return undefined; case 8 /* NumericLiteral */: return +e.text; - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return evalConstant(e.expression); case 69 /* Identifier */: - case 172 /* ElementAccessExpression */: - case 171 /* PropertyAccessExpression */: + case 173 /* ElementAccessExpression */: + case 172 /* PropertyAccessExpression */: var member = initializer.parent; var currentType = getTypeOfSymbol(getSymbolOfNode(member.parent)); var enumType_1; @@ -28794,7 +29542,7 @@ var ts; } else { var expression = void 0; - if (e.kind === 172 /* ElementAccessExpression */) { + if (e.kind === 173 /* ElementAccessExpression */) { if (e.argumentExpression === undefined || e.argumentExpression.kind !== 9 /* StringLiteral */) { return undefined; @@ -28812,7 +29560,7 @@ var ts; if (current.kind === 69 /* Identifier */) { break; } - else if (current.kind === 171 /* PropertyAccessExpression */) { + else if (current.kind === 172 /* PropertyAccessExpression */) { current = current.expression; } else { @@ -28884,7 +29632,7 @@ var ts; var seenEnumMissingInitialInitializer_1 = false; ts.forEach(enumSymbol.declarations, function (declaration) { // return true if we hit a violation of the rule, false otherwise - if (declaration.kind !== 223 /* EnumDeclaration */) { + if (declaration.kind !== 224 /* EnumDeclaration */) { return false; } var enumDeclaration = declaration; @@ -28907,8 +29655,8 @@ var ts; var declarations = symbol.declarations; for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) { var declaration = declarations_5[_i]; - if ((declaration.kind === 220 /* ClassDeclaration */ || - (declaration.kind === 219 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) && + if ((declaration.kind === 221 /* ClassDeclaration */ || + (declaration.kind === 220 /* FunctionDeclaration */ && ts.nodeIsPresent(declaration.body))) && !ts.isInAmbientContext(declaration)) { return declaration; } @@ -28970,7 +29718,7 @@ var ts; } // if the module merges with a class declaration in the same lexical scope, // we need to track this to ensure the correct emit. - var mergedClass = ts.getDeclarationOfKind(symbol, 220 /* ClassDeclaration */); + var mergedClass = ts.getDeclarationOfKind(symbol, 221 /* ClassDeclaration */); if (mergedClass && inSameLexicalScope(node, mergedClass)) { getNodeLinks(node).flags |= 32768 /* LexicalModuleMergesWithClass */; @@ -29016,28 +29764,23 @@ var ts; } function checkModuleAugmentationElement(node, isGlobalAugmentation) { switch (node.kind) { - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: // error each individual name in variable statement instead of marking the entire variable statement for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { var decl = _a[_i]; checkModuleAugmentationElement(decl, isGlobalAugmentation); } break; - case 234 /* ExportAssignment */: - case 235 /* ExportDeclaration */: + case 235 /* ExportAssignment */: + case 236 /* ExportDeclaration */: grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations); break; - case 228 /* ImportEqualsDeclaration */: - if (node.moduleReference.kind !== 9 /* StringLiteral */) { - error(node.name, ts.Diagnostics.Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope); - break; - } - // fallthrough - case 229 /* ImportDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 230 /* ImportDeclaration */: grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module); break; - case 168 /* BindingElement */: - case 217 /* VariableDeclaration */: + case 169 /* BindingElement */: + case 218 /* VariableDeclaration */: var name_18 = node.name; if (ts.isBindingPattern(name_18)) { for (var _b = 0, _c = name_18.elements; _b < _c.length; _b++) { @@ -29048,12 +29791,15 @@ var ts; break; } // fallthrough - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: - case 219 /* FunctionDeclaration */: - case 221 /* InterfaceDeclaration */: - case 224 /* ModuleDeclaration */: - case 222 /* TypeAliasDeclaration */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: + case 220 /* FunctionDeclaration */: + case 222 /* InterfaceDeclaration */: + case 225 /* ModuleDeclaration */: + case 223 /* TypeAliasDeclaration */: + if (isGlobalAugmentation) { + return; + } var symbol = getSymbolOfNode(node); if (symbol) { // module augmentations cannot introduce new names on the top level scope of the module @@ -29062,17 +29808,8 @@ var ts; // 2. main check - report error if value declaration of the parent symbol is module augmentation) var reportError = !(symbol.flags & 33554432 /* Merged */); if (!reportError) { - if (isGlobalAugmentation) { - // global symbol should not have parent since it is not explicitly exported - reportError = symbol.parent !== undefined; - } - else { - // symbol should not originate in augmentation - reportError = ts.isExternalModuleAugmentation(symbol.parent.declarations[0]); - } - } - if (reportError) { - error(node, ts.Diagnostics.Module_augmentation_cannot_introduce_new_names_in_the_top_level_scope); + // symbol should not originate in augmentation + reportError = ts.isExternalModuleAugmentation(symbol.parent.declarations[0]); } } break; @@ -29080,10 +29817,10 @@ var ts; } function getFirstIdentifier(node) { while (true) { - if (node.kind === 138 /* QualifiedName */) { + if (node.kind === 139 /* QualifiedName */) { node = node.left; } - else if (node.kind === 171 /* PropertyAccessExpression */) { + else if (node.kind === 172 /* PropertyAccessExpression */) { node = node.expression; } else { @@ -29099,9 +29836,9 @@ var ts; error(moduleName, ts.Diagnostics.String_literal_expected); return false; } - var inAmbientExternalModule = node.parent.kind === 225 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent); - if (node.parent.kind !== 255 /* SourceFile */ && !inAmbientExternalModule) { - error(moduleName, node.kind === 235 /* ExportDeclaration */ ? + var inAmbientExternalModule = node.parent.kind === 226 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent); + if (node.parent.kind !== 256 /* SourceFile */ && !inAmbientExternalModule) { + error(moduleName, node.kind === 236 /* ExportDeclaration */ ? ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace : ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module); return false; @@ -29134,7 +29871,7 @@ var ts; (symbol.flags & 793056 /* Type */ ? 793056 /* Type */ : 0) | (symbol.flags & 1536 /* Namespace */ ? 1536 /* Namespace */ : 0); if (target.flags & excludedMeanings) { - var message = node.kind === 237 /* ExportSpecifier */ ? + var message = node.kind === 238 /* ExportSpecifier */ ? 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)); @@ -29152,7 +29889,7 @@ var ts; // If we hit an import declaration in an illegal context, just bail out to avoid cascading errors. return; } - if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 959 /* Modifier */)) { + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023 /* Modifier */)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_import_declaration_cannot_have_modifiers); } if (checkExternalImportOrExportDeclaration(node)) { @@ -29162,7 +29899,7 @@ var ts; checkImportBinding(importClause); } if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 231 /* NamespaceImport */) { + if (importClause.namedBindings.kind === 232 /* NamespaceImport */) { checkImportBinding(importClause.namedBindings); } else { @@ -29211,7 +29948,7 @@ var ts; // If we hit an export in an illegal context, just bail out to avoid cascading errors. return; } - if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 959 /* Modifier */)) { + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023 /* Modifier */)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_declaration_cannot_have_modifiers); } if (!node.moduleSpecifier || checkExternalImportOrExportDeclaration(node)) { @@ -29219,8 +29956,8 @@ var ts; // export { x, y } // export { x, y } from "foo" ts.forEach(node.exportClause.elements, checkExportSpecifier); - var inAmbientExternalModule = node.parent.kind === 225 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent); - if (node.parent.kind !== 255 /* SourceFile */ && !inAmbientExternalModule) { + var inAmbientExternalModule = node.parent.kind === 226 /* ModuleBlock */ && ts.isAmbientModule(node.parent.parent); + if (node.parent.kind !== 256 /* SourceFile */ && !inAmbientExternalModule) { error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace); } } @@ -29234,7 +29971,7 @@ var ts; } } function checkGrammarModuleElementContext(node, errorMessage) { - if (node.parent.kind !== 255 /* SourceFile */ && node.parent.kind !== 225 /* ModuleBlock */ && node.parent.kind !== 224 /* ModuleDeclaration */) { + if (node.parent.kind !== 256 /* SourceFile */ && node.parent.kind !== 226 /* ModuleBlock */ && node.parent.kind !== 225 /* ModuleDeclaration */) { return grammarErrorOnFirstToken(node, errorMessage); } } @@ -29246,7 +29983,7 @@ var ts; var symbol = resolveName(exportedName, exportedName.text, 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */ | 8388608 /* Alias */, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined); if (symbol && (symbol === undefinedSymbol || isGlobalSourceFile(getDeclarationContainer(symbol.declarations[0])))) { - error(exportedName, ts.Diagnostics.Cannot_re_export_name_that_is_not_defined_in_the_module); + error(exportedName, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, exportedName.text); } else { markExportAsReferenced(node); @@ -29258,13 +29995,13 @@ var ts; // If we hit an export assignment in an illegal context, just bail out to avoid cascading errors. return; } - var container = node.parent.kind === 255 /* SourceFile */ ? node.parent : node.parent.parent; - if (container.kind === 224 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) { + var container = node.parent.kind === 256 /* SourceFile */ ? node.parent : node.parent.parent; + if (container.kind === 225 /* ModuleDeclaration */ && !ts.isAmbientModule(container)) { error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace); return; } // Grammar checking - if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 959 /* Modifier */)) { + if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & 1023 /* Modifier */)) { grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers); } if (node.expression.kind === 69 /* Identifier */) { @@ -29334,7 +30071,7 @@ var ts; links.exportsChecked = true; } function isNotOverload(declaration) { - return declaration.kind !== 219 /* FunctionDeclaration */ || !!declaration.body; + return declaration.kind !== 220 /* FunctionDeclaration */ || !!declaration.body; } } function checkSourceElement(node) { @@ -29346,118 +30083,118 @@ var ts; // Only bother checking on a few construct kinds. We don't want to be excessively // hitting the cancellation token on every node we check. switch (kind) { - case 224 /* ModuleDeclaration */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 219 /* FunctionDeclaration */: + case 225 /* ModuleDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 220 /* FunctionDeclaration */: cancellationToken.throwIfCancellationRequested(); } } switch (kind) { - case 140 /* TypeParameter */: + case 141 /* TypeParameter */: return checkTypeParameter(node); - case 141 /* Parameter */: + case 142 /* Parameter */: return checkParameter(node); - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return checkPropertyDeclaration(node); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: return checkSignatureDeclaration(node); - case 152 /* IndexSignature */: + case 153 /* IndexSignature */: return checkSignatureDeclaration(node); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: return checkMethodDeclaration(node); - case 147 /* Constructor */: + case 148 /* Constructor */: return checkConstructorDeclaration(node); - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: return checkAccessorDeclaration(node); - case 154 /* TypeReference */: + case 155 /* TypeReference */: return checkTypeReferenceNode(node); - case 153 /* TypePredicate */: + case 154 /* TypePredicate */: return checkTypePredicate(node); - case 157 /* TypeQuery */: + case 158 /* TypeQuery */: return checkTypeQuery(node); - case 158 /* TypeLiteral */: + case 159 /* TypeLiteral */: return checkTypeLiteral(node); - case 159 /* ArrayType */: + case 160 /* ArrayType */: return checkArrayType(node); - case 160 /* TupleType */: + case 161 /* TupleType */: return checkTupleType(node); - case 161 /* UnionType */: - case 162 /* IntersectionType */: + case 162 /* UnionType */: + case 163 /* IntersectionType */: return checkUnionOrIntersectionType(node); - case 163 /* ParenthesizedType */: + case 164 /* ParenthesizedType */: return checkSourceElement(node.type); - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return checkFunctionDeclaration(node); - case 198 /* Block */: - case 225 /* ModuleBlock */: + case 199 /* Block */: + case 226 /* ModuleBlock */: return checkBlock(node); - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: return checkVariableStatement(node); - case 201 /* ExpressionStatement */: + case 202 /* ExpressionStatement */: return checkExpressionStatement(node); - case 202 /* IfStatement */: + case 203 /* IfStatement */: return checkIfStatement(node); - case 203 /* DoStatement */: + case 204 /* DoStatement */: return checkDoStatement(node); - case 204 /* WhileStatement */: + case 205 /* WhileStatement */: return checkWhileStatement(node); - case 205 /* ForStatement */: + case 206 /* ForStatement */: return checkForStatement(node); - case 206 /* ForInStatement */: + case 207 /* ForInStatement */: return checkForInStatement(node); - case 207 /* ForOfStatement */: + case 208 /* ForOfStatement */: return checkForOfStatement(node); - case 208 /* ContinueStatement */: - case 209 /* BreakStatement */: + case 209 /* ContinueStatement */: + case 210 /* BreakStatement */: return checkBreakOrContinueStatement(node); - case 210 /* ReturnStatement */: + case 211 /* ReturnStatement */: return checkReturnStatement(node); - case 211 /* WithStatement */: + case 212 /* WithStatement */: return checkWithStatement(node); - case 212 /* SwitchStatement */: + case 213 /* SwitchStatement */: return checkSwitchStatement(node); - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: return checkLabeledStatement(node); - case 214 /* ThrowStatement */: + case 215 /* ThrowStatement */: return checkThrowStatement(node); - case 215 /* TryStatement */: + case 216 /* TryStatement */: return checkTryStatement(node); - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: return checkVariableDeclaration(node); - case 168 /* BindingElement */: + case 169 /* BindingElement */: return checkBindingElement(node); - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: return checkClassDeclaration(node); - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return checkInterfaceDeclaration(node); - case 222 /* TypeAliasDeclaration */: + case 223 /* TypeAliasDeclaration */: return checkTypeAliasDeclaration(node); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return checkEnumDeclaration(node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return checkModuleDeclaration(node); - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: return checkImportDeclaration(node); - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: return checkImportEqualsDeclaration(node); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: return checkExportDeclaration(node); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return checkExportAssignment(node); - case 200 /* EmptyStatement */: + case 201 /* EmptyStatement */: checkGrammarStatementInAmbientContext(node); return; - case 216 /* DebuggerStatement */: + case 217 /* DebuggerStatement */: checkGrammarStatementInAmbientContext(node); return; - case 238 /* MissingDeclaration */: + case 239 /* MissingDeclaration */: return checkMissingDeclaration(node); } } @@ -29479,17 +30216,17 @@ var ts; for (var _i = 0, deferredNodes_1 = deferredNodes; _i < deferredNodes_1.length; _i++) { var node = deferredNodes_1[_i]; switch (node.kind) { - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: checkFunctionExpressionOrObjectLiteralMethodDeferred(node); break; - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: checkAccessorDeferred(node); break; - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: checkClassExpressionDeferred(node); break; } @@ -29564,7 +30301,7 @@ var ts; function isInsideWithStatementBody(node) { if (node) { while (node.parent) { - if (node.parent.kind === 211 /* WithStatement */ && node.parent.statement === node) { + if (node.parent.kind === 212 /* WithStatement */ && node.parent.statement === node) { return true; } node = node.parent; @@ -29587,25 +30324,25 @@ var ts; copySymbols(location.locals, meaning); } switch (location.kind) { - case 255 /* SourceFile */: + case 256 /* SourceFile */: if (!ts.isExternalOrCommonJsModule(location)) { break; } - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: copySymbols(getSymbolOfNode(location).exports, meaning & 8914931 /* ModuleMember */); break; - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: copySymbols(getSymbolOfNode(location).exports, meaning & 8 /* EnumMember */); break; - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: var className = location.name; if (className) { copySymbol(location.symbol, meaning); } // fall through; this fall-through is necessary because we would like to handle // type parameter inside class expression similar to how we handle it in classDeclaration and interface Declaration - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: // If we didn't come from static member of class or interface, // add the type parameters into the symbol table // (type parameters of classDeclaration/classExpression and interface are in member property of the symbol. @@ -29614,7 +30351,7 @@ var ts; copySymbols(getSymbolOfNode(location).members, meaning & 793056 /* Type */); } break; - case 178 /* FunctionExpression */: + case 179 /* FunctionExpression */: var funcName = location.name; if (funcName) { copySymbol(location.symbol, meaning); @@ -29663,28 +30400,28 @@ var ts; } function isTypeDeclaration(node) { switch (node.kind) { - case 140 /* TypeParameter */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 223 /* EnumDeclaration */: + case 141 /* TypeParameter */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 224 /* EnumDeclaration */: return true; } } // True if the given identifier is part of a type reference function isTypeReferenceIdentifier(entityName) { var node = entityName; - while (node.parent && node.parent.kind === 138 /* QualifiedName */) { + while (node.parent && node.parent.kind === 139 /* QualifiedName */) { node = node.parent; } - return node.parent && node.parent.kind === 154 /* TypeReference */; + return node.parent && node.parent.kind === 155 /* TypeReference */; } function isHeritageClauseElementIdentifier(entityName) { var node = entityName; - while (node.parent && node.parent.kind === 171 /* PropertyAccessExpression */) { + while (node.parent && node.parent.kind === 172 /* PropertyAccessExpression */) { node = node.parent; } - return node.parent && node.parent.kind === 193 /* ExpressionWithTypeArguments */; + return node.parent && node.parent.kind === 194 /* ExpressionWithTypeArguments */; } function forEachEnclosingClass(node, callback) { var result; @@ -29701,13 +30438,13 @@ var ts; return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; }); } function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) { - while (nodeOnRightSide.parent.kind === 138 /* QualifiedName */) { + while (nodeOnRightSide.parent.kind === 139 /* QualifiedName */) { nodeOnRightSide = nodeOnRightSide.parent; } - if (nodeOnRightSide.parent.kind === 228 /* ImportEqualsDeclaration */) { + if (nodeOnRightSide.parent.kind === 229 /* ImportEqualsDeclaration */) { return nodeOnRightSide.parent.moduleReference === nodeOnRightSide && nodeOnRightSide.parent; } - if (nodeOnRightSide.parent.kind === 234 /* ExportAssignment */) { + if (nodeOnRightSide.parent.kind === 235 /* ExportAssignment */) { return nodeOnRightSide.parent.expression === nodeOnRightSide && nodeOnRightSide.parent; } return undefined; @@ -29719,7 +30456,7 @@ var ts; if (ts.isDeclarationName(entityName)) { return getSymbolOfNode(entityName.parent); } - if (ts.isInJavaScriptFile(entityName) && entityName.parent.kind === 171 /* PropertyAccessExpression */) { + if (ts.isInJavaScriptFile(entityName) && entityName.parent.kind === 172 /* PropertyAccessExpression */) { var specialPropertyAssignmentKind = ts.getSpecialPropertyAssignmentKind(entityName.parent.parent); switch (specialPropertyAssignmentKind) { case 1 /* ExportsProperty */: @@ -29731,11 +30468,11 @@ var ts; default: } } - if (entityName.parent.kind === 234 /* ExportAssignment */) { + if (entityName.parent.kind === 235 /* ExportAssignment */) { return resolveEntityName(entityName, /*all meanings*/ 107455 /* Value */ | 793056 /* Type */ | 1536 /* Namespace */ | 8388608 /* Alias */); } - if (entityName.kind !== 171 /* PropertyAccessExpression */) { + if (entityName.kind !== 172 /* PropertyAccessExpression */) { if (isInRightSideOfImportOrExportAssignment(entityName)) { // Since we already checked for ExportAssignment, this really could only be an Import return getSymbolOfPartOfRightHandSideOfImportEquals(entityName); @@ -29747,7 +30484,7 @@ var ts; if (isHeritageClauseElementIdentifier(entityName)) { var meaning = 0 /* None */; // In an interface or class, we're definitely interested in a type. - if (entityName.parent.kind === 193 /* ExpressionWithTypeArguments */) { + if (entityName.parent.kind === 194 /* ExpressionWithTypeArguments */) { meaning = 793056 /* Type */; // In a class 'extends' clause we are also looking for a value. if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) { @@ -29774,14 +30511,14 @@ var ts; var meaning = 107455 /* Value */ | 8388608 /* Alias */; return resolveEntityName(entityName, meaning); } - else if (entityName.kind === 171 /* PropertyAccessExpression */) { + else if (entityName.kind === 172 /* PropertyAccessExpression */) { var symbol = getNodeLinks(entityName).resolvedSymbol; if (!symbol) { checkPropertyAccessExpression(entityName); } return getNodeLinks(entityName).resolvedSymbol; } - else if (entityName.kind === 138 /* QualifiedName */) { + else if (entityName.kind === 139 /* QualifiedName */) { var symbol = getNodeLinks(entityName).resolvedSymbol; if (!symbol) { checkQualifiedName(entityName); @@ -29790,22 +30527,25 @@ var ts; } } else if (isTypeReferenceIdentifier(entityName)) { - var meaning = entityName.parent.kind === 154 /* TypeReference */ ? 793056 /* Type */ : 1536 /* Namespace */; + var meaning = entityName.parent.kind === 155 /* TypeReference */ ? 793056 /* Type */ : 1536 /* Namespace */; // Include aliases in the meaning, this ensures that we do not follow aliases to where they point and instead // return the alias symbol. meaning |= 8388608 /* Alias */; return resolveEntityName(entityName, meaning); } - else if (entityName.parent.kind === 245 /* JsxAttribute */) { + else if (entityName.parent.kind === 246 /* JsxAttribute */) { return getJsxAttributePropertySymbol(entityName.parent); } - if (entityName.parent.kind === 153 /* TypePredicate */) { + if (entityName.parent.kind === 154 /* TypePredicate */) { return resolveEntityName(entityName, /*meaning*/ 1 /* FunctionScopedVariable */); } // Do we want to return undefined here? return undefined; } function getSymbolAtLocation(node) { + if (node.kind === 256 /* SourceFile */) { + return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined; + } if (isInsideWithStatementBody(node)) { // We cannot answer semantic questions within a with block, do not proceed any further return undefined; @@ -29814,14 +30554,17 @@ var ts; // This is a declaration, call getSymbolOfNode return getSymbolOfNode(node.parent); } + else if (ts.isLiteralComputedPropertyDeclarationName(node)) { + return getSymbolOfNode(node.parent.parent); + } if (node.kind === 69 /* Identifier */) { if (isInRightSideOfImportOrExportAssignment(node)) { - return node.parent.kind === 234 /* ExportAssignment */ + return node.parent.kind === 235 /* ExportAssignment */ ? getSymbolOfEntityNameOrPropertyAccessExpression(node) : getSymbolOfPartOfRightHandSideOfImportEquals(node); } - else if (node.parent.kind === 168 /* BindingElement */ && - node.parent.parent.kind === 166 /* ObjectBindingPattern */ && + else if (node.parent.kind === 169 /* BindingElement */ && + node.parent.parent.kind === 167 /* ObjectBindingPattern */ && node === node.parent.propertyName) { var typeOfPattern = getTypeOfNode(node.parent.parent); var propertyDeclaration = typeOfPattern && getPropertyOfType(typeOfPattern, node.text); @@ -29832,19 +30575,19 @@ var ts; } switch (node.kind) { case 69 /* Identifier */: - case 171 /* PropertyAccessExpression */: - case 138 /* QualifiedName */: + case 172 /* PropertyAccessExpression */: + case 139 /* QualifiedName */: return getSymbolOfEntityNameOrPropertyAccessExpression(node); case 97 /* ThisKeyword */: case 95 /* SuperKeyword */: var type = ts.isExpression(node) ? checkExpression(node) : getTypeFromTypeNode(node); return type.symbol; - case 164 /* ThisType */: + case 165 /* ThisType */: return getTypeFromTypeNode(node).symbol; case 121 /* ConstructorKeyword */: // constructor keyword for an overload, should take us to the definition if it exist var constructorDeclaration = node.parent; - if (constructorDeclaration && constructorDeclaration.kind === 147 /* Constructor */) { + if (constructorDeclaration && constructorDeclaration.kind === 148 /* Constructor */) { return constructorDeclaration.parent.symbol; } return undefined; @@ -29852,14 +30595,14 @@ var ts; // External module name in an import declaration if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) || - ((node.parent.kind === 229 /* ImportDeclaration */ || node.parent.kind === 235 /* ExportDeclaration */) && + ((node.parent.kind === 230 /* ImportDeclaration */ || node.parent.kind === 236 /* ExportDeclaration */) && node.parent.moduleSpecifier === node)) { return resolveExternalModuleName(node, node); } // Fall through case 8 /* NumericLiteral */: // index access - if (node.parent.kind === 172 /* ElementAccessExpression */ && node.parent.argumentExpression === node) { + if (node.parent.kind === 173 /* ElementAccessExpression */ && node.parent.argumentExpression === node) { var objectType = checkExpression(node.parent.expression); if (objectType === unknownType) return undefined; @@ -29876,7 +30619,7 @@ var ts; // The function returns a value symbol of an identifier in the short-hand property assignment. // This is necessary as an identifier in short-hand property assignment can contains two meaning: // property name and property value. - if (location && location.kind === 253 /* ShorthandPropertyAssignment */) { + if (location && location.kind === 254 /* ShorthandPropertyAssignment */) { return resolveEntityName(location.name, 107455 /* Value */ | 8388608 /* Alias */); } return undefined; @@ -29931,6 +30674,51 @@ var ts; } return unknownType; } + // Gets the type of object literal or array literal of destructuring assignment. + // { a } from + // for ( { a } of elems) { + // } + // [ a ] from + // [a] = [ some array ...] + function getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr) { + ts.Debug.assert(expr.kind === 171 /* ObjectLiteralExpression */ || expr.kind === 170 /* ArrayLiteralExpression */); + // If this is from "for of" + // for ( { a } of elems) { + // } + if (expr.parent.kind === 208 /* ForOfStatement */) { + var iteratedType = checkRightHandSideOfForOf(expr.parent.expression); + return checkDestructuringAssignment(expr, iteratedType || unknownType); + } + // If this is from "for" initializer + // for ({a } = elems[0];.....) { } + if (expr.parent.kind === 187 /* BinaryExpression */) { + var iteratedType = checkExpression(expr.parent.right); + return checkDestructuringAssignment(expr, iteratedType || unknownType); + } + // If this is from nested object binding pattern + // for ({ skills: { primary, secondary } } = multiRobot, i = 0; i < 1; i++) { + if (expr.parent.kind === 253 /* PropertyAssignment */) { + var typeOfParentObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent.parent); + return checkObjectLiteralDestructuringPropertyAssignment(typeOfParentObjectLiteral || unknownType, expr.parent); + } + // Array literal assignment - array destructuring pattern + ts.Debug.assert(expr.parent.kind === 170 /* ArrayLiteralExpression */); + // [{ property1: p1, property2 }] = elems; + var typeOfArrayLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent); + var elementType = checkIteratedTypeOrElementType(typeOfArrayLiteral || unknownType, expr.parent, /*allowStringInput*/ false) || unknownType; + return checkArrayLiteralDestructuringElementAssignment(expr.parent, typeOfArrayLiteral, ts.indexOf(expr.parent.elements, expr), elementType || unknownType); + } + // Gets the property symbol corresponding to the property in destructuring assignment + // 'property1' from + // for ( { property1: a } of elems) { + // } + // 'property1' at location 'a' from: + // [a] = [ property1, property2 ] + function getPropertySymbolOfDestructuringAssignment(location) { + // Get the type of the object or array literal and then look for property of given name in the type + var typeOfObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(location.parent.parent); + return typeOfObjectLiteral && getPropertyOfType(typeOfObjectLiteral, location.text); + } function getTypeOfExpression(expr) { if (ts.isRightSideOfQualifiedNameOrPropertyAccess(expr)) { expr = expr.parent; @@ -29974,7 +30762,11 @@ var ts; return symbols_3; } else if (symbol.flags & 67108864 /* Transient */) { - var target = getSymbolLinks(symbol).target; + var target = void 0; + var next = symbol; + while (next = getSymbolLinks(next).target) { + target = next; + } if (target) { return [target]; } @@ -30026,11 +30818,11 @@ var ts; } var parentSymbol = getParentOfSymbol(symbol); if (parentSymbol) { - if (parentSymbol.flags & 512 /* ValueModule */ && parentSymbol.valueDeclaration.kind === 255 /* SourceFile */) { + if (parentSymbol.flags & 512 /* ValueModule */ && parentSymbol.valueDeclaration.kind === 256 /* SourceFile */) { return parentSymbol.valueDeclaration; } for (var n = node.parent; n; n = n.parent) { - if ((n.kind === 224 /* ModuleDeclaration */ || n.kind === 223 /* EnumDeclaration */) && getSymbolOfNode(n) === parentSymbol) { + if ((n.kind === 225 /* ModuleDeclaration */ || n.kind === 224 /* EnumDeclaration */) && getSymbolOfNode(n) === parentSymbol) { return n; } } @@ -30072,7 +30864,7 @@ var ts; // they will not collide with anything var isDeclaredInLoop = nodeLinks_1.flags & 262144 /* BlockScopedBindingInLoop */; var inLoopInitializer = ts.isIterationStatement(container, /*lookInLabeledStatements*/ false); - var inLoopBodyBlock = container.kind === 198 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false); + var inLoopBodyBlock = container.kind === 199 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false); links.isDeclarationWithCollidingName = !ts.isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || (!inLoopInitializer && !inLoopBodyBlock)); } else { @@ -30098,22 +30890,22 @@ var ts; } function isValueAliasDeclaration(node) { switch (node.kind) { - case 228 /* ImportEqualsDeclaration */: - case 230 /* ImportClause */: - case 231 /* NamespaceImport */: - case 233 /* ImportSpecifier */: - case 237 /* ExportSpecifier */: + case 229 /* ImportEqualsDeclaration */: + case 231 /* ImportClause */: + case 232 /* NamespaceImport */: + case 234 /* ImportSpecifier */: + case 238 /* ExportSpecifier */: return isAliasResolvedToValue(getSymbolOfNode(node)); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: var exportClause = node.exportClause; return exportClause && ts.forEach(exportClause.elements, isValueAliasDeclaration); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return node.expression && node.expression.kind === 69 /* Identifier */ ? isAliasResolvedToValue(getSymbolOfNode(node)) : true; } return false; } function isTopLevelValueImportEqualsWithEntityName(node) { - if (node.parent.kind !== 255 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) { + if (node.parent.kind !== 256 /* SourceFile */ || !ts.isInternalModuleImportEqualsDeclaration(node)) { // parent is not source file or it is not reference to internal module return false; } @@ -30122,14 +30914,12 @@ var ts; } function isAliasResolvedToValue(symbol) { var target = resolveAlias(symbol); - if (target === unknownSymbol && compilerOptions.isolatedModules) { + if (target === unknownSymbol) { return true; } // const enums and modules that contain only const enums are not considered values from the emit perspective // unless 'preserveConstEnums' option is set to true - return target !== unknownSymbol && - target && - target.flags & 107455 /* Value */ && + return target.flags & 107455 /* Value */ && (compilerOptions.preserveConstEnums || !isConstEnumOrConstEnumOnlyModule(target)); } function isConstEnumOrConstEnumOnlyModule(s) { @@ -30175,7 +30965,7 @@ var ts; return getNodeLinks(node).enumMemberValue; } function getConstantValue(node) { - if (node.kind === 254 /* EnumMember */) { + if (node.kind === 255 /* EnumMember */) { return getEnumMemberValue(node); } var symbol = getNodeLinks(node).resolvedSymbol; @@ -30274,6 +31064,25 @@ var ts; return symbol && getExportSymbolOfValueSymbolIfExported(symbol).valueDeclaration; } function createResolver() { + // this variable and functions that use it are deliberately moved here from the outer scope + // to avoid scope pollution + var resolvedTypeReferenceDirectives = host.getResolvedTypeReferenceDirectives(); + var fileToDirective; + if (resolvedTypeReferenceDirectives) { + // populate reverse mapping: file path -> type reference directive that was resolved to this file + fileToDirective = ts.createFileMap(); + for (var key in resolvedTypeReferenceDirectives) { + if (!ts.hasProperty(resolvedTypeReferenceDirectives, key)) { + continue; + } + var resolvedDirective = resolvedTypeReferenceDirectives[key]; + if (!resolvedDirective) { + continue; + } + var file = host.getSourceFile(resolvedDirective.resolvedFileName); + fileToDirective.set(file.path, key); + } + } return { getReferencedExportContainer: getReferencedExportContainer, getReferencedImportDeclaration: getReferencedImportDeclaration, @@ -30299,8 +31108,79 @@ var ts; isOptionalParameter: isOptionalParameter, moduleExportsSomeValue: moduleExportsSomeValue, isArgumentsLocalBinding: isArgumentsLocalBinding, - getExternalModuleFileFromDeclaration: getExternalModuleFileFromDeclaration + getExternalModuleFileFromDeclaration: getExternalModuleFileFromDeclaration, + getTypeReferenceDirectivesForEntityName: getTypeReferenceDirectivesForEntityName, + getTypeReferenceDirectivesForSymbol: getTypeReferenceDirectivesForSymbol }; + // defined here to avoid outer scope pollution + function getTypeReferenceDirectivesForEntityName(node) { + // program does not have any files with type reference directives - bail out + if (!fileToDirective) { + return undefined; + } + // property access can only be used as values + // qualified names can only be used as types\namespaces + // identifiers are treated as values only if they appear in type queries + var meaning = (node.kind === 172 /* PropertyAccessExpression */) || (node.kind === 69 /* Identifier */ && isInTypeQuery(node)) + ? 107455 /* Value */ | 1048576 /* ExportValue */ + : 793056 /* Type */ | 1536 /* Namespace */; + var symbol = resolveEntityName(node, meaning, /*ignoreErrors*/ true); + return symbol && symbol !== unknownSymbol ? getTypeReferenceDirectivesForSymbol(symbol, meaning) : undefined; + } + // defined here to avoid outer scope pollution + function getTypeReferenceDirectivesForSymbol(symbol, meaning) { + // program does not have any files with type reference directives - bail out + if (!fileToDirective) { + return undefined; + } + if (!isSymbolFromTypeDeclarationFile(symbol)) { + return undefined; + } + // check what declarations in the symbol can contribute to the target meaning + var typeReferenceDirectives; + for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { + var decl = _a[_i]; + // check meaning of the local symbol to see if declaration needs to be analyzed further + if (decl.symbol && decl.symbol.flags & meaning) { + var file = ts.getSourceFileOfNode(decl); + var typeReferenceDirective = fileToDirective.get(file.path); + if (typeReferenceDirective) { + (typeReferenceDirectives || (typeReferenceDirectives = [])).push(typeReferenceDirective); + } + } + } + return typeReferenceDirectives; + } + function isSymbolFromTypeDeclarationFile(symbol) { + // bail out if symbol does not have associated declarations (i.e. this is transient symbol created for property in binding pattern) + if (!symbol.declarations) { + return false; + } + // walk the parent chain for symbols to make sure that top level parent symbol is in the global scope + // external modules cannot define or contribute to type declaration files + var current = symbol; + while (true) { + var parent_12 = getParentOfSymbol(current); + if (parent_12) { + current = parent_12; + } + else { + break; + } + } + if (current.valueDeclaration && current.valueDeclaration.kind === 256 /* SourceFile */ && current.flags & 512 /* ValueModule */) { + return false; + } + // check that at least one declaration of top level symbol originates from type declaration file + for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { + var decl = _a[_i]; + var file = ts.getSourceFileOfNode(decl); + if (fileToDirective.contains(file.path)) { + return true; + } + } + return false; + } } function getExternalModuleFileFromDeclaration(declaration) { var specifier = ts.getExternalModuleName(declaration); @@ -30308,7 +31188,7 @@ var ts; if (!moduleSymbol) { return undefined; } - return ts.getDeclarationOfKind(moduleSymbol, 255 /* SourceFile */); + return ts.getDeclarationOfKind(moduleSymbol, 256 /* SourceFile */); } function initializeTypeChecker() { // Bind all source files and propagate errors @@ -30408,14 +31288,14 @@ var ts; return false; } if (!ts.nodeCanBeDecorated(node)) { - if (node.kind === 146 /* MethodDeclaration */ && !ts.nodeIsPresent(node.body)) { + if (node.kind === 147 /* MethodDeclaration */ && !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 === 148 /* GetAccessor */ || node.kind === 149 /* SetAccessor */) { + else if (node.kind === 149 /* GetAccessor */ || node.kind === 150 /* SetAccessor */) { 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); @@ -30425,38 +31305,38 @@ var ts; } function checkGrammarModifiers(node) { switch (node.kind) { - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 147 /* Constructor */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 152 /* IndexSignature */: - case 224 /* ModuleDeclaration */: - case 229 /* ImportDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 235 /* ExportDeclaration */: - case 234 /* ExportAssignment */: - case 141 /* Parameter */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 148 /* Constructor */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 153 /* IndexSignature */: + case 225 /* ModuleDeclaration */: + case 230 /* ImportDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 236 /* ExportDeclaration */: + case 235 /* ExportAssignment */: + case 142 /* Parameter */: break; - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 118 /* AsyncKeyword */) && - node.parent.kind !== 225 /* ModuleBlock */ && node.parent.kind !== 255 /* SourceFile */) { + node.parent.kind !== 226 /* ModuleBlock */ && node.parent.kind !== 256 /* SourceFile */) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); } break; - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 199 /* VariableStatement */: - case 222 /* TypeAliasDeclaration */: - if (node.modifiers && node.parent.kind !== 225 /* ModuleBlock */ && node.parent.kind !== 255 /* SourceFile */) { + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 200 /* VariableStatement */: + case 223 /* TypeAliasDeclaration */: + if (node.modifiers && node.parent.kind !== 226 /* ModuleBlock */ && node.parent.kind !== 256 /* SourceFile */) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); } break; - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: if (node.modifiers && (node.modifiers.length > 1 || node.modifiers[0].kind !== 74 /* ConstKeyword */) && - node.parent.kind !== 225 /* ModuleBlock */ && node.parent.kind !== 255 /* SourceFile */) { + node.parent.kind !== 226 /* ModuleBlock */ && node.parent.kind !== 256 /* SourceFile */) { return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here); } break; @@ -30470,17 +31350,17 @@ var ts; var flags = 0; for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) { var modifier = _a[_i]; - if (modifier.kind !== 127 /* ReadonlyKeyword */) { - if (node.kind === 143 /* PropertySignature */ || node.kind === 145 /* MethodSignature */) { + if (modifier.kind !== 128 /* ReadonlyKeyword */) { + if (node.kind === 144 /* PropertySignature */ || node.kind === 146 /* MethodSignature */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind)); } - if (node.kind === 152 /* IndexSignature */) { + if (node.kind === 153 /* IndexSignature */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind)); } } switch (modifier.kind) { case 74 /* ConstKeyword */: - if (node.kind !== 223 /* EnumDeclaration */ && node.parent.kind === 220 /* ClassDeclaration */) { + if (node.kind !== 224 /* EnumDeclaration */ && node.parent.kind === 221 /* ClassDeclaration */) { return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(74 /* ConstKeyword */)); } break; @@ -30506,7 +31386,7 @@ var ts; else if (flags & 256 /* Async */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async"); } - else if (node.parent.kind === 225 /* ModuleBlock */ || node.parent.kind === 255 /* SourceFile */) { + else if (node.parent.kind === 226 /* ModuleBlock */ || node.parent.kind === 256 /* SourceFile */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text); } else if (flags & 128 /* Abstract */) { @@ -30529,10 +31409,10 @@ var ts; else if (flags & 256 /* Async */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async"); } - else if (node.parent.kind === 225 /* ModuleBlock */ || node.parent.kind === 255 /* SourceFile */) { + else if (node.parent.kind === 226 /* ModuleBlock */ || node.parent.kind === 256 /* SourceFile */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static"); } - else if (node.kind === 141 /* Parameter */) { + else if (node.kind === 142 /* Parameter */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); } else if (flags & 128 /* Abstract */) { @@ -30541,11 +31421,12 @@ var ts; flags |= 32 /* Static */; lastStatic = modifier; break; - case 127 /* ReadonlyKeyword */: + case 128 /* ReadonlyKeyword */: if (flags & 64 /* Readonly */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly"); } - else if (node.kind !== 144 /* PropertyDeclaration */ && node.kind !== 143 /* PropertySignature */ && node.kind !== 152 /* IndexSignature */) { + else if (node.kind !== 145 /* PropertyDeclaration */ && node.kind !== 144 /* PropertySignature */ && node.kind !== 153 /* IndexSignature */ && node.kind !== 142 /* Parameter */) { + // If node.kind === SyntaxKind.Parameter, checkParameter report an error if it's not a parameter property. return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature); } flags |= 64 /* Readonly */; @@ -30564,10 +31445,10 @@ var ts; else if (flags & 256 /* Async */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "async"); } - else if (node.parent.kind === 220 /* ClassDeclaration */) { + else if (node.parent.kind === 221 /* ClassDeclaration */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export"); } - else if (node.kind === 141 /* Parameter */) { + else if (node.kind === 142 /* Parameter */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); } flags |= 1 /* Export */; @@ -30579,13 +31460,13 @@ var ts; else if (flags & 256 /* Async */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async"); } - else if (node.parent.kind === 220 /* ClassDeclaration */) { + else if (node.parent.kind === 221 /* ClassDeclaration */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare"); } - else if (node.kind === 141 /* Parameter */) { + else if (node.kind === 142 /* Parameter */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); } - else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 225 /* ModuleBlock */) { + else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 226 /* ModuleBlock */) { return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); } flags |= 2 /* Ambient */; @@ -30595,14 +31476,14 @@ var ts; if (flags & 128 /* Abstract */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract"); } - if (node.kind !== 220 /* ClassDeclaration */) { - if (node.kind !== 146 /* MethodDeclaration */ && - node.kind !== 144 /* PropertyDeclaration */ && - node.kind !== 148 /* GetAccessor */ && - node.kind !== 149 /* SetAccessor */) { + if (node.kind !== 221 /* ClassDeclaration */) { + if (node.kind !== 147 /* MethodDeclaration */ && + node.kind !== 145 /* PropertyDeclaration */ && + node.kind !== 149 /* GetAccessor */ && + node.kind !== 150 /* SetAccessor */) { return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration); } - if (!(node.parent.kind === 220 /* ClassDeclaration */ && node.parent.flags & 128 /* Abstract */)) { + if (!(node.parent.kind === 221 /* ClassDeclaration */ && node.parent.flags & 128 /* Abstract */)) { return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class); } if (flags & 32 /* Static */) { @@ -30621,7 +31502,7 @@ var ts; else if (flags & 2 /* Ambient */ || ts.isInAmbientContext(node.parent)) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async"); } - else if (node.kind === 141 /* Parameter */) { + else if (node.kind === 142 /* Parameter */) { return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async"); } flags |= 256 /* Async */; @@ -30629,7 +31510,7 @@ var ts; break; } } - if (node.kind === 147 /* Constructor */) { + if (node.kind === 148 /* Constructor */) { if (flags & 32 /* Static */) { return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); } @@ -30644,10 +31525,10 @@ var ts; } return; } - else if ((node.kind === 229 /* ImportDeclaration */ || node.kind === 228 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) { + else if ((node.kind === 230 /* ImportDeclaration */ || node.kind === 229 /* ImportEqualsDeclaration */) && flags & 2 /* Ambient */) { return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare"); } - else if (node.kind === 141 /* Parameter */ && (flags & 28 /* AccessibilityModifier */) && ts.isBindingPattern(node.name)) { + else if (node.kind === 142 /* Parameter */ && (flags & 92 /* ParameterPropertyModifier */) && ts.isBindingPattern(node.name)) { return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_a_binding_pattern); } if (flags & 256 /* Async */) { @@ -30659,10 +31540,10 @@ var ts; return grammarErrorOnNode(asyncModifier, ts.Diagnostics.Async_functions_are_only_available_when_targeting_ECMAScript_6_and_higher); } switch (node.kind) { - case 146 /* MethodDeclaration */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: if (!node.asteriskToken) { return false; } @@ -30728,7 +31609,7 @@ var ts; checkGrammarParameterList(node.parameters) || checkGrammarArrowFunction(node, file); } function checkGrammarArrowFunction(node, file) { - if (node.kind === 179 /* ArrowFunction */) { + if (node.kind === 180 /* ArrowFunction */) { var arrowFunction = node; var startLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.pos).line; var endLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.end).line; @@ -30751,7 +31632,7 @@ var ts; if (parameter.dotDotDotToken) { return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter); } - if (parameter.flags & 959 /* Modifier */) { + if (parameter.flags & 1023 /* Modifier */) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); } if (parameter.questionToken) { @@ -30763,7 +31644,7 @@ var ts; if (!parameter.type) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); } - if (parameter.type.kind !== 131 /* StringKeyword */ && parameter.type.kind !== 129 /* NumberKeyword */) { + if (parameter.type.kind !== 132 /* StringKeyword */ && parameter.type.kind !== 130 /* NumberKeyword */) { return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number); } if (!node.type) { @@ -30791,7 +31672,7 @@ var ts; var sourceFile = ts.getSourceFileOfNode(node); for (var _i = 0, args_1 = args; _i < args_1.length; _i++) { var arg = args_1[_i]; - if (arg.kind === 192 /* OmittedExpression */) { + if (arg.kind === 193 /* OmittedExpression */) { return grammarErrorAtPos(sourceFile, arg.pos, 0, ts.Diagnostics.Argument_expression_expected); } } @@ -30865,19 +31746,19 @@ var ts; } function checkGrammarComputedPropertyName(node) { // If node is not a computedPropertyName, just skip the grammar checking - if (node.kind !== 139 /* ComputedPropertyName */) { + if (node.kind !== 140 /* ComputedPropertyName */) { return false; } var computedPropertyName = node; - if (computedPropertyName.expression.kind === 186 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 24 /* CommaToken */) { + if (computedPropertyName.expression.kind === 187 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 24 /* CommaToken */) { 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 === 219 /* FunctionDeclaration */ || - node.kind === 178 /* FunctionExpression */ || - node.kind === 146 /* MethodDeclaration */); + ts.Debug.assert(node.kind === 220 /* FunctionDeclaration */ || + node.kind === 179 /* FunctionExpression */ || + node.kind === 147 /* MethodDeclaration */); if (ts.isInAmbientContext(node)) { return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context); } @@ -30902,20 +31783,20 @@ var ts; var GetOrSetAccessor = GetAccessor | SetAccessor; var _loop_1 = function(prop) { var name_20 = prop.name; - if (prop.kind === 192 /* OmittedExpression */ || - name_20.kind === 139 /* ComputedPropertyName */) { + if (prop.kind === 193 /* OmittedExpression */ || + name_20.kind === 140 /* ComputedPropertyName */) { // If the name is not a ComputedPropertyName, the grammar checking will skip it checkGrammarComputedPropertyName(name_20); return "continue"; } - if (prop.kind === 253 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) { + if (prop.kind === 254 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) { // having objectAssignmentInitializer is only valid in ObjectAssignmentPattern // outside of destructuring it is a syntax error return { value: grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment) }; } // Modifiers are never allowed on properties except for 'async' on a method declaration ts.forEach(prop.modifiers, function (mod) { - if (mod.kind !== 118 /* AsyncKeyword */ || prop.kind !== 146 /* MethodDeclaration */) { + if (mod.kind !== 118 /* AsyncKeyword */ || prop.kind !== 147 /* MethodDeclaration */) { grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod)); } }); @@ -30928,7 +31809,7 @@ var ts; // d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields var currentKind = void 0; - if (prop.kind === 252 /* PropertyAssignment */ || prop.kind === 253 /* ShorthandPropertyAssignment */) { + if (prop.kind === 253 /* PropertyAssignment */ || prop.kind === 254 /* ShorthandPropertyAssignment */) { // Grammar checking for computedPropertyName and shorthandPropertyAssignment checkGrammarForInvalidQuestionMark(prop, prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional); if (name_20.kind === 8 /* NumericLiteral */) { @@ -30936,13 +31817,13 @@ var ts; } currentKind = Property; } - else if (prop.kind === 146 /* MethodDeclaration */) { + else if (prop.kind === 147 /* MethodDeclaration */) { currentKind = Property; } - else if (prop.kind === 148 /* GetAccessor */) { + else if (prop.kind === 149 /* GetAccessor */) { currentKind = GetAccessor; } - else if (prop.kind === 149 /* SetAccessor */) { + else if (prop.kind === 150 /* SetAccessor */) { currentKind = SetAccessor; } else { @@ -30979,7 +31860,7 @@ var ts; var seen = {}; for (var _i = 0, _a = node.attributes; _i < _a.length; _i++) { var attr = _a[_i]; - if (attr.kind === 246 /* JsxSpreadAttribute */) { + if (attr.kind === 247 /* JsxSpreadAttribute */) { continue; } var jsxAttr = attr; @@ -30991,7 +31872,7 @@ var ts; return grammarErrorOnNode(name_21, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); } var initializer = jsxAttr.initializer; - if (initializer && initializer.kind === 247 /* JsxExpression */ && !initializer.expression) { + if (initializer && initializer.kind === 248 /* JsxExpression */ && !initializer.expression) { return grammarErrorOnNode(jsxAttr.initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression); } } @@ -31000,7 +31881,7 @@ var ts; if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) { return true; } - if (forInOrOfStatement.initializer.kind === 218 /* VariableDeclarationList */) { + if (forInOrOfStatement.initializer.kind === 219 /* VariableDeclarationList */) { var variableList = forInOrOfStatement.initializer; if (!checkGrammarVariableDeclarationList(variableList)) { var declarations = variableList.declarations; @@ -31015,20 +31896,20 @@ var ts; return false; } if (declarations.length > 1) { - var diagnostic = forInOrOfStatement.kind === 206 /* ForInStatement */ + var diagnostic = forInOrOfStatement.kind === 207 /* ForInStatement */ ? 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 === 206 /* ForInStatement */ + var diagnostic = forInOrOfStatement.kind === 207 /* ForInStatement */ ? 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 === 206 /* ForInStatement */ + var diagnostic = forInOrOfStatement.kind === 207 /* ForInStatement */ ? 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); @@ -31051,24 +31932,20 @@ var ts; else if (accessor.typeParameters) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters); } - else if (kind === 148 /* GetAccessor */ && accessor.parameters.length) { - return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_get_accessor_cannot_have_parameters); + else if (!doesAccessorHaveCorrectParameterCount(accessor)) { + return grammarErrorOnNode(accessor.name, kind === 149 /* GetAccessor */ ? + ts.Diagnostics.A_get_accessor_cannot_have_parameters : + ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); } - else if (kind === 149 /* SetAccessor */) { + else if (kind === 150 /* SetAccessor */) { if (accessor.type) { return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); } - else if (accessor.parameters.length !== 1) { - return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter); - } 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.flags & 959 /* Modifier */) { - return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); - } else if (parameter.questionToken) { return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); } @@ -31078,6 +31955,20 @@ var ts; } } } + /** Does the accessor have the right number of parameters? + + A get accessor has no parameters or a single `this` parameter. + A set accessor has one parameter or a `this` parameter and one more parameter */ + function doesAccessorHaveCorrectParameterCount(accessor) { + return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 149 /* GetAccessor */ ? 0 : 1); + } + function getAccessorThisParameter(accessor) { + if (accessor.parameters.length === (accessor.kind === 149 /* GetAccessor */ ? 1 : 2) && + accessor.parameters[0].name.kind === 69 /* Identifier */ && + accessor.parameters[0].name.originalKeywordKind === 97 /* ThisKeyword */) { + return accessor.parameters[0]; + } + } function checkGrammarForNonSymbolComputedProperty(node, message) { if (ts.isDynamicName(node)) { return grammarErrorOnNode(node, message); @@ -31089,8 +31980,8 @@ var ts; checkGrammarForGenerator(node)) { return true; } - if (node.parent.kind === 170 /* ObjectLiteralExpression */) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) { + if (node.parent.kind === 171 /* ObjectLiteralExpression */) { + if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) { return true; } else if (node.body === undefined) { @@ -31098,9 +31989,6 @@ var ts; } } if (ts.isClassLike(node.parent)) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional)) { - return true; - } // Technically, computed properties in ambient contexts is disallowed // for property declarations and accessors too, not just methods. // However, property declarations disallow computed names in general, @@ -31113,10 +32001,10 @@ var ts; 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 === 221 /* InterfaceDeclaration */) { + else if (node.parent.kind === 222 /* InterfaceDeclaration */) { 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 === 158 /* TypeLiteral */) { + else if (node.parent.kind === 159 /* TypeLiteral */) { return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol); } } @@ -31127,11 +32015,11 @@ var ts; return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary); } switch (current.kind) { - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: if (node.label && current.label.text === node.label.text) { // found matching label - verify that label usage is correct // continue can only target labels that are on iteration statements - var isMisplacedContinueLabel = node.kind === 208 /* ContinueStatement */ + var isMisplacedContinueLabel = node.kind === 209 /* ContinueStatement */ && !ts.isIterationStatement(current.statement, /*lookInLabeledStatement*/ true); if (isMisplacedContinueLabel) { return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); @@ -31139,8 +32027,8 @@ var ts; return false; } break; - case 212 /* SwitchStatement */: - if (node.kind === 209 /* BreakStatement */ && !node.label) { + case 213 /* SwitchStatement */: + if (node.kind === 210 /* BreakStatement */ && !node.label) { // unlabeled break within switch statement - ok return false; } @@ -31155,13 +32043,13 @@ var ts; current = current.parent; } if (node.label) { - var message = node.kind === 209 /* BreakStatement */ + var message = node.kind === 210 /* BreakStatement */ ? 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 === 209 /* BreakStatement */ + var message = node.kind === 210 /* BreakStatement */ ? 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); @@ -31173,7 +32061,7 @@ var ts; if (node !== ts.lastOrUndefined(elements)) { return grammarErrorOnNode(node, ts.Diagnostics.A_rest_element_must_be_last_in_an_array_destructuring_pattern); } - if (node.name.kind === 167 /* ArrayBindingPattern */ || node.name.kind === 166 /* ObjectBindingPattern */) { + if (node.name.kind === 168 /* ArrayBindingPattern */ || node.name.kind === 167 /* ObjectBindingPattern */) { return grammarErrorOnNode(node.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern); } if (node.initializer) { @@ -31183,7 +32071,7 @@ var ts; } } function checkGrammarVariableDeclaration(node) { - if (node.parent.parent.kind !== 206 /* ForInStatement */ && node.parent.parent.kind !== 207 /* ForOfStatement */) { + if (node.parent.parent.kind !== 207 /* ForInStatement */ && node.parent.parent.kind !== 208 /* ForOfStatement */) { if (ts.isInAmbientContext(node)) { if (node.initializer) { // Error on equals token which immediate precedes the initializer @@ -31219,7 +32107,7 @@ var ts; var elements = name.elements; for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) { var element = elements_2[_i]; - if (element.kind !== 192 /* OmittedExpression */) { + if (element.kind !== 193 /* OmittedExpression */) { checkGrammarNameInLetOrConstDeclarations(element.name); } } @@ -31236,15 +32124,15 @@ var ts; } function allowLetAndConstDeclarations(parent) { switch (parent.kind) { - case 202 /* IfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: - case 211 /* WithStatement */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: + case 203 /* IfStatement */: + case 204 /* DoStatement */: + case 205 /* WhileStatement */: + case 212 /* WithStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: return false; - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: return allowLetAndConstDeclarations(parent.parent); } return true; @@ -31295,12 +32183,11 @@ var ts; } function checkGrammarProperty(node) { if (ts.isClassLike(node.parent)) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, ts.Diagnostics.A_class_member_cannot_be_declared_optional) || - checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol)) { + 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 === 221 /* InterfaceDeclaration */) { + else if (node.parent.kind === 222 /* InterfaceDeclaration */) { if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol)) { return true; } @@ -31308,7 +32195,7 @@ var ts; return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer); } } - else if (node.parent.kind === 158 /* TypeLiteral */) { + else if (node.parent.kind === 159 /* TypeLiteral */) { if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol)) { return true; } @@ -31333,12 +32220,12 @@ var ts; // export_opt AmbientDeclaration // // TODO: The spec needs to be amended to reflect this grammar. - if (node.kind === 221 /* InterfaceDeclaration */ || - node.kind === 222 /* TypeAliasDeclaration */ || - node.kind === 229 /* ImportDeclaration */ || - node.kind === 228 /* ImportEqualsDeclaration */ || - node.kind === 235 /* ExportDeclaration */ || - node.kind === 234 /* ExportAssignment */ || + if (node.kind === 222 /* InterfaceDeclaration */ || + node.kind === 223 /* TypeAliasDeclaration */ || + node.kind === 230 /* ImportDeclaration */ || + node.kind === 229 /* ImportEqualsDeclaration */ || + node.kind === 236 /* ExportDeclaration */ || + node.kind === 235 /* ExportAssignment */ || (node.flags & 2 /* Ambient */) || (node.flags & (1 /* Export */ | 512 /* Default */))) { return false; @@ -31348,7 +32235,7 @@ var ts; function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) { for (var _i = 0, _a = file.statements; _i < _a.length; _i++) { var decl = _a[_i]; - if (ts.isDeclaration(decl) || decl.kind === 199 /* VariableStatement */) { + if (ts.isDeclaration(decl) || decl.kind === 200 /* VariableStatement */) { if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) { return true; } @@ -31374,7 +32261,7 @@ var ts; // to prevent noisiness. So use a bit on the block to indicate if // this has already been reported, and don't report if it has. // - if (node.parent.kind === 198 /* Block */ || node.parent.kind === 225 /* ModuleBlock */ || node.parent.kind === 255 /* SourceFile */) { + if (node.parent.kind === 199 /* Block */ || node.parent.kind === 226 /* ModuleBlock */ || node.parent.kind === 256 /* SourceFile */) { var links_1 = getNodeLinks(node.parent); // Check if the containing block ever report this error if (!links_1.hasReportedStatementInAmbientContext) { @@ -31763,7 +32650,8 @@ var ts; // Contains the reference paths that needs to go in the declaration file. // Collecting this separately because reference paths need to be first thing in the declaration file // and we could be collecting these paths from multiple files into single one with --out option - var referencePathsOutput = ""; + var referencesOutput = ""; + var usedTypeDirectiveReferences; // Emit references corresponding to each file var emittedReferencedFiles = []; var addedGlobalFileReference = false; @@ -31810,7 +32698,7 @@ var ts; var oldWriter = writer; ts.forEach(moduleElementDeclarationEmitInfo, function (aliasEmitInfo) { if (aliasEmitInfo.isVisible && !aliasEmitInfo.asynchronousOutput) { - ts.Debug.assert(aliasEmitInfo.node.kind === 229 /* ImportDeclaration */); + ts.Debug.assert(aliasEmitInfo.node.kind === 230 /* ImportDeclaration */); createAndSetNewTextWriterWithSymbolWriter(); ts.Debug.assert(aliasEmitInfo.indent === 0 || (aliasEmitInfo.indent === 1 && isBundledEmit)); for (var i = 0; i < aliasEmitInfo.indent; i++) { @@ -31835,11 +32723,18 @@ var ts; writeLine(); } }); + if (usedTypeDirectiveReferences) { + for (var directive in usedTypeDirectiveReferences) { + if (ts.hasProperty(usedTypeDirectiveReferences, directive)) { + referencesOutput += "/// " + newLine; + } + } + } return { reportedDeclarationError: reportedDeclarationError, moduleElementDeclarationEmitInfo: allSourcesModuleElementDeclarationEmitInfo, synchronousDeclarationOutput: writer.getText(), - referencePathsOutput: referencePathsOutput + referencesOutput: referencesOutput }; function hasInternalAnnotation(range) { var comment = currentText.substring(range.pos, range.end); @@ -31879,10 +32774,10 @@ var ts; var oldWriter = writer; ts.forEach(nodes, function (declaration) { var nodeToCheck; - if (declaration.kind === 217 /* VariableDeclaration */) { + if (declaration.kind === 218 /* VariableDeclaration */) { nodeToCheck = declaration.parent.parent; } - else if (declaration.kind === 232 /* NamedImports */ || declaration.kind === 233 /* ImportSpecifier */ || declaration.kind === 230 /* ImportClause */) { + else if (declaration.kind === 233 /* NamedImports */ || declaration.kind === 234 /* ImportSpecifier */ || declaration.kind === 231 /* ImportClause */) { ts.Debug.fail("We should be getting ImportDeclaration instead to write"); } else { @@ -31900,7 +32795,7 @@ var ts; // Writing of function bar would mark alias declaration foo as visible but we haven't yet visited that declaration so do nothing, // we would write alias foo declaration when we visit it since it would now be marked as visible if (moduleElementEmitInfo) { - if (moduleElementEmitInfo.node.kind === 229 /* ImportDeclaration */) { + if (moduleElementEmitInfo.node.kind === 230 /* ImportDeclaration */) { // we have to create asynchronous output only after we have collected complete information // because it is possible to enable multiple bindings as asynchronously visible moduleElementEmitInfo.isVisible = true; @@ -31910,12 +32805,12 @@ var ts; for (var declarationIndent = moduleElementEmitInfo.indent; declarationIndent; declarationIndent--) { increaseIndent(); } - if (nodeToCheck.kind === 224 /* ModuleDeclaration */) { + if (nodeToCheck.kind === 225 /* ModuleDeclaration */) { ts.Debug.assert(asynchronousSubModuleDeclarationEmitInfo === undefined); asynchronousSubModuleDeclarationEmitInfo = []; } writeModuleElement(nodeToCheck); - if (nodeToCheck.kind === 224 /* ModuleDeclaration */) { + if (nodeToCheck.kind === 225 /* ModuleDeclaration */) { moduleElementEmitInfo.subModuleElementDeclarationEmitInfo = asynchronousSubModuleDeclarationEmitInfo; asynchronousSubModuleDeclarationEmitInfo = undefined; } @@ -31925,6 +32820,20 @@ var ts; }); setWriter(oldWriter); } + function recordTypeReferenceDirectivesIfNecessary(typeReferenceDirectives) { + if (!typeReferenceDirectives) { + return; + } + if (!usedTypeDirectiveReferences) { + usedTypeDirectiveReferences = {}; + } + for (var _i = 0, typeReferenceDirectives_1 = typeReferenceDirectives; _i < typeReferenceDirectives_1.length; _i++) { + var directive = typeReferenceDirectives_1[_i]; + if (!ts.hasProperty(usedTypeDirectiveReferences, directive)) { + usedTypeDirectiveReferences[directive] = directive; + } + } + } function handleSymbolAccessibilityError(symbolAccessibilityResult) { if (symbolAccessibilityResult.accessibility === 0 /* Accessible */) { // write the aliases @@ -31948,6 +32857,7 @@ var ts; } function trackSymbol(symbol, enclosingDeclaration, meaning) { handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning)); + recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning)); } function reportInaccessibleThisError() { if (errorNameNode) { @@ -32018,42 +32928,43 @@ var ts; function emitType(type) { switch (type.kind) { case 117 /* AnyKeyword */: - case 131 /* StringKeyword */: - case 129 /* NumberKeyword */: + case 132 /* StringKeyword */: + case 130 /* NumberKeyword */: case 120 /* BooleanKeyword */: - case 132 /* SymbolKeyword */: + case 133 /* SymbolKeyword */: case 103 /* VoidKeyword */: - case 134 /* UndefinedKeyword */: + case 135 /* UndefinedKeyword */: case 93 /* NullKeyword */: - case 164 /* ThisType */: - case 165 /* StringLiteralType */: + case 127 /* NeverKeyword */: + case 165 /* ThisType */: + case 166 /* StringLiteralType */: return writeTextOfNode(currentText, type); - case 193 /* ExpressionWithTypeArguments */: + case 194 /* ExpressionWithTypeArguments */: return emitExpressionWithTypeArguments(type); - case 154 /* TypeReference */: + case 155 /* TypeReference */: return emitTypeReference(type); - case 157 /* TypeQuery */: + case 158 /* TypeQuery */: return emitTypeQuery(type); - case 159 /* ArrayType */: + case 160 /* ArrayType */: return emitArrayType(type); - case 160 /* TupleType */: + case 161 /* TupleType */: return emitTupleType(type); - case 161 /* UnionType */: + case 162 /* UnionType */: return emitUnionType(type); - case 162 /* IntersectionType */: + case 163 /* IntersectionType */: return emitIntersectionType(type); - case 163 /* ParenthesizedType */: + case 164 /* ParenthesizedType */: return emitParenType(type); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: return emitSignatureDeclarationWithJsDocComments(type); - case 158 /* TypeLiteral */: + case 159 /* TypeLiteral */: return emitTypeLiteral(type); case 69 /* Identifier */: return emitEntityName(type); - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: return emitEntityName(type); - case 153 /* TypePredicate */: + case 154 /* TypePredicate */: return emitTypePredicate(type); } function writeEntityName(entityName) { @@ -32061,8 +32972,8 @@ var ts; writeTextOfNode(currentText, entityName); } else { - var left = entityName.kind === 138 /* QualifiedName */ ? entityName.left : entityName.expression; - var right = entityName.kind === 138 /* QualifiedName */ ? entityName.right : entityName.name; + var left = entityName.kind === 139 /* QualifiedName */ ? entityName.left : entityName.expression; + var right = entityName.kind === 139 /* QualifiedName */ ? entityName.right : entityName.name; writeEntityName(left); write("."); writeTextOfNode(currentText, right); @@ -32071,13 +32982,14 @@ var ts; function emitEntityName(entityName) { var visibilityResult = resolver.isEntityNameVisible(entityName, // Aliases can be written asynchronously so use correct enclosing declaration - entityName.parent.kind === 228 /* ImportEqualsDeclaration */ ? entityName.parent : enclosingDeclaration); + entityName.parent.kind === 229 /* ImportEqualsDeclaration */ ? entityName.parent : enclosingDeclaration); handleSymbolAccessibilityError(visibilityResult); + recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForEntityName(entityName)); writeEntityName(entityName); } function emitExpressionWithTypeArguments(node) { if (ts.isSupportedExpressionWithTypeArguments(node)) { - ts.Debug.assert(node.expression.kind === 69 /* Identifier */ || node.expression.kind === 171 /* PropertyAccessExpression */); + ts.Debug.assert(node.expression.kind === 69 /* Identifier */ || node.expression.kind === 172 /* PropertyAccessExpression */); emitEntityName(node.expression); if (node.typeArguments) { write("<"); @@ -32205,10 +33117,10 @@ var ts; if (isModuleElementVisible) { writeModuleElement(node); } - else if (node.kind === 228 /* ImportEqualsDeclaration */ || - (node.parent.kind === 255 /* SourceFile */ && isCurrentFileExternalModule)) { + else if (node.kind === 229 /* ImportEqualsDeclaration */ || + (node.parent.kind === 256 /* SourceFile */ && isCurrentFileExternalModule)) { var isVisible = void 0; - if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 255 /* SourceFile */) { + if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 256 /* SourceFile */) { // Import declaration of another module that is visited async so lets put it in right spot asynchronousSubModuleDeclarationEmitInfo.push({ node: node, @@ -32218,7 +33130,7 @@ var ts; }); } else { - if (node.kind === 229 /* ImportDeclaration */) { + if (node.kind === 230 /* ImportDeclaration */) { var importDeclaration = node; if (importDeclaration.importClause) { isVisible = (importDeclaration.importClause.name && resolver.isDeclarationVisible(importDeclaration.importClause)) || @@ -32236,23 +33148,23 @@ var ts; } function writeModuleElement(node) { switch (node.kind) { - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return writeFunctionDeclaration(node); - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: return writeVariableStatement(node); - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return writeInterfaceDeclaration(node); - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: return writeClassDeclaration(node); - case 222 /* TypeAliasDeclaration */: + case 223 /* TypeAliasDeclaration */: return writeTypeAliasDeclaration(node); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return writeEnumDeclaration(node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return writeModuleDeclaration(node); - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: return writeImportEqualsDeclaration(node); - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: return writeImportDeclaration(node); default: ts.Debug.fail("Unknown symbol kind"); @@ -32260,7 +33172,7 @@ var ts; } function emitModuleElementDeclarationFlags(node) { // If the node is parented in the current source file we need to emit export declare or just export - if (node.parent.kind === 255 /* SourceFile */) { + if (node.parent.kind === 256 /* SourceFile */) { // If the node is exported if (node.flags & 1 /* Export */) { write("export "); @@ -32268,7 +33180,7 @@ var ts; if (node.flags & 512 /* Default */) { write("default "); } - else if (node.kind !== 221 /* InterfaceDeclaration */ && !noDeclare) { + else if (node.kind !== 222 /* InterfaceDeclaration */ && !noDeclare) { write("declare "); } } @@ -32320,7 +33232,7 @@ var ts; } function isVisibleNamedBinding(namedBindings) { if (namedBindings) { - if (namedBindings.kind === 231 /* NamespaceImport */) { + if (namedBindings.kind === 232 /* NamespaceImport */) { return resolver.isDeclarationVisible(namedBindings); } else { @@ -32344,7 +33256,7 @@ var ts; // If the default binding was emitted, write the separated write(", "); } - if (node.importClause.namedBindings.kind === 231 /* NamespaceImport */) { + if (node.importClause.namedBindings.kind === 232 /* NamespaceImport */) { write("* as "); writeTextOfNode(currentText, node.importClause.namedBindings.name); } @@ -32365,13 +33277,13 @@ var ts; // the only case when it is not true is when we call it to emit correct name for module augmentation - d.ts files with just module augmentations are not considered // external modules since they are indistinguishable from script files with ambient modules. To fix this in such d.ts files we'll emit top level 'export {}' // so compiler will treat them as external modules. - resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || parent.kind !== 224 /* ModuleDeclaration */; + resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || parent.kind !== 225 /* ModuleDeclaration */; var moduleSpecifier; - if (parent.kind === 228 /* ImportEqualsDeclaration */) { + if (parent.kind === 229 /* ImportEqualsDeclaration */) { var node = parent; moduleSpecifier = ts.getExternalModuleImportEqualsDeclarationExpression(node); } - else if (parent.kind === 224 /* ModuleDeclaration */) { + else if (parent.kind === 225 /* ModuleDeclaration */) { moduleSpecifier = parent.name; } else { @@ -32441,7 +33353,7 @@ var ts; writeTextOfNode(currentText, node.name); } } - while (node.body.kind !== 225 /* ModuleBlock */) { + while (node.body.kind !== 226 /* ModuleBlock */) { node = node.body; write("."); writeTextOfNode(currentText, node.name); @@ -32506,7 +33418,7 @@ var ts; writeLine(); } function isPrivateMethodTypeParameter(node) { - return node.parent.kind === 146 /* MethodDeclaration */ && (node.parent.flags & 8 /* Private */); + return node.parent.kind === 147 /* MethodDeclaration */ && (node.parent.flags & 8 /* Private */); } function emitTypeParameters(typeParameters) { function emitTypeParameter(node) { @@ -32517,15 +33429,15 @@ var ts; // If there is constraint present and this is not a type parameter of the private method emit the constraint if (node.constraint && !isPrivateMethodTypeParameter(node)) { write(" extends "); - if (node.parent.kind === 155 /* FunctionType */ || - node.parent.kind === 156 /* ConstructorType */ || - (node.parent.parent && node.parent.parent.kind === 158 /* TypeLiteral */)) { - ts.Debug.assert(node.parent.kind === 146 /* MethodDeclaration */ || - node.parent.kind === 145 /* MethodSignature */ || - node.parent.kind === 155 /* FunctionType */ || - node.parent.kind === 156 /* ConstructorType */ || - node.parent.kind === 150 /* CallSignature */ || - node.parent.kind === 151 /* ConstructSignature */); + if (node.parent.kind === 156 /* FunctionType */ || + node.parent.kind === 157 /* ConstructorType */ || + (node.parent.parent && node.parent.parent.kind === 159 /* TypeLiteral */)) { + ts.Debug.assert(node.parent.kind === 147 /* MethodDeclaration */ || + node.parent.kind === 146 /* MethodSignature */ || + node.parent.kind === 156 /* FunctionType */ || + node.parent.kind === 157 /* ConstructorType */ || + node.parent.kind === 151 /* CallSignature */ || + node.parent.kind === 152 /* ConstructSignature */); emitType(node.constraint); } else { @@ -32536,31 +33448,31 @@ var ts; // Type parameter constraints are named by user so we should always be able to name it var diagnosticMessage; switch (node.parent.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; break; - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; break; - case 151 /* ConstructSignature */: + case 152 /* ConstructSignature */: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; break; - case 150 /* CallSignature */: + case 151 /* CallSignature */: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; break; - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: if (node.parent.flags & 32 /* Static */) { 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 === 220 /* ClassDeclaration */) { + else if (node.parent.parent.kind === 221 /* ClassDeclaration */) { 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 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; break; default: @@ -32598,7 +33510,7 @@ var ts; function getHeritageClauseVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; // Heritage clause is written by user so it can always be named - if (node.parent.parent.kind === 220 /* ClassDeclaration */) { + if (node.parent.parent.kind === 221 /* ClassDeclaration */) { // Class or Interface implemented/extended is inaccessible diagnosticMessage = isImplementsList ? ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : @@ -32620,7 +33532,7 @@ var ts; function emitParameterProperties(constructorDeclaration) { if (constructorDeclaration) { ts.forEach(constructorDeclaration.parameters, function (param) { - if (param.flags & 28 /* AccessibilityModifier */) { + if (param.flags & 92 /* ParameterPropertyModifier */) { emitPropertyDeclaration(param); } }); @@ -32682,7 +33594,7 @@ var ts; function emitVariableDeclaration(node) { // If we are emitting property it isn't moduleElement and hence we already know it needs to be emitted // so there is no check needed to see if declaration is visible - if (node.kind !== 217 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) { + if (node.kind !== 218 /* VariableDeclaration */ || resolver.isDeclarationVisible(node)) { if (ts.isBindingPattern(node.name)) { emitBindingPattern(node.name); } @@ -32692,10 +33604,10 @@ var ts; // what we want, namely the name expression enclosed in brackets. writeTextOfNode(currentText, node.name); // If optional property emit ? - if ((node.kind === 144 /* PropertyDeclaration */ || node.kind === 143 /* PropertySignature */) && ts.hasQuestionToken(node)) { + if ((node.kind === 145 /* PropertyDeclaration */ || node.kind === 144 /* PropertySignature */ || node.kind === 142 /* Parameter */) && ts.hasQuestionToken(node)) { write("?"); } - if ((node.kind === 144 /* PropertyDeclaration */ || node.kind === 143 /* PropertySignature */) && node.parent.kind === 158 /* TypeLiteral */) { + if ((node.kind === 145 /* PropertyDeclaration */ || node.kind === 144 /* PropertySignature */) && node.parent.kind === 159 /* TypeLiteral */) { emitTypeOfVariableDeclarationFromTypeLiteral(node); } else if (!(node.flags & 8 /* Private */)) { @@ -32704,14 +33616,14 @@ var ts; } } function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { - if (node.kind === 217 /* VariableDeclaration */) { + if (node.kind === 218 /* VariableDeclaration */) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? 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 === 144 /* PropertyDeclaration */ || node.kind === 143 /* PropertySignature */) { + else if (node.kind === 145 /* PropertyDeclaration */ || node.kind === 144 /* PropertySignature */) { // TODO(jfreeman): Deal with computed properties in error reporting. if (node.flags & 32 /* Static */) { return symbolAccessibilityResult.errorModuleName ? @@ -32720,7 +33632,7 @@ var ts; 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 === 220 /* ClassDeclaration */) { + else if (node.parent.kind === 221 /* ClassDeclaration */) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : @@ -32752,7 +33664,7 @@ var ts; var elements = []; for (var _i = 0, _a = bindingPattern.elements; _i < _a.length; _i++) { var element = _a[_i]; - if (element.kind !== 192 /* OmittedExpression */) { + if (element.kind !== 193 /* OmittedExpression */) { elements.push(element); } } @@ -32822,7 +33734,7 @@ var ts; var type = getTypeAnnotationFromAccessor(node); if (!type) { // couldn't get type for the first accessor, try the another one - var anotherAccessor = node.kind === 148 /* GetAccessor */ ? accessors.setAccessor : accessors.getAccessor; + var anotherAccessor = node.kind === 149 /* GetAccessor */ ? accessors.setAccessor : accessors.getAccessor; type = getTypeAnnotationFromAccessor(anotherAccessor); if (type) { accessorWithTypeAnnotation = anotherAccessor; @@ -32835,7 +33747,7 @@ var ts; } function getTypeAnnotationFromAccessor(accessor) { if (accessor) { - return accessor.kind === 148 /* GetAccessor */ + return accessor.kind === 149 /* GetAccessor */ ? accessor.type // Getter - return type : accessor.parameters.length > 0 ? accessor.parameters[0].type // Setter parameter type @@ -32844,7 +33756,7 @@ var ts; } function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; - if (accessorWithTypeAnnotation.kind === 149 /* SetAccessor */) { + if (accessorWithTypeAnnotation.kind === 150 /* SetAccessor */) { // Setters have to have type named and cannot infer it so, the type should always be named if (accessorWithTypeAnnotation.parent.flags & 32 /* Static */) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? @@ -32894,17 +33806,17 @@ var ts; // so no need to verify if the declaration is visible if (!resolver.isImplementationOfOverload(node)) { emitJsDocComments(node); - if (node.kind === 219 /* FunctionDeclaration */) { + if (node.kind === 220 /* FunctionDeclaration */) { emitModuleElementDeclarationFlags(node); } - else if (node.kind === 146 /* MethodDeclaration */ || node.kind === 147 /* Constructor */) { + else if (node.kind === 147 /* MethodDeclaration */ || node.kind === 148 /* Constructor */) { emitClassMemberDeclarationFlags(node.flags); } - if (node.kind === 219 /* FunctionDeclaration */) { + if (node.kind === 220 /* FunctionDeclaration */) { write("function "); writeTextOfNode(currentText, node.name); } - else if (node.kind === 147 /* Constructor */) { + else if (node.kind === 148 /* Constructor */) { write("constructor"); } else { @@ -32923,37 +33835,48 @@ var ts; function emitSignatureDeclaration(node) { var prevEnclosingDeclaration = enclosingDeclaration; enclosingDeclaration = node; - if (node.kind === 152 /* IndexSignature */) { + var closeParenthesizedFunctionType = false; + if (node.kind === 153 /* IndexSignature */) { // Index signature can have readonly modifier emitClassMemberDeclarationFlags(node.flags); write("["); } else { // Construct signature or constructor type write new Signature - if (node.kind === 151 /* ConstructSignature */ || node.kind === 156 /* ConstructorType */) { + if (node.kind === 152 /* ConstructSignature */ || node.kind === 157 /* ConstructorType */) { write("new "); } + else if (node.kind === 156 /* FunctionType */) { + var currentOutput = writer.getText(); + // Do not generate incorrect type when function type with type parameters is type argument + // This could happen if user used space between two '<' making it error free + // e.g var x: A< (a: Tany)=>Tany>; + if (node.typeParameters && currentOutput.charAt(currentOutput.length - 1) === "<") { + closeParenthesizedFunctionType = true; + write("("); + } + } emitTypeParameters(node.typeParameters); write("("); } // Parameters emitCommaList(node.parameters, emitParameterDeclaration); - if (node.kind === 152 /* IndexSignature */) { + if (node.kind === 153 /* IndexSignature */) { write("]"); } else { write(")"); } // If this is not a constructor and is not private, emit the return type - var isFunctionTypeOrConstructorType = node.kind === 155 /* FunctionType */ || node.kind === 156 /* ConstructorType */; - if (isFunctionTypeOrConstructorType || node.parent.kind === 158 /* TypeLiteral */) { + var isFunctionTypeOrConstructorType = node.kind === 156 /* FunctionType */ || node.kind === 157 /* ConstructorType */; + if (isFunctionTypeOrConstructorType || node.parent.kind === 159 /* TypeLiteral */) { // Emit type literal signature return type only if specified if (node.type) { write(isFunctionTypeOrConstructorType ? " => " : ": "); emitType(node.type); } } - else if (node.kind !== 147 /* Constructor */ && !(node.flags & 8 /* Private */)) { + else if (node.kind !== 148 /* Constructor */ && !(node.flags & 8 /* Private */)) { writeReturnTypeAtSignature(node, getReturnTypeVisibilityError); } enclosingDeclaration = prevEnclosingDeclaration; @@ -32961,29 +33884,32 @@ var ts; write(";"); writeLine(); } + else if (closeParenthesizedFunctionType) { + write(")"); + } function getReturnTypeVisibilityError(symbolAccessibilityResult) { var diagnosticMessage; switch (node.kind) { - case 151 /* ConstructSignature */: + case 152 /* ConstructSignature */: // Interfaces cannot have return types that cannot be named 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 150 /* CallSignature */: + case 151 /* CallSignature */: // Interfaces cannot have return types that cannot be named 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 152 /* IndexSignature */: + case 153 /* IndexSignature */: // Interfaces cannot have return types that cannot be named 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 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: if (node.flags & 32 /* Static */) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? @@ -32991,7 +33917,7 @@ var ts; 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 === 220 /* ClassDeclaration */) { + else if (node.parent.kind === 221 /* ClassDeclaration */) { diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : @@ -33005,7 +33931,7 @@ var ts; ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; } break; - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : @@ -33040,9 +33966,9 @@ var ts; write("?"); } decreaseIndent(); - if (node.parent.kind === 155 /* FunctionType */ || - node.parent.kind === 156 /* ConstructorType */ || - node.parent.parent.kind === 158 /* TypeLiteral */) { + if (node.parent.kind === 156 /* FunctionType */ || + node.parent.kind === 157 /* ConstructorType */ || + node.parent.parent.kind === 159 /* TypeLiteral */) { emitTypeOfVariableDeclarationFromTypeLiteral(node); } else if (!(node.parent.flags & 8 /* Private */)) { @@ -33058,24 +33984,24 @@ var ts; } function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { switch (node.parent.kind) { - case 147 /* Constructor */: + case 148 /* Constructor */: return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? 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 151 /* ConstructSignature */: + case 152 /* ConstructSignature */: // Interfaces cannot have parameter types that cannot be named 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 150 /* CallSignature */: + case 151 /* CallSignature */: // Interfaces cannot have parameter types that cannot be named 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 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: if (node.parent.flags & 32 /* Static */) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? @@ -33083,7 +34009,7 @@ var ts; 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 === 220 /* ClassDeclaration */) { + else if (node.parent.parent.kind === 221 /* ClassDeclaration */) { return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : @@ -33096,7 +34022,7 @@ var ts; 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 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : @@ -33108,12 +34034,12 @@ var ts; } function emitBindingPattern(bindingPattern) { // We have to explicitly emit square bracket and bracket because these tokens are not store inside the node. - if (bindingPattern.kind === 166 /* ObjectBindingPattern */) { + if (bindingPattern.kind === 167 /* ObjectBindingPattern */) { write("{"); emitCommaList(bindingPattern.elements, emitBindingElement); write("}"); } - else if (bindingPattern.kind === 167 /* ArrayBindingPattern */) { + else if (bindingPattern.kind === 168 /* ArrayBindingPattern */) { write("["); var elements = bindingPattern.elements; emitCommaList(elements, emitBindingElement); @@ -33124,7 +34050,7 @@ var ts; } } function emitBindingElement(bindingElement) { - if (bindingElement.kind === 192 /* OmittedExpression */) { + if (bindingElement.kind === 193 /* OmittedExpression */) { // If bindingElement is an omittedExpression (i.e. containing elision), // we will emit blank space (although this may differ from users' original code, // it allows emitSeparatedList to write separator appropriately) @@ -33133,7 +34059,7 @@ var ts; // emit : function foo([ , x, , ]) {} write(" "); } - else if (bindingElement.kind === 168 /* BindingElement */) { + else if (bindingElement.kind === 169 /* BindingElement */) { if (bindingElement.propertyName) { // bindingElement has propertyName property in the following case: // { y: [a,b,c] ...} -> bindingPattern will have a property called propertyName for "y" @@ -33172,40 +34098,40 @@ var ts; } function emitNode(node) { switch (node.kind) { - case 219 /* FunctionDeclaration */: - case 224 /* ModuleDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 221 /* InterfaceDeclaration */: - case 220 /* ClassDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 223 /* EnumDeclaration */: + case 220 /* FunctionDeclaration */: + case 225 /* ModuleDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 222 /* InterfaceDeclaration */: + case 221 /* ClassDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 224 /* EnumDeclaration */: return emitModuleElement(node, isModuleElementVisible(node)); - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: return emitModuleElement(node, isVariableStatementVisible(node)); - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: // Import declaration without import clause is visible, otherwise it is not visible return emitModuleElement(node, /*isModuleElementVisible*/ !node.importClause); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: return emitExportDeclaration(node); - case 147 /* Constructor */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 148 /* Constructor */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: return writeFunctionDeclaration(node); - case 151 /* ConstructSignature */: - case 150 /* CallSignature */: - case 152 /* IndexSignature */: + case 152 /* ConstructSignature */: + case 151 /* CallSignature */: + case 153 /* IndexSignature */: return emitSignatureDeclarationWithJsDocComments(node); - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: return emitAccessorDeclaration(node); - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return emitPropertyDeclaration(node); - case 254 /* EnumMember */: + case 255 /* EnumMember */: return emitEnumMemberDeclaration(node); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return emitExportAssignment(node); - case 255 /* SourceFile */: + case 256 /* SourceFile */: return emitSourceFile(node); } } @@ -33228,7 +34154,7 @@ var ts; if (declFileName) { declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(declarationFilePath)), declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, /*isAbsolutePathAnUrl*/ false); - referencePathsOutput += '/// ' + newLine; + referencesOutput += "/// " + newLine; } return addedBundledEmitReference; function getDeclFileName(emitFileNames, sourceFiles, isBundledEmit) { @@ -33247,9 +34173,9 @@ var ts; var emitDeclarationResult = emitDeclarations(host, resolver, emitterDiagnostics, declarationFilePath, sourceFiles, isBundledEmit); var emitSkipped = emitDeclarationResult.reportedDeclarationError || host.isEmitBlocked(declarationFilePath) || host.getCompilerOptions().noEmit; if (!emitSkipped) { - var declarationOutput = emitDeclarationResult.referencePathsOutput + var declarationOutput = emitDeclarationResult.referencesOutput + getDeclarationOutput(emitDeclarationResult.synchronousDeclarationOutput, emitDeclarationResult.moduleElementDeclarationEmitInfo); - ts.writeFile(host, emitterDiagnostics, declarationFilePath, declarationOutput, host.getCompilerOptions().emitBOM); + ts.writeFile(host, emitterDiagnostics, declarationFilePath, declarationOutput, host.getCompilerOptions().emitBOM, sourceFiles); } return emitSkipped; function getDeclarationOutput(synchronousDeclarationOutput, moduleElementDeclarationEmitInfo) { @@ -33821,17 +34747,17 @@ var ts; switch (node.kind) { case 69 /* Identifier */: return makeUniqueName(node.text); - case 224 /* ModuleDeclaration */: - case 223 /* EnumDeclaration */: + case 225 /* ModuleDeclaration */: + case 224 /* EnumDeclaration */: return generateNameForModuleOrEnum(node); - case 229 /* ImportDeclaration */: - case 235 /* ExportDeclaration */: + case 230 /* ImportDeclaration */: + case 236 /* ExportDeclaration */: return generateNameForImportOrExportDeclaration(node); - case 219 /* FunctionDeclaration */: - case 220 /* ClassDeclaration */: - case 234 /* ExportAssignment */: + case 220 /* FunctionDeclaration */: + case 221 /* ClassDeclaration */: + case 235 /* ExportAssignment */: return generateNameForExportDefault(); - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: return generateNameForClassExpression(); } } @@ -34101,10 +35027,10 @@ var ts; write("("); emit(tempVariable); // Now we emit the expressions - if (node.template.kind === 188 /* TemplateExpression */) { + if (node.template.kind === 189 /* TemplateExpression */) { ts.forEach(node.template.templateSpans, function (templateSpan) { write(", "); - var needsParens = templateSpan.expression.kind === 186 /* BinaryExpression */ + var needsParens = templateSpan.expression.kind === 187 /* BinaryExpression */ && templateSpan.expression.operatorToken.kind === 24 /* CommaToken */; emitParenthesizedIf(templateSpan.expression, needsParens); }); @@ -34139,7 +35065,7 @@ var ts; // ("abc" + 1) << (2 + "") // rather than // "abc" + (1 << 2) + "" - var needsParens = templateSpan.expression.kind !== 177 /* ParenthesizedExpression */ + var needsParens = templateSpan.expression.kind !== 178 /* ParenthesizedExpression */ && comparePrecedenceToBinaryPlus(templateSpan.expression) !== 1 /* GreaterThan */; if (i > 0 || headEmitted) { // If this is the first span and the head was not emitted, then this templateSpan's @@ -34181,11 +35107,11 @@ var ts; } function templateNeedsParens(template, parent) { switch (parent.kind) { - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: return parent.expression === template; - case 175 /* TaggedTemplateExpression */: - case 177 /* ParenthesizedExpression */: + case 176 /* TaggedTemplateExpression */: + case 178 /* ParenthesizedExpression */: return false; default: return comparePrecedenceToBinaryPlus(parent) !== -1 /* LessThan */; @@ -34206,7 +35132,7 @@ var ts; // TODO (drosen): Note that we need to account for the upcoming 'yield' and // spread ('...') unary operators that are anticipated for ES6. switch (expression.kind) { - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: switch (expression.operatorToken.kind) { case 37 /* AsteriskToken */: case 39 /* SlashToken */: @@ -34218,8 +35144,8 @@ var ts; default: return -1 /* LessThan */; } - case 189 /* YieldExpression */: - case 187 /* ConditionalExpression */: + case 190 /* YieldExpression */: + case 188 /* ConditionalExpression */: return -1 /* LessThan */; default: return 1 /* GreaterThan */; @@ -34286,11 +35212,11 @@ var ts; // Either emit one big object literal (no spread attribs), or // a call to the __assign helper var attrs = openingNode.attributes; - if (ts.forEach(attrs, function (attr) { return attr.kind === 246 /* JsxSpreadAttribute */; })) { + if (ts.forEach(attrs, function (attr) { return attr.kind === 247 /* JsxSpreadAttribute */; })) { write("__assign("); var haveOpenedObjectLiteral = false; for (var i = 0; i < attrs.length; i++) { - if (attrs[i].kind === 246 /* JsxSpreadAttribute */) { + if (attrs[i].kind === 247 /* JsxSpreadAttribute */) { // If this is the first argument, we need to emit a {} as the first argument if (i === 0) { write("{}, "); @@ -34305,7 +35231,7 @@ var ts; emit(attrs[i].expression); } else { - ts.Debug.assert(attrs[i].kind === 245 /* JsxAttribute */); + ts.Debug.assert(attrs[i].kind === 246 /* JsxAttribute */); if (haveOpenedObjectLiteral) { write(", "); } @@ -34366,7 +35292,7 @@ var ts; decreaseIndent(); } else if (firstChild) { - if (firstChild.kind !== 240 /* JsxElement */ && firstChild.kind !== 241 /* JsxSelfClosingElement */) { + if (firstChild.kind !== 241 /* JsxElement */ && firstChild.kind !== 242 /* JsxSelfClosingElement */) { emit(firstChild); } else { @@ -34383,11 +35309,11 @@ var ts; write(")"); // closes "React.createElement(" emitTrailingComments(openingNode); } - if (node.kind === 240 /* JsxElement */) { + if (node.kind === 241 /* JsxElement */) { emitJsxElement(node.openingElement, node.children); } else { - ts.Debug.assert(node.kind === 241 /* JsxSelfClosingElement */); + ts.Debug.assert(node.kind === 242 /* JsxSelfClosingElement */); emitJsxElement(node); } } @@ -34409,11 +35335,11 @@ var ts; if (i > 0) { write(" "); } - if (attribs[i].kind === 246 /* JsxSpreadAttribute */) { + if (attribs[i].kind === 247 /* JsxSpreadAttribute */) { emitJsxSpreadAttribute(attribs[i]); } else { - ts.Debug.assert(attribs[i].kind === 245 /* JsxAttribute */); + ts.Debug.assert(attribs[i].kind === 246 /* JsxAttribute */); emitJsxAttribute(attribs[i]); } } @@ -34421,11 +35347,11 @@ var ts; function emitJsxOpeningOrSelfClosingElement(node) { write("<"); emit(node.tagName); - if (node.attributes.length > 0 || (node.kind === 241 /* JsxSelfClosingElement */)) { + if (node.attributes.length > 0 || (node.kind === 242 /* JsxSelfClosingElement */)) { write(" "); } emitAttributes(node.attributes); - if (node.kind === 241 /* JsxSelfClosingElement */) { + if (node.kind === 242 /* JsxSelfClosingElement */) { write("/>"); } else { @@ -34444,11 +35370,11 @@ var ts; } emitJsxClosingElement(node.closingElement); } - if (node.kind === 240 /* JsxElement */) { + if (node.kind === 241 /* JsxElement */) { emitJsxElement(node); } else { - ts.Debug.assert(node.kind === 241 /* JsxSelfClosingElement */); + ts.Debug.assert(node.kind === 242 /* JsxSelfClosingElement */); emitJsxOpeningOrSelfClosingElement(node); } } @@ -34456,11 +35382,11 @@ var ts; // In a sense, it does not actually emit identifiers as much as it declares a name for a specific property. // For example, this is utilized when feeding in a result to Object.defineProperty. function emitExpressionForPropertyName(node) { - ts.Debug.assert(node.kind !== 168 /* BindingElement */); + ts.Debug.assert(node.kind !== 169 /* BindingElement */); if (node.kind === 9 /* StringLiteral */) { emitLiteral(node); } - else if (node.kind === 139 /* ComputedPropertyName */) { + else if (node.kind === 140 /* ComputedPropertyName */) { // if this is a decorated computed property, we will need to capture the result // of the property expression so that we can apply decorators later. This is to ensure // we don't introduce unintended side effects: @@ -34504,63 +35430,64 @@ var ts; function isExpressionIdentifier(node) { var parent = node.parent; switch (parent.kind) { - case 169 /* ArrayLiteralExpression */: - case 194 /* AsExpression */: - case 186 /* BinaryExpression */: - case 173 /* CallExpression */: - case 248 /* CaseClause */: - case 139 /* ComputedPropertyName */: - case 187 /* ConditionalExpression */: - case 142 /* Decorator */: - case 180 /* DeleteExpression */: - case 203 /* DoStatement */: - case 172 /* ElementAccessExpression */: - case 234 /* ExportAssignment */: - case 201 /* ExpressionStatement */: - case 193 /* ExpressionWithTypeArguments */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 202 /* IfStatement */: - case 244 /* JsxClosingElement */: - case 241 /* JsxSelfClosingElement */: - case 242 /* JsxOpeningElement */: - case 246 /* JsxSpreadAttribute */: - case 247 /* JsxExpression */: - case 174 /* NewExpression */: - case 195 /* NonNullExpression */: - case 177 /* ParenthesizedExpression */: - case 185 /* PostfixUnaryExpression */: - case 184 /* PrefixUnaryExpression */: - case 210 /* ReturnStatement */: - case 253 /* ShorthandPropertyAssignment */: - case 190 /* SpreadElementExpression */: - case 212 /* SwitchStatement */: - case 175 /* TaggedTemplateExpression */: - case 196 /* TemplateSpan */: - case 214 /* ThrowStatement */: - case 176 /* TypeAssertionExpression */: - case 181 /* TypeOfExpression */: - case 182 /* VoidExpression */: - case 204 /* WhileStatement */: - case 211 /* WithStatement */: - case 189 /* YieldExpression */: + case 170 /* ArrayLiteralExpression */: + case 195 /* AsExpression */: + case 184 /* AwaitExpression */: + case 187 /* BinaryExpression */: + case 174 /* CallExpression */: + case 249 /* CaseClause */: + case 140 /* ComputedPropertyName */: + case 188 /* ConditionalExpression */: + case 143 /* Decorator */: + case 181 /* DeleteExpression */: + case 204 /* DoStatement */: + case 173 /* ElementAccessExpression */: + case 235 /* ExportAssignment */: + case 202 /* ExpressionStatement */: + case 194 /* ExpressionWithTypeArguments */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 203 /* IfStatement */: + case 245 /* JsxClosingElement */: + case 242 /* JsxSelfClosingElement */: + case 243 /* JsxOpeningElement */: + case 247 /* JsxSpreadAttribute */: + case 248 /* JsxExpression */: + case 175 /* NewExpression */: + case 196 /* NonNullExpression */: + case 178 /* ParenthesizedExpression */: + case 186 /* PostfixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: + case 211 /* ReturnStatement */: + case 254 /* ShorthandPropertyAssignment */: + case 191 /* SpreadElementExpression */: + case 213 /* SwitchStatement */: + case 176 /* TaggedTemplateExpression */: + case 197 /* TemplateSpan */: + case 215 /* ThrowStatement */: + case 177 /* TypeAssertionExpression */: + case 182 /* TypeOfExpression */: + case 183 /* VoidExpression */: + case 205 /* WhileStatement */: + case 212 /* WithStatement */: + case 190 /* YieldExpression */: return true; - case 168 /* BindingElement */: - case 254 /* EnumMember */: - case 141 /* Parameter */: - case 252 /* PropertyAssignment */: - case 144 /* PropertyDeclaration */: - case 217 /* VariableDeclaration */: + case 169 /* BindingElement */: + case 255 /* EnumMember */: + case 142 /* Parameter */: + case 253 /* PropertyAssignment */: + case 145 /* PropertyDeclaration */: + case 218 /* VariableDeclaration */: return parent.initializer === node; - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return parent.expression === node; - case 179 /* ArrowFunction */: - case 178 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 179 /* FunctionExpression */: return parent.body === node; - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: return parent.moduleReference === node; - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: return parent.left === node; } return false; @@ -34568,7 +35495,7 @@ var ts; function emitExpressionIdentifier(node) { var container = resolver.getReferencedExportContainer(node); if (container) { - if (container.kind === 255 /* SourceFile */) { + if (container.kind === 256 /* SourceFile */) { // Identifier references module export if (modulekind !== ts.ModuleKind.ES6 && modulekind !== ts.ModuleKind.System) { write("exports."); @@ -34584,13 +35511,13 @@ var ts; if (modulekind !== ts.ModuleKind.ES6) { var declaration = resolver.getReferencedImportDeclaration(node); if (declaration) { - if (declaration.kind === 230 /* ImportClause */) { + if (declaration.kind === 231 /* ImportClause */) { // Identifier references default import write(getGeneratedNameForNode(declaration.parent)); write(languageVersion === 0 /* ES3 */ ? '["default"]' : ".default"); return; } - else if (declaration.kind === 233 /* ImportSpecifier */) { + else if (declaration.kind === 234 /* ImportSpecifier */) { // Identifier references named import write(getGeneratedNameForNode(declaration.parent.parent.parent)); var name_25 = declaration.propertyName || declaration.name; @@ -34636,13 +35563,13 @@ var ts; } function isNameOfNestedBlockScopedRedeclarationOrCapturedBinding(node) { if (languageVersion < 2 /* ES6 */) { - var parent_10 = node.parent; - switch (parent_10.kind) { - case 168 /* BindingElement */: - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: - case 217 /* VariableDeclaration */: - return parent_10.name === node && resolver.isDeclarationWithCollidingName(parent_10); + var parent_13 = node.parent; + switch (parent_13.kind) { + case 169 /* BindingElement */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: + case 218 /* VariableDeclaration */: + return parent_13.name === node && resolver.isDeclarationWithCollidingName(parent_13); } } return false; @@ -34752,10 +35679,10 @@ var ts; } } function needsParenthesisForAwaitExpressionAsYield(node) { - if (node.parent.kind === 186 /* BinaryExpression */ && !ts.isAssignmentOperator(node.parent.operatorToken.kind)) { + if (node.parent.kind === 187 /* BinaryExpression */ && !ts.isAssignmentOperator(node.parent.operatorToken.kind)) { return true; } - else if (node.parent.kind === 187 /* ConditionalExpression */ && node.parent.condition === node) { + else if (node.parent.kind === 188 /* ConditionalExpression */ && node.parent.condition === node) { return true; } return false; @@ -34763,11 +35690,11 @@ var ts; function needsParenthesisForPropertyAccessOrInvocation(node) { switch (node.kind) { case 69 /* Identifier */: - case 169 /* ArrayLiteralExpression */: - case 171 /* PropertyAccessExpression */: - case 172 /* ElementAccessExpression */: - case 173 /* CallExpression */: - case 177 /* ParenthesizedExpression */: + case 170 /* ArrayLiteralExpression */: + case 172 /* PropertyAccessExpression */: + case 173 /* ElementAccessExpression */: + case 174 /* CallExpression */: + case 178 /* ParenthesizedExpression */: // This list is not exhaustive and only includes those cases that are relevant // to the check in emitArrayLiteral. More cases can be added as needed. return false; @@ -34787,17 +35714,17 @@ var ts; write(", "); } var e = elements[pos]; - if (e.kind === 190 /* SpreadElementExpression */) { + if (e.kind === 191 /* SpreadElementExpression */) { e = e.expression; emitParenthesizedIf(e, /*parenthesized*/ group === 0 && needsParenthesisForPropertyAccessOrInvocation(e)); pos++; - if (pos === length && group === 0 && needsUniqueCopy && e.kind !== 169 /* ArrayLiteralExpression */) { + if (pos === length && group === 0 && needsUniqueCopy && e.kind !== 170 /* ArrayLiteralExpression */) { write(".slice()"); } } else { var i = pos; - while (i < length && elements[i].kind !== 190 /* SpreadElementExpression */) { + while (i < length && elements[i].kind !== 191 /* SpreadElementExpression */) { i++; } write("["); @@ -34820,7 +35747,7 @@ var ts; } } function isSpreadElementExpression(node) { - return node.kind === 190 /* SpreadElementExpression */; + return node.kind === 191 /* SpreadElementExpression */; } function emitArrayLiteral(node) { var elements = node.elements; @@ -34890,7 +35817,7 @@ var ts; writeComma(); var property = properties[i]; emitStart(property); - if (property.kind === 148 /* GetAccessor */ || property.kind === 149 /* SetAccessor */) { + if (property.kind === 149 /* GetAccessor */ || property.kind === 150 /* SetAccessor */) { // TODO (drosen): Reconcile with 'emitMemberFunctions'. var accessors = ts.getAllAccessorDeclarations(node.properties, property); if (property !== accessors.firstAccessor) { @@ -34899,7 +35826,7 @@ var ts; write("Object.defineProperty("); emit(tempVar); write(", "); - emitStart(node.name); + emitStart(property.name); emitExpressionForPropertyName(property.name); emitEnd(property.name); write(", {"); @@ -34942,13 +35869,13 @@ var ts; emitMemberAccessForPropertyName(property.name); emitEnd(property.name); write(" = "); - if (property.kind === 252 /* PropertyAssignment */) { + if (property.kind === 253 /* PropertyAssignment */) { emit(property.initializer); } - else if (property.kind === 253 /* ShorthandPropertyAssignment */) { + else if (property.kind === 254 /* ShorthandPropertyAssignment */) { emitExpressionIdentifier(property.name); } - else if (property.kind === 146 /* MethodDeclaration */) { + else if (property.kind === 147 /* MethodDeclaration */) { emitFunctionDeclaration(property); } else { @@ -34982,7 +35909,7 @@ var ts; // Everything until that point can be emitted as part of the initial object literal. var numInitialNonComputedProperties = numProperties; for (var i = 0, n = properties.length; i < n; i++) { - if (properties[i].name.kind === 139 /* ComputedPropertyName */) { + if (properties[i].name.kind === 140 /* ComputedPropertyName */) { numInitialNonComputedProperties = i; break; } @@ -34998,21 +35925,21 @@ var ts; emitObjectLiteralBody(node, properties.length); } function createBinaryExpression(left, operator, right, startsOnNewLine) { - var result = ts.createSynthesizedNode(186 /* BinaryExpression */, startsOnNewLine); + var result = ts.createSynthesizedNode(187 /* BinaryExpression */, startsOnNewLine); result.operatorToken = ts.createSynthesizedNode(operator); result.left = left; result.right = right; return result; } function createPropertyAccessExpression(expression, name) { - var result = ts.createSynthesizedNode(171 /* PropertyAccessExpression */); + var result = ts.createSynthesizedNode(172 /* PropertyAccessExpression */); result.expression = parenthesizeForAccess(expression); result.dotToken = ts.createSynthesizedNode(21 /* DotToken */); result.name = name; return result; } function createElementAccessExpression(expression, argumentExpression) { - var result = ts.createSynthesizedNode(172 /* ElementAccessExpression */); + var result = ts.createSynthesizedNode(173 /* ElementAccessExpression */); result.expression = parenthesizeForAccess(expression); result.argumentExpression = argumentExpression; return result; @@ -35020,9 +35947,9 @@ var ts; function parenthesizeForAccess(expr) { // When diagnosing whether the expression needs parentheses, the decision should be based // on the innermost expression in a chain of nested type assertions. - while (expr.kind === 176 /* TypeAssertionExpression */ || - expr.kind === 194 /* AsExpression */ || - expr.kind === 195 /* NonNullExpression */) { + while (expr.kind === 177 /* TypeAssertionExpression */ || + expr.kind === 195 /* AsExpression */ || + expr.kind === 196 /* NonNullExpression */) { expr = expr.expression; } // isLeftHandSideExpression is almost the correct criterion for when it is not necessary @@ -35034,11 +35961,11 @@ var ts; // 1.x -> not the same as (1).x // if (ts.isLeftHandSideExpression(expr) && - expr.kind !== 174 /* NewExpression */ && + expr.kind !== 175 /* NewExpression */ && expr.kind !== 8 /* NumericLiteral */) { return expr; } - var node = ts.createSynthesizedNode(177 /* ParenthesizedExpression */); + var node = ts.createSynthesizedNode(178 /* ParenthesizedExpression */); node.expression = expr; return node; } @@ -35073,12 +36000,12 @@ var ts; // Return true if identifier resolves to an exported member of a namespace function isNamespaceExportReference(node) { var container = resolver.getReferencedExportContainer(node); - return container && container.kind !== 255 /* SourceFile */; + return container && container.kind !== 256 /* SourceFile */; } // Return true if identifier resolves to an imported identifier function isImportedReference(node) { var declaration = resolver.getReferencedImportDeclaration(node); - return declaration && (declaration.kind === 230 /* ImportClause */ || declaration.kind === 233 /* ImportSpecifier */); + return declaration && (declaration.kind === 231 /* ImportClause */ || declaration.kind === 234 /* ImportSpecifier */); } function emitShorthandPropertyAssignment(node) { // The name property of a short-hand property assignment is considered an expression position, so here @@ -35119,7 +36046,7 @@ var ts; if (constantValue !== undefined) { write(constantValue.toString()); if (!compilerOptions.removeComments) { - var propertyName = node.kind === 171 /* PropertyAccessExpression */ ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); + var propertyName = node.kind === 172 /* PropertyAccessExpression */ ? ts.declarationNameToString(node.name) : ts.getTextOfNode(node.argumentExpression); write(" /* " + propertyName + " */"); } return true; @@ -35130,7 +36057,7 @@ var ts; if (compilerOptions.isolatedModules) { return undefined; } - return node.kind === 171 /* PropertyAccessExpression */ || node.kind === 172 /* ElementAccessExpression */ + return node.kind === 172 /* PropertyAccessExpression */ || node.kind === 173 /* ElementAccessExpression */ ? resolver.getConstantValue(node) : undefined; } @@ -35227,7 +36154,7 @@ var ts; } emitExpressionIdentifier(node); break; - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: emitQualifiedNameAsExpression(node, useFallback); break; default: @@ -35251,13 +36178,13 @@ var ts; write("]"); } function hasSpreadElement(elements) { - return ts.forEach(elements, function (e) { return e.kind === 190 /* SpreadElementExpression */; }); + return ts.forEach(elements, function (e) { return e.kind === 191 /* SpreadElementExpression */; }); } function skipParentheses(node) { - while (node.kind === 177 /* ParenthesizedExpression */ || - node.kind === 176 /* TypeAssertionExpression */ || - node.kind === 194 /* AsExpression */ || - node.kind === 195 /* NonNullExpression */) { + while (node.kind === 178 /* ParenthesizedExpression */ || + node.kind === 177 /* TypeAssertionExpression */ || + node.kind === 195 /* AsExpression */ || + node.kind === 196 /* NonNullExpression */) { node = node.expression; } return node; @@ -35278,13 +36205,13 @@ var ts; function emitCallWithSpread(node) { var target; var expr = skipParentheses(node.expression); - if (expr.kind === 171 /* PropertyAccessExpression */) { + if (expr.kind === 172 /* PropertyAccessExpression */) { // Target will be emitted as "this" argument target = emitCallTarget(expr.expression); write("."); emit(expr.name); } - else if (expr.kind === 172 /* ElementAccessExpression */) { + else if (expr.kind === 173 /* ElementAccessExpression */) { // Target will be emitted as "this" argument target = emitCallTarget(expr.expression); write("["); @@ -35417,16 +36344,16 @@ var ts; // If the node is synthesized, it means the emitter put the parentheses there, // not the user. If we didn't want them, the emitter would not have put them // there. - if (!ts.nodeIsSynthesized(node) && node.parent.kind !== 179 /* ArrowFunction */) { - if (node.expression.kind === 176 /* TypeAssertionExpression */ || - node.expression.kind === 194 /* AsExpression */ || - node.expression.kind === 195 /* NonNullExpression */) { + if (!ts.nodeIsSynthesized(node) && node.parent.kind !== 180 /* ArrowFunction */) { + if (node.expression.kind === 177 /* TypeAssertionExpression */ || + node.expression.kind === 195 /* AsExpression */ || + node.expression.kind === 196 /* NonNullExpression */) { var operand = node.expression.expression; // Make sure we consider all nested cast expressions, e.g.: // (-A).x; - while (operand.kind === 176 /* TypeAssertionExpression */ || - operand.kind === 194 /* AsExpression */ || - operand.kind === 195 /* NonNullExpression */) { + while (operand.kind === 177 /* TypeAssertionExpression */ || + operand.kind === 195 /* AsExpression */ || + operand.kind === 196 /* NonNullExpression */) { operand = operand.expression; } // We have an expression of the form: (SubExpr) @@ -35437,15 +36364,15 @@ var ts; // (typeof A).toString() should be emitted as (typeof A).toString() and not typeof A.toString() // new (A()) should be emitted as new (A()) and not new A() // (function foo() { })() should be emitted as an IIF (function foo(){})() and not declaration function foo(){} () - if (operand.kind !== 184 /* PrefixUnaryExpression */ && - operand.kind !== 182 /* VoidExpression */ && - operand.kind !== 181 /* TypeOfExpression */ && - operand.kind !== 180 /* DeleteExpression */ && - operand.kind !== 185 /* PostfixUnaryExpression */ && - operand.kind !== 174 /* NewExpression */ && - !(operand.kind === 173 /* CallExpression */ && node.parent.kind === 174 /* NewExpression */) && - !(operand.kind === 178 /* FunctionExpression */ && node.parent.kind === 173 /* CallExpression */) && - !(operand.kind === 8 /* NumericLiteral */ && node.parent.kind === 171 /* PropertyAccessExpression */)) { + if (operand.kind !== 185 /* PrefixUnaryExpression */ && + operand.kind !== 183 /* VoidExpression */ && + operand.kind !== 182 /* TypeOfExpression */ && + operand.kind !== 181 /* DeleteExpression */ && + operand.kind !== 186 /* PostfixUnaryExpression */ && + operand.kind !== 175 /* NewExpression */ && + !(operand.kind === 174 /* CallExpression */ && node.parent.kind === 175 /* NewExpression */) && + !(operand.kind === 179 /* FunctionExpression */ && node.parent.kind === 174 /* CallExpression */) && + !(operand.kind === 8 /* NumericLiteral */ && node.parent.kind === 172 /* PropertyAccessExpression */)) { emit(operand); return; } @@ -35474,7 +36401,7 @@ var ts; if (!isCurrentFileSystemExternalModule() || node.kind !== 69 /* Identifier */ || ts.nodeIsSynthesized(node)) { return false; } - var isVariableDeclarationOrBindingElement = node.parent && (node.parent.kind === 217 /* VariableDeclaration */ || node.parent.kind === 168 /* BindingElement */); + var isVariableDeclarationOrBindingElement = node.parent && (node.parent.kind === 218 /* VariableDeclaration */ || node.parent.kind === 169 /* BindingElement */); var targetDeclaration = isVariableDeclarationOrBindingElement ? node.parent : resolver.getReferencedValueDeclaration(node); @@ -35505,7 +36432,7 @@ var ts; // the resulting expression a prefix increment operation. And in the second, it will make the resulting // expression a prefix increment whose operand is a plus expression - (++(+x)) // The same is true of minus of course. - if (node.operand.kind === 184 /* PrefixUnaryExpression */) { + if (node.operand.kind === 185 /* PrefixUnaryExpression */) { var operand = node.operand; if (node.operator === 35 /* PlusToken */ && (operand.operator === 35 /* PlusToken */ || operand.operator === 41 /* PlusPlusToken */)) { write(" "); @@ -35561,7 +36488,7 @@ var ts; } var current = ts.getRootDeclaration(node).parent; while (current) { - if (current.kind === 255 /* SourceFile */) { + if (current.kind === 256 /* SourceFile */) { return !isExported || ((ts.getCombinedNodeFlags(node) & 1 /* Export */) !== 0); } else if (ts.isDeclaration(current)) { @@ -35584,7 +36511,7 @@ var ts; if (ts.isElementAccessExpression(leftHandSideExpression)) { shouldEmitParentheses = true; write("("); - synthesizedLHS = ts.createSynthesizedNode(172 /* ElementAccessExpression */, /*startsOnNewLine*/ false); + synthesizedLHS = ts.createSynthesizedNode(173 /* ElementAccessExpression */, /*startsOnNewLine*/ false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, /*canDefineTempVariablesInPlace*/ false, /*shouldEmitCommaBeforeAssignment*/ false); synthesizedLHS.expression = identifier; if (leftHandSideExpression.argumentExpression.kind !== 8 /* NumericLiteral */ && @@ -35601,7 +36528,7 @@ var ts; else if (ts.isPropertyAccessExpression(leftHandSideExpression)) { shouldEmitParentheses = true; write("("); - synthesizedLHS = ts.createSynthesizedNode(171 /* PropertyAccessExpression */, /*startsOnNewLine*/ false); + synthesizedLHS = ts.createSynthesizedNode(172 /* PropertyAccessExpression */, /*startsOnNewLine*/ false); var identifier = emitTempVariableAssignment(leftHandSideExpression.expression, /*canDefineTempVariablesInPlace*/ false, /*shouldEmitCommaBeforeAssignment*/ false); synthesizedLHS.expression = identifier; synthesizedLHS.dotToken = leftHandSideExpression.dotToken; @@ -35629,8 +36556,8 @@ var ts; } function emitBinaryExpression(node) { if (languageVersion < 2 /* ES6 */ && node.operatorToken.kind === 56 /* EqualsToken */ && - (node.left.kind === 170 /* ObjectLiteralExpression */ || node.left.kind === 169 /* ArrayLiteralExpression */)) { - emitDestructuring(node, node.parent.kind === 201 /* ExpressionStatement */); + (node.left.kind === 171 /* ObjectLiteralExpression */ || node.left.kind === 170 /* ArrayLiteralExpression */)) { + emitDestructuring(node, node.parent.kind === 202 /* ExpressionStatement */); } else { var exportChanged = node.operatorToken.kind >= 56 /* FirstAssignment */ && @@ -35695,7 +36622,7 @@ var ts; } } function isSingleLineEmptyBlock(node) { - if (node && node.kind === 198 /* Block */) { + if (node && node.kind === 199 /* Block */) { var block = node; return block.statements.length === 0 && nodeEndIsOnSameLineAsNodeStart(block, block); } @@ -35709,12 +36636,12 @@ var ts; } emitToken(15 /* OpenBraceToken */, node.pos); increaseIndent(); - if (node.kind === 225 /* ModuleBlock */) { - ts.Debug.assert(node.parent.kind === 224 /* ModuleDeclaration */); + if (node.kind === 226 /* ModuleBlock */) { + ts.Debug.assert(node.parent.kind === 225 /* ModuleDeclaration */); emitCaptureThisForNodeIfNecessary(node.parent); } emitLines(node.statements); - if (node.kind === 225 /* ModuleBlock */) { + if (node.kind === 226 /* ModuleBlock */) { emitTempDeclarations(/*newLine*/ true); } decreaseIndent(); @@ -35722,7 +36649,7 @@ var ts; emitToken(16 /* CloseBraceToken */, node.statements.end); } function emitEmbeddedStatement(node) { - if (node.kind === 198 /* Block */) { + if (node.kind === 199 /* Block */) { write(" "); emit(node); } @@ -35734,7 +36661,7 @@ var ts; } } function emitExpressionStatement(node) { - emitParenthesizedIf(node.expression, /*parenthesized*/ node.expression.kind === 179 /* ArrowFunction */); + emitParenthesizedIf(node.expression, /*parenthesized*/ node.expression.kind === 180 /* ArrowFunction */); write(";"); } function emitIfStatement(node) { @@ -35747,7 +36674,7 @@ var ts; if (node.elseStatement) { writeLine(); emitToken(80 /* ElseKeyword */, node.thenStatement.end); - if (node.elseStatement.kind === 202 /* IfStatement */) { + if (node.elseStatement.kind === 203 /* IfStatement */) { write(" "); emit(node.elseStatement); } @@ -35767,7 +36694,7 @@ var ts; else { emitNormalLoopBody(node, /*emitAsEmbeddedStatement*/ true); } - if (node.statement.kind === 198 /* Block */) { + if (node.statement.kind === 199 /* Block */) { write(" "); } else { @@ -35857,7 +36784,7 @@ var ts; } else { var loop = convertLoopBody(node); - if (node.parent.kind === 213 /* LabeledStatement */) { + if (node.parent.kind === 214 /* LabeledStatement */) { // if parent of the loop was labeled statement - attach the label to loop skipping converted loop body emitLabelAndColon(node.parent); } @@ -35868,11 +36795,11 @@ var ts; var functionName = makeUniqueName("_loop"); var loopInitializer; switch (node.kind) { - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: var initializer = node.initializer; - if (initializer && initializer.kind === 218 /* VariableDeclarationList */) { + if (initializer && initializer.kind === 219 /* VariableDeclarationList */) { loopInitializer = node.initializer; } break; @@ -35887,7 +36814,7 @@ var ts; processVariableDeclaration(varDeclaration.name); } } - var bodyIsBlock = node.statement.kind === 198 /* Block */; + var bodyIsBlock = node.statement.kind === 199 /* Block */; var paramList = loopParameters ? loopParameters.join(", ") : ""; writeLine(); write("var " + functionName + " = function(" + paramList + ")"); @@ -36029,7 +36956,7 @@ var ts; if (emitAsEmbeddedStatement) { emitEmbeddedStatement(node.statement); } - else if (node.statement.kind === 198 /* Block */) { + else if (node.statement.kind === 199 /* Block */) { emitLines(node.statement.statements); } else { @@ -36160,7 +37087,7 @@ var ts; var endPos = emitToken(86 /* ForKeyword */, node.pos); write(" "); endPos = emitToken(17 /* OpenParenToken */, endPos); - if (node.initializer && node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer && node.initializer.kind === 219 /* VariableDeclarationList */) { var variableDeclarationList = node.initializer; var startIsEmitted = tryEmitStartOfVariableDeclarationList(variableDeclarationList); if (startIsEmitted) { @@ -36186,7 +37113,7 @@ var ts; } } function emitForInOrForOfStatement(node) { - if (languageVersion < 2 /* ES6 */ && node.kind === 207 /* ForOfStatement */) { + if (languageVersion < 2 /* ES6 */ && node.kind === 208 /* ForOfStatement */) { emitLoop(node, emitDownLevelForOfStatementWorker); } else { @@ -36197,7 +37124,7 @@ var ts; var endPos = emitToken(86 /* ForKeyword */, node.pos); write(" "); endPos = emitToken(17 /* OpenParenToken */, endPos); - if (node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer.kind === 219 /* VariableDeclarationList */) { var variableDeclarationList = node.initializer; if (variableDeclarationList.declarations.length >= 1) { tryEmitStartOfVariableDeclarationList(variableDeclarationList); @@ -36207,7 +37134,7 @@ var ts; else { emit(node.initializer); } - if (node.kind === 206 /* ForInStatement */) { + if (node.kind === 207 /* ForInStatement */) { write(" in "); } else { @@ -36297,7 +37224,7 @@ var ts; // let v = _a[_i]; var rhsIterationValue = createElementAccessExpression(rhsReference, counter); emitStart(node.initializer); - if (node.initializer.kind === 218 /* VariableDeclarationList */) { + if (node.initializer.kind === 219 /* VariableDeclarationList */) { write("var "); var variableDeclarationList = node.initializer; if (variableDeclarationList.declarations.length > 0) { @@ -36327,7 +37254,7 @@ var ts; // Initializer is an expression. Emit the expression in the body, so that it's // evaluated on every iteration. var assignmentExpression = createBinaryExpression(node.initializer, 56 /* EqualsToken */, rhsIterationValue, /*startsOnNewLine*/ false); - if (node.initializer.kind === 169 /* ArrayLiteralExpression */ || node.initializer.kind === 170 /* ObjectLiteralExpression */) { + if (node.initializer.kind === 170 /* ArrayLiteralExpression */ || node.initializer.kind === 171 /* ObjectLiteralExpression */) { // This is a destructuring pattern, so call emitDestructuring instead of emit. Calling emit will not work, because it will cause // the BinaryExpression to be passed in instead of the expression statement, which will cause emitDestructuring to crash. emitDestructuring(assignmentExpression, /*isAssignmentExpressionStatement*/ true, /*value*/ undefined); @@ -36355,7 +37282,7 @@ var ts; // it is possible if either // - break\continue is statement labeled and label is located inside the converted loop // - break\continue is non-labeled and located in non-converted loop\switch statement - var jump = node.kind === 209 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */; + var jump = node.kind === 210 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */; var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels[node.label.text]) || (!node.label && (convertedLoopState.allowedNonLabeledJumps & jump)); if (!canUseBreakOrContinue) { @@ -36363,7 +37290,7 @@ var ts; // explicit exit from loop -> copy out parameters copyLoopOutParameters(convertedLoopState, 1 /* ToOutParameter */, /*emitAsStatements*/ false); if (!node.label) { - if (node.kind === 209 /* BreakStatement */) { + if (node.kind === 210 /* BreakStatement */) { convertedLoopState.nonLocalJumps |= 2 /* Break */; write("\"break\";"); } @@ -36375,7 +37302,7 @@ var ts; } else { var labelMarker = void 0; - if (node.kind === 209 /* BreakStatement */) { + if (node.kind === 210 /* BreakStatement */) { labelMarker = "break-" + node.label.text; setLabeledJump(convertedLoopState, /*isBreak*/ true, node.label.text, labelMarker); } @@ -36388,7 +37315,7 @@ var ts; return; } } - emitToken(node.kind === 209 /* BreakStatement */ ? 70 /* BreakKeyword */ : 75 /* ContinueKeyword */, node.pos); + emitToken(node.kind === 210 /* BreakStatement */ ? 70 /* BreakKeyword */ : 75 /* ContinueKeyword */, node.pos); emitOptional(" ", node.label); write(";"); } @@ -36454,7 +37381,7 @@ var ts; ts.getLineOfLocalPositionFromLineMap(currentLineMap, ts.skipTrivia(currentText, node2.pos)); } function emitCaseOrDefaultClause(node) { - if (node.kind === 248 /* CaseClause */) { + if (node.kind === 249 /* CaseClause */) { write("case "); emit(node.expression); write(":"); @@ -36523,7 +37450,7 @@ var ts; function getContainingModule(node) { do { node = node.parent; - } while (node && node.kind !== 224 /* ModuleDeclaration */); + } while (node && node.kind !== 225 /* ModuleDeclaration */); return node; } function emitContainingModuleName(node) { @@ -36548,13 +37475,13 @@ var ts; function createVoidZero() { var zero = ts.createSynthesizedNode(8 /* NumericLiteral */); zero.text = "0"; - var result = ts.createSynthesizedNode(182 /* VoidExpression */); + var result = ts.createSynthesizedNode(183 /* VoidExpression */); result.expression = zero; return result; } function emitEs6ExportDefaultCompat(node) { - if (node.parent.kind === 255 /* SourceFile */) { - ts.Debug.assert(!!(node.flags & 512 /* Default */) || node.kind === 234 /* ExportAssignment */); + if (node.parent.kind === 256 /* SourceFile */) { + ts.Debug.assert(!!(node.flags & 512 /* Default */) || node.kind === 235 /* ExportAssignment */); // only allow export default at a source file level if (modulekind === ts.ModuleKind.CommonJS || modulekind === ts.ModuleKind.AMD || modulekind === ts.ModuleKind.UMD) { if (!isEs6Module) { @@ -36660,7 +37587,7 @@ var ts; emitNodeWithCommentsAndWithoutSourcemap(name); write("\", "); } - var isVariableDeclarationOrBindingElement = name.parent && (name.parent.kind === 217 /* VariableDeclaration */ || name.parent.kind === 168 /* BindingElement */); + var isVariableDeclarationOrBindingElement = name.parent && (name.parent.kind === 218 /* VariableDeclaration */ || name.parent.kind === 169 /* BindingElement */); // If this is first var declaration, we need to start at var/let/const keyword instead // otherwise use nodeForSourceMap as the start position emitStart(isFirstVariableDeclaration(nodeForSourceMap) ? nodeForSourceMap.parent : nodeForSourceMap); @@ -36694,8 +37621,8 @@ var ts; return identifier; } function isFirstVariableDeclaration(root) { - return root.kind === 217 /* VariableDeclaration */ && - root.parent.kind === 218 /* VariableDeclarationList */ && + return root.kind === 218 /* VariableDeclaration */ && + root.parent.kind === 219 /* VariableDeclarationList */ && root.parent.declarations[0] === root; } function emitDestructuring(root, isAssignmentExpressionStatement, value) { @@ -36705,15 +37632,15 @@ var ts; // Also temporary variables should be explicitly allocated for source level declarations when module target is system // because actual variable declarations are hoisted var canDefineTempVariablesInPlace = false; - if (root.kind === 217 /* VariableDeclaration */) { + if (root.kind === 218 /* VariableDeclaration */) { var isExported = ts.getCombinedNodeFlags(root) & 1 /* Export */; var isSourceLevelForSystemModuleKind = shouldHoistDeclarationInSystemJsModule(root); canDefineTempVariablesInPlace = !isExported && !isSourceLevelForSystemModuleKind; } - else if (root.kind === 141 /* Parameter */) { + else if (root.kind === 142 /* Parameter */) { canDefineTempVariablesInPlace = true; } - if (root.kind === 186 /* BinaryExpression */) { + if (root.kind === 187 /* BinaryExpression */) { emitAssignmentExpression(root); } else { @@ -36748,14 +37675,14 @@ var ts; // If the temporary variable needs to be emitted use the source Map node for assignment of that statement value = ensureIdentifier(value, /*reuseIdentifierExpressions*/ true, sourceMapNode); // Return the expression 'value === void 0 ? defaultValue : value' - var equals = ts.createSynthesizedNode(186 /* BinaryExpression */); + var equals = ts.createSynthesizedNode(187 /* BinaryExpression */); equals.left = value; equals.operatorToken = ts.createSynthesizedNode(32 /* EqualsEqualsEqualsToken */); equals.right = createVoidZero(); return createConditionalExpression(equals, defaultValue, value); } function createConditionalExpression(condition, whenTrue, whenFalse) { - var cond = ts.createSynthesizedNode(187 /* ConditionalExpression */); + var cond = ts.createSynthesizedNode(188 /* ConditionalExpression */); cond.condition = condition; cond.questionToken = ts.createSynthesizedNode(53 /* QuestionToken */); cond.whenTrue = whenTrue; @@ -36770,7 +37697,7 @@ var ts; } function createPropertyAccessForDestructuringProperty(object, propName) { var index; - var nameIsComputed = propName.kind === 139 /* ComputedPropertyName */; + var nameIsComputed = propName.kind === 140 /* ComputedPropertyName */; if (nameIsComputed) { // TODO to handle when we look into sourcemaps for computed properties, for now use propName index = ensureIdentifier(propName.expression, /*reuseIdentifierExpressions*/ false, propName); @@ -36790,7 +37717,7 @@ var ts; : createElementAccessExpression(object, index); } function createSliceCall(value, sliceIndex) { - var call = ts.createSynthesizedNode(173 /* CallExpression */); + var call = ts.createSynthesizedNode(174 /* CallExpression */); var sliceIdentifier = ts.createSynthesizedNode(69 /* Identifier */); sliceIdentifier.text = "slice"; call.expression = createPropertyAccessExpression(value, sliceIdentifier); @@ -36808,9 +37735,9 @@ var ts; } for (var _a = 0, properties_5 = properties; _a < properties_5.length; _a++) { var p = properties_5[_a]; - if (p.kind === 252 /* PropertyAssignment */ || p.kind === 253 /* ShorthandPropertyAssignment */) { + if (p.kind === 253 /* PropertyAssignment */ || p.kind === 254 /* ShorthandPropertyAssignment */) { var propName = p.name; - var target_1 = p.kind === 253 /* ShorthandPropertyAssignment */ ? p : p.initializer || propName; + var target_1 = p.kind === 254 /* ShorthandPropertyAssignment */ ? p : p.initializer || propName; // Assignment for target = value.propName should highlight whole property, hence use p as source map node emitDestructuringAssignment(target_1, createPropertyAccessForDestructuringProperty(value, propName), p); } @@ -36826,9 +37753,9 @@ var ts; } for (var i = 0; i < elements.length; i++) { var e = elements[i]; - if (e.kind !== 192 /* OmittedExpression */) { + if (e.kind !== 193 /* OmittedExpression */) { // Assignment for target = value.propName should highlight whole property, hence use e as source map node - if (e.kind !== 190 /* SpreadElementExpression */) { + if (e.kind !== 191 /* SpreadElementExpression */) { emitDestructuringAssignment(e, createElementAccessExpression(value, createNumericLiteral(i)), e); } else if (i === elements.length - 1) { @@ -36839,20 +37766,20 @@ var ts; } function emitDestructuringAssignment(target, value, sourceMapNode) { // When emitting target = value use source map node to highlight, including any temporary assignments needed for this - if (target.kind === 253 /* ShorthandPropertyAssignment */) { + if (target.kind === 254 /* ShorthandPropertyAssignment */) { if (target.objectAssignmentInitializer) { value = createDefaultValueCheck(value, target.objectAssignmentInitializer, sourceMapNode); } target = target.name; } - else if (target.kind === 186 /* BinaryExpression */ && target.operatorToken.kind === 56 /* EqualsToken */) { + else if (target.kind === 187 /* BinaryExpression */ && target.operatorToken.kind === 56 /* EqualsToken */) { value = createDefaultValueCheck(value, target.right, sourceMapNode); target = target.left; } - if (target.kind === 170 /* ObjectLiteralExpression */) { + if (target.kind === 171 /* ObjectLiteralExpression */) { emitObjectLiteralAssignment(target, value, sourceMapNode); } - else if (target.kind === 169 /* ArrayLiteralExpression */) { + else if (target.kind === 170 /* ArrayLiteralExpression */) { emitArrayLiteralAssignment(target, value, sourceMapNode); } else { @@ -36874,7 +37801,7 @@ var ts; emitDestructuringAssignment(target, value, ts.nodeIsSynthesized(root) ? target : root); } else { - if (root.parent.kind !== 177 /* ParenthesizedExpression */) { + if (root.parent.kind !== 178 /* ParenthesizedExpression */) { write("("); } // Temporary assignment needed to emit root should highlight whole binary expression @@ -36883,7 +37810,7 @@ var ts; emitDestructuringAssignment(target, value, root); write(", "); emit(value); - if (root.parent.kind !== 177 /* ParenthesizedExpression */) { + if (root.parent.kind !== 178 /* ParenthesizedExpression */) { write(")"); } } @@ -36911,12 +37838,12 @@ var ts; } for (var i = 0; i < numElements; i++) { var element = elements[i]; - if (pattern.kind === 166 /* ObjectBindingPattern */) { + if (pattern.kind === 167 /* ObjectBindingPattern */) { // Rewrite element to a declaration with an initializer that fetches property var propName = element.propertyName || element.name; emitBindingElement(element, createPropertyAccessForDestructuringProperty(value, propName)); } - else if (element.kind !== 192 /* OmittedExpression */) { + else if (element.kind !== 193 /* OmittedExpression */) { if (!element.dotDotDotToken) { // Rewrite element to a declaration that accesses array element at index i emitBindingElement(element, createElementAccessExpression(value, createNumericLiteral(i))); @@ -36990,12 +37917,12 @@ var ts; var isCapturedInFunction = flags & 131072 /* CapturedBlockScopedBinding */; var isDeclaredInLoop = flags & 262144 /* BlockScopedBindingInLoop */; var emittedAsTopLevel = ts.isBlockScopedContainerTopLevel(container) || - (isCapturedInFunction && isDeclaredInLoop && container.kind === 198 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false)); + (isCapturedInFunction && isDeclaredInLoop && container.kind === 199 /* Block */ && ts.isIterationStatement(container.parent, /*lookInLabeledStatements*/ false)); var emittedAsNestedLetDeclaration = ts.getCombinedNodeFlags(node) & 1024 /* Let */ && !emittedAsTopLevel; var emitExplicitInitializer = emittedAsNestedLetDeclaration && - container.kind !== 206 /* ForInStatement */ && - container.kind !== 207 /* ForOfStatement */ && + container.kind !== 207 /* ForInStatement */ && + container.kind !== 208 /* ForOfStatement */ && (!resolver.isDeclarationWithCollidingName(node) || (isDeclaredInLoop && !isCapturedInFunction && !ts.isIterationStatement(container, /*lookInLabeledStatements*/ false))); if (emitExplicitInitializer) { @@ -37016,7 +37943,7 @@ var ts; } } function emitExportVariableAssignments(node) { - if (node.kind === 192 /* OmittedExpression */) { + if (node.kind === 193 /* OmittedExpression */) { return; } var name = node.name; @@ -37030,7 +37957,7 @@ var ts; function isES6ExportedDeclaration(node) { return !!(node.flags & 1 /* Export */) && modulekind === ts.ModuleKind.ES6 && - node.parent.kind === 255 /* SourceFile */; + node.parent.kind === 256 /* SourceFile */; } function emitVariableStatement(node) { var startIsEmitted = false; @@ -37149,7 +38076,7 @@ var ts; } } function emitRestParameter(node) { - if (languageVersion < 2 /* ES6 */ && ts.hasRestParameter(node)) { + if (languageVersion < 2 /* ES6 */ && ts.hasDeclaredRestParameter(node)) { var restIndex = node.parameters.length - 1; var restParam = node.parameters[restIndex]; // A rest parameter cannot have a binding pattern, so let's just ignore it if it does. @@ -37191,12 +38118,12 @@ var ts; } } function emitAccessor(node) { - write(node.kind === 148 /* GetAccessor */ ? "get " : "set "); + write(node.kind === 149 /* GetAccessor */ ? "get " : "set "); emit(node.name); emitSignatureAndBody(node); } function shouldEmitAsArrowFunction(node) { - return node.kind === 179 /* ArrowFunction */ && languageVersion >= 2 /* ES6 */; + return node.kind === 180 /* ArrowFunction */ && languageVersion >= 2 /* ES6 */; } function emitDeclarationName(node) { if (node.name) { @@ -37207,11 +38134,11 @@ var ts; } } function shouldEmitFunctionName(node) { - if (node.kind === 178 /* FunctionExpression */) { + if (node.kind === 179 /* FunctionExpression */) { // Emit name if one is present return !!node.name; } - if (node.kind === 219 /* FunctionDeclaration */) { + if (node.kind === 220 /* FunctionDeclaration */) { // Emit name if one is present, or emit generated name in down-level case (for export default case) return !!node.name || modulekind !== ts.ModuleKind.ES6; } @@ -37223,12 +38150,12 @@ var ts; // TODO (yuisu) : we should not have special cases to condition emitting comments // but have one place to fix check for these conditions. var kind = node.kind, parent = node.parent; - if (kind !== 146 /* MethodDeclaration */ && - kind !== 145 /* MethodSignature */ && + if (kind !== 147 /* MethodDeclaration */ && + kind !== 146 /* MethodSignature */ && parent && - parent.kind !== 252 /* PropertyAssignment */ && - parent.kind !== 173 /* CallExpression */ && - parent.kind !== 169 /* ArrayLiteralExpression */) { + parent.kind !== 253 /* PropertyAssignment */ && + parent.kind !== 174 /* CallExpression */ && + parent.kind !== 170 /* ArrayLiteralExpression */) { // 1. Methods will emit comments at their assignment declaration sites. // // 2. If the function is a property of object literal, emitting leading-comments @@ -37267,13 +38194,13 @@ var ts; emitDeclarationName(node); } emitSignatureAndBody(node); - if (modulekind !== ts.ModuleKind.ES6 && kind === 219 /* FunctionDeclaration */ && parent === currentSourceFile && node.name) { + if (modulekind !== ts.ModuleKind.ES6 && kind === 220 /* FunctionDeclaration */ && parent === currentSourceFile && node.name) { emitExportMemberAssignments(node.name); } emitEnd(node); - if (kind !== 146 /* MethodDeclaration */ && - kind !== 145 /* MethodSignature */ && - kind !== 179 /* ArrowFunction */) { + if (kind !== 147 /* MethodDeclaration */ && + kind !== 146 /* MethodSignature */ && + kind !== 180 /* ArrowFunction */) { emitTrailingComments(node); } } @@ -37291,7 +38218,7 @@ var ts; if (node) { var parameters = node.parameters; var skipCount = node.parameters.length && node.parameters[0].name.text === "this" ? 1 : 0; - var omitCount = languageVersion < 2 /* ES6 */ && ts.hasRestParameter(node) ? 1 : 0; + var omitCount = languageVersion < 2 /* ES6 */ && ts.hasDeclaredRestParameter(node) ? 1 : 0; emitList(parameters, skipCount, parameters.length - omitCount - skipCount, /*multiLine*/ false, /*trailingComma*/ false); } write(")"); @@ -37307,7 +38234,7 @@ var ts; } function emitAsyncFunctionBodyForES6(node) { var promiseConstructor = ts.getEntityNameFromTypeNode(node.type); - var isArrowFunction = node.kind === 179 /* ArrowFunction */; + var isArrowFunction = node.kind === 180 /* ArrowFunction */; var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192 /* CaptureArguments */) !== 0; // An async function is emit as an outer function that calls an inner // generator function. To preserve lexical bindings, we pass the current @@ -37429,7 +38356,7 @@ var ts; write(" { }"); } else { - if (node.body.kind === 198 /* Block */) { + if (node.body.kind === 199 /* Block */) { emitBlockFunctionBody(node, node.body); } else { @@ -37488,10 +38415,10 @@ var ts; write(" "); // Unwrap all type assertions. var current = body; - while (current.kind === 176 /* TypeAssertionExpression */) { + while (current.kind === 177 /* TypeAssertionExpression */) { current = current.expression; } - emitParenthesizedIf(body, current.kind === 170 /* ObjectLiteralExpression */); + emitParenthesizedIf(body, current.kind === 171 /* ObjectLiteralExpression */); } function emitDownLevelExpressionFunctionBody(node, body) { write(" {"); @@ -37576,13 +38503,13 @@ var ts; return undefined; } var statement = statements[index]; - if (statement.kind === 201 /* ExpressionStatement */) { + if (statement.kind === 202 /* ExpressionStatement */) { return ts.isSuperCallExpression(statement.expression) ? statement : undefined; } } function emitParameterPropertyAssignments(node) { ts.forEach(node.parameters, function (param) { - if (param.flags & 28 /* AccessibilityModifier */) { + if (param.flags & 92 /* ParameterPropertyModifier */) { writeLine(); emitStart(param); emitStart(param.name); @@ -37605,7 +38532,7 @@ var ts; emitNodeWithCommentsAndWithoutSourcemap(memberName); write("]"); } - else if (memberName.kind === 139 /* ComputedPropertyName */) { + else if (memberName.kind === 140 /* ComputedPropertyName */) { emitComputedPropertyName(memberName); } else { @@ -37617,7 +38544,7 @@ var ts; var properties = []; for (var _a = 0, _b = node.members; _a < _b.length; _a++) { var member = _b[_a]; - if (member.kind === 144 /* PropertyDeclaration */ && isStatic === ((member.flags & 32 /* Static */) !== 0) && member.initializer) { + if (member.kind === 145 /* PropertyDeclaration */ && isStatic === ((member.flags & 32 /* Static */) !== 0) && member.initializer) { properties.push(member); } } @@ -37657,11 +38584,11 @@ var ts; } function emitMemberFunctionsForES5AndLower(node) { ts.forEach(node.members, function (member) { - if (member.kind === 197 /* SemicolonClassElement */) { + if (member.kind === 198 /* SemicolonClassElement */) { writeLine(); write(";"); } - else if (member.kind === 146 /* MethodDeclaration */ || node.kind === 145 /* MethodSignature */) { + else if (member.kind === 147 /* MethodDeclaration */ || node.kind === 146 /* MethodSignature */) { if (!member.body) { return emitCommentsOnNotEmittedNode(member); } @@ -37678,7 +38605,7 @@ var ts; write(";"); emitTrailingComments(member); } - else if (member.kind === 148 /* GetAccessor */ || member.kind === 149 /* SetAccessor */) { + else if (member.kind === 149 /* GetAccessor */ || member.kind === 150 /* SetAccessor */) { var accessors = ts.getAllAccessorDeclarations(node.members, member); if (member === accessors.firstAccessor) { writeLine(); @@ -37728,22 +38655,22 @@ var ts; function emitMemberFunctionsForES6AndHigher(node) { for (var _a = 0, _b = node.members; _a < _b.length; _a++) { var member = _b[_a]; - if ((member.kind === 146 /* MethodDeclaration */ || node.kind === 145 /* MethodSignature */) && !member.body) { + if ((member.kind === 147 /* MethodDeclaration */ || node.kind === 146 /* MethodSignature */) && !member.body) { emitCommentsOnNotEmittedNode(member); } - else if (member.kind === 146 /* MethodDeclaration */ || - member.kind === 148 /* GetAccessor */ || - member.kind === 149 /* SetAccessor */) { + else if (member.kind === 147 /* MethodDeclaration */ || + member.kind === 149 /* GetAccessor */ || + member.kind === 150 /* SetAccessor */) { writeLine(); emitLeadingComments(member); emitStart(member); if (member.flags & 32 /* Static */) { write("static "); } - if (member.kind === 148 /* GetAccessor */) { + if (member.kind === 149 /* GetAccessor */) { write("get "); } - else if (member.kind === 149 /* SetAccessor */) { + else if (member.kind === 150 /* SetAccessor */) { write("set "); } if (member.asteriskToken) { @@ -37754,7 +38681,7 @@ var ts; emitEnd(member); emitTrailingComments(member); } - else if (member.kind === 197 /* SemicolonClassElement */) { + else if (member.kind === 198 /* SemicolonClassElement */) { writeLine(); write(";"); } @@ -37783,11 +38710,11 @@ var ts; var hasInstancePropertyWithInitializer = false; // Emit the constructor overload pinned comments ts.forEach(node.members, function (member) { - if (member.kind === 147 /* Constructor */ && !member.body) { + if (member.kind === 148 /* Constructor */ && !member.body) { emitCommentsOnNotEmittedNode(member); } // Check if there is any non-static property assignment - if (member.kind === 144 /* PropertyDeclaration */ && member.initializer && (member.flags & 32 /* Static */) === 0) { + if (member.kind === 145 /* PropertyDeclaration */ && member.initializer && (member.flags & 32 /* Static */) === 0) { hasInstancePropertyWithInitializer = true; } }); @@ -37904,7 +38831,7 @@ var ts; var isHoistedDeclarationInSystemModule = shouldHoistDeclarationInSystemJsModule(node); var isDecorated = ts.nodeIsDecorated(node); var rewriteAsClassExpression = isDecorated || isHoistedDeclarationInSystemModule; - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { if (rewriteAsClassExpression) { // When we emit an ES6 class that has a class decorator, we must tailor the // emit to certain specific cases. @@ -38025,7 +38952,7 @@ var ts; // This keeps the expression as an expression, while ensuring that the static parts // of it have been initialized by the time it is used. var staticProperties = getInitializedProperties(node, /*isStatic*/ true); - var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 191 /* ClassExpression */; + var isClassExpressionWithStaticProperties = staticProperties.length > 0 && node.kind === 192 /* ClassExpression */; var tempVariable; if (isClassExpressionWithStaticProperties) { tempVariable = createAndRecordTempVariable(0 /* Auto */); @@ -38100,7 +39027,7 @@ var ts; write(";"); } } - else if (node.parent.kind !== 255 /* SourceFile */) { + else if (node.parent.kind !== 256 /* SourceFile */) { writeLine(); emitStart(node); emitModuleMemberName(node); @@ -38112,7 +39039,7 @@ var ts; } } function emitClassLikeDeclarationBelowES6(node) { - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { // source file level classes in system modules are hoisted so 'var's for them are already defined if (!shouldHoistDeclarationInSystemJsModule(node)) { write("var "); @@ -38173,11 +39100,11 @@ var ts; emit(baseTypeNode.expression); } write("))"); - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { write(";"); } emitEnd(node); - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { emitExportMemberAssignment(node); } } @@ -38264,7 +39191,7 @@ var ts; else { decorators = member.decorators; // we only decorate the parameters here if this is a method - if (member.kind === 146 /* MethodDeclaration */) { + if (member.kind === 147 /* MethodDeclaration */) { functionLikeMember = member; } } @@ -38321,7 +39248,7 @@ var ts; write(", "); emitExpressionForPropertyName(member.name); if (languageVersion > 0 /* ES3 */) { - if (member.kind !== 144 /* PropertyDeclaration */) { + if (member.kind !== 145 /* PropertyDeclaration */) { // We emit `null` here to indicate to `__decorate` that it can invoke `Object.getOwnPropertyDescriptor` directly. // We have this extra argument here so that we can inject an explicit property descriptor at a later date. write(", null"); @@ -38363,10 +39290,10 @@ var ts; // The caller should have already tested whether the node has decorators and whether the emitDecoratorMetadata // compiler option is set. switch (node.kind) { - case 146 /* MethodDeclaration */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 144 /* PropertyDeclaration */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 145 /* PropertyDeclaration */: return true; } return false; @@ -38376,7 +39303,7 @@ var ts; // The caller should have already tested whether the node has decorators and whether the emitDecoratorMetadata // compiler option is set. switch (node.kind) { - case 146 /* MethodDeclaration */: + case 147 /* MethodDeclaration */: return true; } return false; @@ -38386,9 +39313,9 @@ var ts; // The caller should have already tested whether the node has decorators and whether the emitDecoratorMetadata // compiler option is set. switch (node.kind) { - case 220 /* ClassDeclaration */: - case 146 /* MethodDeclaration */: - case 149 /* SetAccessor */: + case 221 /* ClassDeclaration */: + case 147 /* MethodDeclaration */: + case 150 /* SetAccessor */: return true; } return false; @@ -38406,19 +39333,19 @@ var ts; // // For rules on serializing type annotations, see `serializeTypeNode`. switch (node.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: write("Function"); return; - case 144 /* PropertyDeclaration */: + case 145 /* PropertyDeclaration */: emitSerializedTypeNode(node.type); return; - case 141 /* Parameter */: + case 142 /* Parameter */: emitSerializedTypeNode(node.type); return; - case 148 /* GetAccessor */: + case 149 /* GetAccessor */: emitSerializedTypeNode(node.type); return; - case 149 /* SetAccessor */: + case 150 /* SetAccessor */: emitSerializedTypeNode(ts.getSetAccessorTypeAnnotationNode(node)); return; } @@ -38434,40 +39361,40 @@ var ts; case 103 /* VoidKeyword */: write("void 0"); return; - case 163 /* ParenthesizedType */: + case 164 /* ParenthesizedType */: emitSerializedTypeNode(node.type); return; - case 155 /* FunctionType */: - case 156 /* ConstructorType */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: write("Function"); return; - case 159 /* ArrayType */: - case 160 /* TupleType */: + case 160 /* ArrayType */: + case 161 /* TupleType */: write("Array"); return; - case 153 /* TypePredicate */: + case 154 /* TypePredicate */: case 120 /* BooleanKeyword */: write("Boolean"); return; - case 131 /* StringKeyword */: - case 165 /* StringLiteralType */: + case 132 /* StringKeyword */: + case 166 /* StringLiteralType */: write("String"); return; - case 129 /* NumberKeyword */: + case 130 /* NumberKeyword */: write("Number"); return; - case 132 /* SymbolKeyword */: + case 133 /* SymbolKeyword */: write("Symbol"); return; - case 154 /* TypeReference */: + case 155 /* TypeReference */: emitSerializedTypeReferenceNode(node); return; - case 157 /* TypeQuery */: - case 158 /* TypeLiteral */: - case 161 /* UnionType */: - case 162 /* IntersectionType */: + case 158 /* TypeQuery */: + case 159 /* TypeLiteral */: + case 162 /* UnionType */: + case 163 /* IntersectionType */: case 117 /* AnyKeyword */: - case 164 /* ThisType */: + case 165 /* ThisType */: break; default: ts.Debug.fail("Cannot serialize unexpected type node."); @@ -38540,7 +39467,7 @@ var ts; // For the rules on serializing the type of each parameter declaration, see `serializeTypeOfDeclaration`. if (node) { var valueDeclaration = void 0; - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { valueDeclaration = ts.getFirstConstructorWithBody(node); } else if (ts.isFunctionLike(node) && ts.nodeIsPresent(node.body)) { @@ -38556,10 +39483,10 @@ var ts; } if (parameters[i].dotDotDotToken) { var parameterType = parameters[i].type; - if (parameterType.kind === 159 /* ArrayType */) { + if (parameterType.kind === 160 /* ArrayType */) { parameterType = parameterType.elementType; } - else if (parameterType.kind === 154 /* TypeReference */ && parameterType.typeArguments && parameterType.typeArguments.length === 1) { + else if (parameterType.kind === 155 /* TypeReference */ && parameterType.typeArguments && parameterType.typeArguments.length === 1) { parameterType = parameterType.typeArguments[0]; } else { @@ -38636,7 +39563,7 @@ var ts; if (!shouldHoistDeclarationInSystemJsModule(node)) { // do not emit var if variable was already hoisted var isES6ExportedEnum = isES6ExportedDeclaration(node); - if (!(node.flags & 1 /* Export */) || (isES6ExportedEnum && isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 223 /* EnumDeclaration */))) { + if (!(node.flags & 1 /* Export */) || (isES6ExportedEnum && isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 224 /* EnumDeclaration */))) { emitStart(node); if (isES6ExportedEnum) { write("export "); @@ -38718,7 +39645,7 @@ var ts; } } function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { - if (moduleDeclaration.body.kind === 224 /* ModuleDeclaration */) { + if (moduleDeclaration.body.kind === 225 /* ModuleDeclaration */) { var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); return recursiveInnerModule || moduleDeclaration.body; } @@ -38742,7 +39669,7 @@ var ts; var emitVarForModule = !hoistedInDeclarationScope && !isModuleMergedWithES6Class(node); if (emitVarForModule) { var isES6ExportedNamespace = isES6ExportedDeclaration(node); - if (!isES6ExportedNamespace || isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 224 /* ModuleDeclaration */)) { + if (!isES6ExportedNamespace || isFirstDeclarationOfKind(node, node.symbol && node.symbol.declarations, 225 /* ModuleDeclaration */)) { emitStart(node); if (isES6ExportedNamespace) { write("export "); @@ -38760,7 +39687,7 @@ var ts; write(getGeneratedNameForNode(node)); emitEnd(node.name); write(") "); - if (node.body.kind === 225 /* ModuleBlock */) { + if (node.body.kind === 226 /* ModuleBlock */) { var saveConvertedLoopState = convertedLoopState; var saveTempFlags = tempFlags; var saveTempVariables = tempVariables; @@ -38836,16 +39763,16 @@ var ts; } } function getNamespaceDeclarationNode(node) { - if (node.kind === 228 /* ImportEqualsDeclaration */) { + if (node.kind === 229 /* ImportEqualsDeclaration */) { return node; } var importClause = node.importClause; - if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 231 /* NamespaceImport */) { + if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 232 /* NamespaceImport */) { return importClause.namedBindings; } } function isDefaultImport(node) { - return node.kind === 229 /* ImportDeclaration */ && node.importClause && !!node.importClause.name; + return node.kind === 230 /* ImportDeclaration */ && node.importClause && !!node.importClause.name; } function emitExportImportAssignments(node) { if (ts.isAliasSymbolDeclaration(node) && resolver.isValueAliasDeclaration(node)) { @@ -38873,7 +39800,7 @@ var ts; if (shouldEmitNamedBindings) { emitLeadingComments(node.importClause.namedBindings); emitStart(node.importClause.namedBindings); - if (node.importClause.namedBindings.kind === 231 /* NamespaceImport */) { + if (node.importClause.namedBindings.kind === 232 /* NamespaceImport */) { write("* as "); emit(node.importClause.namedBindings.name); } @@ -38899,7 +39826,7 @@ var ts; } function emitExternalImportDeclaration(node) { if (ts.contains(externalImports, node)) { - var isExportedImport = node.kind === 228 /* ImportEqualsDeclaration */ && (node.flags & 1 /* Export */) !== 0; + var isExportedImport = node.kind === 229 /* ImportEqualsDeclaration */ && (node.flags & 1 /* Export */) !== 0; var namespaceDeclaration = getNamespaceDeclarationNode(node); var varOrConst = (languageVersion <= 1 /* ES5 */) ? "var " : "const "; if (modulekind !== ts.ModuleKind.AMD) { @@ -38921,7 +39848,7 @@ var ts; // import { x, y } from "foo" // import d, * as x from "foo" // import d, { x, y } from "foo" - var isNakedImport = 229 /* ImportDeclaration */ && !node.importClause; + var isNakedImport = 230 /* ImportDeclaration */ && !node.importClause; if (!isNakedImport) { write(varOrConst); write(getGeneratedNameForNode(node)); @@ -39100,8 +40027,8 @@ var ts; write("export default "); var expression = node.expression; emit(expression); - if (expression.kind !== 219 /* FunctionDeclaration */ && - expression.kind !== 220 /* ClassDeclaration */) { + if (expression.kind !== 220 /* FunctionDeclaration */ && + expression.kind !== 221 /* ClassDeclaration */) { write(";"); } emitEnd(node); @@ -39138,7 +40065,7 @@ var ts; for (var _a = 0, _b = sourceFile.statements; _a < _b.length; _a++) { var node = _b[_a]; switch (node.kind) { - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: if (!node.importClause || resolver.isReferencedAliasDeclaration(node.importClause, /*checkChildren*/ true)) { // import "mod" @@ -39148,13 +40075,13 @@ var ts; externalImports.push(node); } break; - case 228 /* ImportEqualsDeclaration */: - if (node.moduleReference.kind === 239 /* ExternalModuleReference */ && resolver.isReferencedAliasDeclaration(node)) { + case 229 /* ImportEqualsDeclaration */: + if (node.moduleReference.kind === 240 /* ExternalModuleReference */ && resolver.isReferencedAliasDeclaration(node)) { // import x = require("mod") where x is referenced externalImports.push(node); } break; - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: if (node.moduleSpecifier) { if (!node.exportClause) { // export * from "mod" @@ -39177,7 +40104,7 @@ var ts; } } break; - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: if (node.isExportEquals && !exportEquals) { // export = x exportEquals = node; @@ -39203,10 +40130,10 @@ var ts; if (namespaceDeclaration && !isDefaultImport(node)) { return ts.getTextOfNodeFromSourceText(currentText, namespaceDeclaration.name); } - if (node.kind === 229 /* ImportDeclaration */ && node.importClause) { + if (node.kind === 230 /* ImportDeclaration */ && node.importClause) { return getGeneratedNameForNode(node); } - if (node.kind === 235 /* ExportDeclaration */ && node.moduleSpecifier) { + if (node.kind === 236 /* ExportDeclaration */ && node.moduleSpecifier) { return getGeneratedNameForNode(node); } } @@ -39232,8 +40159,8 @@ var ts; for (var _a = 0, externalImports_1 = externalImports; _a < externalImports_1.length; _a++) { var importNode = externalImports_1[_a]; // do not create variable declaration for exports and imports that lack import clause - var skipNode = importNode.kind === 235 /* ExportDeclaration */ || - (importNode.kind === 229 /* ImportDeclaration */ && !importNode.importClause); + var skipNode = importNode.kind === 236 /* ExportDeclaration */ || + (importNode.kind === 230 /* ImportDeclaration */ && !importNode.importClause); if (skipNode) { continue; } @@ -39266,7 +40193,7 @@ var ts; var hasExportDeclarationWithExportClause = false; for (var _a = 0, externalImports_2 = externalImports; _a < externalImports_2.length; _a++) { var externalImport = externalImports_2[_a]; - if (externalImport.kind === 235 /* ExportDeclaration */ && externalImport.exportClause) { + if (externalImport.kind === 236 /* ExportDeclaration */ && externalImport.exportClause) { hasExportDeclarationWithExportClause = true; break; } @@ -39298,7 +40225,7 @@ var ts; } for (var _d = 0, externalImports_3 = externalImports; _d < externalImports_3.length; _d++) { var externalImport = externalImports_3[_d]; - if (externalImport.kind !== 235 /* ExportDeclaration */) { + if (externalImport.kind !== 236 /* ExportDeclaration */) { continue; } var exportDecl = externalImport; @@ -39402,7 +40329,7 @@ var ts; if (i !== 0) { write(", "); } - if (local.kind === 220 /* ClassDeclaration */ || local.kind === 224 /* ModuleDeclaration */ || local.kind === 223 /* EnumDeclaration */) { + if (local.kind === 221 /* ClassDeclaration */ || local.kind === 225 /* ModuleDeclaration */ || local.kind === 224 /* EnumDeclaration */) { emitDeclarationName(local); } else { @@ -39436,21 +40363,21 @@ var ts; if (node.flags & 2 /* Ambient */) { return; } - if (node.kind === 219 /* FunctionDeclaration */) { + if (node.kind === 220 /* FunctionDeclaration */) { if (!hoistedFunctionDeclarations) { hoistedFunctionDeclarations = []; } hoistedFunctionDeclarations.push(node); return; } - if (node.kind === 220 /* ClassDeclaration */) { + if (node.kind === 221 /* ClassDeclaration */) { if (!hoistedVars) { hoistedVars = []; } hoistedVars.push(node); return; } - if (node.kind === 223 /* EnumDeclaration */) { + if (node.kind === 224 /* EnumDeclaration */) { if (shouldEmitEnumDeclaration(node)) { if (!hoistedVars) { hoistedVars = []; @@ -39459,7 +40386,7 @@ var ts; } return; } - if (node.kind === 224 /* ModuleDeclaration */) { + if (node.kind === 225 /* ModuleDeclaration */) { if (shouldEmitModuleDeclaration(node)) { if (!hoistedVars) { hoistedVars = []; @@ -39468,7 +40395,7 @@ var ts; } return; } - if (node.kind === 217 /* VariableDeclaration */ || node.kind === 168 /* BindingElement */) { + if (node.kind === 218 /* VariableDeclaration */ || node.kind === 169 /* BindingElement */) { if (shouldHoistVariable(node, /*checkIfSourceFileLevelDecl*/ false)) { var name_32 = node.name; if (name_32.kind === 69 /* Identifier */) { @@ -39509,7 +40436,7 @@ var ts; // if block scoped variables are nested in some another block then // no other functions can use them except ones that are defined at least in the same block return (ts.getCombinedNodeFlags(node) & 3072 /* BlockScoped */) === 0 || - ts.getEnclosingBlockScopeContainer(node).kind === 255 /* SourceFile */; + ts.getEnclosingBlockScopeContainer(node).kind === 256 /* SourceFile */; } function isCurrentFileSystemExternalModule() { return modulekind === ts.ModuleKind.System && isCurrentFileExternalModule; @@ -39584,21 +40511,21 @@ var ts; var entry = group_1[_a]; var importVariableName = getLocalNameForExternalImport(entry) || ""; switch (entry.kind) { - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: if (!entry.importClause) { // 'import "..."' case // module is imported only for side-effects, no emit required break; } // fall-through - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: ts.Debug.assert(importVariableName !== ""); writeLine(); // save import into the local write(importVariableName + " = " + parameterName + ";"); writeLine(); break; - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: ts.Debug.assert(importVariableName !== ""); if (entry.exportClause) { // export {a, b as c} from 'foo' @@ -39657,10 +40584,10 @@ var ts; // - import declarations are not emitted since they are already handled in setters // - export declarations with module specifiers are not emitted since they were already written in setters // - export declarations without module specifiers are emitted preserving the order - case 219 /* FunctionDeclaration */: - case 229 /* ImportDeclaration */: + case 220 /* FunctionDeclaration */: + case 230 /* ImportDeclaration */: continue; - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: if (!statement.moduleSpecifier) { for (var _a = 0, _b = statement.exportClause.elements; _a < _b.length; _a++) { var element = _b[_a]; @@ -39669,7 +40596,7 @@ var ts; } } continue; - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: if (!ts.isInternalModuleImportEqualsDeclaration(statement)) { // - import equals declarations that import external modules are not emitted continue; @@ -39949,11 +40876,11 @@ var ts; return result; } function isJsxChildEmittable(child) { - if (child.kind === 247 /* JsxExpression */) { + if (child.kind === 248 /* JsxExpression */) { // Don't emit empty expressions return !!child.expression; } - else if (child.kind === 243 /* JsxText */) { + else if (child.kind === 244 /* JsxText */) { // Don't emit empty strings return !!getTextToEmit(child); } @@ -40157,24 +41084,24 @@ var ts; switch (node.kind) { // All of these entities are emitted in a specialized fashion. As such, we allow // the specialized methods for each to handle the comments on the nodes. - case 221 /* InterfaceDeclaration */: - case 219 /* FunctionDeclaration */: - case 229 /* ImportDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 234 /* ExportAssignment */: + case 222 /* InterfaceDeclaration */: + case 220 /* FunctionDeclaration */: + case 230 /* ImportDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 235 /* ExportAssignment */: return true; } } function shouldEmitLeadingAndTrailingComments(node) { switch (node.kind) { - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: return shouldEmitLeadingAndTrailingCommentsForVariableStatement(node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: // Only emit the leading/trailing comments for a module if we're actually // emitting the module as well. return shouldEmitModuleDeclaration(node); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: // Only emit the leading/trailing comments for an enum if we're actually // emitting the module as well. return shouldEmitEnumDeclaration(node); @@ -40186,11 +41113,11 @@ var ts; // then we don't want to emit comments when we emit the body. It will have already // been taken care of when we emitted the 'return' statement for the function // expression body. - if (node.kind !== 198 /* Block */ && + if (node.kind !== 199 /* Block */ && node.parent && - node.parent.kind === 179 /* ArrowFunction */ && + node.parent.kind === 180 /* ArrowFunction */ && node.parent.body === node && - compilerOptions.target <= 1 /* ES5 */) { + languageVersion <= 1 /* ES5 */) { return false; } // Emit comments for everything else. @@ -40201,13 +41128,13 @@ var ts; switch (node.kind) { case 69 /* Identifier */: return emitIdentifier(node); - case 141 /* Parameter */: + case 142 /* Parameter */: return emitParameter(node); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: return emitMethod(node); - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: return emitAccessor(node); case 97 /* ThisKeyword */: return emitThis(node); @@ -40227,142 +41154,142 @@ var ts; case 13 /* TemplateMiddle */: case 14 /* TemplateTail */: return emitLiteral(node); - case 188 /* TemplateExpression */: + case 189 /* TemplateExpression */: return emitTemplateExpression(node); - case 196 /* TemplateSpan */: + case 197 /* TemplateSpan */: return emitTemplateSpan(node); - case 240 /* JsxElement */: - case 241 /* JsxSelfClosingElement */: + case 241 /* JsxElement */: + case 242 /* JsxSelfClosingElement */: return emitJsxElement(node); - case 243 /* JsxText */: + case 244 /* JsxText */: return emitJsxText(node); - case 247 /* JsxExpression */: + case 248 /* JsxExpression */: return emitJsxExpression(node); - case 138 /* QualifiedName */: + case 139 /* QualifiedName */: return emitQualifiedName(node); - case 166 /* ObjectBindingPattern */: + case 167 /* ObjectBindingPattern */: return emitObjectBindingPattern(node); - case 167 /* ArrayBindingPattern */: + case 168 /* ArrayBindingPattern */: return emitArrayBindingPattern(node); - case 168 /* BindingElement */: + case 169 /* BindingElement */: return emitBindingElement(node); - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: return emitArrayLiteral(node); - case 170 /* ObjectLiteralExpression */: + case 171 /* ObjectLiteralExpression */: return emitObjectLiteral(node); - case 252 /* PropertyAssignment */: + case 253 /* PropertyAssignment */: return emitPropertyAssignment(node); - case 253 /* ShorthandPropertyAssignment */: + case 254 /* ShorthandPropertyAssignment */: return emitShorthandPropertyAssignment(node); - case 139 /* ComputedPropertyName */: + case 140 /* ComputedPropertyName */: return emitComputedPropertyName(node); - case 171 /* PropertyAccessExpression */: + case 172 /* PropertyAccessExpression */: return emitPropertyAccess(node); - case 172 /* ElementAccessExpression */: + case 173 /* ElementAccessExpression */: return emitIndexedAccess(node); - case 173 /* CallExpression */: + case 174 /* CallExpression */: return emitCallExpression(node); - case 174 /* NewExpression */: + case 175 /* NewExpression */: return emitNewExpression(node); - case 175 /* TaggedTemplateExpression */: + case 176 /* TaggedTemplateExpression */: return emitTaggedTemplateExpression(node); - case 176 /* TypeAssertionExpression */: - case 194 /* AsExpression */: - case 195 /* NonNullExpression */: + case 177 /* TypeAssertionExpression */: + case 195 /* AsExpression */: + case 196 /* NonNullExpression */: return emit(node.expression); - case 177 /* ParenthesizedExpression */: + case 178 /* ParenthesizedExpression */: return emitParenExpression(node); - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return emitFunctionDeclaration(node); - case 180 /* DeleteExpression */: + case 181 /* DeleteExpression */: return emitDeleteExpression(node); - case 181 /* TypeOfExpression */: + case 182 /* TypeOfExpression */: return emitTypeOfExpression(node); - case 182 /* VoidExpression */: + case 183 /* VoidExpression */: return emitVoidExpression(node); - case 183 /* AwaitExpression */: + case 184 /* AwaitExpression */: return emitAwaitExpression(node); - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: return emitPrefixUnaryExpression(node); - case 185 /* PostfixUnaryExpression */: + case 186 /* PostfixUnaryExpression */: return emitPostfixUnaryExpression(node); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return emitBinaryExpression(node); - case 187 /* ConditionalExpression */: + case 188 /* ConditionalExpression */: return emitConditionalExpression(node); - case 190 /* SpreadElementExpression */: + case 191 /* SpreadElementExpression */: return emitSpreadElementExpression(node); - case 189 /* YieldExpression */: + case 190 /* YieldExpression */: return emitYieldExpression(node); - case 192 /* OmittedExpression */: + case 193 /* OmittedExpression */: return; - case 198 /* Block */: - case 225 /* ModuleBlock */: + case 199 /* Block */: + case 226 /* ModuleBlock */: return emitBlock(node); - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: return emitVariableStatement(node); - case 200 /* EmptyStatement */: + case 201 /* EmptyStatement */: return write(";"); - case 201 /* ExpressionStatement */: + case 202 /* ExpressionStatement */: return emitExpressionStatement(node); - case 202 /* IfStatement */: + case 203 /* IfStatement */: return emitIfStatement(node); - case 203 /* DoStatement */: + case 204 /* DoStatement */: return emitDoStatement(node); - case 204 /* WhileStatement */: + case 205 /* WhileStatement */: return emitWhileStatement(node); - case 205 /* ForStatement */: + case 206 /* ForStatement */: return emitForStatement(node); - case 207 /* ForOfStatement */: - case 206 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 207 /* ForInStatement */: return emitForInOrForOfStatement(node); - case 208 /* ContinueStatement */: - case 209 /* BreakStatement */: + case 209 /* ContinueStatement */: + case 210 /* BreakStatement */: return emitBreakOrContinueStatement(node); - case 210 /* ReturnStatement */: + case 211 /* ReturnStatement */: return emitReturnStatement(node); - case 211 /* WithStatement */: + case 212 /* WithStatement */: return emitWithStatement(node); - case 212 /* SwitchStatement */: + case 213 /* SwitchStatement */: return emitSwitchStatement(node); - case 248 /* CaseClause */: - case 249 /* DefaultClause */: + case 249 /* CaseClause */: + case 250 /* DefaultClause */: return emitCaseOrDefaultClause(node); - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: return emitLabeledStatement(node); - case 214 /* ThrowStatement */: + case 215 /* ThrowStatement */: return emitThrowStatement(node); - case 215 /* TryStatement */: + case 216 /* TryStatement */: return emitTryStatement(node); - case 251 /* CatchClause */: + case 252 /* CatchClause */: return emitCatchClause(node); - case 216 /* DebuggerStatement */: + case 217 /* DebuggerStatement */: return emitDebuggerStatement(node); - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: return emitVariableDeclaration(node); - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: return emitClassExpression(node); - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: return emitClassDeclaration(node); - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return emitInterfaceDeclaration(node); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return emitEnumDeclaration(node); - case 254 /* EnumMember */: + case 255 /* EnumMember */: return emitEnumMember(node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return emitModuleDeclaration(node); - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: return emitImportDeclaration(node); - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: return emitImportEqualsDeclaration(node); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: return emitExportDeclaration(node); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: return emitExportAssignment(node); - case 255 /* SourceFile */: + case 256 /* SourceFile */: return emitSourceFileNode(node); } } @@ -40401,7 +41328,7 @@ var ts; function getLeadingCommentsToEmit(node) { // Emit the leading comments only if the parent's pos doesn't match because parent should take care of emitting these comments if (node.parent) { - if (node.parent.kind === 255 /* SourceFile */ || node.pos !== node.parent.pos) { + if (node.parent.kind === 256 /* SourceFile */ || node.pos !== node.parent.pos) { if (hasDetachedComments(node.pos)) { // get comments without detached comments return getLeadingCommentsWithoutDetachedComments(); @@ -40416,7 +41343,7 @@ var ts; function getTrailingCommentsToEmit(node) { // Emit the trailing comments only if the parent's pos doesn't match because parent should take care of emitting these comments if (node.parent) { - if (node.parent.kind === 255 /* SourceFile */ || node.end !== node.parent.end) { + if (node.parent.kind === 256 /* SourceFile */ || node.end !== node.parent.end) { return ts.getTrailingCommentRanges(currentText, node.end); } } @@ -41041,20 +41968,26 @@ var ts; var failedLookupLocations = []; var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled, skipTsx: false }; var resolvedFileName = tryLoadModuleUsingOptionalResolutionSettings(moduleName, containingDirectory, nodeLoadModuleByRelativeName, failedLookupLocations, supportedExtensions, state); - if (resolvedFileName) { - return createResolvedModule(resolvedFileName, /*isExternalLibraryImport*/ false, failedLookupLocations); - } var isExternalLibraryImport = false; - if (moduleHasNonRelativeName(moduleName)) { - if (traceEnabled) { - trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder, moduleName); + if (!resolvedFileName) { + if (moduleHasNonRelativeName(moduleName)) { + if (traceEnabled) { + trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder, moduleName); + } + resolvedFileName = loadModuleFromNodeModules(moduleName, containingDirectory, failedLookupLocations, state); + isExternalLibraryImport = resolvedFileName !== undefined; + } + else { + var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); + resolvedFileName = nodeLoadModuleByRelativeName(candidate, supportedExtensions, failedLookupLocations, /*onlyRecordFailures*/ false, state); } - resolvedFileName = loadModuleFromNodeModules(moduleName, containingDirectory, failedLookupLocations, state); - isExternalLibraryImport = resolvedFileName !== undefined; } - else { - var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName)); - resolvedFileName = nodeLoadModuleByRelativeName(candidate, supportedExtensions, failedLookupLocations, /*onlyRecordFailures*/ false, state); + if (resolvedFileName && host.realpath) { + var originalFileName = resolvedFileName; + resolvedFileName = ts.normalizePath(host.realpath(resolvedFileName)); + if (traceEnabled) { + trace(host, ts.Diagnostics.Resolving_real_path_for_0_result_1, originalFileName, resolvedFileName); + } } return createResolvedModule(resolvedFileName, isExternalLibraryImport, failedLookupLocations); } @@ -41300,6 +42233,7 @@ var ts; 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, @@ -41312,7 +42246,8 @@ var ts; 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); } + directoryExists: function (directoryName) { return ts.sys.directoryExists(directoryName); }, + realpath: realpath }; } ts.createCompilerHost = createCompilerHost; @@ -41436,6 +42371,7 @@ var ts; program = { getRootFileNames: function () { return rootNames; }, getSourceFile: getSourceFile, + getSourceFileByPath: getSourceFileByPath, getSourceFiles: function () { return files; }, getCompilerOptions: function () { return options; }, getSyntacticDiagnostics: getSyntacticDiagnostics, @@ -41454,7 +42390,7 @@ var ts; getSymbolCount: function () { return getDiagnosticsProducingTypeChecker().getSymbolCount(); }, getTypeCount: function () { return getDiagnosticsProducingTypeChecker().getTypeCount(); }, getFileProcessingDiagnostics: function () { return fileProcessingDiagnostics; }, - resolvedTypeReferenceDirectives: resolvedTypeReferenceDirectives + getResolvedTypeReferenceDirectives: function () { return resolvedTypeReferenceDirectives; } }; verifyCompilerOptions(); ts.programTime += new Date().getTime() - start; @@ -41504,7 +42440,11 @@ var ts; (oldOptions.allowJs !== options.allowJs) || (oldOptions.rootDir !== options.rootDir) || (oldOptions.typesSearchPaths !== options.typesSearchPaths) || - (oldOptions.configFilePath !== options.configFilePath)) { + (oldOptions.configFilePath !== options.configFilePath) || + (oldOptions.baseUrl !== options.baseUrl) || + (oldOptions.typesRoot !== options.typesRoot) || + !ts.arrayIsEqualTo(oldOptions.rootDirs, options.rootDirs) || + !ts.mapIsEqualTo(oldOptions.paths, options.paths)) { return false; } ts.Debug.assert(!oldProgram.structureIsReused); @@ -41522,7 +42462,9 @@ var ts; var modifiedSourceFiles = []; for (var _i = 0, _a = oldProgram.getSourceFiles(); _i < _a.length; _i++) { var oldSourceFile = _a[_i]; - var newSourceFile = host.getSourceFile(oldSourceFile.fileName, options.target); + var newSourceFile = host.getSourceFileByPath + ? host.getSourceFileByPath(oldSourceFile.fileName, oldSourceFile.path, options.target) + : host.getSourceFile(oldSourceFile.fileName, options.target); if (!newSourceFile) { return false; } @@ -41594,7 +42536,7 @@ var ts; var modifiedFile = modifiedSourceFiles_1[_b]; fileProcessingDiagnostics.reattachFileDiagnostics(modifiedFile); } - resolvedTypeReferenceDirectives = oldProgram.resolvedTypeReferenceDirectives; + resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives(); oldProgram.structureIsReused = true; return true; } @@ -41606,6 +42548,7 @@ var ts; getCurrentDirectory: function () { return currentDirectory; }, getNewLine: function () { return host.getNewLine(); }, getSourceFile: program.getSourceFile, + getSourceFileByPath: program.getSourceFileByPath, getSourceFiles: program.getSourceFiles, writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }), isEmitBlocked: isEmitBlocked @@ -41661,7 +42604,10 @@ var ts; return emitResult; } function getSourceFile(fileName) { - return filesByName.get(ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + return getSourceFileByPath(ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + } + function getSourceFileByPath(path) { + return filesByName.get(path); } function getDiagnosticsHelper(sourceFile, getDiagnostics, cancellationToken) { if (sourceFile) { @@ -41742,47 +42688,47 @@ var ts; return false; } switch (node.kind) { - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_a_ts_file)); return true; - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: if (node.isExportEquals) { diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_a_ts_file)); return true; } break; - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: var classDeclaration = node; if (checkModifiers(classDeclaration.modifiers) || checkTypeParameters(classDeclaration.typeParameters)) { return true; } break; - case 250 /* HeritageClause */: + case 251 /* HeritageClause */: var heritageClause = node; if (heritageClause.token === 106 /* ImplementsKeyword */) { diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_a_ts_file)); return true; } break; - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.interface_declarations_can_only_be_used_in_a_ts_file)); return true; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.module_declarations_can_only_be_used_in_a_ts_file)); return true; - case 222 /* TypeAliasDeclaration */: + case 223 /* TypeAliasDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.type_aliases_can_only_be_used_in_a_ts_file)); return true; - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 178 /* FunctionExpression */: - case 219 /* FunctionDeclaration */: - case 179 /* ArrowFunction */: - case 219 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 179 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: + case 180 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: var functionDeclaration = node; if (checkModifiers(functionDeclaration.modifiers) || checkTypeParameters(functionDeclaration.typeParameters) || @@ -41790,20 +42736,20 @@ var ts; return true; } break; - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: var variableStatement = node; if (checkModifiers(variableStatement.modifiers)) { return true; } break; - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: var variableDeclaration = node; if (checkTypeAnnotation(variableDeclaration.type)) { return true; } break; - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: var expression = node; if (expression.typeArguments && expression.typeArguments.length > 0) { var start_2 = expression.typeArguments.pos; @@ -41811,7 +42757,7 @@ var ts; return true; } break; - case 141 /* Parameter */: + case 142 /* Parameter */: var parameter = node; if (parameter.modifiers) { var start_3 = parameter.modifiers.pos; @@ -41827,17 +42773,17 @@ var ts; return true; } break; - case 144 /* PropertyDeclaration */: + case 145 /* PropertyDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.property_declarations_can_only_be_used_in_a_ts_file)); return true; - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: diagnostics.push(ts.createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file)); return true; - case 176 /* TypeAssertionExpression */: + case 177 /* TypeAssertionExpression */: var typeAssertionExpression = node; diagnostics.push(ts.createDiagnosticForNode(typeAssertionExpression.type, ts.Diagnostics.type_assertion_expressions_can_only_be_used_in_a_ts_file)); return true; - case 142 /* Decorator */: + case 143 /* Decorator */: if (!options.experimentalDecorators) { diagnostics.push(ts.createDiagnosticForNode(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)); } @@ -41868,7 +42814,7 @@ var ts; case 112 /* PublicKeyword */: case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: - case 127 /* ReadonlyKeyword */: + case 128 /* ReadonlyKeyword */: case 122 /* DeclareKeyword */: diagnostics.push(ts.createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind))); return true; @@ -41942,9 +42888,9 @@ var ts; return; function collectModuleReferences(node, inAmbientModule) { switch (node.kind) { - case 229 /* ImportDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 235 /* ExportDeclaration */: + case 230 /* ImportDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 236 /* ExportDeclaration */: var moduleNameExpr = ts.getExternalModuleName(node); if (!moduleNameExpr || moduleNameExpr.kind !== 9 /* StringLiteral */) { break; @@ -41959,7 +42905,7 @@ var ts; (imports || (imports = [])).push(moduleNameExpr); } break; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: if (ts.isAmbientModule(node) && (inAmbientModule || node.flags & 2 /* Ambient */ || ts.isDeclarationFile(file))) { var moduleName = node.name; // Ambient module declarations can be interpreted as augmentations for some existing external modules. @@ -42178,7 +43124,7 @@ var ts; // add file to program only if: // - resolution was successful // - noResolve is falsy - // - module name come from the list fo imports + // - module name comes from the list of imports var shouldAddFile = resolution && !options.noResolve && i < file.imports.length; @@ -42266,12 +43212,23 @@ var ts; if (!hasZeroOrOneAsteriskCharacter(key)) { programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, key)); } - for (var _i = 0, _a = options.paths[key]; _i < _a.length; _i++) { - var subst = _a[_i]; - if (!hasZeroOrOneAsteriskCharacter(subst)) { - programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character, subst, key)); + if (ts.isArray(options.paths[key])) { + for (var _i = 0, _a = options.paths[key]; _i < _a.length; _i++) { + var subst = _a[_i]; + var typeOfSubst = typeof subst; + if (typeOfSubst === "string") { + if (!hasZeroOrOneAsteriskCharacter(subst)) { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character, subst, key)); + } + } + else { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2, subst, key, typeOfSubst)); + } } } + else { + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Substututions_for_pattern_0_should_be_an_array, key)); + } } } if (options.inlineSources) { @@ -42765,6 +43722,7 @@ var ts; "es2015": "lib.es2015.d.ts", "es7": "lib.es2016.d.ts", "es2016": "lib.es2016.d.ts", + "es2017": "lib.es2017.d.ts", // Host only "dom": "lib.dom.d.ts", "webworker": "lib.webworker.d.ts", @@ -42779,7 +43737,8 @@ var 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" + "es2016.array.include": "lib.es2016.array.include.d.ts", + "es2017.object": "lib.es2017.object.d.ts" } }, description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon @@ -42842,7 +43801,7 @@ var ts; ts.createCompilerDiagnosticForInvalidCustomType = createCompilerDiagnosticForInvalidCustomType; /* @internal */ function parseCustomTypeOption(opt, value, errors) { - var key = (value || "").trim().toLowerCase(); + var key = trimString((value || "")).toLowerCase(); var map = opt.type; if (ts.hasProperty(map, key)) { return map[key]; @@ -42854,7 +43813,7 @@ var ts; ts.parseCustomTypeOption = parseCustomTypeOption; /* @internal */ function parseListTypeOption(opt, value, errors) { - var values = (value || "").trim().split(","); + var values = trimString((value || "")).split(","); switch (opt.element.type) { case "number": return ts.map(values, parseInt); @@ -43024,6 +43983,9 @@ var ts; } return output; } + // Skip over any minified JavaScript files (ending in ".min.js") + // Skip over dotted files and folders as well + var IgnoreFileNamePattern = /(\.min\.js$)|([\\/]\.[\w.])/; /** * Parse the contents of a config file (tsconfig.json). * @param json The contents of the config file to parse @@ -43043,6 +44005,7 @@ var ts; options: options, fileNames: fileNames, typingOptions: typingOptions, + raw: json, errors: errors }; function getFileNames(errors) { @@ -43063,11 +44026,11 @@ var ts; } else { // by default exclude node_modules, and any specificied output directory - exclude = ["node_modules"]; - var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; - if (outDir) { - exclude.push(outDir); - } + exclude = ["node_modules", "bower_components", "jspm_packages"]; + } + var outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + exclude.push(outDir); } exclude = ts.map(exclude, ts.normalizeSlashes); var supportedExtensions = ts.getSupportedExtensions(options); @@ -43083,8 +44046,7 @@ var ts; if (extension === ".ts" && ts.fileExtensionIs(fileName, ".d.ts")) { continue; } - // Skip over any minified JavaScript files (ending in ".min.js") - if (/\.min\.js$/.test(fileName)) { + if (IgnoreFileNamePattern.test(fileName)) { continue; } // If this is one of the output extension (which would be .d.ts and .js if we are allowing compilation of js files) @@ -43182,6 +44144,9 @@ var ts; 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, ""); + } })(ts || (ts = {})); /* @internal */ var ts; @@ -43255,7 +44220,7 @@ var ts; } } function autoCollapse(node) { - return ts.isFunctionBlock(node) && node.parent.kind !== 179 /* ArrowFunction */; + return ts.isFunctionBlock(node) && node.parent.kind !== 180 /* ArrowFunction */; } var depth = 0; var maxDepth = 20; @@ -43267,30 +44232,30 @@ var ts; addOutliningForLeadingCommentsForNode(n); } switch (n.kind) { - case 198 /* Block */: + case 199 /* Block */: if (!ts.isFunctionBlock(n)) { - var parent_11 = n.parent; + var parent_14 = n.parent; var openBrace = ts.findChildOfKind(n, 15 /* OpenBraceToken */, sourceFile); var closeBrace = ts.findChildOfKind(n, 16 /* CloseBraceToken */, sourceFile); // Check if the block is standalone, or 'attached' to some parent statement. // If the latter, we want to collapse the block, but consider its hint span // to be the entire span of the parent. - if (parent_11.kind === 203 /* DoStatement */ || - parent_11.kind === 206 /* ForInStatement */ || - parent_11.kind === 207 /* ForOfStatement */ || - parent_11.kind === 205 /* ForStatement */ || - parent_11.kind === 202 /* IfStatement */ || - parent_11.kind === 204 /* WhileStatement */ || - parent_11.kind === 211 /* WithStatement */ || - parent_11.kind === 251 /* CatchClause */) { - addOutliningSpan(parent_11, openBrace, closeBrace, autoCollapse(n)); + if (parent_14.kind === 204 /* DoStatement */ || + parent_14.kind === 207 /* ForInStatement */ || + parent_14.kind === 208 /* ForOfStatement */ || + parent_14.kind === 206 /* ForStatement */ || + parent_14.kind === 203 /* IfStatement */ || + parent_14.kind === 205 /* WhileStatement */ || + parent_14.kind === 212 /* WithStatement */ || + parent_14.kind === 252 /* CatchClause */) { + addOutliningSpan(parent_14, openBrace, closeBrace, autoCollapse(n)); break; } - if (parent_11.kind === 215 /* TryStatement */) { + if (parent_14.kind === 216 /* TryStatement */) { // Could be the try-block, or the finally-block. - var tryStatement = parent_11; + var tryStatement = parent_14; if (tryStatement.tryBlock === n) { - addOutliningSpan(parent_11, openBrace, closeBrace, autoCollapse(n)); + addOutliningSpan(parent_14, openBrace, closeBrace, autoCollapse(n)); break; } else if (tryStatement.finallyBlock === n) { @@ -43313,23 +44278,23 @@ var ts; break; } // Fallthrough. - case 225 /* ModuleBlock */: { + case 226 /* ModuleBlock */: { var openBrace = ts.findChildOfKind(n, 15 /* OpenBraceToken */, sourceFile); var closeBrace = ts.findChildOfKind(n, 16 /* CloseBraceToken */, sourceFile); addOutliningSpan(n.parent, openBrace, closeBrace, autoCollapse(n)); break; } - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 170 /* ObjectLiteralExpression */: - case 226 /* CaseBlock */: { + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 171 /* ObjectLiteralExpression */: + case 227 /* CaseBlock */: { var openBrace = ts.findChildOfKind(n, 15 /* OpenBraceToken */, sourceFile); var closeBrace = ts.findChildOfKind(n, 16 /* CloseBraceToken */, sourceFile); addOutliningSpan(n, openBrace, closeBrace, autoCollapse(n)); break; } - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: var openBracket = ts.findChildOfKind(n, 19 /* OpenBracketToken */, sourceFile); var closeBracket = ts.findChildOfKind(n, 20 /* CloseBracketToken */, sourceFile); addOutliningSpan(n, openBracket, closeBracket, autoCollapse(n)); @@ -43422,7 +44387,7 @@ var ts; if (text !== undefined) { containers.unshift(text); } - else if (declaration.name.kind === 139 /* ComputedPropertyName */) { + else if (declaration.name.kind === 140 /* ComputedPropertyName */) { return tryAddComputedPropertyName(declaration.name.expression, containers, /*includeLastPortion*/ true); } else { @@ -43443,7 +44408,7 @@ var ts; } return true; } - if (expression.kind === 171 /* PropertyAccessExpression */) { + if (expression.kind === 172 /* PropertyAccessExpression */) { var propertyAccess = expression; if (includeLastPortion) { containers.unshift(propertyAccess.name.text); @@ -43456,7 +44421,7 @@ var ts; var containers = []; // First, if we started with a computed property name, then add all but the last // portion into the container array. - if (declaration.name.kind === 139 /* ComputedPropertyName */) { + if (declaration.name.kind === 140 /* ComputedPropertyName */) { if (!tryAddComputedPropertyName(declaration.name.expression, containers, /*includeLastPortion*/ false)) { return undefined; } @@ -43535,17 +44500,17 @@ var ts; var current = node.parent; while (current) { switch (current.kind) { - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: // If we have a module declared as A.B.C, it is more "intuitive" // to say it only has a single layer of depth do { current = current.parent; - } while (current.kind === 224 /* ModuleDeclaration */); + } while (current.kind === 225 /* ModuleDeclaration */); // fall through - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: - case 221 /* InterfaceDeclaration */: - case 219 /* FunctionDeclaration */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: + case 222 /* InterfaceDeclaration */: + case 220 /* FunctionDeclaration */: indent++; } current = current.parent; @@ -43556,21 +44521,21 @@ var ts; var childNodes = []; function visit(node) { switch (node.kind) { - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: ts.forEach(node.declarationList.declarations, visit); break; - case 166 /* ObjectBindingPattern */: - case 167 /* ArrayBindingPattern */: + case 167 /* ObjectBindingPattern */: + case 168 /* ArrayBindingPattern */: ts.forEach(node.elements, visit); break; - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: // Handle named exports case e.g.: // export {a, b as B} from "mod"; if (node.exportClause) { ts.forEach(node.exportClause.elements, visit); } break; - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: var importClause = node.importClause; if (importClause) { // Handle default import case e.g.: @@ -43582,7 +44547,7 @@ var ts; // import * as NS from "mod"; // import {a, b as B} from "mod"; if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 231 /* NamespaceImport */) { + if (importClause.namedBindings.kind === 232 /* NamespaceImport */) { childNodes.push(importClause.namedBindings); } else { @@ -43591,26 +44556,26 @@ var ts; } } break; - case 168 /* BindingElement */: - case 217 /* VariableDeclaration */: + case 169 /* BindingElement */: + case 218 /* VariableDeclaration */: if (ts.isBindingPattern(node.name)) { visit(node.name); break; } // Fall through - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: - case 221 /* InterfaceDeclaration */: - case 224 /* ModuleDeclaration */: - case 219 /* FunctionDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 233 /* ImportSpecifier */: - case 237 /* ExportSpecifier */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: + case 222 /* InterfaceDeclaration */: + case 225 /* ModuleDeclaration */: + case 220 /* FunctionDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 234 /* ImportSpecifier */: + case 238 /* ExportSpecifier */: childNodes.push(node); break; } } - //for (let i = 0, n = nodes.length; i < n; i++) { + // for (let i = 0, n = nodes.length; i < n; i++) { // let node = nodes[i]; // if (node.kind === SyntaxKind.ClassDeclaration || // node.kind === SyntaxKind.EnumDeclaration || @@ -43622,7 +44587,7 @@ var ts; // else if (node.kind === SyntaxKind.VariableStatement) { // childNodes.push.apply(childNodes, (node).declarations); // } - //} + // } ts.forEach(nodes, visit); return sortNodes(childNodes); } @@ -43653,11 +44618,11 @@ var ts; for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) { var node = nodes_4[_i]; switch (node.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: topLevelNodes.push(node); for (var _a = 0, _b = node.members; _a < _b.length; _a++) { var member = _b[_a]; - if (member.kind === 146 /* MethodDeclaration */ || member.kind === 147 /* Constructor */) { + if (member.kind === 147 /* MethodDeclaration */ || member.kind === 148 /* Constructor */) { if (member.body) { // We do not include methods that does not have child functions in it, because of duplications. if (hasNamedFunctionDeclarations(member.body.statements)) { @@ -43668,16 +44633,17 @@ var ts; } } break; - case 223 /* EnumDeclaration */: - case 221 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: topLevelNodes.push(node); break; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: var moduleDeclaration = node; topLevelNodes.push(node); addTopLevelNodes(getInnermostModule(moduleDeclaration).body.statements, topLevelNodes); break; - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: var functionDeclaration = node; if (isTopLevelFunctionDeclaration(functionDeclaration)) { topLevelNodes.push(node); @@ -43690,17 +44656,17 @@ var ts; function hasNamedFunctionDeclarations(nodes) { for (var _i = 0, nodes_5 = nodes; _i < nodes_5.length; _i++) { var s = nodes_5[_i]; - if (s.kind === 219 /* FunctionDeclaration */ && !isEmpty(s.name.text)) { + if (s.kind === 220 /* FunctionDeclaration */ && !isEmpty(s.name.text)) { return true; } } return false; } function isTopLevelFunctionDeclaration(functionDeclaration) { - if (functionDeclaration.kind === 219 /* FunctionDeclaration */) { + if (functionDeclaration.kind === 220 /* FunctionDeclaration */) { // A function declaration is 'top level' if it contains any function declarations // within it. - if (functionDeclaration.body && functionDeclaration.body.kind === 198 /* Block */) { + if (functionDeclaration.body && functionDeclaration.body.kind === 199 /* Block */) { // Proper function declarations can only have identifier names if (hasNamedFunctionDeclarations(functionDeclaration.body.statements)) { return true; @@ -43712,8 +44678,8 @@ var ts; else { // We have made sure that a grand parent node exists with 'isFunctionBlock()' above. var grandParentKind = functionDeclaration.parent.parent.kind; - if (grandParentKind === 146 /* MethodDeclaration */ || - grandParentKind === 147 /* Constructor */) { + if (grandParentKind === 147 /* MethodDeclaration */ || + grandParentKind === 148 /* Constructor */) { return true; } } @@ -43769,44 +44735,44 @@ var ts; } function createChildItem(node) { switch (node.kind) { - case 141 /* Parameter */: + case 142 /* Parameter */: if (ts.isBindingPattern(node.name)) { break; } - if ((node.flags & 959 /* Modifier */) === 0) { + if ((node.flags & 1023 /* Modifier */) === 0) { return undefined; } return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberFunctionElement); - case 148 /* GetAccessor */: + case 149 /* GetAccessor */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberGetAccessorElement); - case 149 /* SetAccessor */: + case 150 /* SetAccessor */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberSetAccessorElement); - case 152 /* IndexSignature */: + case 153 /* IndexSignature */: return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); - case 254 /* EnumMember */: + case 255 /* EnumMember */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 150 /* CallSignature */: + case 151 /* CallSignature */: return createItem(node, "()", ts.ScriptElementKind.callSignatureElement); - case 151 /* ConstructSignature */: + case 152 /* ConstructSignature */: return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.memberVariableElement); - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.functionElement); - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: var variableDeclarationNode = void 0; var name_35; - if (node.kind === 168 /* BindingElement */) { + if (node.kind === 169 /* BindingElement */) { name_35 = node.name; variableDeclarationNode = node; // binding elements are added only for variable declarations // bubble up to the containing variable declaration - while (variableDeclarationNode && variableDeclarationNode.kind !== 217 /* VariableDeclaration */) { + while (variableDeclarationNode && variableDeclarationNode.kind !== 218 /* VariableDeclaration */) { variableDeclarationNode = variableDeclarationNode.parent; } ts.Debug.assert(variableDeclarationNode !== undefined); @@ -43825,13 +44791,13 @@ var ts; else { return createItem(node, getTextOfNode(name_35), ts.ScriptElementKind.variableElement); } - case 147 /* Constructor */: + case 148 /* Constructor */: return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); - case 237 /* ExportSpecifier */: - case 233 /* ImportSpecifier */: - case 228 /* ImportEqualsDeclaration */: - case 230 /* ImportClause */: - case 231 /* NamespaceImport */: + case 238 /* ExportSpecifier */: + case 234 /* ImportSpecifier */: + case 229 /* ImportEqualsDeclaration */: + case 231 /* ImportClause */: + case 232 /* NamespaceImport */: return createItem(node, getTextOfNode(node.name), ts.ScriptElementKind.alias); } return undefined; @@ -43861,21 +44827,23 @@ var ts; } function createTopLevelItem(node) { switch (node.kind) { - case 255 /* SourceFile */: + case 256 /* SourceFile */: return createSourceFileItem(node); - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: return createClassItem(node); - case 146 /* MethodDeclaration */: - case 147 /* Constructor */: + case 147 /* MethodDeclaration */: + case 148 /* Constructor */: return createMemberFunctionLikeItem(node); - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: return createEnumItem(node); - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return createInterfaceItem(node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return createModuleItem(node); - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return createFunctionItem(node); + case 223 /* TypeAliasDeclaration */: + return createTypeAliasItem(node); } return undefined; function getModuleName(moduleDeclaration) { @@ -43886,7 +44854,7 @@ var ts; // Otherwise, we need to aggregate each identifier to build up the qualified name. var result = []; result.push(moduleDeclaration.name.text); - while (moduleDeclaration.body && moduleDeclaration.body.kind === 224 /* ModuleDeclaration */) { + while (moduleDeclaration.body && moduleDeclaration.body.kind === 225 /* ModuleDeclaration */) { moduleDeclaration = moduleDeclaration.body; result.push(moduleDeclaration.name.text); } @@ -43898,18 +44866,21 @@ var ts; return getNavigationBarItem(moduleName, ts.ScriptElementKind.moduleElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); } function createFunctionItem(node) { - if (node.body && node.body.kind === 198 /* Block */) { + if (node.body && node.body.kind === 199 /* Block */) { var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem); return getNavigationBarItem(!node.name ? "default" : node.name.text, ts.ScriptElementKind.functionElement, ts.getNodeModifiers(node), [getNodeSpan(node)], childItems, getIndent(node)); } return undefined; } + function createTypeAliasItem(node) { + return getNavigationBarItem(node.name.text, ts.ScriptElementKind.typeElement, ts.getNodeModifiers(node), [getNodeSpan(node)], [], getIndent(node)); + } function createMemberFunctionLikeItem(node) { - if (node.body && node.body.kind === 198 /* Block */) { + if (node.body && node.body.kind === 199 /* Block */) { var childItems = getItemsWorker(sortNodes(node.body.statements), createChildItem); var scriptElementKind = void 0; var memberFunctionName = void 0; - if (node.kind === 146 /* MethodDeclaration */) { + if (node.kind === 147 /* MethodDeclaration */) { memberFunctionName = ts.getPropertyNameForPropertyNameNode(node.name); scriptElementKind = ts.ScriptElementKind.memberFunctionElement; } @@ -43936,7 +44907,7 @@ var ts; var childItems; if (node.members) { var constructor = ts.forEach(node.members, function (member) { - return member.kind === 147 /* Constructor */ && member; + return member.kind === 148 /* Constructor */ && member; }); // Add the constructor parameters in as children of the class (for property parameters). // Note that *all non-binding pattern named* parameters will be added to the nodes array, but parameters that @@ -43960,7 +44931,7 @@ var ts; } } function removeComputedProperties(node) { - return ts.filter(node.members, function (member) { return member.name === undefined || member.name.kind !== 139 /* ComputedPropertyName */; }); + return ts.filter(node.members, function (member) { return member.name === undefined || member.name.kind !== 140 /* ComputedPropertyName */; }); } /** * Like removeComputedProperties, but retains the properties with well known symbol names @@ -43969,13 +44940,13 @@ var ts; return ts.filter(node.members, function (member) { return !ts.hasDynamicName(member); }); } function getInnermostModule(node) { - while (node.body.kind === 224 /* ModuleDeclaration */) { + while (node.body.kind === 225 /* ModuleDeclaration */) { node = node.body; } return node; } function getNodeSpan(node) { - return node.kind === 255 /* SourceFile */ + return node.kind === 256 /* SourceFile */ ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); } @@ -44020,52 +44991,52 @@ var ts; } function createNavBarItem(node) { switch (node.kind) { - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: // Only add to the navbar if at the top-level of the file // Note: "const" and "let" are also SyntaxKind.VariableDeclarations if (node.parent /*VariableDeclarationList*/.parent /*VariableStatement*/ - .parent /*SourceFile*/.kind !== 255 /* SourceFile */) { + .parent /*SourceFile*/.kind !== 256 /* SourceFile */) { return undefined; } // If it is initialized with a function expression, handle it when we reach the function expression node var varDecl = node; - if (varDecl.initializer && (varDecl.initializer.kind === 178 /* FunctionExpression */ || - varDecl.initializer.kind === 179 /* ArrowFunction */ || - varDecl.initializer.kind === 191 /* ClassExpression */)) { + if (varDecl.initializer && (varDecl.initializer.kind === 179 /* FunctionExpression */ || + varDecl.initializer.kind === 180 /* ArrowFunction */ || + varDecl.initializer.kind === 192 /* ClassExpression */)) { return undefined; } // Fall through - case 219 /* FunctionDeclaration */: - case 220 /* ClassDeclaration */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 221 /* ClassDeclaration */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: // "export default function().." looks just like a regular function/class declaration, except with the 'default' flag var name_36 = node.flags && (node.flags & 512 /* Default */) && !node.name ? "default" : - node.kind === 147 /* Constructor */ ? "constructor" : + node.kind === 148 /* Constructor */ ? "constructor" : ts.declarationNameToString(node.name); return getNavBarItem(name_36, getScriptKindForElementKind(node.kind), [getNodeSpan(node)]); - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 191 /* ClassExpression */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 192 /* ClassExpression */: return getDefineModuleItem(node) || getFunctionOrClassExpressionItem(node); - case 146 /* MethodDeclaration */: + case 147 /* MethodDeclaration */: var methodDecl = node; return getNavBarItem(ts.declarationNameToString(methodDecl.name), ts.ScriptElementKind.memberFunctionElement, [getNodeSpan(node)]); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: // e.g. "export default " return getNavBarItem("default", ts.ScriptElementKind.variableElement, [getNodeSpan(node)]); - case 230 /* ImportClause */: + case 231 /* ImportClause */: if (!node.name) { // No default import (this node is still a parent of named & namespace imports, which are handled below) return undefined; } // fall through - case 233 /* ImportSpecifier */: // e.g. 'id' in: import {id} from 'mod' (in NamedImports, in ImportClause) - case 231 /* NamespaceImport */: // e.g. '* as ns' in: import * as ns from 'mod' (in ImportClause) - case 237 /* ExportSpecifier */: + case 234 /* ImportSpecifier */: // e.g. 'id' in: import {id} from 'mod' (in NamedImports, in ImportClause) + case 232 /* NamespaceImport */: // e.g. '* as ns' in: import * as ns from 'mod' (in ImportClause) + case 238 /* ExportSpecifier */: // Export specifiers are only interesting if they are reexports from another module, or renamed, else they are already globals - if (node.kind === 237 /* ExportSpecifier */) { + if (node.kind === 238 /* ExportSpecifier */) { if (!node.parent.parent.moduleSpecifier && !node.propertyName) { return undefined; } @@ -44087,15 +45058,15 @@ var ts; }; } function getDefineModuleItem(node) { - if (node.kind !== 178 /* FunctionExpression */ && node.kind !== 179 /* ArrowFunction */) { + if (node.kind !== 179 /* FunctionExpression */ && node.kind !== 180 /* ArrowFunction */) { return undefined; } // No match if this is not a call expression to an identifier named 'define' - if (node.parent.kind !== 173 /* CallExpression */) { + if (node.parent.kind !== 174 /* CallExpression */) { return undefined; } var callExpr = node.parent; - if (callExpr.expression.kind !== 69 /* Identifier */ || callExpr.expression.getText() !== 'define') { + if (callExpr.expression.kind !== 69 /* Identifier */ || callExpr.expression.getText() !== "define") { return undefined; } // Return a module of either the given text in the first argument, or of the source file path @@ -44106,9 +45077,9 @@ var ts; return getNavBarItem(defaultName, ts.ScriptElementKind.moduleElement, [getNodeSpan(node.parent)]); } function getFunctionOrClassExpressionItem(node) { - if (node.kind !== 178 /* FunctionExpression */ && - node.kind !== 179 /* ArrowFunction */ && - node.kind !== 191 /* ClassExpression */) { + if (node.kind !== 179 /* FunctionExpression */ && + node.kind !== 180 /* ArrowFunction */ && + node.kind !== 192 /* ClassExpression */) { return undefined; } var fnExpr = node; @@ -44119,45 +45090,42 @@ var ts; } else { // See if it is a var initializer. If so, use the var name. - if (fnExpr.parent.kind === 217 /* VariableDeclaration */) { + if (fnExpr.parent.kind === 218 /* VariableDeclaration */) { fnName = ts.declarationNameToString(fnExpr.parent.name); } - else if (fnExpr.parent.kind === 186 /* BinaryExpression */ && + else if (fnExpr.parent.kind === 187 /* BinaryExpression */ && fnExpr.parent.operatorToken.kind === 56 /* EqualsToken */) { fnName = fnExpr.parent.left.getText(); - if (fnName.length > 20) { - fnName = fnName.substring(0, 17) + "..."; - } } - else if (fnExpr.parent.kind === 252 /* PropertyAssignment */ && + else if (fnExpr.parent.kind === 253 /* PropertyAssignment */ && fnExpr.parent.name) { fnName = fnExpr.parent.name.getText(); } else { - fnName = node.kind === 191 /* ClassExpression */ ? anonClassText : anonFnText; + fnName = node.kind === 192 /* ClassExpression */ ? anonClassText : anonFnText; } } - var scriptKind = node.kind === 191 /* ClassExpression */ ? ts.ScriptElementKind.classElement : ts.ScriptElementKind.functionElement; + var scriptKind = node.kind === 192 /* ClassExpression */ ? ts.ScriptElementKind.classElement : ts.ScriptElementKind.functionElement; return getNavBarItem(fnName, scriptKind, [getNodeSpan(node)]); } function getNodeSpan(node) { - return node.kind === 255 /* SourceFile */ + return node.kind === 256 /* SourceFile */ ? ts.createTextSpanFromBounds(node.getFullStart(), node.getEnd()) : ts.createTextSpanFromBounds(node.getStart(), node.getEnd()); } function getScriptKindForElementKind(kind) { switch (kind) { - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: return ts.ScriptElementKind.variableElement; - case 219 /* FunctionDeclaration */: + case 220 /* FunctionDeclaration */: return ts.ScriptElementKind.functionElement; - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: return ts.ScriptElementKind.classElement; - case 147 /* Constructor */: + case 148 /* Constructor */: return ts.ScriptElementKind.constructorImplementationElement; - case 148 /* GetAccessor */: + case 149 /* GetAccessor */: return ts.ScriptElementKind.memberGetAccessorElement; - case 149 /* SetAccessor */: + case 150 /* SetAccessor */: return ts.ScriptElementKind.memberSetAccessorElement; default: return "unknown"; @@ -44908,7 +45876,7 @@ var ts; } return createSignatureHelpItems(candidates, resolvedSignature, argumentInfo); function createJavaScriptSignatureHelpItems(argumentInfo) { - if (argumentInfo.invocation.kind !== 173 /* CallExpression */) { + if (argumentInfo.invocation.kind !== 174 /* CallExpression */) { return undefined; } // See if we can find some symbol with the call expression name that has call signatures. @@ -44916,7 +45884,7 @@ var ts; var expression = callExpression.expression; var name = expression.kind === 69 /* Identifier */ ? expression - : expression.kind === 171 /* PropertyAccessExpression */ + : expression.kind === 172 /* PropertyAccessExpression */ ? expression.name : undefined; if (!name || !name.text) { @@ -44949,7 +45917,7 @@ var ts; * in the argument of an invocation; returns undefined otherwise. */ function getImmediatelyContainingArgumentInfo(node) { - if (node.parent.kind === 173 /* CallExpression */ || node.parent.kind === 174 /* NewExpression */) { + if (node.parent.kind === 174 /* CallExpression */ || node.parent.kind === 175 /* NewExpression */) { var callExpression = node.parent; // There are 3 cases to handle: // 1. The token introduces a list, and should begin a sig help session @@ -45002,25 +45970,25 @@ var ts; }; } } - else if (node.kind === 11 /* NoSubstitutionTemplateLiteral */ && node.parent.kind === 175 /* TaggedTemplateExpression */) { + else if (node.kind === 11 /* NoSubstitutionTemplateLiteral */ && node.parent.kind === 176 /* TaggedTemplateExpression */) { // Check if we're actually inside the template; // otherwise we'll fall out and return undefined. if (ts.isInsideTemplateLiteral(node, position)) { return getArgumentListInfoForTemplate(node.parent, /*argumentIndex*/ 0); } } - else if (node.kind === 12 /* TemplateHead */ && node.parent.parent.kind === 175 /* TaggedTemplateExpression */) { + else if (node.kind === 12 /* TemplateHead */ && node.parent.parent.kind === 176 /* TaggedTemplateExpression */) { var templateExpression = node.parent; var tagExpression = templateExpression.parent; - ts.Debug.assert(templateExpression.kind === 188 /* TemplateExpression */); + ts.Debug.assert(templateExpression.kind === 189 /* TemplateExpression */); var argumentIndex = ts.isInsideTemplateLiteral(node, position) ? 0 : 1; return getArgumentListInfoForTemplate(tagExpression, argumentIndex); } - else if (node.parent.kind === 196 /* TemplateSpan */ && node.parent.parent.parent.kind === 175 /* TaggedTemplateExpression */) { + else if (node.parent.kind === 197 /* TemplateSpan */ && node.parent.parent.parent.kind === 176 /* TaggedTemplateExpression */) { var templateSpan = node.parent; var templateExpression = templateSpan.parent; var tagExpression = templateExpression.parent; - ts.Debug.assert(templateExpression.kind === 188 /* TemplateExpression */); + ts.Debug.assert(templateExpression.kind === 189 /* TemplateExpression */); // If we're just after a template tail, don't show signature help. if (node.kind === 14 /* TemplateTail */ && !ts.isInsideTemplateLiteral(node, position)) { return undefined; @@ -45138,7 +46106,7 @@ var ts; // // This is because a Missing node has no width. However, what we actually want is to include trivia // leading up to the next token in case the user is about to type in a TemplateMiddle or TemplateTail. - if (template.kind === 188 /* TemplateExpression */) { + if (template.kind === 189 /* TemplateExpression */) { var lastSpan = ts.lastOrUndefined(template.templateSpans); if (lastSpan.literal.getFullWidth() === 0) { applicableSpanEnd = ts.skipTrivia(sourceFile.text, applicableSpanEnd, /*stopAfterLineBreak*/ false); @@ -45147,7 +46115,7 @@ var ts; return ts.createTextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); } function getContainingArgumentInfo(node) { - for (var n = node; n.kind !== 255 /* SourceFile */; n = n.parent) { + for (var n = node; n.kind !== 256 /* SourceFile */; n = n.parent) { if (ts.isFunctionBlock(n)) { return undefined; } @@ -45322,40 +46290,40 @@ var ts; return false; } switch (n.kind) { - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 170 /* ObjectLiteralExpression */: - case 166 /* ObjectBindingPattern */: - case 158 /* TypeLiteral */: - case 198 /* Block */: - case 225 /* ModuleBlock */: - case 226 /* CaseBlock */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 171 /* ObjectLiteralExpression */: + case 167 /* ObjectBindingPattern */: + case 159 /* TypeLiteral */: + case 199 /* Block */: + case 226 /* ModuleBlock */: + case 227 /* CaseBlock */: return nodeEndsWith(n, 16 /* CloseBraceToken */, sourceFile); - case 251 /* CatchClause */: + case 252 /* CatchClause */: return isCompletedNode(n.block, sourceFile); - case 174 /* NewExpression */: + case 175 /* NewExpression */: if (!n.arguments) { return true; } // fall through - case 173 /* CallExpression */: - case 177 /* ParenthesizedExpression */: - case 163 /* ParenthesizedType */: + case 174 /* CallExpression */: + case 178 /* ParenthesizedExpression */: + case 164 /* ParenthesizedType */: return nodeEndsWith(n, 18 /* CloseParenToken */, sourceFile); - case 155 /* FunctionType */: - case 156 /* ConstructorType */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: return isCompletedNode(n.type, sourceFile); - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 151 /* ConstructSignature */: - case 150 /* CallSignature */: - case 179 /* ArrowFunction */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 152 /* ConstructSignature */: + case 151 /* CallSignature */: + case 180 /* ArrowFunction */: if (n.body) { return isCompletedNode(n.body, sourceFile); } @@ -45365,64 +46333,64 @@ var ts; // Even though type parameters can be unclosed, we can get away with // having at least a closing paren. return hasChildOfKind(n, 18 /* CloseParenToken */, sourceFile); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: return n.body && isCompletedNode(n.body, sourceFile); - case 202 /* IfStatement */: + case 203 /* IfStatement */: if (n.elseStatement) { return isCompletedNode(n.elseStatement, sourceFile); } return isCompletedNode(n.thenStatement, sourceFile); - case 201 /* ExpressionStatement */: + case 202 /* ExpressionStatement */: return isCompletedNode(n.expression, sourceFile) || hasChildOfKind(n, 23 /* SemicolonToken */); - case 169 /* ArrayLiteralExpression */: - case 167 /* ArrayBindingPattern */: - case 172 /* ElementAccessExpression */: - case 139 /* ComputedPropertyName */: - case 160 /* TupleType */: + case 170 /* ArrayLiteralExpression */: + case 168 /* ArrayBindingPattern */: + case 173 /* ElementAccessExpression */: + case 140 /* ComputedPropertyName */: + case 161 /* TupleType */: return nodeEndsWith(n, 20 /* CloseBracketToken */, sourceFile); - case 152 /* IndexSignature */: + case 153 /* IndexSignature */: if (n.type) { return isCompletedNode(n.type, sourceFile); } return hasChildOfKind(n, 20 /* CloseBracketToken */, sourceFile); - case 248 /* CaseClause */: - case 249 /* DefaultClause */: + case 249 /* CaseClause */: + case 250 /* DefaultClause */: // there is no such thing as terminator token for CaseClause/DefaultClause so for simplicity always consider them non-completed return false; - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 204 /* WhileStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 205 /* WhileStatement */: return isCompletedNode(n.statement, sourceFile); - case 203 /* DoStatement */: + case 204 /* DoStatement */: // rough approximation: if DoStatement has While keyword - then if node is completed is checking the presence of ')'; var hasWhileKeyword = findChildOfKind(n, 104 /* WhileKeyword */, sourceFile); if (hasWhileKeyword) { return nodeEndsWith(n, 18 /* CloseParenToken */, sourceFile); } return isCompletedNode(n.statement, sourceFile); - case 157 /* TypeQuery */: + case 158 /* TypeQuery */: return isCompletedNode(n.exprName, sourceFile); - case 181 /* TypeOfExpression */: - case 180 /* DeleteExpression */: - case 182 /* VoidExpression */: - case 189 /* YieldExpression */: - case 190 /* SpreadElementExpression */: + case 182 /* TypeOfExpression */: + case 181 /* DeleteExpression */: + case 183 /* VoidExpression */: + case 190 /* YieldExpression */: + case 191 /* SpreadElementExpression */: var unaryWordExpression = n; return isCompletedNode(unaryWordExpression.expression, sourceFile); - case 175 /* TaggedTemplateExpression */: + case 176 /* TaggedTemplateExpression */: return isCompletedNode(n.template, sourceFile); - case 188 /* TemplateExpression */: + case 189 /* TemplateExpression */: var lastSpan = ts.lastOrUndefined(n.templateSpans); return isCompletedNode(lastSpan, sourceFile); - case 196 /* TemplateSpan */: + case 197 /* TemplateSpan */: return ts.nodeIsPresent(n.literal); - case 184 /* PrefixUnaryExpression */: + case 185 /* PrefixUnaryExpression */: return isCompletedNode(n.operand, sourceFile); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: return isCompletedNode(n.right, sourceFile); - case 187 /* ConditionalExpression */: + case 188 /* ConditionalExpression */: return isCompletedNode(n.whenFalse, sourceFile); default: return true; @@ -45478,7 +46446,7 @@ var ts; // for the position of the relevant node (or comma). var syntaxList = ts.forEach(node.parent.getChildren(), function (c) { // find syntax list that covers the span of the node - if (c.kind === 278 /* SyntaxList */ && c.pos <= node.pos && c.end >= node.end) { + if (c.kind === 279 /* SyntaxList */ && c.pos <= node.pos && c.end >= node.end) { return c; } }); @@ -45584,7 +46552,7 @@ var ts; function findPrecedingToken(position, sourceFile, startNode) { return find(startNode || sourceFile); function findRightmostToken(n) { - if (isToken(n) || n.kind === 243 /* JsxText */) { + if (isToken(n) || n.kind === 244 /* JsxText */) { return n; } var children = n.getChildren(); @@ -45592,7 +46560,7 @@ var ts; return candidate && findRightmostToken(candidate); } function find(n) { - if (isToken(n) || n.kind === 243 /* JsxText */) { + if (isToken(n) || n.kind === 244 /* JsxText */) { return n; } var children = n.getChildren(); @@ -45606,10 +46574,10 @@ var ts; // if no - position is in the node itself so we should recurse in it. // NOTE: JsxText is a weird kind of node that can contain only whitespaces (since they are not counted as trivia). // if this is the case - then we should assume that token in question is located in previous child. - if (position < child.end && (nodeHasTokens(child) || child.kind === 243 /* JsxText */)) { + if (position < child.end && (nodeHasTokens(child) || child.kind === 244 /* JsxText */)) { var start = child.getStart(sourceFile); var lookInPreviousChild = (start >= position) || - (child.kind === 243 /* JsxText */ && start === child.end); // whitespace only JsxText + (child.kind === 244 /* JsxText */ && start === child.end); // whitespace only JsxText if (lookInPreviousChild) { // actual start of the node is past the position - previous token should be at the end of previous child var candidate = findRightmostChildNodeWithTokens(children, /*exclusiveStartPosition*/ i); @@ -45621,7 +46589,7 @@ var ts; } } } - ts.Debug.assert(startNode !== undefined || n.kind === 255 /* SourceFile */); + ts.Debug.assert(startNode !== undefined || n.kind === 256 /* SourceFile */); // Here we know that none of child token nodes embrace the position, // the only known case is when position is at the end of the file. // Try to find the rightmost token in the file without filtering. @@ -45643,20 +46611,54 @@ var ts; ts.findPrecedingToken = findPrecedingToken; function isInString(sourceFile, position) { var token = getTokenAtPosition(sourceFile, position); - return token && (token.kind === 9 /* StringLiteral */ || token.kind === 165 /* StringLiteralType */) && position > token.getStart(); + return token && (token.kind === 9 /* StringLiteral */ || token.kind === 166 /* StringLiteralType */) && position > token.getStart(sourceFile); } ts.isInString = isInString; function isInComment(sourceFile, position) { return isInCommentHelper(sourceFile, position, /*predicate*/ undefined); } ts.isInComment = isInComment; + /** + * returns true if the position is in between the open and close elements of an JSX expression. + */ + function isInsideJsxElementOrAttribute(sourceFile, position) { + var token = getTokenAtPosition(sourceFile, position); + if (!token) { + return false; + } + //
Hello |
+ if (token.kind === 25 /* LessThanToken */ && token.parent.kind === 244 /* JsxText */) { + return true; + } + //
{ |
or
+ if (token.kind === 25 /* LessThanToken */ && token.parent.kind === 248 /* JsxExpression */) { + return true; + } + //
{ + // | + // } < /div> + if (token && token.kind === 16 /* CloseBraceToken */ && token.parent.kind === 248 /* JsxExpression */) { + return true; + } + //
|
+ if (token.kind === 25 /* LessThanToken */ && token.parent.kind === 245 /* JsxClosingElement */) { + return true; + } + return false; + } + ts.isInsideJsxElementOrAttribute = isInsideJsxElementOrAttribute; + function isInTemplateString(sourceFile, position) { + var token = getTokenAtPosition(sourceFile, position); + return ts.isTemplateLiteralKind(token.kind) && position > token.getStart(sourceFile); + } + ts.isInTemplateString = isInTemplateString; /** * Returns true if the cursor at position in sourceFile is within a comment that additionally * satisfies predicate, and false otherwise. */ function isInCommentHelper(sourceFile, position, predicate) { var token = getTokenAtPosition(sourceFile, position); - if (token && position <= token.getStart()) { + if (token && position <= token.getStart(sourceFile)) { var commentRanges = ts.getLeadingCommentRanges(sourceFile.text, token.pos); // The end marker of a single-line comment does not include the newline character. // In the following case, we are inside a comment (^ denotes the cursor position): @@ -45685,7 +46687,7 @@ var ts; return ts.forEach(commentRanges, jsDocPrefix); function jsDocPrefix(c) { var text = sourceFile.text; - return text.length >= c.pos + 3 && text[c.pos] === '/' && text[c.pos + 1] === '*' && text[c.pos + 2] === '*'; + return text.length >= c.pos + 3 && text[c.pos] === "/" && text[c.pos + 1] === "*" && text[c.pos + 2] === "*"; } } ts.hasDocComment = hasDocComment; @@ -45743,21 +46745,21 @@ var ts; result.push(ts.ScriptElementKindModifier.exportedModifier); if (ts.isInAmbientContext(node)) result.push(ts.ScriptElementKindModifier.ambientModifier); - return result.length > 0 ? result.join(',') : ts.ScriptElementKindModifier.none; + return result.length > 0 ? result.join(",") : ts.ScriptElementKindModifier.none; } ts.getNodeModifiers = getNodeModifiers; function getTypeArgumentOrTypeParameterList(node) { - if (node.kind === 154 /* TypeReference */ || node.kind === 173 /* CallExpression */) { + if (node.kind === 155 /* TypeReference */ || node.kind === 174 /* CallExpression */) { return node.typeArguments; } - if (ts.isFunctionLike(node) || node.kind === 220 /* ClassDeclaration */ || node.kind === 221 /* InterfaceDeclaration */) { + if (ts.isFunctionLike(node) || node.kind === 221 /* ClassDeclaration */ || node.kind === 222 /* InterfaceDeclaration */) { return node.typeParameters; } return undefined; } ts.getTypeArgumentOrTypeParameterList = getTypeArgumentOrTypeParameterList; function isToken(n) { - return n.kind >= 0 /* FirstToken */ && n.kind <= 137 /* LastToken */; + return n.kind >= 0 /* FirstToken */ && n.kind <= 138 /* LastToken */; } ts.isToken = isToken; function isWord(kind) { @@ -45773,7 +46775,7 @@ var ts; ts.isComment = isComment; function isStringOrRegularExpressionOrTemplateLiteral(kind) { if (kind === 9 /* StringLiteral */ - || kind === 165 /* StringLiteralType */ + || kind === 166 /* StringLiteralType */ || kind === 10 /* RegularExpressionLiteral */ || ts.isTemplateLiteralKind(kind)) { return true; @@ -45817,18 +46819,18 @@ var ts; } ts.compareDataObjects = compareDataObjects; function isArrayLiteralOrObjectLiteralDestructuringPattern(node) { - if (node.kind === 169 /* ArrayLiteralExpression */ || - node.kind === 170 /* ObjectLiteralExpression */) { + if (node.kind === 170 /* ArrayLiteralExpression */ || + node.kind === 171 /* ObjectLiteralExpression */) { // [a,b,c] from: // [a, b, c] = someExpression; - if (node.parent.kind === 186 /* BinaryExpression */ && + if (node.parent.kind === 187 /* BinaryExpression */ && node.parent.left === node && node.parent.operatorToken.kind === 56 /* EqualsToken */) { return true; } // [a, b, c] from: // for([a, b, c] of expression) - if (node.parent.kind === 207 /* ForOfStatement */ && + if (node.parent.kind === 208 /* ForOfStatement */ && node.parent.initializer === node) { return true; } @@ -45836,7 +46838,7 @@ var ts; // [x, [a, b, c] ] = someExpression // or // {x, a: {a, b, c} } = someExpression - if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 252 /* PropertyAssignment */ ? node.parent.parent : node.parent)) { + if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 253 /* PropertyAssignment */ ? node.parent.parent : node.parent)) { return true; } } @@ -45849,7 +46851,7 @@ var ts; var ts; (function (ts) { function isFirstDeclarationOfSymbolParameter(symbol) { - return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 141 /* Parameter */; + return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === 142 /* Parameter */; } ts.isFirstDeclarationOfSymbolParameter = isFirstDeclarationOfSymbolParameter; var displayPartWriter = getDisplayPartWriter(); @@ -46028,6 +47030,10 @@ var ts; if (isImportOrExportSpecifierName(location)) { return location.getText(); } + else if (ts.isStringOrNumericLiteral(location.kind) && + location.parent.kind === 140 /* ComputedPropertyName */) { + return location.text; + } // Try to get the local symbol if we're dealing with an 'export default' // since that symbol has the "true" name. var localExportDefaultSymbol = ts.getLocalSymbolForExportDefault(symbol); @@ -46037,7 +47043,7 @@ var ts; ts.getDeclaredName = getDeclaredName; function isImportOrExportSpecifierName(location) { return location.parent && - (location.parent.kind === 233 /* ImportSpecifier */ || location.parent.kind === 237 /* ExportSpecifier */) && + (location.parent.kind === 234 /* ImportSpecifier */ || location.parent.kind === 238 /* ExportSpecifier */) && location.parent.propertyName === location; } ts.isImportOrExportSpecifierName = isImportOrExportSpecifierName; @@ -46067,12 +47073,15 @@ var ts; } ts.scriptKindIs = scriptKindIs; function getScriptKind(fileName, host) { - // First check to see if the script kind can be determined from the file name - var scriptKind = ts.getScriptKindFromFileName(fileName); - if (scriptKind === 0 /* Unknown */ && host && host.getScriptKind) { - // Next check to see if the host can resolve the script kind + // First check to see if the script kind was specified by the host. Chances are the host + // may override the default script kind for the file extension. + var scriptKind; + if (host && host.getScriptKind) { scriptKind = host.getScriptKind(fileName); } + if (!scriptKind || scriptKind === 0 /* Unknown */) { + scriptKind = ts.getScriptKindFromFileName(fileName); + } return ts.ensureScriptKind(fileName, scriptKind); } ts.getScriptKind = getScriptKind; @@ -46367,10 +47376,10 @@ var ts; function shouldRescanJsxIdentifier(node) { if (node.parent) { switch (node.parent.kind) { - case 245 /* JsxAttribute */: - case 242 /* JsxOpeningElement */: - case 244 /* JsxClosingElement */: - case 241 /* JsxSelfClosingElement */: + case 246 /* JsxAttribute */: + case 243 /* JsxOpeningElement */: + case 245 /* JsxClosingElement */: + case 242 /* JsxSelfClosingElement */: return node.kind === 69 /* Identifier */; } } @@ -46829,7 +47838,7 @@ var ts; this.SpaceAfterTryFinally = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([100 /* TryKeyword */, 85 /* FinallyKeyword */]), 15 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); // get x() {} // set x(val) {} - this.SpaceAfterGetSetInMember = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([123 /* GetKeyword */, 130 /* SetKeyword */]), 69 /* Identifier */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2 /* Space */)); + this.SpaceAfterGetSetInMember = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([123 /* GetKeyword */, 131 /* SetKeyword */]), 69 /* Identifier */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclContext), 2 /* Space */)); // Special case for binary operators (that are keywords). For these we have to add a space and shouldn't follow any user options. this.SpaceBeforeBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.BinaryKeywordOperators), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); this.SpaceAfterBinaryKeywordOperator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.BinaryKeywordOperators, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsBinaryOpContext), 2 /* Space */)); @@ -46837,9 +47846,9 @@ var ts; // Treat constructor as an identifier in a function declaration, and remove spaces between constructor and following left parentheses this.NoSpaceAfterConstructor = new formatting.Rule(formatting.RuleDescriptor.create1(121 /* ConstructorKeyword */, 17 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); // Use of module as a function call. e.g.: import m2 = module("m2"); - this.NoSpaceAfterModuleImport = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([125 /* ModuleKeyword */, 128 /* RequireKeyword */]), 17 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); + this.NoSpaceAfterModuleImport = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.FromTokens([125 /* ModuleKeyword */, 129 /* RequireKeyword */]), 17 /* OpenParenToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); // Add a space around certain TypeScript keywords - this.SpaceAfterCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([115 /* AbstractKeyword */, 73 /* ClassKeyword */, 122 /* DeclareKeyword */, 77 /* DefaultKeyword */, 81 /* EnumKeyword */, 82 /* ExportKeyword */, 83 /* ExtendsKeyword */, 123 /* GetKeyword */, 106 /* ImplementsKeyword */, 89 /* ImportKeyword */, 107 /* InterfaceKeyword */, 125 /* ModuleKeyword */, 126 /* NamespaceKeyword */, 110 /* PrivateKeyword */, 112 /* PublicKeyword */, 111 /* ProtectedKeyword */, 130 /* SetKeyword */, 113 /* StaticKeyword */, 133 /* TypeKeyword */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); + this.SpaceAfterCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.FromTokens([115 /* AbstractKeyword */, 73 /* ClassKeyword */, 122 /* DeclareKeyword */, 77 /* DefaultKeyword */, 81 /* EnumKeyword */, 82 /* ExportKeyword */, 83 /* ExtendsKeyword */, 123 /* GetKeyword */, 106 /* ImplementsKeyword */, 89 /* ImportKeyword */, 107 /* InterfaceKeyword */, 125 /* ModuleKeyword */, 126 /* NamespaceKeyword */, 110 /* PrivateKeyword */, 112 /* PublicKeyword */, 111 /* ProtectedKeyword */, 131 /* SetKeyword */, 113 /* StaticKeyword */, 134 /* TypeKeyword */]), formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); this.SpaceBeforeCertainTypeScriptKeywords = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([83 /* ExtendsKeyword */, 106 /* ImplementsKeyword */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); // Treat string literals in module names as identifiers, and add a space between the literal and the opening Brace braces, e.g.: module "m2" { this.SpaceAfterModuleName = new formatting.Rule(formatting.RuleDescriptor.create1(9 /* StringLiteral */, 15 /* OpenBraceToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsModuleDeclContext), 2 /* Space */)); @@ -46861,7 +47870,7 @@ var ts; // decorators this.SpaceBeforeAt = new formatting.Rule(formatting.RuleDescriptor.create2(formatting.Shared.TokenRange.Any, 55 /* AtToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 2 /* Space */)); this.NoSpaceAfterAt = new formatting.Rule(formatting.RuleDescriptor.create3(55 /* AtToken */, formatting.Shared.TokenRange.Any), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext), 8 /* Delete */)); - this.SpaceAfterDecorator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([115 /* AbstractKeyword */, 69 /* Identifier */, 82 /* ExportKeyword */, 77 /* DefaultKeyword */, 73 /* ClassKeyword */, 113 /* StaticKeyword */, 112 /* PublicKeyword */, 110 /* PrivateKeyword */, 111 /* ProtectedKeyword */, 123 /* GetKeyword */, 130 /* SetKeyword */, 19 /* OpenBracketToken */, 37 /* AsteriskToken */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsEndOfDecoratorContextOnSameLine), 2 /* Space */)); + this.SpaceAfterDecorator = new formatting.Rule(formatting.RuleDescriptor.create4(formatting.Shared.TokenRange.Any, formatting.Shared.TokenRange.FromTokens([115 /* AbstractKeyword */, 69 /* Identifier */, 82 /* ExportKeyword */, 77 /* DefaultKeyword */, 73 /* ClassKeyword */, 113 /* StaticKeyword */, 112 /* PublicKeyword */, 110 /* PrivateKeyword */, 111 /* ProtectedKeyword */, 123 /* GetKeyword */, 131 /* SetKeyword */, 19 /* OpenBracketToken */, 37 /* AsteriskToken */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsEndOfDecoratorContextOnSameLine), 2 /* Space */)); this.NoSpaceBetweenFunctionKeywordAndStar = new formatting.Rule(formatting.RuleDescriptor.create1(87 /* FunctionKeyword */, 37 /* AsteriskToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclarationOrFunctionExpressionContext), 8 /* Delete */)); this.SpaceAfterStarInGeneratorDeclaration = new formatting.Rule(formatting.RuleDescriptor.create3(37 /* AsteriskToken */, formatting.Shared.TokenRange.FromTokens([69 /* Identifier */, 17 /* OpenParenToken */])), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsFunctionDeclarationOrFunctionExpressionContext), 2 /* Space */)); this.NoSpaceBetweenYieldKeywordAndStar = new formatting.Rule(formatting.RuleDescriptor.create1(114 /* YieldKeyword */, 37 /* AsteriskToken */), formatting.RuleOperation.create2(new formatting.RuleOperationContext(Rules.IsNonJsxSameLineTokenContext, Rules.IsYieldOrYieldStarWithOperand), 8 /* Delete */)); @@ -46985,40 +47994,40 @@ var ts; /// Contexts /// Rules.IsForContext = function (context) { - return context.contextNode.kind === 205 /* ForStatement */; + return context.contextNode.kind === 206 /* ForStatement */; }; Rules.IsNotForContext = function (context) { return !Rules.IsForContext(context); }; Rules.IsBinaryOpContext = function (context) { switch (context.contextNode.kind) { - case 186 /* BinaryExpression */: - case 187 /* ConditionalExpression */: - case 194 /* AsExpression */: - case 153 /* TypePredicate */: - case 161 /* UnionType */: - case 162 /* IntersectionType */: + case 187 /* BinaryExpression */: + case 188 /* ConditionalExpression */: + case 195 /* AsExpression */: + case 154 /* TypePredicate */: + case 162 /* UnionType */: + case 163 /* IntersectionType */: return true; // equals in binding elements: function foo([[x, y] = [1, 2]]) - case 168 /* BindingElement */: + case 169 /* BindingElement */: // equals in type X = ... - case 222 /* TypeAliasDeclaration */: + case 223 /* TypeAliasDeclaration */: // equal in import a = module('a'); - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: // equal in let a = 0; - case 217 /* VariableDeclaration */: + case 218 /* VariableDeclaration */: // equal in p = 0; - case 141 /* Parameter */: - case 254 /* EnumMember */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 142 /* Parameter */: + case 255 /* EnumMember */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return context.currentTokenSpan.kind === 56 /* EqualsToken */ || context.nextTokenSpan.kind === 56 /* EqualsToken */; // "in" keyword in for (let x in []) { } - case 206 /* ForInStatement */: + case 207 /* ForInStatement */: return context.currentTokenSpan.kind === 90 /* InKeyword */ || context.nextTokenSpan.kind === 90 /* InKeyword */; // Technically, "of" is not a binary operator, but format it the same way as "in" - case 207 /* ForOfStatement */: - return context.currentTokenSpan.kind === 137 /* OfKeyword */ || context.nextTokenSpan.kind === 137 /* OfKeyword */; + case 208 /* ForOfStatement */: + return context.currentTokenSpan.kind === 138 /* OfKeyword */ || context.nextTokenSpan.kind === 138 /* OfKeyword */; } return false; }; @@ -47026,7 +48035,7 @@ var ts; return !Rules.IsBinaryOpContext(context); }; Rules.IsConditionalOperatorContext = function (context) { - return context.contextNode.kind === 187 /* ConditionalExpression */; + return context.contextNode.kind === 188 /* ConditionalExpression */; }; Rules.IsSameLineTokenOrBeforeMultilineBlockContext = function (context) { //// This check is mainly used inside SpaceBeforeOpenBraceInControl and SpaceBeforeOpenBraceInFunction. @@ -47070,93 +48079,93 @@ var ts; return true; } switch (node.kind) { - case 198 /* Block */: - case 226 /* CaseBlock */: - case 170 /* ObjectLiteralExpression */: - case 225 /* ModuleBlock */: + case 199 /* Block */: + case 227 /* CaseBlock */: + case 171 /* ObjectLiteralExpression */: + case 226 /* ModuleBlock */: return true; } return false; }; Rules.IsFunctionDeclContext = function (context) { switch (context.contextNode.kind) { - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: //case SyntaxKind.MemberFunctionDeclaration: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: ///case SyntaxKind.MethodSignature: - case 150 /* CallSignature */: - case 178 /* FunctionExpression */: - case 147 /* Constructor */: - case 179 /* ArrowFunction */: + case 151 /* CallSignature */: + case 179 /* FunctionExpression */: + case 148 /* Constructor */: + case 180 /* ArrowFunction */: //case SyntaxKind.ConstructorDeclaration: //case SyntaxKind.SimpleArrowFunctionExpression: //case SyntaxKind.ParenthesizedArrowFunctionExpression: - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: return true; } return false; }; Rules.IsFunctionDeclarationOrFunctionExpressionContext = function (context) { - return context.contextNode.kind === 219 /* FunctionDeclaration */ || context.contextNode.kind === 178 /* FunctionExpression */; + return context.contextNode.kind === 220 /* FunctionDeclaration */ || context.contextNode.kind === 179 /* FunctionExpression */; }; Rules.IsTypeScriptDeclWithBlockContext = function (context) { return Rules.NodeIsTypeScriptDeclWithBlockContext(context.contextNode); }; Rules.NodeIsTypeScriptDeclWithBlockContext = function (node) { switch (node.kind) { - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 158 /* TypeLiteral */: - case 224 /* ModuleDeclaration */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 159 /* TypeLiteral */: + case 225 /* ModuleDeclaration */: return true; } return false; }; Rules.IsAfterCodeBlockContext = function (context) { switch (context.currentTokenParent.kind) { - case 220 /* ClassDeclaration */: - case 224 /* ModuleDeclaration */: - case 223 /* EnumDeclaration */: - case 198 /* Block */: - case 251 /* CatchClause */: - case 225 /* ModuleBlock */: - case 212 /* SwitchStatement */: + case 221 /* ClassDeclaration */: + case 225 /* ModuleDeclaration */: + case 224 /* EnumDeclaration */: + case 199 /* Block */: + case 252 /* CatchClause */: + case 226 /* ModuleBlock */: + case 213 /* SwitchStatement */: return true; } return false; }; Rules.IsControlDeclContext = function (context) { switch (context.contextNode.kind) { - case 202 /* IfStatement */: - case 212 /* SwitchStatement */: - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 204 /* WhileStatement */: - case 215 /* TryStatement */: - case 203 /* DoStatement */: - case 211 /* WithStatement */: + case 203 /* IfStatement */: + case 213 /* SwitchStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 205 /* WhileStatement */: + case 216 /* TryStatement */: + case 204 /* DoStatement */: + case 212 /* WithStatement */: // TODO // case SyntaxKind.ElseClause: - case 251 /* CatchClause */: + case 252 /* CatchClause */: return true; default: return false; } }; Rules.IsObjectContext = function (context) { - return context.contextNode.kind === 170 /* ObjectLiteralExpression */; + return context.contextNode.kind === 171 /* ObjectLiteralExpression */; }; Rules.IsFunctionCallContext = function (context) { - return context.contextNode.kind === 173 /* CallExpression */; + return context.contextNode.kind === 174 /* CallExpression */; }; Rules.IsNewContext = function (context) { - return context.contextNode.kind === 174 /* NewExpression */; + return context.contextNode.kind === 175 /* NewExpression */; }; Rules.IsFunctionCallOrNewContext = function (context) { return Rules.IsFunctionCallContext(context) || Rules.IsNewContext(context); @@ -47168,10 +48177,10 @@ var ts; return context.nextTokenSpan.kind !== 20 /* CloseBracketToken */; }; Rules.IsArrowFunctionContext = function (context) { - return context.contextNode.kind === 179 /* ArrowFunction */; + return context.contextNode.kind === 180 /* ArrowFunction */; }; Rules.IsNonJsxSameLineTokenContext = function (context) { - return context.TokensAreOnSameLine() && context.contextNode.kind !== 243 /* JsxText */; + return context.TokensAreOnSameLine() && context.contextNode.kind !== 244 /* JsxText */; }; Rules.IsNotBeforeBlockInFunctionDeclarationContext = function (context) { return !Rules.IsFunctionDeclContext(context) && !Rules.IsBeforeBlockContext(context); @@ -47186,41 +48195,41 @@ var ts; while (ts.isExpression(node)) { node = node.parent; } - return node.kind === 142 /* Decorator */; + return node.kind === 143 /* Decorator */; }; Rules.IsStartOfVariableDeclarationList = function (context) { - return context.currentTokenParent.kind === 218 /* VariableDeclarationList */ && + return context.currentTokenParent.kind === 219 /* VariableDeclarationList */ && context.currentTokenParent.getStart(context.sourceFile) === context.currentTokenSpan.pos; }; Rules.IsNotFormatOnEnter = function (context) { return context.formattingRequestKind !== 2 /* FormatOnEnter */; }; Rules.IsModuleDeclContext = function (context) { - return context.contextNode.kind === 224 /* ModuleDeclaration */; + return context.contextNode.kind === 225 /* ModuleDeclaration */; }; Rules.IsObjectTypeContext = function (context) { - return context.contextNode.kind === 158 /* TypeLiteral */; // && context.contextNode.parent.kind !== SyntaxKind.InterfaceDeclaration; + return context.contextNode.kind === 159 /* TypeLiteral */; // && context.contextNode.parent.kind !== SyntaxKind.InterfaceDeclaration; }; Rules.IsTypeArgumentOrParameterOrAssertion = function (token, parent) { if (token.kind !== 25 /* LessThanToken */ && token.kind !== 27 /* GreaterThanToken */) { return false; } switch (parent.kind) { - case 154 /* TypeReference */: - case 176 /* TypeAssertionExpression */: - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 221 /* InterfaceDeclaration */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 193 /* ExpressionWithTypeArguments */: + case 155 /* TypeReference */: + case 177 /* TypeAssertionExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: + case 194 /* ExpressionWithTypeArguments */: return true; default: return false; @@ -47231,13 +48240,13 @@ var ts; Rules.IsTypeArgumentOrParameterOrAssertion(context.nextTokenSpan, context.nextTokenParent); }; Rules.IsTypeAssertionContext = function (context) { - return context.contextNode.kind === 176 /* TypeAssertionExpression */; + return context.contextNode.kind === 177 /* TypeAssertionExpression */; }; Rules.IsVoidOpContext = function (context) { - return context.currentTokenSpan.kind === 103 /* VoidKeyword */ && context.currentTokenParent.kind === 182 /* VoidExpression */; + return context.currentTokenSpan.kind === 103 /* VoidKeyword */ && context.currentTokenParent.kind === 183 /* VoidExpression */; }; Rules.IsYieldOrYieldStarWithOperand = function (context) { - return context.contextNode.kind === 189 /* YieldExpression */ && context.contextNode.expression !== undefined; + return context.contextNode.kind === 190 /* YieldExpression */ && context.contextNode.expression !== undefined; }; return Rules; }()); @@ -47261,7 +48270,7 @@ var ts; return result; }; RulesMap.prototype.Initialize = function (rules) { - this.mapRowLength = 137 /* LastToken */ + 1; + this.mapRowLength = 138 /* LastToken */ + 1; this.map = new Array(this.mapRowLength * this.mapRowLength); //new Array(this.mapRowLength * this.mapRowLength); // This array is used only during construction of the rulesbucket in the map var rulesBucketConstructionStateList = new Array(this.map.length); //new Array(this.map.length); @@ -47456,7 +48465,7 @@ var ts; } TokenAllAccess.prototype.GetTokens = function () { var result = []; - for (var token = 0 /* FirstToken */; token <= 137 /* LastToken */; token++) { + for (var token = 0 /* FirstToken */; token <= 138 /* LastToken */; token++) { result.push(token); } return result; @@ -47498,9 +48507,9 @@ var ts; }; TokenRange.Any = TokenRange.AllTokens(); TokenRange.AnyIncludingMultilineComments = TokenRange.FromTokens(TokenRange.Any.GetTokens().concat([3 /* MultiLineCommentTrivia */])); - TokenRange.Keywords = TokenRange.FromRange(70 /* FirstKeyword */, 137 /* LastKeyword */); + TokenRange.Keywords = TokenRange.FromRange(70 /* FirstKeyword */, 138 /* LastKeyword */); TokenRange.BinaryOperators = TokenRange.FromRange(25 /* FirstBinaryOperator */, 68 /* LastBinaryOperator */); - TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([90 /* InKeyword */, 91 /* InstanceOfKeyword */, 137 /* OfKeyword */, 116 /* AsKeyword */, 124 /* IsKeyword */]); + TokenRange.BinaryKeywordOperators = TokenRange.FromTokens([90 /* InKeyword */, 91 /* InstanceOfKeyword */, 138 /* OfKeyword */, 116 /* AsKeyword */, 124 /* IsKeyword */]); TokenRange.UnaryPrefixOperators = TokenRange.FromTokens([41 /* PlusPlusToken */, 42 /* MinusMinusToken */, 50 /* TildeToken */, 49 /* ExclamationToken */]); TokenRange.UnaryPrefixExpressions = TokenRange.FromTokens([8 /* NumericLiteral */, 69 /* Identifier */, 17 /* OpenParenToken */, 19 /* OpenBracketToken */, 15 /* OpenBraceToken */, 97 /* ThisKeyword */, 92 /* NewKeyword */]); TokenRange.UnaryPreincrementExpressions = TokenRange.FromTokens([69 /* Identifier */, 17 /* OpenParenToken */, 97 /* ThisKeyword */, 92 /* NewKeyword */]); @@ -47508,7 +48517,7 @@ var ts; TokenRange.UnaryPredecrementExpressions = TokenRange.FromTokens([69 /* Identifier */, 17 /* OpenParenToken */, 97 /* ThisKeyword */, 92 /* NewKeyword */]); TokenRange.UnaryPostdecrementExpressions = TokenRange.FromTokens([69 /* Identifier */, 18 /* CloseParenToken */, 20 /* CloseBracketToken */, 92 /* NewKeyword */]); TokenRange.Comments = TokenRange.FromTokens([2 /* SingleLineCommentTrivia */, 3 /* MultiLineCommentTrivia */]); - TokenRange.TypeNames = TokenRange.FromTokens([69 /* Identifier */, 129 /* NumberKeyword */, 131 /* StringKeyword */, 120 /* BooleanKeyword */, 132 /* SymbolKeyword */, 103 /* VoidKeyword */, 117 /* AnyKeyword */]); + TokenRange.TypeNames = TokenRange.FromTokens([69 /* Identifier */, 130 /* NumberKeyword */, 132 /* StringKeyword */, 120 /* BooleanKeyword */, 133 /* SymbolKeyword */, 103 /* VoidKeyword */, 117 /* AnyKeyword */]); return TokenRange; }()); Shared.TokenRange = TokenRange; @@ -47707,9 +48716,9 @@ var ts; } function findOutermostParent(position, expectedTokenKind, sourceFile) { var precedingToken = ts.findPrecedingToken(position, sourceFile); - // when it is claimed that trigger character was typed at given position + // when it is claimed that trigger character was typed at given position // we verify that there is a token with a matching kind whose end is equal to position (because the character was just typed). - // If this condition is not hold - then trigger character was typed in some other context, + // If this condition is not hold - then trigger character was typed in some other context, // i.e.in comment and thus should not trigger autoformatting if (!precedingToken || precedingToken.kind !== expectedTokenKind || @@ -47718,12 +48727,12 @@ var ts; } // walk up and search for the parent node that ends at the same position with precedingToken. // for cases like this - // + // // let x = 1; // while (true) { - // } + // } // after typing close curly in while statement we want to reformat just the while statement. - // However if we just walk upwards searching for the parent that has the same end value - + // However if we just walk upwards searching for the parent that has the same end value - // we'll end up with the whole source file. isListElement allows to stop on the list element level var current = precedingToken; while (current && @@ -47738,17 +48747,17 @@ var ts; // i.e. parent is class declaration with the list of members and node is one of members. function isListElement(parent, node) { switch (parent.kind) { - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: return ts.rangeContainsRange(parent.members, node); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: var body = parent.body; - return body && body.kind === 198 /* Block */ && ts.rangeContainsRange(body.statements, node); - case 255 /* SourceFile */: - case 198 /* Block */: - case 225 /* ModuleBlock */: + return body && body.kind === 199 /* Block */ && ts.rangeContainsRange(body.statements, node); + case 256 /* SourceFile */: + case 199 /* Block */: + case 226 /* ModuleBlock */: return ts.rangeContainsRange(parent.statements, node); - case 251 /* CatchClause */: + case 252 /* CatchClause */: return ts.rangeContainsRange(parent.block.statements, node); } return false; @@ -47788,7 +48797,7 @@ var ts; // 'index' tracks the index of the most recent error that was checked. while (true) { if (index >= sorted.length) { - // all errors in the range were already checked -> no error in specified range + // all errors in the range were already checked -> no error in specified range return false; } var error = sorted[index]; @@ -47950,19 +48959,19 @@ var ts; return node.modifiers[0].kind; } switch (node.kind) { - case 220 /* ClassDeclaration */: return 73 /* ClassKeyword */; - case 221 /* InterfaceDeclaration */: return 107 /* InterfaceKeyword */; - case 219 /* FunctionDeclaration */: return 87 /* FunctionKeyword */; - case 223 /* EnumDeclaration */: return 223 /* EnumDeclaration */; - case 148 /* GetAccessor */: return 123 /* GetKeyword */; - case 149 /* SetAccessor */: return 130 /* SetKeyword */; - case 146 /* MethodDeclaration */: + case 221 /* ClassDeclaration */: return 73 /* ClassKeyword */; + case 222 /* InterfaceDeclaration */: return 107 /* InterfaceKeyword */; + case 220 /* FunctionDeclaration */: return 87 /* FunctionKeyword */; + case 224 /* EnumDeclaration */: return 224 /* EnumDeclaration */; + case 149 /* GetAccessor */: return 123 /* GetKeyword */; + case 150 /* SetAccessor */: return 131 /* SetKeyword */; + case 147 /* MethodDeclaration */: if (node.asteriskToken) { return 37 /* AsteriskToken */; } // fall-through - case 144 /* PropertyDeclaration */: - case 141 /* Parameter */: + case 145 /* PropertyDeclaration */: + case 142 /* Parameter */: return node.name.kind; } } @@ -48037,12 +49046,12 @@ var ts; // a useful observations when tracking context node // / // [a] - // / | \ + // / | \ // [b] [c] [d] - // node 'a' is a context node for nodes 'b', 'c', 'd' + // node 'a' is a context node for nodes 'b', 'c', 'd' // except for the leftmost leaf token in [b] - in this case context node ('e') is located somewhere above 'a' // this rule can be applied recursively to child nodes of 'a'. - // + // // context node is set to parent node value after processing every child node // context node is set to parent of the token after processing every token var childContextNode = contextNode; @@ -48061,7 +49070,7 @@ var ts; } consumeTokenAndAdvanceScanner(tokenInfo, node, nodeDynamicIndentation); } - function processChildNode(child, inheritedIndentation, parent, parentDynamicIndentation, parentStartLine, undecoratedParentStartLine, isListItem) { + function processChildNode(child, inheritedIndentation, parent, parentDynamicIndentation, parentStartLine, undecoratedParentStartLine, isListItem, isFirstListItem) { var childStartPos = child.getStart(sourceFile); var childStartLine = sourceFile.getLineAndCharacterOfPosition(childStartPos).line; var undecoratedChildStartLine = childStartLine; @@ -48102,10 +49111,13 @@ var ts; consumeTokenAndAdvanceScanner(tokenInfo, node, parentDynamicIndentation, child); return inheritedIndentation; } - var effectiveParentStartLine = child.kind === 142 /* Decorator */ ? childStartLine : undecoratedParentStartLine; + var effectiveParentStartLine = child.kind === 143 /* Decorator */ ? childStartLine : undecoratedParentStartLine; var childIndentation = computeIndentation(child, childStartLine, childIndentationAmount, node, parentDynamicIndentation, effectiveParentStartLine); processNode(child, childContextNode, childStartLine, undecoratedChildStartLine, childIndentation.indentation, childIndentation.delta); childContextNode = node; + if (isFirstListItem && parent.kind === 170 /* ArrayLiteralExpression */ && inheritedIndentation === -1 /* Unknown */) { + inheritedIndentation = childIndentation.indentation; + } return inheritedIndentation; } function processChildNodes(nodes, parent, parentStartLine, parentDynamicIndentation) { @@ -48135,16 +49147,16 @@ var ts; } } var inheritedIndentation = -1 /* Unknown */; - for (var _i = 0, nodes_7 = nodes; _i < nodes_7.length; _i++) { - var child = nodes_7[_i]; - inheritedIndentation = processChildNode(child, inheritedIndentation, node, listDynamicIndentation, startLine, startLine, /*isListElement*/ true); + for (var i = 0; i < nodes.length; i++) { + var child = nodes[i]; + inheritedIndentation = processChildNode(child, inheritedIndentation, node, listDynamicIndentation, startLine, startLine, /*isListElement*/ true, /*isFirstListItem*/ i === 0); } if (listEndToken !== 0 /* Unknown */) { if (formattingScanner.isOnToken()) { var tokenInfo = formattingScanner.readTokenInfo(parent); // consume the list end token only if it is still belong to the parent // there might be the case when current token matches end token but does not considered as one - // function (x: function) <-- + // function (x: function) <-- // without this check close paren will be interpreted as list end token for function expression which is wrong if (tokenInfo.token.kind === listEndToken && ts.rangeContainsRange(parent, tokenInfo.token)) { // consume list end token @@ -48190,24 +49202,24 @@ var ts; var tokenIndentation = (isTokenInRange && !rangeContainsError(currentTokenInfo.token)) ? dynamicIndentation.getIndentationForToken(tokenStart.line, currentTokenInfo.token.kind, container) : -1 /* Unknown */; + var indentNextTokenOrTrivia = true; if (currentTokenInfo.leadingTrivia) { var commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind, tokenIndentation, container); - var indentNextTokenOrTrivia = true; for (var _i = 0, _a = currentTokenInfo.leadingTrivia; _i < _a.length; _i++) { var triviaItem = _a[_i]; - if (!ts.rangeContainsRange(originalRange, triviaItem)) { - continue; - } + var triviaInRange = ts.rangeContainsRange(originalRange, triviaItem); switch (triviaItem.kind) { case 3 /* MultiLineCommentTrivia */: - indentMultilineComment(triviaItem, commentIndentation, /*firstLineIsIndented*/ !indentNextTokenOrTrivia); + if (triviaInRange) { + indentMultilineComment(triviaItem, commentIndentation, /*firstLineIsIndented*/ !indentNextTokenOrTrivia); + } indentNextTokenOrTrivia = false; break; case 2 /* SingleLineCommentTrivia */: - if (indentNextTokenOrTrivia) { + if (indentNextTokenOrTrivia && triviaInRange) { insertIndentation(triviaItem.pos, commentIndentation, /*lineAdded*/ false); - indentNextTokenOrTrivia = false; } + indentNextTokenOrTrivia = false; break; case 4 /* NewLineTrivia */: indentNextTokenOrTrivia = true; @@ -48216,7 +49228,7 @@ var ts; } } // indent token only if is it is in target range and does not overlap with any error ranges - if (tokenIndentation !== -1 /* Unknown */) { + if (tokenIndentation !== -1 /* Unknown */ && indentNextTokenOrTrivia) { insertIndentation(currentTokenInfo.token.pos, tokenIndentation, lineAdded); lastIndentedLine = tokenStart.line; indentationOnLastIndentedLine = tokenIndentation; @@ -48264,7 +49276,7 @@ var ts; applyRuleEdits(rule, previousItem, previousStartLine, currentItem, currentStartLine); if (rule.Operation.Action & (2 /* Space */ | 8 /* Delete */) && currentStartLine !== previousStartLine) { lineAdded = false; - // Handle the case where the next line is moved to be the end of this line. + // Handle the case where the next line is moved to be the end of this line. // In this case we don't indent the next line in the next pass. if (currentParent.getStart(sourceFile) === currentItem.pos) { dynamicIndentation.recomputeIndentation(/*lineAdded*/ false); @@ -48272,7 +49284,7 @@ var ts; } else if (rule.Operation.Action & 4 /* NewLine */ && currentStartLine === previousStartLine) { lineAdded = true; - // Handle the case where token2 is moved to the new line. + // Handle the case where token2 is moved to the new line. // In this case we indent token2 in the next pass but we set // sameLineIndent flag to notify the indenter that the indentation is within the line. if (currentParent.getStart(sourceFile) === currentItem.pos) { @@ -48300,12 +49312,15 @@ var ts; } else { var tokenStart = sourceFile.getLineAndCharacterOfPosition(pos); - if (indentation !== tokenStart.character) { - var startLinePosition = ts.getStartPositionOfLine(tokenStart.line, sourceFile); + var startLinePosition = ts.getStartPositionOfLine(tokenStart.line, sourceFile); + if (indentation !== tokenStart.character || indentationIsDifferent(indentationString, startLinePosition)) { recordReplace(startLinePosition, tokenStart.character, indentationString); } } } + function indentationIsDifferent(indentationString, startLinePosition) { + return indentationString !== sourceFile.text.substr(startLinePosition, indentationString.length); + } function indentMultilineComment(commentRange, indentation, firstLineIsIndented) { // split comment in lines var startLine = sourceFile.getLineAndCharacterOfPosition(commentRange.pos).line; @@ -48446,20 +49461,20 @@ var ts; } function isSomeBlock(kind) { switch (kind) { - case 198 /* Block */: - case 225 /* ModuleBlock */: + case 199 /* Block */: + case 226 /* ModuleBlock */: return true; } return false; } function getOpenTokenForList(node, list) { switch (node.kind) { - case 147 /* Constructor */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 179 /* ArrowFunction */: + case 148 /* Constructor */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 180 /* ArrowFunction */: if (node.typeParameters === list) { return 25 /* LessThanToken */; } @@ -48467,8 +49482,8 @@ var ts; return 17 /* OpenParenToken */; } break; - case 173 /* CallExpression */: - case 174 /* NewExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: if (node.typeArguments === list) { return 25 /* LessThanToken */; } @@ -48476,7 +49491,7 @@ var ts; return 17 /* OpenParenToken */; } break; - case 154 /* TypeReference */: + case 155 /* TypeReference */: if (node.typeArguments === list) { return 25 /* LessThanToken */; } @@ -48592,7 +49607,7 @@ var ts; var lineStart = ts.getLineStartPositionForPosition(current_1, sourceFile); return SmartIndenter.findFirstNonWhitespaceColumn(lineStart, current_1, sourceFile, options); } - if (precedingToken.kind === 24 /* CommaToken */ && precedingToken.parent.kind !== 186 /* BinaryExpression */) { + if (precedingToken.kind === 24 /* CommaToken */ && precedingToken.parent.kind !== 187 /* BinaryExpression */) { // previous token is comma that separates items in list - find the previous item and try to derive indentation from it var actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options); if (actualIndentation !== -1 /* Unknown */) { @@ -48711,7 +49726,7 @@ var ts; // - parent is SourceFile - by default immediate children of SourceFile are not indented except when user indents them manually // - parent and child are not on the same line var useActualIndentation = (ts.isDeclaration(current) || ts.isStatement(current)) && - (parent.kind === 255 /* SourceFile */ || !parentAndChildShareLine); + (parent.kind === 256 /* SourceFile */ || !parentAndChildShareLine); if (!useActualIndentation) { return -1 /* Unknown */; } @@ -48744,7 +49759,7 @@ var ts; return sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); } function childStartsOnTheSameLineWithElseInIfStatement(parent, child, childStartLine, sourceFile) { - if (parent.kind === 202 /* IfStatement */ && parent.elseStatement === child) { + if (parent.kind === 203 /* IfStatement */ && parent.elseStatement === child) { var elseKeyword = ts.findChildOfKind(parent, 80 /* ElseKeyword */, sourceFile); ts.Debug.assert(elseKeyword !== undefined); var elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line; @@ -48756,23 +49771,23 @@ var ts; function getContainingList(node, sourceFile) { if (node.parent) { switch (node.parent.kind) { - case 154 /* TypeReference */: + case 155 /* TypeReference */: if (node.parent.typeArguments && ts.rangeContainsStartEnd(node.parent.typeArguments, node.getStart(sourceFile), node.getEnd())) { return node.parent.typeArguments; } break; - case 170 /* ObjectLiteralExpression */: + case 171 /* ObjectLiteralExpression */: return node.parent.properties; - case 169 /* ArrayLiteralExpression */: + case 170 /* ArrayLiteralExpression */: return node.parent.elements; - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: { + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: { var start = node.getStart(sourceFile); if (node.parent.typeParameters && ts.rangeContainsStartEnd(node.parent.typeParameters, start, node.getEnd())) { @@ -48783,8 +49798,8 @@ var ts; } break; } - case 174 /* NewExpression */: - case 173 /* CallExpression */: { + case 175 /* NewExpression */: + case 174 /* CallExpression */: { var start = node.getStart(sourceFile); if (node.parent.typeArguments && ts.rangeContainsStartEnd(node.parent.typeArguments, start, node.getEnd())) { @@ -48814,8 +49829,8 @@ var ts; if (node.kind === 18 /* CloseParenToken */) { return -1 /* Unknown */; } - if (node.parent && (node.parent.kind === 173 /* CallExpression */ || - node.parent.kind === 174 /* NewExpression */) && + if (node.parent && (node.parent.kind === 174 /* CallExpression */ || + node.parent.kind === 175 /* NewExpression */) && node.parent.expression !== node) { var fullCallOrNewExpression = node.parent.expression; var startingExpression = getStartingExpression(fullCallOrNewExpression); @@ -48833,10 +49848,10 @@ var ts; function getStartingExpression(node) { while (true) { switch (node.kind) { - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 171 /* PropertyAccessExpression */: - case 172 /* ElementAccessExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: + case 172 /* PropertyAccessExpression */: + case 173 /* ElementAccessExpression */: node = node.expression; break; default: @@ -48900,45 +49915,45 @@ var ts; SmartIndenter.findFirstNonWhitespaceColumn = findFirstNonWhitespaceColumn; function nodeContentIsAlwaysIndented(kind) { switch (kind) { - case 201 /* ExpressionStatement */: - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 169 /* ArrayLiteralExpression */: - case 198 /* Block */: - case 225 /* ModuleBlock */: - case 170 /* ObjectLiteralExpression */: - case 158 /* TypeLiteral */: - case 160 /* TupleType */: - case 226 /* CaseBlock */: - case 249 /* DefaultClause */: - case 248 /* CaseClause */: - case 177 /* ParenthesizedExpression */: - case 171 /* PropertyAccessExpression */: - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 199 /* VariableStatement */: - case 217 /* VariableDeclaration */: - case 234 /* ExportAssignment */: - case 210 /* ReturnStatement */: - case 187 /* ConditionalExpression */: - case 167 /* ArrayBindingPattern */: - case 166 /* ObjectBindingPattern */: - case 242 /* JsxOpeningElement */: - case 241 /* JsxSelfClosingElement */: - case 247 /* JsxExpression */: - case 145 /* MethodSignature */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 141 /* Parameter */: - case 155 /* FunctionType */: - case 156 /* ConstructorType */: - case 163 /* ParenthesizedType */: - case 175 /* TaggedTemplateExpression */: - case 183 /* AwaitExpression */: - case 232 /* NamedImports */: + case 202 /* ExpressionStatement */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 170 /* ArrayLiteralExpression */: + case 199 /* Block */: + case 226 /* ModuleBlock */: + case 171 /* ObjectLiteralExpression */: + case 159 /* TypeLiteral */: + case 161 /* TupleType */: + case 227 /* CaseBlock */: + case 250 /* DefaultClause */: + case 249 /* CaseClause */: + case 178 /* ParenthesizedExpression */: + case 172 /* PropertyAccessExpression */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: + case 200 /* VariableStatement */: + case 218 /* VariableDeclaration */: + case 235 /* ExportAssignment */: + case 211 /* ReturnStatement */: + case 188 /* ConditionalExpression */: + case 168 /* ArrayBindingPattern */: + case 167 /* ObjectBindingPattern */: + case 243 /* JsxOpeningElement */: + case 242 /* JsxSelfClosingElement */: + case 248 /* JsxExpression */: + case 146 /* MethodSignature */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 142 /* Parameter */: + case 156 /* FunctionType */: + case 157 /* ConstructorType */: + case 164 /* ParenthesizedType */: + case 176 /* TaggedTemplateExpression */: + case 184 /* AwaitExpression */: + case 233 /* NamedImports */: return true; } return false; @@ -48947,22 +49962,22 @@ var ts; function nodeWillIndentChild(parent, child, indentByDefault) { var childKind = child ? child.kind : 0 /* Unknown */; switch (parent.kind) { - case 203 /* DoStatement */: - case 204 /* WhileStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 205 /* ForStatement */: - case 202 /* IfStatement */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 146 /* MethodDeclaration */: - case 179 /* ArrowFunction */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - return childKind !== 198 /* Block */; - case 240 /* JsxElement */: - return childKind !== 244 /* JsxClosingElement */; + case 204 /* DoStatement */: + case 205 /* WhileStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 206 /* ForStatement */: + case 203 /* IfStatement */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 147 /* MethodDeclaration */: + case 180 /* ArrowFunction */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + return childKind !== 199 /* Block */; + case 241 /* JsxElement */: + return childKind !== 245 /* JsxClosingElement */; } // No explicit rule for given nodes so the result will follow the default value argument return indentByDefault; @@ -48992,7 +50007,7 @@ var ts; var ts; (function (ts) { /** The version of the language service API */ - ts.servicesVersion = "0.4"; + ts.servicesVersion = "0.5"; var ScriptSnapshot; (function (ScriptSnapshot) { var StringScriptSnapshot = (function () { @@ -49110,11 +50125,11 @@ var ts; return pos; }; NodeObject.prototype.createSyntaxList = function (nodes) { - var list = createNode(278 /* SyntaxList */, nodes.pos, nodes.end, 0, this); + var list = createNode(279 /* SyntaxList */, nodes.pos, nodes.end, 0, this); list._children = []; var pos = nodes.pos; - for (var _i = 0, nodes_8 = nodes; _i < nodes_8.length; _i++) { - var node = nodes_8[_i]; + for (var _i = 0, nodes_7 = nodes; _i < nodes_7.length; _i++) { + var node = nodes_7[_i]; if (pos < node.pos) { pos = this.addSyntheticNodes(list._children, pos, node.pos); } @@ -49129,7 +50144,7 @@ var ts; NodeObject.prototype.createChildren = function (sourceFile) { var _this = this; var children; - if (this.kind >= 138 /* FirstNode */) { + if (this.kind >= 139 /* FirstNode */) { scanner.setText((sourceFile || this.getSourceFile()).text); children = []; var pos_3 = this.pos; @@ -49176,7 +50191,7 @@ var ts; return undefined; } var child = children[0]; - return child.kind < 138 /* FirstNode */ ? child : child.getFirstToken(sourceFile); + return child.kind < 139 /* FirstNode */ ? child : child.getFirstToken(sourceFile); }; NodeObject.prototype.getLastToken = function (sourceFile) { var children = this.getChildren(sourceFile); @@ -49184,7 +50199,7 @@ var ts; if (!child) { return undefined; } - return child.kind < 138 /* FirstNode */ ? child : child.getLastToken(sourceFile); + return child.kind < 139 /* FirstNode */ ? child : child.getLastToken(sourceFile); }; return NodeObject; }()); @@ -49233,7 +50248,7 @@ var ts; if (ts.indexOf(declarations, declaration) === indexOfDeclaration) { var sourceFileOfDeclaration_1 = ts.getSourceFileOfNode(declaration); // If it is parameter - try and get the jsDoc comment with @param tag from function declaration's jsDoc comments - if (canUseParsedParamTagComments && declaration.kind === 141 /* Parameter */) { + if (canUseParsedParamTagComments && declaration.kind === 142 /* Parameter */) { ts.forEach(getJsDocCommentTextRange(declaration.parent, sourceFileOfDeclaration_1), function (jsDocCommentTextRange) { var cleanedParamJsDocComment = getCleanedParamJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration_1); if (cleanedParamJsDocComment) { @@ -49242,15 +50257,15 @@ var ts; }); } // If this is left side of dotted module declaration, there is no doc comments associated with this node - if (declaration.kind === 224 /* ModuleDeclaration */ && declaration.body.kind === 224 /* ModuleDeclaration */) { + if (declaration.kind === 225 /* ModuleDeclaration */ && declaration.body.kind === 225 /* ModuleDeclaration */) { return; } // If this is dotted module name, get the doc comments from the parent - while (declaration.kind === 224 /* ModuleDeclaration */ && declaration.parent.kind === 224 /* ModuleDeclaration */) { + while (declaration.kind === 225 /* ModuleDeclaration */ && declaration.parent.kind === 225 /* ModuleDeclaration */) { declaration = declaration.parent; } // Get the cleaned js doc comment text from the declaration - ts.forEach(getJsDocCommentTextRange(declaration.kind === 217 /* VariableDeclaration */ ? declaration.parent.parent : declaration, sourceFileOfDeclaration_1), function (jsDocCommentTextRange) { + ts.forEach(getJsDocCommentTextRange(declaration.kind === 218 /* VariableDeclaration */ ? declaration.parent.parent : declaration, sourceFileOfDeclaration_1), function (jsDocCommentTextRange) { var cleanedJsDocComment = getCleanedJsDocComment(jsDocCommentTextRange.pos, jsDocCommentTextRange.end, sourceFileOfDeclaration_1); if (cleanedJsDocComment) { ts.addRange(jsDocCommentParts, cleanedJsDocComment); @@ -49524,6 +50539,9 @@ var ts; ? this.checker.getBaseTypes(this) : undefined; }; + TypeObject.prototype.getNonNullableType = function () { + return this.checker.getNonNullableType(this); + }; return TypeObject; }()); var SignatureObject = (function () { @@ -49595,9 +50613,9 @@ var ts; if (result_2 !== undefined) { return result_2; } - if (declaration.name.kind === 139 /* ComputedPropertyName */) { + if (declaration.name.kind === 140 /* ComputedPropertyName */) { var expr = declaration.name.expression; - if (expr.kind === 171 /* PropertyAccessExpression */) { + if (expr.kind === 172 /* PropertyAccessExpression */) { return expr.name.text; } return getTextOfIdentifierOrLiteral(expr); @@ -49617,9 +50635,10 @@ var ts; } function visit(node) { switch (node.kind) { - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: var functionDeclaration = node; var declarationName = getDeclarationName(functionDeclaration); if (declarationName) { @@ -49639,60 +50658,53 @@ var ts; ts.forEachChild(node, visit); } break; - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 223 /* EnumDeclaration */: - case 224 /* ModuleDeclaration */: - case 228 /* ImportEqualsDeclaration */: - case 237 /* ExportSpecifier */: - case 233 /* ImportSpecifier */: - case 228 /* ImportEqualsDeclaration */: - case 230 /* ImportClause */: - case 231 /* NamespaceImport */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 158 /* TypeLiteral */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 224 /* EnumDeclaration */: + case 225 /* ModuleDeclaration */: + case 229 /* ImportEqualsDeclaration */: + case 238 /* ExportSpecifier */: + case 234 /* ImportSpecifier */: + case 229 /* ImportEqualsDeclaration */: + case 231 /* ImportClause */: + case 232 /* NamespaceImport */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 159 /* TypeLiteral */: addDeclaration(node); - // fall through - case 147 /* Constructor */: - case 199 /* VariableStatement */: - case 218 /* VariableDeclarationList */: - case 166 /* ObjectBindingPattern */: - case 167 /* ArrayBindingPattern */: - case 225 /* ModuleBlock */: ts.forEachChild(node, visit); break; - case 198 /* Block */: - if (ts.isFunctionBlock(node)) { - ts.forEachChild(node, visit); - } - break; - case 141 /* Parameter */: - // Only consider properties defined as constructor parameters - if (!(node.flags & 28 /* AccessibilityModifier */)) { + case 142 /* Parameter */: + // Only consider parameter properties + if (!(node.flags & 92 /* ParameterPropertyModifier */)) { break; } // fall through - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: - if (ts.isBindingPattern(node.name)) { - ts.forEachChild(node.name, visit); + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: { + var decl = node; + if (ts.isBindingPattern(decl.name)) { + ts.forEachChild(decl.name, visit); break; } - case 254 /* EnumMember */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + if (decl.initializer) + visit(decl.initializer); + } + case 255 /* EnumMember */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: addDeclaration(node); break; - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: // Handle named exports case e.g.: // export {a, b as B} from "mod"; if (node.exportClause) { ts.forEach(node.exportClause.elements, visit); } break; - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: var importClause = node.importClause; if (importClause) { // Handle default import case e.g.: @@ -49704,7 +50716,7 @@ var ts; // import * as NS from "mod"; // import {a, b as B} from "mod"; if (importClause.namedBindings) { - if (importClause.namedBindings.kind === 231 /* NamespaceImport */) { + if (importClause.namedBindings.kind === 232 /* NamespaceImport */) { addDeclaration(importClause.namedBindings); } else { @@ -49713,6 +50725,8 @@ var ts; } } break; + default: + ts.forEachChild(node, visit); } } }; @@ -49926,16 +50940,16 @@ var ts; } return ts.forEach(symbol.declarations, function (declaration) { // Function expressions are local - if (declaration.kind === 178 /* FunctionExpression */) { + if (declaration.kind === 179 /* FunctionExpression */) { return true; } - if (declaration.kind !== 217 /* VariableDeclaration */ && declaration.kind !== 219 /* FunctionDeclaration */) { + if (declaration.kind !== 218 /* VariableDeclaration */ && declaration.kind !== 220 /* FunctionDeclaration */) { return false; } // If the parent is not sourceFile or module block it is local variable - for (var parent_12 = declaration.parent; !ts.isFunctionBlock(parent_12); parent_12 = parent_12.parent) { + for (var parent_15 = declaration.parent; !ts.isFunctionBlock(parent_15); parent_15 = parent_15.parent) { // Reached source file or module block - if (parent_12.kind === 255 /* SourceFile */ || parent_12.kind === 225 /* ModuleBlock */) { + if (parent_15.kind === 256 /* SourceFile */ || parent_15.kind === 226 /* ModuleBlock */) { return false; } } @@ -49995,10 +51009,12 @@ var ts; }; HostCache.prototype.getOrCreateEntry = function (fileName) { var path = ts.toPath(fileName, this.currentDirectory, this.getCanonicalFileName); - if (this.contains(path)) { - return this.getEntry(path); - } - return this.createEntry(fileName, path); + return this.getOrCreateEntryByPath(fileName, path); + }; + HostCache.prototype.getOrCreateEntryByPath = function (fileName, path) { + return this.contains(path) + ? this.getEntry(path) + : this.createEntry(fileName, path); }; HostCache.prototype.getRootFileNames = function () { var fileNames = []; @@ -50068,7 +51084,7 @@ var ts; function transpileModule(input, transpileOptions) { var options = transpileOptions.compilerOptions ? ts.clone(transpileOptions.compilerOptions) : getDefaultCompilerOptions(); options.isolatedModules = true; - // transpileModule does not write anything to disk so there is no need to verify that there are no conflicts between input and output paths. + // transpileModule does not write anything to disk so there is no need to verify that there are no conflicts between input and output paths. options.suppressOutputPathCheck = true; // Filename can be non-ts file. options.allowNonTsExtensions = true; @@ -50091,7 +51107,7 @@ var ts; var sourceMapText; // Create a compilerHost object to allow the compiler to read and write files var compilerHost = { - getSourceFile: function (fileName, target) { return fileName === ts.normalizeSlashes(inputFileName) ? sourceFile : undefined; }, + getSourceFile: function (fileName, target) { return fileName === ts.normalizePath(inputFileName) ? sourceFile : undefined; }, writeFile: function (name, text, writeByteOrderMark) { if (ts.fileExtensionIs(name, ".map")) { ts.Debug.assert(sourceMapText === undefined, "Unexpected multiple source map outputs for the file '" + name + "'"); @@ -50198,11 +51214,10 @@ var ts; // for those settings. var buckets = {}; var getCanonicalFileName = ts.createGetCanonicalFileName(!!useCaseSensitiveFileNames); - function getKeyFromCompilationSettings(settings) { - return "_" + settings.target + "|" + settings.module + "|" + settings.noResolve + "|" + settings.jsx + +"|" + settings.allowJs; + function getKeyForCompilationSettings(settings) { + return ("_" + settings.target + "|" + settings.module + "|" + settings.noResolve + "|" + settings.jsx + "|" + settings.allowJs + "|" + settings.baseUrl + "|" + settings.typesRoot + "|" + settings.typesSearchPaths + "|" + JSON.stringify(settings.rootDirs) + "|" + JSON.stringify(settings.paths)); } - function getBucketForCompilationSettings(settings, createIfMissing) { - var key = getKeyFromCompilationSettings(settings); + function getBucketForCompilationSettings(key, createIfMissing) { var bucket = ts.lookUp(buckets, key); if (!bucket && createIfMissing) { buckets[key] = bucket = ts.createFileMap(); @@ -50229,14 +51244,23 @@ var ts; return JSON.stringify(bucketInfoArray, undefined, 2); } function acquireDocument(fileName, compilationSettings, scriptSnapshot, version, scriptKind) { - return acquireOrUpdateDocument(fileName, compilationSettings, scriptSnapshot, version, /*acquiring*/ true, scriptKind); + var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); + var key = getKeyForCompilationSettings(compilationSettings); + return acquireDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind); + } + function acquireDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind) { + return acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, /*acquiring*/ true, scriptKind); } function updateDocument(fileName, compilationSettings, scriptSnapshot, version, scriptKind) { - return acquireOrUpdateDocument(fileName, compilationSettings, scriptSnapshot, version, /*acquiring*/ false, scriptKind); - } - function acquireOrUpdateDocument(fileName, compilationSettings, scriptSnapshot, version, acquiring, scriptKind) { - var bucket = getBucketForCompilationSettings(compilationSettings, /*createIfMissing*/ true); var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); + var key = getKeyForCompilationSettings(compilationSettings); + return updateDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind); + } + function updateDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version, scriptKind) { + return acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, /*acquiring*/ false, scriptKind); + } + function acquireOrUpdateDocument(fileName, path, compilationSettings, key, scriptSnapshot, version, acquiring, scriptKind) { + var bucket = getBucketForCompilationSettings(key, /*createIfMissing*/ true); var entry = bucket.get(path); if (!entry) { ts.Debug.assert(acquiring, "How could we be trying to update a document that the registry doesn't have?"); @@ -50268,9 +51292,13 @@ var ts; return entry.sourceFile; } function releaseDocument(fileName, compilationSettings) { - var bucket = getBucketForCompilationSettings(compilationSettings, /*createIfMissing*/ false); - ts.Debug.assert(bucket !== undefined); var path = ts.toPath(fileName, currentDirectory, getCanonicalFileName); + var key = getKeyForCompilationSettings(compilationSettings); + return releaseDocumentWithKey(path, key); + } + function releaseDocumentWithKey(path, key) { + var bucket = getBucketForCompilationSettings(key, /*createIfMissing*/ false); + ts.Debug.assert(bucket !== undefined); var entry = bucket.get(path); entry.languageServiceRefCount--; ts.Debug.assert(entry.languageServiceRefCount >= 0); @@ -50280,9 +51308,13 @@ var ts; } return { acquireDocument: acquireDocument, + acquireDocumentWithKey: acquireDocumentWithKey, updateDocument: updateDocument, + updateDocumentWithKey: updateDocumentWithKey, releaseDocument: releaseDocument, - reportStats: reportStats + releaseDocumentWithKey: releaseDocumentWithKey, + reportStats: reportStats, + getKeyForCompilationSettings: getKeyForCompilationSettings }; } ts.createDocumentRegistry = createDocumentRegistry; @@ -50382,7 +51414,7 @@ var ts; else { if (token === 69 /* Identifier */ || ts.isKeyword(token)) { token = nextToken(); - if (token === 135 /* FromKeyword */) { + if (token === 136 /* FromKeyword */) { token = nextToken(); if (token === 9 /* StringLiteral */) { // import d from "mod"; @@ -50413,7 +51445,7 @@ var ts; } if (token === 16 /* CloseBraceToken */) { token = nextToken(); - if (token === 135 /* FromKeyword */) { + if (token === 136 /* FromKeyword */) { token = nextToken(); if (token === 9 /* StringLiteral */) { // import {a as A} from "mod"; @@ -50429,7 +51461,7 @@ var ts; token = nextToken(); if (token === 69 /* Identifier */ || ts.isKeyword(token)) { token = nextToken(); - if (token === 135 /* FromKeyword */) { + if (token === 136 /* FromKeyword */) { token = nextToken(); if (token === 9 /* StringLiteral */) { // import * as NS from "mod" @@ -50459,7 +51491,7 @@ var ts; } if (token === 16 /* CloseBraceToken */) { token = nextToken(); - if (token === 135 /* FromKeyword */) { + if (token === 136 /* FromKeyword */) { token = nextToken(); if (token === 9 /* StringLiteral */) { // export {a as A} from "mod"; @@ -50471,7 +51503,7 @@ var ts; } else if (token === 37 /* AsteriskToken */) { token = nextToken(); - if (token === 135 /* FromKeyword */) { + if (token === 136 /* FromKeyword */) { token = nextToken(); if (token === 9 /* StringLiteral */) { // export * from "mod" @@ -50496,7 +51528,7 @@ var ts; } function tryConsumeRequireCall(skipCurrentToken) { var token = skipCurrentToken ? nextToken() : scanner.getToken(); - if (token === 128 /* RequireKeyword */) { + if (token === 129 /* RequireKeyword */) { token = nextToken(); if (token === 17 /* OpenParenToken */) { token = nextToken(); @@ -50619,7 +51651,7 @@ var ts; /// Helpers function getTargetLabel(referenceNode, labelName) { while (referenceNode) { - if (referenceNode.kind === 213 /* LabeledStatement */ && referenceNode.label.text === labelName) { + if (referenceNode.kind === 214 /* LabeledStatement */ && referenceNode.label.text === labelName) { return referenceNode.label; } referenceNode = referenceNode.parent; @@ -50628,12 +51660,12 @@ var ts; } function isJumpStatementTarget(node) { return node.kind === 69 /* Identifier */ && - (node.parent.kind === 209 /* BreakStatement */ || node.parent.kind === 208 /* ContinueStatement */) && + (node.parent.kind === 210 /* BreakStatement */ || node.parent.kind === 209 /* ContinueStatement */) && node.parent.label === node; } function isLabelOfLabeledStatement(node) { return node.kind === 69 /* Identifier */ && - node.parent.kind === 213 /* LabeledStatement */ && + node.parent.kind === 214 /* LabeledStatement */ && node.parent.label === node; } /** @@ -50641,7 +51673,7 @@ var ts; * Note: 'node' cannot be a SourceFile. */ function isLabeledBy(node, labelName) { - for (var owner = node.parent; owner.kind === 213 /* LabeledStatement */; owner = owner.parent) { + for (var owner = node.parent; owner.kind === 214 /* LabeledStatement */; owner = owner.parent) { if (owner.label.text === labelName) { return true; } @@ -50652,50 +51684,74 @@ var ts; return isLabelOfLabeledStatement(node) || isJumpStatementTarget(node); } function isRightSideOfQualifiedName(node) { - return node.parent.kind === 138 /* QualifiedName */ && node.parent.right === node; + return node.parent.kind === 139 /* QualifiedName */ && node.parent.right === node; } function isRightSideOfPropertyAccess(node) { - return node && node.parent && node.parent.kind === 171 /* PropertyAccessExpression */ && node.parent.name === node; + return node && node.parent && node.parent.kind === 172 /* PropertyAccessExpression */ && node.parent.name === node; } function isCallExpressionTarget(node) { if (isRightSideOfPropertyAccess(node)) { node = node.parent; } - return node && node.parent && node.parent.kind === 173 /* CallExpression */ && node.parent.expression === node; + return node && node.parent && node.parent.kind === 174 /* CallExpression */ && node.parent.expression === node; } function isNewExpressionTarget(node) { if (isRightSideOfPropertyAccess(node)) { node = node.parent; } - return node && node.parent && node.parent.kind === 174 /* NewExpression */ && node.parent.expression === node; + return node && node.parent && node.parent.kind === 175 /* NewExpression */ && node.parent.expression === node; } function isNameOfModuleDeclaration(node) { - return node.parent.kind === 224 /* ModuleDeclaration */ && node.parent.name === node; + return node.parent.kind === 225 /* ModuleDeclaration */ && node.parent.name === node; } function isNameOfFunctionDeclaration(node) { return node.kind === 69 /* Identifier */ && ts.isFunctionLike(node.parent) && node.parent.name === node; } - /** Returns true if node is a name of an object literal property, e.g. "a" in x = { "a": 1 } */ - function isNameOfPropertyAssignment(node) { - return (node.kind === 69 /* Identifier */ || node.kind === 9 /* StringLiteral */ || node.kind === 8 /* NumericLiteral */) && - (node.parent.kind === 252 /* PropertyAssignment */ || node.parent.kind === 253 /* ShorthandPropertyAssignment */) && node.parent.name === node; + function isObjectLiteralPropertyDeclaration(node) { + switch (node.kind) { + case 253 /* PropertyAssignment */: + case 254 /* ShorthandPropertyAssignment */: + case 147 /* MethodDeclaration */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + return true; + } + return false; + } + /** + * Returns the containing object literal property declaration given a possible name node, e.g. "a" in x = { "a": 1 } + */ + function getContainingObjectLiteralElement(node) { + switch (node.kind) { + case 9 /* StringLiteral */: + case 8 /* NumericLiteral */: + if (node.parent.kind === 140 /* ComputedPropertyName */) { + return isObjectLiteralPropertyDeclaration(node.parent.parent) ? node.parent.parent : undefined; + } + // intential fall through + case 69 /* Identifier */: + return isObjectLiteralPropertyDeclaration(node.parent) && node.parent.name === node ? node.parent : undefined; + } + return undefined; } function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) { if (node.kind === 9 /* StringLiteral */ || node.kind === 8 /* NumericLiteral */) { switch (node.parent.kind) { - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 252 /* PropertyAssignment */: - case 254 /* EnumMember */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 224 /* ModuleDeclaration */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 253 /* PropertyAssignment */: + case 255 /* EnumMember */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 225 /* ModuleDeclaration */: return node.parent.name === node; - case 172 /* ElementAccessExpression */: + case 173 /* ElementAccessExpression */: return node.parent.argumentExpression === node; + case 140 /* ComputedPropertyName */: + return true; } } return false; @@ -50753,7 +51809,7 @@ var ts; })(BreakContinueSearchType || (BreakContinueSearchType = {})); // A cache of completion entries for keywords, these do not change between sessions var keywordCompletions = []; - for (var i = 70 /* FirstKeyword */; i <= 137 /* LastKeyword */; i++) { + for (var i = 70 /* FirstKeyword */; i <= 138 /* LastKeyword */; i++) { keywordCompletions.push({ name: ts.tokenToString(i), kind: ScriptElementKind.keyword, @@ -50768,17 +51824,17 @@ var ts; return undefined; } switch (node.kind) { - case 255 /* SourceFile */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 223 /* EnumDeclaration */: - case 224 /* ModuleDeclaration */: + case 256 /* SourceFile */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 224 /* EnumDeclaration */: + case 225 /* ModuleDeclaration */: return node; } } @@ -50786,38 +51842,42 @@ var ts; ts.getContainerNode = getContainerNode; /* @internal */ function getNodeKind(node) { switch (node.kind) { - case 224 /* ModuleDeclaration */: return ScriptElementKind.moduleElement; - case 220 /* ClassDeclaration */: return ScriptElementKind.classElement; - case 221 /* InterfaceDeclaration */: return ScriptElementKind.interfaceElement; - case 222 /* TypeAliasDeclaration */: return ScriptElementKind.typeElement; - case 223 /* EnumDeclaration */: return ScriptElementKind.enumElement; - case 217 /* VariableDeclaration */: + case 225 /* ModuleDeclaration */: return ScriptElementKind.moduleElement; + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: + return ScriptElementKind.classElement; + case 222 /* InterfaceDeclaration */: return ScriptElementKind.interfaceElement; + case 223 /* TypeAliasDeclaration */: return ScriptElementKind.typeElement; + case 224 /* EnumDeclaration */: return ScriptElementKind.enumElement; + case 218 /* VariableDeclaration */: return ts.isConst(node) ? ScriptElementKind.constElement : ts.isLet(node) ? ScriptElementKind.letElement : ScriptElementKind.variableElement; - case 219 /* FunctionDeclaration */: return ScriptElementKind.functionElement; - case 148 /* GetAccessor */: return ScriptElementKind.memberGetAccessorElement; - case 149 /* SetAccessor */: return ScriptElementKind.memberSetAccessorElement; - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + return ScriptElementKind.functionElement; + case 149 /* GetAccessor */: return ScriptElementKind.memberGetAccessorElement; + case 150 /* SetAccessor */: return ScriptElementKind.memberSetAccessorElement; + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: return ScriptElementKind.memberFunctionElement; - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return ScriptElementKind.memberVariableElement; - case 152 /* IndexSignature */: return ScriptElementKind.indexSignatureElement; - case 151 /* ConstructSignature */: return ScriptElementKind.constructSignatureElement; - case 150 /* CallSignature */: return ScriptElementKind.callSignatureElement; - case 147 /* Constructor */: return ScriptElementKind.constructorImplementationElement; - case 140 /* TypeParameter */: return ScriptElementKind.typeParameterElement; - case 254 /* EnumMember */: return ScriptElementKind.variableElement; - case 141 /* Parameter */: return (node.flags & 28 /* AccessibilityModifier */) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement; - case 228 /* ImportEqualsDeclaration */: - case 233 /* ImportSpecifier */: - case 230 /* ImportClause */: - case 237 /* ExportSpecifier */: - case 231 /* NamespaceImport */: + case 153 /* IndexSignature */: return ScriptElementKind.indexSignatureElement; + case 152 /* ConstructSignature */: return ScriptElementKind.constructSignatureElement; + case 151 /* CallSignature */: return ScriptElementKind.callSignatureElement; + case 148 /* Constructor */: return ScriptElementKind.constructorImplementationElement; + case 141 /* TypeParameter */: return ScriptElementKind.typeParameterElement; + case 255 /* EnumMember */: return ScriptElementKind.variableElement; + case 142 /* Parameter */: return (node.flags & 92 /* ParameterPropertyModifier */) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement; + case 229 /* ImportEqualsDeclaration */: + case 234 /* ImportSpecifier */: + case 231 /* ImportClause */: + case 238 /* ExportSpecifier */: + case 232 /* NamespaceImport */: return ScriptElementKind.alias; } return ScriptElementKind.unknown; @@ -50904,6 +51964,7 @@ var ts; // Now create a new compiler var compilerHost = { getSourceFile: getOrCreateSourceFile, + getSourceFileByPath: getOrCreateSourceFileByPath, getCancellationToken: function () { return cancellationToken; }, getCanonicalFileName: getCanonicalFileName, useCaseSensitiveFileNames: function () { return useCaseSensitivefileNames; }, @@ -50937,15 +51998,17 @@ var ts; return host.resolveTypeReferenceDirectives(typeReferenceDirectiveNames, containingFile); }; } + var documentRegistryBucketKey = documentRegistry.getKeyForCompilationSettings(newSettings); var newProgram = ts.createProgram(hostCache.getRootFileNames(), newSettings, compilerHost, program); // Release any files we have acquired in the old program but are // not part of the new program. if (program) { var oldSourceFiles = program.getSourceFiles(); + var oldSettingsKey = documentRegistry.getKeyForCompilationSettings(oldSettings); for (var _i = 0, oldSourceFiles_1 = oldSourceFiles; _i < oldSourceFiles_1.length; _i++) { var oldSourceFile = oldSourceFiles_1[_i]; if (!newProgram.getSourceFile(oldSourceFile.fileName) || changesInCompilationSettingsAffectSyntax) { - documentRegistry.releaseDocument(oldSourceFile.fileName, oldSettings); + documentRegistry.releaseDocumentWithKey(oldSourceFile.path, oldSettingsKey); } } } @@ -50958,11 +52021,14 @@ var ts; program.getTypeChecker(); return; function getOrCreateSourceFile(fileName) { + return getOrCreateSourceFileByPath(fileName, ts.toPath(fileName, currentDirectory, getCanonicalFileName)); + } + function getOrCreateSourceFileByPath(fileName, path) { ts.Debug.assert(hostCache !== undefined); // The program is asking for this file, check first if the host can locate it. // If the host can not locate the file, then it does not exist. return undefined // to the program to allow reporting of errors for missing files. - var hostFileInformation = hostCache.getOrCreateEntry(fileName); + var hostFileInformation = hostCache.getOrCreateEntryByPath(fileName, path); if (!hostFileInformation) { return undefined; } @@ -50971,7 +52037,7 @@ var ts; // can not be reused. we have to dump all syntax trees and create new ones. if (!changesInCompilationSettingsAffectSyntax) { // Check if the old program had this file already - var oldSourceFile = program && program.getSourceFile(fileName); + var oldSourceFile = program && program.getSourceFileByPath(path); if (oldSourceFile) { // We already had a source file for this file name. Go to the registry to // ensure that we get the right up to date version of it. We need this to @@ -50997,12 +52063,12 @@ var ts; // We do not support the scenario where a host can modify a registered // file's script kind, i.e. in one project some file is treated as ".ts" // and in another as ".js" - ts.Debug.assert(hostFileInformation.scriptKind === oldSourceFile.scriptKind, "Registered script kind (" + oldSourceFile.scriptKind + ") should match new script kind (" + hostFileInformation.scriptKind + ") for file: " + fileName); - return documentRegistry.updateDocument(fileName, newSettings, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); + ts.Debug.assert(hostFileInformation.scriptKind === oldSourceFile.scriptKind, "Registered script kind (" + oldSourceFile.scriptKind + ") should match new script kind (" + hostFileInformation.scriptKind + ") for file: " + path); + return documentRegistry.updateDocumentWithKey(fileName, path, newSettings, documentRegistryBucketKey, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); } } // Could not find this file in the old program, create a new SourceFile for it. - return documentRegistry.acquireDocument(fileName, newSettings, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); + return documentRegistry.acquireDocumentWithKey(fileName, path, newSettings, documentRegistryBucketKey, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); } function sourceFileUpToDate(sourceFile) { if (!sourceFile) { @@ -51141,9 +52207,9 @@ var ts; isJsDocTagName = true; } switch (tag.kind) { - case 276 /* JSDocTypeTag */: - case 274 /* JSDocParameterTag */: - case 275 /* JSDocReturnTag */: + case 277 /* JSDocTypeTag */: + case 275 /* JSDocParameterTag */: + case 276 /* JSDocReturnTag */: var tagWithExpression = tag; if (tagWithExpression.typeExpression) { insideJsDocTagExpression = tagWithExpression.typeExpression.pos < position && position < tagWithExpression.typeExpression.end; @@ -51188,13 +52254,13 @@ var ts; log("Returning an empty list because completion was requested in an invalid position."); return undefined; } - var parent_13 = contextToken.parent, kind = contextToken.kind; + var parent_16 = contextToken.parent, kind = contextToken.kind; if (kind === 21 /* DotToken */) { - if (parent_13.kind === 171 /* PropertyAccessExpression */) { + if (parent_16.kind === 172 /* PropertyAccessExpression */) { node = contextToken.parent.expression; isRightOfDot = true; } - else if (parent_13.kind === 138 /* QualifiedName */) { + else if (parent_16.kind === 139 /* QualifiedName */) { node = contextToken.parent.left; isRightOfDot = true; } @@ -51209,7 +52275,7 @@ var ts; isRightOfOpenTag = true; location = contextToken; } - else if (kind === 39 /* SlashToken */ && contextToken.parent.kind === 244 /* JsxClosingElement */) { + else if (kind === 39 /* SlashToken */ && contextToken.parent.kind === 245 /* JsxClosingElement */) { isStartingCloseTag = true; location = contextToken; } @@ -51256,7 +52322,7 @@ var ts; // Right of dot member completion list isMemberCompletion = true; isNewIdentifierLocation = false; - if (node.kind === 69 /* Identifier */ || node.kind === 138 /* QualifiedName */ || node.kind === 171 /* PropertyAccessExpression */) { + if (node.kind === 69 /* Identifier */ || node.kind === 139 /* QualifiedName */ || node.kind === 172 /* PropertyAccessExpression */) { var symbol = typeChecker.getSymbolAtLocation(node); // This is an alias, follow what it aliases if (symbol && symbol.flags & 8388608 /* Alias */) { @@ -51312,7 +52378,7 @@ var ts; } if (jsxContainer = tryGetContainingJsxElement(contextToken)) { var attrsType = void 0; - if ((jsxContainer.kind === 241 /* JsxSelfClosingElement */) || (jsxContainer.kind === 242 /* JsxOpeningElement */)) { + if ((jsxContainer.kind === 242 /* JsxSelfClosingElement */) || (jsxContainer.kind === 243 /* JsxOpeningElement */)) { // Cursor is inside a JSX self-closing element or opening element attrsType = typeChecker.getJsxElementAttributesType(jsxContainer); if (attrsType) { @@ -51384,15 +52450,15 @@ var ts; return result; } function isInJsxText(contextToken) { - if (contextToken.kind === 243 /* JsxText */) { + if (contextToken.kind === 244 /* JsxText */) { return true; } if (contextToken.kind === 27 /* GreaterThanToken */ && contextToken.parent) { - if (contextToken.parent.kind === 242 /* JsxOpeningElement */) { + if (contextToken.parent.kind === 243 /* JsxOpeningElement */) { return true; } - if (contextToken.parent.kind === 244 /* JsxClosingElement */ || contextToken.parent.kind === 241 /* JsxSelfClosingElement */) { - return contextToken.parent.parent && contextToken.parent.parent.kind === 240 /* JsxElement */; + if (contextToken.parent.kind === 245 /* JsxClosingElement */ || contextToken.parent.kind === 242 /* JsxSelfClosingElement */) { + return contextToken.parent.parent && contextToken.parent.parent.kind === 241 /* JsxElement */; } } return false; @@ -51402,40 +52468,40 @@ var ts; var containingNodeKind = previousToken.parent.kind; switch (previousToken.kind) { case 24 /* CommaToken */: - return containingNodeKind === 173 /* CallExpression */ // func( a, | - || containingNodeKind === 147 /* Constructor */ // constructor( a, | /* public, protected, private keywords are allowed here, so show completion */ - || containingNodeKind === 174 /* NewExpression */ // new C(a, | - || containingNodeKind === 169 /* ArrayLiteralExpression */ // [a, | - || containingNodeKind === 186 /* BinaryExpression */ // const x = (a, | - || containingNodeKind === 155 /* FunctionType */; // var x: (s: string, list| + return containingNodeKind === 174 /* CallExpression */ // func( a, | + || containingNodeKind === 148 /* Constructor */ // constructor( a, | /* public, protected, private keywords are allowed here, so show completion */ + || containingNodeKind === 175 /* NewExpression */ // new C(a, | + || containingNodeKind === 170 /* ArrayLiteralExpression */ // [a, | + || containingNodeKind === 187 /* BinaryExpression */ // const x = (a, | + || containingNodeKind === 156 /* FunctionType */; // var x: (s: string, list| case 17 /* OpenParenToken */: - return containingNodeKind === 173 /* CallExpression */ // func( | - || containingNodeKind === 147 /* Constructor */ // constructor( | - || containingNodeKind === 174 /* NewExpression */ // new C(a| - || containingNodeKind === 177 /* ParenthesizedExpression */ // const x = (a| - || containingNodeKind === 163 /* ParenthesizedType */; // function F(pred: (a| /* this can become an arrow function, where 'a' is the argument */ + return containingNodeKind === 174 /* CallExpression */ // func( | + || containingNodeKind === 148 /* Constructor */ // constructor( | + || containingNodeKind === 175 /* NewExpression */ // new C(a| + || containingNodeKind === 178 /* ParenthesizedExpression */ // const x = (a| + || containingNodeKind === 164 /* ParenthesizedType */; // function F(pred: (a| /* this can become an arrow function, where 'a' is the argument */ case 19 /* OpenBracketToken */: - return containingNodeKind === 169 /* ArrayLiteralExpression */ // [ | - || containingNodeKind === 152 /* IndexSignature */ // [ | : string ] - || containingNodeKind === 139 /* ComputedPropertyName */; // [ | /* this can become an index signature */ + return containingNodeKind === 170 /* ArrayLiteralExpression */ // [ | + || containingNodeKind === 153 /* IndexSignature */ // [ | : string ] + || containingNodeKind === 140 /* ComputedPropertyName */; // [ | /* this can become an index signature */ case 125 /* ModuleKeyword */: // module | case 126 /* NamespaceKeyword */: return true; case 21 /* DotToken */: - return containingNodeKind === 224 /* ModuleDeclaration */; // module A.| + return containingNodeKind === 225 /* ModuleDeclaration */; // module A.| case 15 /* OpenBraceToken */: - return containingNodeKind === 220 /* ClassDeclaration */; // class A{ | + return containingNodeKind === 221 /* ClassDeclaration */; // class A{ | case 56 /* EqualsToken */: - return containingNodeKind === 217 /* VariableDeclaration */ // const x = a| - || containingNodeKind === 186 /* BinaryExpression */; // x = a| + return containingNodeKind === 218 /* VariableDeclaration */ // const x = a| + || containingNodeKind === 187 /* BinaryExpression */; // x = a| case 12 /* TemplateHead */: - return containingNodeKind === 188 /* TemplateExpression */; // `aa ${| + return containingNodeKind === 189 /* TemplateExpression */; // `aa ${| case 13 /* TemplateMiddle */: - return containingNodeKind === 196 /* TemplateSpan */; // `aa ${10} dd ${| + return containingNodeKind === 197 /* TemplateSpan */; // `aa ${10} dd ${| case 112 /* PublicKeyword */: case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: - return containingNodeKind === 144 /* PropertyDeclaration */; // class A{ public | + return containingNodeKind === 145 /* PropertyDeclaration */; // class A{ public | } // Previous token may have been a keyword that was converted to an identifier. switch (previousToken.getText()) { @@ -51449,7 +52515,7 @@ var ts; } function isInStringOrRegularExpressionOrTemplateLiteral(contextToken) { if (contextToken.kind === 9 /* StringLiteral */ - || contextToken.kind === 165 /* StringLiteralType */ + || contextToken.kind === 166 /* StringLiteralType */ || contextToken.kind === 10 /* RegularExpressionLiteral */ || ts.isTemplateLiteralKind(contextToken.kind)) { var start_7 = contextToken.getStart(); @@ -51479,14 +52545,14 @@ var ts; isMemberCompletion = true; var typeForObject; var existingMembers; - if (objectLikeContainer.kind === 170 /* ObjectLiteralExpression */) { + if (objectLikeContainer.kind === 171 /* ObjectLiteralExpression */) { // We are completing on contextual types, but may also include properties // other than those within the declared type. isNewIdentifierLocation = true; typeForObject = typeChecker.getContextualType(objectLikeContainer); existingMembers = objectLikeContainer.properties; } - else if (objectLikeContainer.kind === 166 /* ObjectBindingPattern */) { + else if (objectLikeContainer.kind === 167 /* ObjectBindingPattern */) { // We are *only* completing on properties from the type being destructured. isNewIdentifierLocation = false; var rootDeclaration = ts.getRootDeclaration(objectLikeContainer.parent); @@ -51497,11 +52563,11 @@ var ts; // Also proceed if rootDeclaration is parameter and if its containing function expression\arrow function is contextually typed - // type of parameter will flow in from the contextual type of the function var canGetType = !!(rootDeclaration.initializer || rootDeclaration.type); - if (!canGetType && rootDeclaration.kind === 141 /* Parameter */) { + if (!canGetType && rootDeclaration.kind === 142 /* Parameter */) { if (ts.isExpression(rootDeclaration.parent)) { canGetType = !!typeChecker.getContextualType(rootDeclaration.parent); } - else if (rootDeclaration.parent.kind === 146 /* MethodDeclaration */ || rootDeclaration.parent.kind === 149 /* SetAccessor */) { + else if (rootDeclaration.parent.kind === 147 /* MethodDeclaration */ || rootDeclaration.parent.kind === 150 /* SetAccessor */) { canGetType = ts.isExpression(rootDeclaration.parent.parent) && !!typeChecker.getContextualType(rootDeclaration.parent.parent); } } @@ -51543,9 +52609,9 @@ var ts; * @returns true if 'symbols' was successfully populated; false otherwise. */ function tryGetImportOrExportClauseCompletionSymbols(namedImportsOrExports) { - var declarationKind = namedImportsOrExports.kind === 232 /* NamedImports */ ? - 229 /* ImportDeclaration */ : - 235 /* ExportDeclaration */; + var declarationKind = namedImportsOrExports.kind === 233 /* NamedImports */ ? + 230 /* ImportDeclaration */ : + 236 /* ExportDeclaration */; var importOrExportDeclaration = ts.getAncestor(namedImportsOrExports, declarationKind); var moduleSpecifier = importOrExportDeclaration.moduleSpecifier; if (!moduleSpecifier) { @@ -51570,9 +52636,9 @@ var ts; switch (contextToken.kind) { case 15 /* OpenBraceToken */: // const x = { | case 24 /* CommaToken */: - var parent_14 = contextToken.parent; - if (parent_14 && (parent_14.kind === 170 /* ObjectLiteralExpression */ || parent_14.kind === 166 /* ObjectBindingPattern */)) { - return parent_14; + var parent_17 = contextToken.parent; + if (parent_17 && (parent_17.kind === 171 /* ObjectLiteralExpression */ || parent_17.kind === 167 /* ObjectBindingPattern */)) { + return parent_17; } break; } @@ -51589,8 +52655,8 @@ var ts; case 15 /* OpenBraceToken */: // import { | case 24 /* CommaToken */: switch (contextToken.parent.kind) { - case 232 /* NamedImports */: - case 236 /* NamedExports */: + case 233 /* NamedImports */: + case 237 /* NamedExports */: return contextToken.parent; } } @@ -51599,37 +52665,37 @@ var ts; } function tryGetContainingJsxElement(contextToken) { if (contextToken) { - var parent_15 = contextToken.parent; + var parent_18 = contextToken.parent; switch (contextToken.kind) { case 26 /* LessThanSlashToken */: case 39 /* SlashToken */: case 69 /* Identifier */: - case 245 /* JsxAttribute */: - case 246 /* JsxSpreadAttribute */: - if (parent_15 && (parent_15.kind === 241 /* JsxSelfClosingElement */ || parent_15.kind === 242 /* JsxOpeningElement */)) { - return parent_15; + case 246 /* JsxAttribute */: + case 247 /* JsxSpreadAttribute */: + if (parent_18 && (parent_18.kind === 242 /* JsxSelfClosingElement */ || parent_18.kind === 243 /* JsxOpeningElement */)) { + return parent_18; } - else if (parent_15.kind === 245 /* JsxAttribute */) { - return parent_15.parent; + else if (parent_18.kind === 246 /* JsxAttribute */) { + return parent_18.parent; } break; // The context token is the closing } or " of an attribute, which means // its parent is a JsxExpression, whose parent is a JsxAttribute, // whose parent is a JsxOpeningLikeElement case 9 /* StringLiteral */: - if (parent_15 && ((parent_15.kind === 245 /* JsxAttribute */) || (parent_15.kind === 246 /* JsxSpreadAttribute */))) { - return parent_15.parent; + if (parent_18 && ((parent_18.kind === 246 /* JsxAttribute */) || (parent_18.kind === 247 /* JsxSpreadAttribute */))) { + return parent_18.parent; } break; case 16 /* CloseBraceToken */: - if (parent_15 && - parent_15.kind === 247 /* JsxExpression */ && - parent_15.parent && - (parent_15.parent.kind === 245 /* JsxAttribute */)) { - return parent_15.parent.parent; + if (parent_18 && + parent_18.kind === 248 /* JsxExpression */ && + parent_18.parent && + (parent_18.parent.kind === 246 /* JsxAttribute */)) { + return parent_18.parent.parent; } - if (parent_15 && parent_15.kind === 246 /* JsxSpreadAttribute */) { - return parent_15.parent; + if (parent_18 && parent_18.kind === 247 /* JsxSpreadAttribute */) { + return parent_18.parent; } break; } @@ -51638,16 +52704,16 @@ var ts; } function isFunction(kind) { switch (kind) { - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 150 /* CallSignature */: - case 151 /* ConstructSignature */: - case 152 /* IndexSignature */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 151 /* CallSignature */: + case 152 /* ConstructSignature */: + case 153 /* IndexSignature */: return true; } return false; @@ -51659,66 +52725,66 @@ var ts; var containingNodeKind = contextToken.parent.kind; switch (contextToken.kind) { case 24 /* CommaToken */: - return containingNodeKind === 217 /* VariableDeclaration */ || - containingNodeKind === 218 /* VariableDeclarationList */ || - containingNodeKind === 199 /* VariableStatement */ || - containingNodeKind === 223 /* EnumDeclaration */ || + return containingNodeKind === 218 /* VariableDeclaration */ || + containingNodeKind === 219 /* VariableDeclarationList */ || + containingNodeKind === 200 /* VariableStatement */ || + containingNodeKind === 224 /* EnumDeclaration */ || isFunction(containingNodeKind) || - containingNodeKind === 220 /* ClassDeclaration */ || - containingNodeKind === 191 /* ClassExpression */ || - containingNodeKind === 221 /* InterfaceDeclaration */ || - containingNodeKind === 167 /* ArrayBindingPattern */ || - containingNodeKind === 222 /* TypeAliasDeclaration */; // type Map, K, | + containingNodeKind === 221 /* ClassDeclaration */ || + containingNodeKind === 192 /* ClassExpression */ || + containingNodeKind === 222 /* InterfaceDeclaration */ || + containingNodeKind === 168 /* ArrayBindingPattern */ || + containingNodeKind === 223 /* TypeAliasDeclaration */; // type Map, K, | case 21 /* DotToken */: - return containingNodeKind === 167 /* ArrayBindingPattern */; // var [.| + return containingNodeKind === 168 /* ArrayBindingPattern */; // var [.| case 54 /* ColonToken */: - return containingNodeKind === 168 /* BindingElement */; // var {x :html| + return containingNodeKind === 169 /* BindingElement */; // var {x :html| case 19 /* OpenBracketToken */: - return containingNodeKind === 167 /* ArrayBindingPattern */; // var [x| + return containingNodeKind === 168 /* ArrayBindingPattern */; // var [x| case 17 /* OpenParenToken */: - return containingNodeKind === 251 /* CatchClause */ || + return containingNodeKind === 252 /* CatchClause */ || isFunction(containingNodeKind); case 15 /* OpenBraceToken */: - return containingNodeKind === 223 /* EnumDeclaration */ || - containingNodeKind === 221 /* InterfaceDeclaration */ || - containingNodeKind === 158 /* TypeLiteral */; // const x : { | + return containingNodeKind === 224 /* EnumDeclaration */ || + containingNodeKind === 222 /* InterfaceDeclaration */ || + containingNodeKind === 159 /* TypeLiteral */; // const x : { | case 23 /* SemicolonToken */: - return containingNodeKind === 143 /* PropertySignature */ && + return containingNodeKind === 144 /* PropertySignature */ && contextToken.parent && contextToken.parent.parent && - (contextToken.parent.parent.kind === 221 /* InterfaceDeclaration */ || - contextToken.parent.parent.kind === 158 /* TypeLiteral */); // const x : { a; | + (contextToken.parent.parent.kind === 222 /* InterfaceDeclaration */ || + contextToken.parent.parent.kind === 159 /* TypeLiteral */); // const x : { a; | case 25 /* LessThanToken */: - return containingNodeKind === 220 /* ClassDeclaration */ || - containingNodeKind === 191 /* ClassExpression */ || - containingNodeKind === 221 /* InterfaceDeclaration */ || - containingNodeKind === 222 /* TypeAliasDeclaration */ || + return containingNodeKind === 221 /* ClassDeclaration */ || + containingNodeKind === 192 /* ClassExpression */ || + containingNodeKind === 222 /* InterfaceDeclaration */ || + containingNodeKind === 223 /* TypeAliasDeclaration */ || isFunction(containingNodeKind); case 113 /* StaticKeyword */: - return containingNodeKind === 144 /* PropertyDeclaration */; + return containingNodeKind === 145 /* PropertyDeclaration */; case 22 /* DotDotDotToken */: - return containingNodeKind === 141 /* Parameter */ || + return containingNodeKind === 142 /* Parameter */ || (contextToken.parent && contextToken.parent.parent && - contextToken.parent.parent.kind === 167 /* ArrayBindingPattern */); // var [...z| + contextToken.parent.parent.kind === 168 /* ArrayBindingPattern */); // var [...z| case 112 /* PublicKeyword */: case 110 /* PrivateKeyword */: case 111 /* ProtectedKeyword */: - return containingNodeKind === 141 /* Parameter */; + return containingNodeKind === 142 /* Parameter */; case 116 /* AsKeyword */: - return containingNodeKind === 233 /* ImportSpecifier */ || - containingNodeKind === 237 /* ExportSpecifier */ || - containingNodeKind === 231 /* NamespaceImport */; + return containingNodeKind === 234 /* ImportSpecifier */ || + containingNodeKind === 238 /* ExportSpecifier */ || + containingNodeKind === 232 /* NamespaceImport */; case 73 /* ClassKeyword */: case 81 /* EnumKeyword */: case 107 /* InterfaceKeyword */: case 87 /* FunctionKeyword */: case 102 /* VarKeyword */: case 123 /* GetKeyword */: - case 130 /* SetKeyword */: + case 131 /* SetKeyword */: case 89 /* ImportKeyword */: case 108 /* LetKeyword */: case 74 /* ConstKeyword */: case 114 /* YieldKeyword */: - case 133 /* TypeKeyword */: + case 134 /* TypeKeyword */: return true; } // Previous token may have been a keyword that was converted to an identifier. @@ -51770,9 +52836,9 @@ var ts; existingImportsOrExports[name_39.text] = true; } if (ts.isEmpty(existingImportsOrExports)) { - return exportsOfModule; + return ts.filter(exportsOfModule, function (e) { return e.name !== "default"; }); } - return ts.filter(exportsOfModule, function (e) { return !ts.lookUp(existingImportsOrExports, e.name); }); + return ts.filter(exportsOfModule, function (e) { return e.name !== "default" && !ts.lookUp(existingImportsOrExports, e.name); }); } /** * Filters out completion suggestions for named imports or exports. @@ -51788,10 +52854,10 @@ var ts; for (var _i = 0, existingMembers_1 = existingMembers; _i < existingMembers_1.length; _i++) { var m = existingMembers_1[_i]; // Ignore omitted expressions for missing members - if (m.kind !== 252 /* PropertyAssignment */ && - m.kind !== 253 /* ShorthandPropertyAssignment */ && - m.kind !== 168 /* BindingElement */ && - m.kind !== 146 /* MethodDeclaration */) { + if (m.kind !== 253 /* PropertyAssignment */ && + m.kind !== 254 /* ShorthandPropertyAssignment */ && + m.kind !== 169 /* BindingElement */ && + m.kind !== 147 /* MethodDeclaration */) { continue; } // If this is the current item we are editing right now, do not filter it out @@ -51799,7 +52865,7 @@ var ts; continue; } var existingName = void 0; - if (m.kind === 168 /* BindingElement */ && m.propertyName) { + if (m.kind === 169 /* BindingElement */ && m.propertyName) { // include only identifiers in completion list if (m.propertyName.kind === 69 /* Identifier */) { existingName = m.propertyName.text; @@ -51829,7 +52895,7 @@ var ts; if (attr.getStart() <= position && position <= attr.getEnd()) { continue; } - if (attr.kind === 245 /* JsxAttribute */) { + if (attr.kind === 246 /* JsxAttribute */) { seenNames[attr.name.text] = true; } } @@ -51856,7 +52922,7 @@ var ts; else { if (!symbols || symbols.length === 0) { if (sourceFile.languageVariant === 1 /* JSX */ && - location.parent && location.parent.kind === 244 /* JsxClosingElement */) { + location.parent && location.parent.kind === 245 /* JsxClosingElement */) { // In the TypeScript JSX element, if such element is not defined. When users query for completion at closing tag, // instead of simply giving unknown value, the completion will return the tag-name of an associated opening-element. // For example: @@ -51997,7 +53063,7 @@ var ts; function getSymbolKind(symbol, location) { var flags = symbol.getFlags(); if (flags & 32 /* Class */) - return ts.getDeclarationOfKind(symbol, 191 /* ClassExpression */) ? + return ts.getDeclarationOfKind(symbol, 192 /* ClassExpression */) ? ScriptElementKind.localClassElement : ScriptElementKind.classElement; if (flags & 384 /* Enum */) return ScriptElementKind.enumElement; @@ -52103,7 +53169,7 @@ var ts; var signature = void 0; type = isThisExpression ? typeChecker.getTypeAtLocation(location) : typeChecker.getTypeOfSymbolAtLocation(symbol, location); if (type) { - if (location.parent && location.parent.kind === 171 /* PropertyAccessExpression */) { + if (location.parent && location.parent.kind === 172 /* PropertyAccessExpression */) { var right = location.parent.name; // Either the location is on the right of a property access, or on the left and the right is missing if (right === location || (right && right.getFullWidth() === 0)) { @@ -52112,7 +53178,7 @@ var ts; } // try get the call/construct signature from the type if it matches var callExpression = void 0; - if (location.kind === 173 /* CallExpression */ || location.kind === 174 /* NewExpression */) { + if (location.kind === 174 /* CallExpression */ || location.kind === 175 /* NewExpression */) { callExpression = location; } else if (isCallExpressionTarget(location) || isNewExpressionTarget(location)) { @@ -52125,7 +53191,7 @@ var ts; // Use the first candidate: signature = candidateSignatures[0]; } - var useConstructSignatures = callExpression.kind === 174 /* NewExpression */ || callExpression.expression.kind === 95 /* SuperKeyword */; + var useConstructSignatures = callExpression.kind === 175 /* NewExpression */ || callExpression.expression.kind === 95 /* SuperKeyword */; var allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures(); if (!ts.contains(allSignatures, signature.target) && !ts.contains(allSignatures, signature)) { // Get the first signature if there is one -- allSignatures may contain @@ -52165,7 +53231,7 @@ var ts; displayParts.push(ts.keywordPart(92 /* NewKeyword */)); displayParts.push(ts.spacePart()); } - if (!(type.flags & 65536 /* Anonymous */)) { + if (!(type.flags & 65536 /* Anonymous */) && type.symbol) { ts.addRange(displayParts, ts.symbolToDisplayParts(typeChecker, type.symbol, enclosingDeclaration, /*meaning*/ undefined, 1 /* WriteTypeParametersOrArguments */)); } addSignatureDisplayParts(signature, allSignatures, 8 /* WriteArrowStyleSignature */); @@ -52178,24 +53244,24 @@ var ts; } } else if ((isNameOfFunctionDeclaration(location) && !(symbol.flags & 98304 /* Accessor */)) || - (location.kind === 121 /* ConstructorKeyword */ && location.parent.kind === 147 /* Constructor */)) { + (location.kind === 121 /* ConstructorKeyword */ && location.parent.kind === 148 /* Constructor */)) { // get the signature from the declaration and write it var functionDeclaration = location.parent; - var allSignatures = functionDeclaration.kind === 147 /* Constructor */ ? type.getConstructSignatures() : type.getCallSignatures(); + var allSignatures = functionDeclaration.kind === 148 /* Constructor */ ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures(); if (!typeChecker.isImplementationOfOverload(functionDeclaration)) { signature = typeChecker.getSignatureFromDeclaration(functionDeclaration); } else { signature = allSignatures[0]; } - if (functionDeclaration.kind === 147 /* Constructor */) { + if (functionDeclaration.kind === 148 /* Constructor */) { // show (constructor) Type(...) signature symbolKind = ScriptElementKind.constructorImplementationElement; addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); } else { // (function/method) symbol(..signature) - addPrefixForAnyFunctionOrVar(functionDeclaration.kind === 150 /* CallSignature */ && + addPrefixForAnyFunctionOrVar(functionDeclaration.kind === 151 /* CallSignature */ && !(type.symbol.flags & 2048 /* TypeLiteral */ || type.symbol.flags & 4096 /* ObjectLiteral */) ? type.symbol : symbol, symbolKind); } addSignatureDisplayParts(signature, allSignatures); @@ -52204,7 +53270,7 @@ var ts; } } if (symbolFlags & 32 /* Class */ && !hasAddedSymbolInfo && !isThisExpression) { - if (ts.getDeclarationOfKind(symbol, 191 /* ClassExpression */)) { + if (ts.getDeclarationOfKind(symbol, 192 /* ClassExpression */)) { // Special case for class expressions because we would like to indicate that // the class name is local to the class body (similar to function expression) // (local class) class @@ -52227,7 +53293,7 @@ var ts; } if (symbolFlags & 524288 /* TypeAlias */) { addNewLineIfDisplayPartsExist(); - displayParts.push(ts.keywordPart(133 /* TypeKeyword */)); + displayParts.push(ts.keywordPart(134 /* TypeKeyword */)); displayParts.push(ts.spacePart()); addFullSymbolName(symbol); writeTypeParametersOfSymbol(symbol, sourceFile); @@ -52248,7 +53314,7 @@ var ts; } if (symbolFlags & 1536 /* Module */) { addNewLineIfDisplayPartsExist(); - var declaration = ts.getDeclarationOfKind(symbol, 224 /* ModuleDeclaration */); + var declaration = ts.getDeclarationOfKind(symbol, 225 /* ModuleDeclaration */); var isNamespace = declaration && declaration.name && declaration.name.kind === 69 /* Identifier */; displayParts.push(ts.keywordPart(isNamespace ? 126 /* NamespaceKeyword */ : 125 /* ModuleKeyword */)); displayParts.push(ts.spacePart()); @@ -52271,17 +53337,17 @@ var ts; } else { // Method/function type parameter - var declaration = ts.getDeclarationOfKind(symbol, 140 /* TypeParameter */); + var declaration = ts.getDeclarationOfKind(symbol, 141 /* TypeParameter */); ts.Debug.assert(declaration !== undefined); declaration = declaration.parent; if (declaration) { if (ts.isFunctionLikeKind(declaration.kind)) { var signature = typeChecker.getSignatureFromDeclaration(declaration); - if (declaration.kind === 151 /* ConstructSignature */) { + if (declaration.kind === 152 /* ConstructSignature */) { displayParts.push(ts.keywordPart(92 /* NewKeyword */)); displayParts.push(ts.spacePart()); } - else if (declaration.kind !== 150 /* CallSignature */ && declaration.name) { + else if (declaration.kind !== 151 /* CallSignature */ && declaration.name) { addFullSymbolName(declaration.symbol); } ts.addRange(displayParts, ts.signatureToDisplayParts(typeChecker, signature, sourceFile, 32 /* WriteTypeArgumentsOfSignature */)); @@ -52290,7 +53356,7 @@ var ts; // Type alias type parameter // For example // type list = T[]; // Both T will go through same code path - displayParts.push(ts.keywordPart(133 /* TypeKeyword */)); + displayParts.push(ts.keywordPart(134 /* TypeKeyword */)); displayParts.push(ts.spacePart()); addFullSymbolName(declaration.symbol); writeTypeParametersOfSymbol(declaration.symbol, sourceFile); @@ -52301,7 +53367,7 @@ var ts; if (symbolFlags & 8 /* EnumMember */) { addPrefixForAnyFunctionOrVar(symbol, "enum member"); var declaration = symbol.declarations[0]; - if (declaration.kind === 254 /* EnumMember */) { + if (declaration.kind === 255 /* EnumMember */) { var constantValue = typeChecker.getConstantValue(declaration); if (constantValue !== undefined) { displayParts.push(ts.spacePart()); @@ -52317,13 +53383,13 @@ var ts; displayParts.push(ts.spacePart()); addFullSymbolName(symbol); ts.forEach(symbol.declarations, function (declaration) { - if (declaration.kind === 228 /* ImportEqualsDeclaration */) { + if (declaration.kind === 229 /* ImportEqualsDeclaration */) { var importEqualsDeclaration = declaration; if (ts.isExternalModuleImportEqualsDeclaration(importEqualsDeclaration)) { displayParts.push(ts.spacePart()); displayParts.push(ts.operatorPart(56 /* EqualsToken */)); displayParts.push(ts.spacePart()); - displayParts.push(ts.keywordPart(128 /* RequireKeyword */)); + displayParts.push(ts.keywordPart(129 /* RequireKeyword */)); displayParts.push(ts.punctuationPart(17 /* OpenParenToken */)); displayParts.push(ts.displayPart(ts.getTextOfNode(ts.getExternalModuleImportEqualsDeclarationExpression(importEqualsDeclaration)), SymbolDisplayPartKind.stringLiteral)); displayParts.push(ts.punctuationPart(18 /* CloseParenToken */)); @@ -52375,7 +53441,7 @@ var ts; symbolFlags & 131072 /* Signature */ || symbolFlags & 98304 /* Accessor */ || symbolKind === ScriptElementKind.memberFunctionElement) { - var allSignatures = type.getCallSignatures(); + var allSignatures = type.getNonNullableType().getCallSignatures(); addSignatureDisplayParts(allSignatures[0], allSignatures); } } @@ -52445,7 +53511,7 @@ var ts; synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); - if (!node) { + if (node === sourceFile) { return undefined; } if (isLabelName(node)) { @@ -52457,10 +53523,10 @@ var ts; // Try getting just type at this position and show switch (node.kind) { case 69 /* Identifier */: - case 171 /* PropertyAccessExpression */: - case 138 /* QualifiedName */: + case 172 /* PropertyAccessExpression */: + case 139 /* QualifiedName */: case 97 /* ThisKeyword */: - case 164 /* ThisType */: + case 165 /* ThisType */: case 95 /* SuperKeyword */: // For the identifiers/this/super etc get the type at position var type = typeChecker.getTypeAtLocation(node); @@ -52539,8 +53605,8 @@ var ts; var declarations = []; var definition; ts.forEach(signatureDeclarations, function (d) { - if ((selectConstructors && d.kind === 147 /* Constructor */) || - (!selectConstructors && (d.kind === 219 /* FunctionDeclaration */ || d.kind === 146 /* MethodDeclaration */ || d.kind === 145 /* MethodSignature */))) { + if ((selectConstructors && d.kind === 148 /* Constructor */) || + (!selectConstructors && (d.kind === 220 /* FunctionDeclaration */ || d.kind === 147 /* MethodDeclaration */ || d.kind === 146 /* MethodSignature */))) { declarations.push(d); if (d.body) definition = d; @@ -52580,16 +53646,6 @@ var ts; function getDefinitionAtPosition(fileName, position) { synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); - var node = ts.getTouchingPropertyName(sourceFile, position); - if (!node) { - return undefined; - } - // Labels - if (isJumpStatementTarget(node)) { - var labelName = node.text; - var label = getTargetLabel(node.parent, node.text); - return label ? [createDefinitionInfo(label, ScriptElementKind.label, labelName, /*containerName*/ undefined)] : undefined; - } /// Triple slash reference comments var comment = findReferenceInPosition(sourceFile.referencedFiles, position); if (comment) { @@ -52602,12 +53658,22 @@ var ts; // Type reference directives var typeReferenceDirective = findReferenceInPosition(sourceFile.typeReferenceDirectives, position); if (typeReferenceDirective) { - var referenceFile = ts.lookUp(program.resolvedTypeReferenceDirectives, typeReferenceDirective.fileName); + var referenceFile = ts.lookUp(program.getResolvedTypeReferenceDirectives(), typeReferenceDirective.fileName); if (referenceFile && referenceFile.resolvedFileName) { return [getDefinitionInfoForFileReference(typeReferenceDirective.fileName, referenceFile.resolvedFileName)]; } return undefined; } + var node = ts.getTouchingPropertyName(sourceFile, position); + if (node === sourceFile) { + return undefined; + } + // Labels + if (isJumpStatementTarget(node)) { + var labelName = node.text; + var label = getTargetLabel(node.parent, node.text); + return label ? [createDefinitionInfo(label, ScriptElementKind.label, labelName, /*containerName*/ undefined)] : undefined; + } var typeChecker = program.getTypeChecker(); var symbol = typeChecker.getSymbolAtLocation(node); // Could not find a symbol e.g. node is string or number keyword, @@ -52628,7 +53694,7 @@ var ts; // if (node.kind === 69 /* Identifier */ && (node.parent === declaration || - (declaration.kind === 233 /* ImportSpecifier */ && declaration.parent && declaration.parent.kind === 232 /* NamedImports */))) { + (declaration.kind === 234 /* ImportSpecifier */ && declaration.parent && declaration.parent.kind === 233 /* NamedImports */))) { symbol = typeChecker.getAliasedSymbol(symbol); } } @@ -52637,7 +53703,7 @@ var ts; // go to the declaration of the property name (in this case stay at the same position). However, if go-to-definition // is performed at the location of property access, we would like to go to definition of the property in the short-hand // assignment. This case and others are handled by the following code. - if (node.parent.kind === 253 /* ShorthandPropertyAssignment */) { + if (node.parent.kind === 254 /* ShorthandPropertyAssignment */) { var shorthandSymbol = typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration); if (!shorthandSymbol) { return []; @@ -52655,7 +53721,7 @@ var ts; synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); - if (!node) { + if (node === sourceFile) { return undefined; } var typeChecker = program.getTypeChecker(); @@ -52713,10 +53779,10 @@ var ts; function getSemanticDocumentHighlights(node) { if (node.kind === 69 /* Identifier */ || node.kind === 97 /* ThisKeyword */ || - node.kind === 164 /* ThisType */ || + node.kind === 165 /* ThisType */ || node.kind === 95 /* SuperKeyword */ || - isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || - isNameOfExternalModuleImportOrDeclaration(node)) { + node.kind === 9 /* StringLiteral */ || + isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { var referencedSymbols = getReferencedSymbolsForNode(node, sourceFilesToSearch, /*findInStrings*/ false, /*findInComments*/ false); return convertReferencedSymbols(referencedSymbols); } @@ -52767,75 +53833,75 @@ var ts; switch (node.kind) { case 88 /* IfKeyword */: case 80 /* ElseKeyword */: - if (hasKind(node.parent, 202 /* IfStatement */)) { + if (hasKind(node.parent, 203 /* IfStatement */)) { return getIfElseOccurrences(node.parent); } break; case 94 /* ReturnKeyword */: - if (hasKind(node.parent, 210 /* ReturnStatement */)) { + if (hasKind(node.parent, 211 /* ReturnStatement */)) { return getReturnOccurrences(node.parent); } break; case 98 /* ThrowKeyword */: - if (hasKind(node.parent, 214 /* ThrowStatement */)) { + if (hasKind(node.parent, 215 /* ThrowStatement */)) { return getThrowOccurrences(node.parent); } break; case 72 /* CatchKeyword */: - if (hasKind(parent(parent(node)), 215 /* TryStatement */)) { + if (hasKind(parent(parent(node)), 216 /* TryStatement */)) { return getTryCatchFinallyOccurrences(node.parent.parent); } break; case 100 /* TryKeyword */: case 85 /* FinallyKeyword */: - if (hasKind(parent(node), 215 /* TryStatement */)) { + if (hasKind(parent(node), 216 /* TryStatement */)) { return getTryCatchFinallyOccurrences(node.parent); } break; case 96 /* SwitchKeyword */: - if (hasKind(node.parent, 212 /* SwitchStatement */)) { + if (hasKind(node.parent, 213 /* SwitchStatement */)) { return getSwitchCaseDefaultOccurrences(node.parent); } break; case 71 /* CaseKeyword */: case 77 /* DefaultKeyword */: - if (hasKind(parent(parent(parent(node))), 212 /* SwitchStatement */)) { + if (hasKind(parent(parent(parent(node))), 213 /* SwitchStatement */)) { return getSwitchCaseDefaultOccurrences(node.parent.parent.parent); } break; case 70 /* BreakKeyword */: case 75 /* ContinueKeyword */: - if (hasKind(node.parent, 209 /* BreakStatement */) || hasKind(node.parent, 208 /* ContinueStatement */)) { + if (hasKind(node.parent, 210 /* BreakStatement */) || hasKind(node.parent, 209 /* ContinueStatement */)) { return getBreakOrContinueStatementOccurrences(node.parent); } break; case 86 /* ForKeyword */: - if (hasKind(node.parent, 205 /* ForStatement */) || - hasKind(node.parent, 206 /* ForInStatement */) || - hasKind(node.parent, 207 /* ForOfStatement */)) { + if (hasKind(node.parent, 206 /* ForStatement */) || + hasKind(node.parent, 207 /* ForInStatement */) || + hasKind(node.parent, 208 /* ForOfStatement */)) { return getLoopBreakContinueOccurrences(node.parent); } break; case 104 /* WhileKeyword */: case 79 /* DoKeyword */: - if (hasKind(node.parent, 204 /* WhileStatement */) || hasKind(node.parent, 203 /* DoStatement */)) { + if (hasKind(node.parent, 205 /* WhileStatement */) || hasKind(node.parent, 204 /* DoStatement */)) { return getLoopBreakContinueOccurrences(node.parent); } break; case 121 /* ConstructorKeyword */: - if (hasKind(node.parent, 147 /* Constructor */)) { + if (hasKind(node.parent, 148 /* Constructor */)) { return getConstructorOccurrences(node.parent); } break; case 123 /* GetKeyword */: - case 130 /* SetKeyword */: - if (hasKind(node.parent, 148 /* GetAccessor */) || hasKind(node.parent, 149 /* SetAccessor */)) { + case 131 /* SetKeyword */: + if (hasKind(node.parent, 149 /* GetAccessor */) || hasKind(node.parent, 150 /* SetAccessor */)) { return getGetAndSetOccurrences(node.parent); } break; default: if (ts.isModifierKind(node.kind) && node.parent && - (ts.isDeclaration(node.parent) || node.parent.kind === 199 /* VariableStatement */)) { + (ts.isDeclaration(node.parent) || node.parent.kind === 200 /* VariableStatement */)) { return getModifierOccurrences(node.kind, node.parent); } } @@ -52851,10 +53917,10 @@ var ts; aggregate(node); return statementAccumulator; function aggregate(node) { - if (node.kind === 214 /* ThrowStatement */) { + if (node.kind === 215 /* ThrowStatement */) { statementAccumulator.push(node); } - else if (node.kind === 215 /* TryStatement */) { + else if (node.kind === 216 /* TryStatement */) { var tryStatement = node; if (tryStatement.catchClause) { aggregate(tryStatement.catchClause); @@ -52881,19 +53947,19 @@ var ts; function getThrowStatementOwner(throwStatement) { var child = throwStatement; while (child.parent) { - var parent_16 = child.parent; - if (ts.isFunctionBlock(parent_16) || parent_16.kind === 255 /* SourceFile */) { - return parent_16; + var parent_19 = child.parent; + if (ts.isFunctionBlock(parent_19) || parent_19.kind === 256 /* SourceFile */) { + return parent_19; } // A throw-statement is only owned by a try-statement if the try-statement has // a catch clause, and if the throw-statement occurs within the try block. - if (parent_16.kind === 215 /* TryStatement */) { - var tryStatement = parent_16; + if (parent_19.kind === 216 /* TryStatement */) { + var tryStatement = parent_19; if (tryStatement.tryBlock === child && tryStatement.catchClause) { return child; } } - child = parent_16; + child = parent_19; } return undefined; } @@ -52902,7 +53968,7 @@ var ts; aggregate(node); return statementAccumulator; function aggregate(node) { - if (node.kind === 209 /* BreakStatement */ || node.kind === 208 /* ContinueStatement */) { + if (node.kind === 210 /* BreakStatement */ || node.kind === 209 /* ContinueStatement */) { statementAccumulator.push(node); } else if (!ts.isFunctionLike(node)) { @@ -52915,25 +53981,25 @@ var ts; return actualOwner && actualOwner === owner; } function getBreakOrContinueOwner(statement) { - for (var node_2 = statement.parent; node_2; node_2 = node_2.parent) { - switch (node_2.kind) { - case 212 /* SwitchStatement */: - if (statement.kind === 208 /* ContinueStatement */) { + for (var node_1 = statement.parent; node_1; node_1 = node_1.parent) { + switch (node_1.kind) { + case 213 /* SwitchStatement */: + if (statement.kind === 209 /* ContinueStatement */) { continue; } // Fall through. - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 204 /* WhileStatement */: - case 203 /* DoStatement */: - if (!statement.label || isLabeledBy(node_2, statement.label.text)) { - return node_2; + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 205 /* WhileStatement */: + case 204 /* DoStatement */: + if (!statement.label || isLabeledBy(node_1, statement.label.text)) { + return node_1; } break; default: // Don't cross function boundaries. - if (ts.isFunctionLike(node_2)) { + if (ts.isFunctionLike(node_1)) { return undefined; } break; @@ -52945,24 +54011,24 @@ var ts; var container = declaration.parent; // Make sure we only highlight the keyword when it makes sense to do so. if (ts.isAccessibilityModifier(modifier)) { - if (!(container.kind === 220 /* ClassDeclaration */ || - container.kind === 191 /* ClassExpression */ || - (declaration.kind === 141 /* Parameter */ && hasKind(container, 147 /* Constructor */)))) { + if (!(container.kind === 221 /* ClassDeclaration */ || + container.kind === 192 /* ClassExpression */ || + (declaration.kind === 142 /* Parameter */ && hasKind(container, 148 /* Constructor */)))) { return undefined; } } else if (modifier === 113 /* StaticKeyword */) { - if (!(container.kind === 220 /* ClassDeclaration */ || container.kind === 191 /* ClassExpression */)) { + if (!(container.kind === 221 /* ClassDeclaration */ || container.kind === 192 /* ClassExpression */)) { return undefined; } } else if (modifier === 82 /* ExportKeyword */ || modifier === 122 /* DeclareKeyword */) { - if (!(container.kind === 225 /* ModuleBlock */ || container.kind === 255 /* SourceFile */)) { + if (!(container.kind === 226 /* ModuleBlock */ || container.kind === 256 /* SourceFile */)) { return undefined; } } else if (modifier === 115 /* AbstractKeyword */) { - if (!(container.kind === 220 /* ClassDeclaration */ || declaration.kind === 220 /* ClassDeclaration */)) { + if (!(container.kind === 221 /* ClassDeclaration */ || declaration.kind === 221 /* ClassDeclaration */)) { return undefined; } } @@ -52974,8 +54040,8 @@ var ts; var modifierFlag = getFlagFromModifier(modifier); var nodes; switch (container.kind) { - case 225 /* ModuleBlock */: - case 255 /* SourceFile */: + case 226 /* ModuleBlock */: + case 256 /* SourceFile */: // Container is either a class declaration or the declaration is a classDeclaration if (modifierFlag & 128 /* Abstract */) { nodes = declaration.members.concat(declaration); @@ -52984,17 +54050,17 @@ var ts; nodes = container.statements; } break; - case 147 /* Constructor */: + case 148 /* Constructor */: nodes = container.parameters.concat(container.parent.members); break; - case 220 /* ClassDeclaration */: - case 191 /* ClassExpression */: + case 221 /* ClassDeclaration */: + case 192 /* ClassExpression */: nodes = container.members; // If we're an accessibility modifier, we're in an instance member and should search // the constructor's parameter list for instance members as well. if (modifierFlag & 28 /* AccessibilityModifier */) { var constructor = ts.forEach(container.members, function (member) { - return member.kind === 147 /* Constructor */ && member; + return member.kind === 148 /* Constructor */ && member; }); if (constructor) { nodes = nodes.concat(constructor.parameters); @@ -53047,13 +54113,13 @@ var ts; } function getGetAndSetOccurrences(accessorDeclaration) { var keywords = []; - tryPushAccessorKeyword(accessorDeclaration.symbol, 148 /* GetAccessor */); - tryPushAccessorKeyword(accessorDeclaration.symbol, 149 /* SetAccessor */); + tryPushAccessorKeyword(accessorDeclaration.symbol, 149 /* GetAccessor */); + tryPushAccessorKeyword(accessorDeclaration.symbol, 150 /* SetAccessor */); return ts.map(keywords, getHighlightSpanForNode); function tryPushAccessorKeyword(accessorSymbol, accessorKind) { var accessor = ts.getDeclarationOfKind(accessorSymbol, accessorKind); if (accessor) { - ts.forEach(accessor.getChildren(), function (child) { return pushKeywordIf(keywords, child, 123 /* GetKeyword */, 130 /* SetKeyword */); }); + ts.forEach(accessor.getChildren(), function (child) { return pushKeywordIf(keywords, child, 123 /* GetKeyword */, 131 /* SetKeyword */); }); } } } @@ -53071,7 +54137,7 @@ var ts; var keywords = []; if (pushKeywordIf(keywords, loopNode.getFirstToken(), 86 /* ForKeyword */, 104 /* WhileKeyword */, 79 /* DoKeyword */)) { // If we succeeded and got a do-while loop, then start looking for a 'while' keyword. - if (loopNode.kind === 203 /* DoStatement */) { + if (loopNode.kind === 204 /* DoStatement */) { var loopTokens = loopNode.getChildren(); for (var i = loopTokens.length - 1; i >= 0; i--) { if (pushKeywordIf(keywords, loopTokens[i], 104 /* WhileKeyword */)) { @@ -53092,13 +54158,13 @@ var ts; var owner = getBreakOrContinueOwner(breakOrContinueStatement); if (owner) { switch (owner.kind) { - case 205 /* ForStatement */: - case 206 /* ForInStatement */: - case 207 /* ForOfStatement */: - case 203 /* DoStatement */: - case 204 /* WhileStatement */: + case 206 /* ForStatement */: + case 207 /* ForInStatement */: + case 208 /* ForOfStatement */: + case 204 /* DoStatement */: + case 205 /* WhileStatement */: return getLoopBreakContinueOccurrences(owner); - case 212 /* SwitchStatement */: + case 213 /* SwitchStatement */: return getSwitchCaseDefaultOccurrences(owner); } } @@ -53152,7 +54218,7 @@ var ts; function getReturnOccurrences(returnStatement) { var func = ts.getContainingFunction(returnStatement); // If we didn't find a containing function with a block body, bail out. - if (!(func && hasKind(func.body, 198 /* Block */))) { + if (!(func && hasKind(func.body, 199 /* Block */))) { return undefined; } var keywords = []; @@ -53168,7 +54234,7 @@ var ts; function getIfElseOccurrences(ifStatement) { var keywords = []; // Traverse upwards through all parent if-statements linked by their else-branches. - while (hasKind(ifStatement.parent, 202 /* IfStatement */) && ifStatement.parent.elseStatement === ifStatement) { + while (hasKind(ifStatement.parent, 203 /* IfStatement */) && ifStatement.parent.elseStatement === ifStatement) { ifStatement = ifStatement.parent; } // Now traverse back down through the else branches, aggregating if/else keywords of if-statements. @@ -53181,7 +54247,7 @@ var ts; break; } } - if (!hasKind(ifStatement.elseStatement, 202 /* IfStatement */)) { + if (!hasKind(ifStatement.elseStatement, 203 /* IfStatement */)) { break; } ifStatement = ifStatement.elseStatement; @@ -53269,15 +54335,15 @@ var ts; synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var node = ts.getTouchingPropertyName(sourceFile, position); - if (!node) { + if (node === sourceFile) { return undefined; } if (node.kind !== 69 /* Identifier */ && // TODO (drosen): This should be enabled in a later release - currently breaks rename. // node.kind !== SyntaxKind.ThisKeyword && // node.kind !== SyntaxKind.SuperKeyword && - !isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && - !isNameOfExternalModuleImportOrDeclaration(node)) { + node.kind !== 9 /* StringLiteral */ && + !isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { return undefined; } ts.Debug.assert(node.kind === 69 /* Identifier */ || node.kind === 8 /* NumericLiteral */ || node.kind === 9 /* StringLiteral */); @@ -53298,13 +54364,16 @@ var ts; return getLabelReferencesInNode(node.parent, node); } } - if (node.kind === 97 /* ThisKeyword */ || node.kind === 164 /* ThisType */) { + if (node.kind === 97 /* ThisKeyword */ || node.kind === 165 /* ThisType */) { return getReferencesForThisKeyword(node, sourceFiles); } if (node.kind === 95 /* SuperKeyword */) { return getReferencesForSuperKeyword(node); } var symbol = typeChecker.getSymbolAtLocation(node); + if (!symbol && node.kind === 9 /* StringLiteral */) { + return getReferencesForStringLiteral(node, sourceFiles); + } // Could not find a symbol e.g. unknown identifier if (!symbol) { // Can't have references to something that we have no symbol for. @@ -53359,8 +54428,46 @@ var ts; textSpan: ts.createTextSpan(declarations[0].getStart(), 0) }; } - function isImportSpecifierSymbol(symbol) { - return (symbol.flags & 8388608 /* Alias */) && !!ts.getDeclarationOfKind(symbol, 233 /* ImportSpecifier */); + function getAliasSymbolForPropertyNameSymbol(symbol, location) { + if (symbol.flags & 8388608 /* Alias */) { + // Default import get alias + var defaultImport = ts.getDeclarationOfKind(symbol, 231 /* ImportClause */); + if (defaultImport) { + return typeChecker.getAliasedSymbol(symbol); + } + var importOrExportSpecifier = ts.forEach(symbol.declarations, function (declaration) { return (declaration.kind === 234 /* ImportSpecifier */ || + declaration.kind === 238 /* ExportSpecifier */) ? declaration : undefined; }); + if (importOrExportSpecifier && + // export { a } + (!importOrExportSpecifier.propertyName || + // export {a as class } where a is location + importOrExportSpecifier.propertyName === location)) { + // If Import specifier -> get alias + // else Export specifier -> get local target + return importOrExportSpecifier.kind === 234 /* ImportSpecifier */ ? + typeChecker.getAliasedSymbol(symbol) : + typeChecker.getExportSpecifierLocalTargetSymbol(importOrExportSpecifier); + } + } + return undefined; + } + function getPropertySymbolOfDestructuringAssignment(location) { + return ts.isArrayLiteralOrObjectLiteralDestructuringPattern(location.parent.parent) && + typeChecker.getPropertySymbolOfDestructuringAssignment(location); + } + function isObjectBindingPatternElementWithoutPropertyName(symbol) { + var bindingElement = ts.getDeclarationOfKind(symbol, 169 /* BindingElement */); + return bindingElement && + bindingElement.parent.kind === 167 /* ObjectBindingPattern */ && + !bindingElement.propertyName; + } + function getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol) { + if (isObjectBindingPatternElementWithoutPropertyName(symbol)) { + var bindingElement = ts.getDeclarationOfKind(symbol, 169 /* BindingElement */); + var typeOfPattern = typeChecker.getTypeAtLocation(bindingElement.parent); + return typeOfPattern && typeChecker.getPropertyOfType(typeOfPattern, bindingElement.name.text); + } + return undefined; } function getInternedName(symbol, location, declarations) { // If this is an export or import specifier it could have been renamed using the 'as' syntax. @@ -53386,14 +54493,14 @@ var ts; // If this is the symbol of a named function expression or named class expression, // then named references are limited to its own scope. var valueDeclaration = symbol.valueDeclaration; - if (valueDeclaration && (valueDeclaration.kind === 178 /* FunctionExpression */ || valueDeclaration.kind === 191 /* ClassExpression */)) { + if (valueDeclaration && (valueDeclaration.kind === 179 /* FunctionExpression */ || valueDeclaration.kind === 192 /* ClassExpression */)) { return valueDeclaration; } // If this is private property or method, the scope is the containing class if (symbol.flags & (4 /* Property */ | 8192 /* Method */)) { var privateDeclaration = ts.forEach(symbol.getDeclarations(), function (d) { return (d.flags & 8 /* Private */) ? d : undefined; }); if (privateDeclaration) { - return ts.getAncestor(privateDeclaration, 220 /* ClassDeclaration */); + return ts.getAncestor(privateDeclaration, 221 /* ClassDeclaration */); } } // If the symbol is an import we would like to find it if we are looking for what it imports. @@ -53401,6 +54508,11 @@ var ts; if (symbol.flags & 8388608 /* Alias */) { return undefined; } + // If symbol is of object binding pattern element without property name we would want to + // look for property too and that could be anywhere + if (isObjectBindingPatternElementWithoutPropertyName(symbol)) { + return undefined; + } // if this symbol is visible from its parent container, e.g. exported, then bail out // if symbol correspond to the union property - bail out if (symbol.parent || (symbol.flags & 268435456 /* SyntheticProperty */)) { @@ -53419,7 +54531,7 @@ var ts; // Different declarations have different containers, bail out return undefined; } - if (container.kind === 255 /* SourceFile */ && !ts.isExternalModule(container)) { + if (container.kind === 256 /* SourceFile */ && !ts.isExternalModule(container)) { // This is a global variable and not an external module, any declaration defined // within this scope is visible outside the file return undefined; @@ -53592,13 +54704,13 @@ var ts; // Whether 'super' occurs in a static context within a class. var staticFlag = 32 /* Static */; switch (searchSpaceNode.kind) { - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: staticFlag &= searchSpaceNode.flags; searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning class break; @@ -53630,27 +54742,27 @@ var ts; // Whether 'this' occurs in a static context within a class. var staticFlag = 32 /* Static */; switch (searchSpaceNode.kind) { - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: if (ts.isObjectLiteralMethod(searchSpaceNode)) { break; } // fall through - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: staticFlag &= searchSpaceNode.flags; searchSpaceNode = searchSpaceNode.parent; // re-assign to be the owning class break; - case 255 /* SourceFile */: + case 256 /* SourceFile */: if (ts.isExternalModule(searchSpaceNode)) { return undefined; } // Fall through - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: break; // Computed properties in classes are not handled here because references to this are illegal, // so there is no point finding references to them. @@ -53659,7 +54771,7 @@ var ts; } var references = []; var possiblePositions; - if (searchSpaceNode.kind === 255 /* SourceFile */) { + if (searchSpaceNode.kind === 256 /* SourceFile */) { ts.forEach(sourceFiles, function (sourceFile) { possiblePositions = getPossibleSymbolReferencePositions(sourceFile, "this", sourceFile.getStart(), sourceFile.getEnd()); getThisReferencesInFile(sourceFile, sourceFile, possiblePositions, references); @@ -53685,33 +54797,33 @@ var ts; ts.forEach(possiblePositions, function (position) { cancellationToken.throwIfCancellationRequested(); var node = ts.getTouchingWord(sourceFile, position); - if (!node || (node.kind !== 97 /* ThisKeyword */ && node.kind !== 164 /* ThisType */)) { + if (!node || (node.kind !== 97 /* ThisKeyword */ && node.kind !== 165 /* ThisType */)) { return; } var container = ts.getThisContainer(node, /* includeArrowFunctions */ false); switch (searchSpaceNode.kind) { - case 178 /* FunctionExpression */: - case 219 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: if (searchSpaceNode.symbol === container.symbol) { result.push(getReferenceEntryFromNode(node)); } break; - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: if (ts.isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol) { result.push(getReferenceEntryFromNode(node)); } break; - case 191 /* ClassExpression */: - case 220 /* ClassDeclaration */: + case 192 /* ClassExpression */: + case 221 /* ClassDeclaration */: // Make sure the container belongs to the same class // and has the appropriate static modifier from the original container. if (container.parent && searchSpaceNode.symbol === container.parent.symbol && (container.flags & 32 /* Static */) === staticFlag) { result.push(getReferenceEntryFromNode(node)); } break; - case 255 /* SourceFile */: - if (container.kind === 255 /* SourceFile */ && !ts.isExternalModule(container)) { + case 256 /* SourceFile */: + if (container.kind === 256 /* SourceFile */ && !ts.isExternalModule(container)) { result.push(getReferenceEntryFromNode(node)); } break; @@ -53719,26 +54831,78 @@ var ts; }); } } + function getReferencesForStringLiteral(node, sourceFiles) { + var typeChecker = program.getTypeChecker(); + var type = getStringLiteralTypeForNode(node, typeChecker); + if (!type) { + // nothing to do here. moving on + return undefined; + } + var references = []; + for (var _i = 0, sourceFiles_5 = sourceFiles; _i < sourceFiles_5.length; _i++) { + var sourceFile = sourceFiles_5[_i]; + var possiblePositions = getPossibleSymbolReferencePositions(sourceFile, type.text, sourceFile.getStart(), sourceFile.getEnd()); + getReferencesForStringLiteralInFile(sourceFile, type, possiblePositions, references); + } + return [{ + definition: { + containerKind: "", + containerName: "", + fileName: node.getSourceFile().fileName, + kind: ScriptElementKind.variableElement, + name: type.text, + textSpan: ts.createTextSpanFromBounds(node.getStart(), node.getEnd()) + }, + references: references + }]; + function getReferencesForStringLiteralInFile(sourceFile, searchType, possiblePositions, references) { + for (var _i = 0, possiblePositions_1 = possiblePositions; _i < possiblePositions_1.length; _i++) { + var position = possiblePositions_1[_i]; + cancellationToken.throwIfCancellationRequested(); + var node_2 = ts.getTouchingWord(sourceFile, position); + if (!node_2 || node_2.kind !== 9 /* StringLiteral */) { + return; + } + var type_1 = getStringLiteralTypeForNode(node_2, typeChecker); + if (type_1 === searchType) { + references.push(getReferenceEntryFromNode(node_2)); + } + } + } + } function populateSearchSymbolSet(symbol, location) { // The search set contains at least the current symbol var result = [symbol]; - // If the symbol is an alias, add what it aliases to the list - if (isImportSpecifierSymbol(symbol)) { - result.push(typeChecker.getAliasedSymbol(symbol)); + // If the location is name of property symbol from object literal destructuring pattern + // Search the property symbol + // for ( { property: p2 } of elems) { } + var containingObjectLiteralElement = getContainingObjectLiteralElement(location); + if (containingObjectLiteralElement && containingObjectLiteralElement.kind !== 254 /* ShorthandPropertyAssignment */) { + var propertySymbol = getPropertySymbolOfDestructuringAssignment(location); + if (propertySymbol) { + result.push(propertySymbol); + } } - // For export specifiers, the exported name can be referring to a local symbol, e.g.: + // If the symbol is an alias, add what it aliases to the list // import {a} from "mod"; - // export {a as somethingElse} - // We want the *local* declaration of 'a' as declared in the import, - // *not* as declared within "mod" (or farther) - if (location.parent.kind === 237 /* ExportSpecifier */) { - result.push(typeChecker.getExportSpecifierLocalTargetSymbol(location.parent)); + // export {a} + // If the symbol is an alias to default declaration, add what it aliases to the list + // declare "mod" { export default class B { } } + // import B from "mod"; + //// For export specifiers, the exported name can be referring to a local symbol, e.g.: + //// import {a} from "mod"; + //// export {a as somethingElse} + //// We want the *local* declaration of 'a' as declared in the import, + //// *not* as declared within "mod" (or farther) + var aliasSymbol = getAliasSymbolForPropertyNameSymbol(symbol, location); + if (aliasSymbol) { + result = result.concat(populateSearchSymbolSet(aliasSymbol, location)); } // If the location is in a context sensitive location (i.e. in an object literal) try // to get a contextual type for it, and add the property symbol from the contextual // type to the search set - if (isNameOfPropertyAssignment(location)) { - ts.forEach(getPropertySymbolsFromContextualType(location), function (contextualSymbol) { + if (containingObjectLiteralElement) { + ts.forEach(getPropertySymbolsFromContextualType(containingObjectLiteralElement), function (contextualSymbol) { ts.addRange(result, typeChecker.getRootSymbols(contextualSymbol)); }); /* Because in short-hand property assignment, location has two meaning : property name and as value of the property @@ -53761,10 +54925,16 @@ var ts; // we should include both parameter declaration symbol and property declaration symbol // Parameter Declaration symbol is only visible within function scope, so the symbol is stored in constructor.locals. // Property Declaration symbol is a member of the class, so the symbol is stored in its class Declaration.symbol.members - if (symbol.valueDeclaration && symbol.valueDeclaration.kind === 141 /* Parameter */ && + if (symbol.valueDeclaration && symbol.valueDeclaration.kind === 142 /* Parameter */ && ts.isParameterPropertyDeclaration(symbol.valueDeclaration)) { result = result.concat(typeChecker.getSymbolsOfParameterPropertyDeclaration(symbol.valueDeclaration, symbol.name)); } + // If this is symbol of binding element without propertyName declaration in Object binding pattern + // Include the property in the search + var bindingElementPropertySymbol = getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol); + if (bindingElementPropertySymbol) { + result.push(bindingElementPropertySymbol); + } // If this is a union property, add all the symbols from all its source symbols in all unioned types. // If the symbol is an instantiation from a another symbol (e.g. widened symbol) , add the root the list ts.forEach(typeChecker.getRootSymbols(symbol), function (rootSymbol) { @@ -53806,11 +54976,11 @@ var ts; } if (symbol.flags & (32 /* Class */ | 64 /* Interface */)) { ts.forEach(symbol.getDeclarations(), function (declaration) { - if (declaration.kind === 220 /* ClassDeclaration */) { + if (ts.isClassLike(declaration)) { getPropertySymbolFromTypeReference(ts.getClassExtendsHeritageClauseElement(declaration)); ts.forEach(ts.getClassImplementsHeritageClauseElements(declaration), getPropertySymbolFromTypeReference); } - else if (declaration.kind === 221 /* InterfaceDeclaration */) { + else if (declaration.kind === 222 /* InterfaceDeclaration */) { ts.forEach(ts.getInterfaceBaseTypeNodes(declaration), getPropertySymbolFromTypeReference); } }); @@ -53822,7 +54992,7 @@ var ts; if (type) { var propertySymbol = typeChecker.getPropertyOfType(type, propertyName); if (propertySymbol) { - result.push(propertySymbol); + result.push.apply(result, typeChecker.getRootSymbols(propertySymbol)); } // Visit the typeReference as well to see if it directly or indirectly use that property previousIterationSymbolsCache[symbol.name] = symbol; @@ -53836,30 +55006,37 @@ var ts; return referenceSymbol; } // If the reference symbol is an alias, check if what it is aliasing is one of the search - // symbols. - if (isImportSpecifierSymbol(referenceSymbol)) { - var aliasedSymbol = typeChecker.getAliasedSymbol(referenceSymbol); - if (searchSymbols.indexOf(aliasedSymbol) >= 0) { - return aliasedSymbol; - } - } - // For export specifiers, it can be a local symbol, e.g. - // import {a} from "mod"; - // export {a as somethingElse} - // We want the local target of the export (i.e. the import symbol) and not the final target (i.e. "mod".a) - if (referenceLocation.parent.kind === 237 /* ExportSpecifier */) { - var aliasedSymbol = typeChecker.getExportSpecifierLocalTargetSymbol(referenceLocation.parent); - if (searchSymbols.indexOf(aliasedSymbol) >= 0) { - return aliasedSymbol; - } + // symbols but by looking up for related symbol of this alias so it can handle multiple level of indirectness. + var aliasSymbol = getAliasSymbolForPropertyNameSymbol(referenceSymbol, referenceLocation); + if (aliasSymbol) { + return getRelatedSymbol(searchSymbols, aliasSymbol, referenceLocation); } // If the reference location is in an object literal, try to get the contextual type for the // object literal, lookup the property symbol in the contextual type, and use this symbol to // compare to our searchSymbol - if (isNameOfPropertyAssignment(referenceLocation)) { - return ts.forEach(getPropertySymbolsFromContextualType(referenceLocation), function (contextualSymbol) { + var containingObjectLiteralElement = getContainingObjectLiteralElement(referenceLocation); + if (containingObjectLiteralElement) { + var contextualSymbol = ts.forEach(getPropertySymbolsFromContextualType(containingObjectLiteralElement), function (contextualSymbol) { return ts.forEach(typeChecker.getRootSymbols(contextualSymbol), function (s) { return searchSymbols.indexOf(s) >= 0 ? s : undefined; }); }); + if (contextualSymbol) { + return contextualSymbol; + } + // If the reference location is the name of property from object literal destructuring pattern + // Get the property symbol from the object literal's type and look if thats the search symbol + // In below eg. get 'property' from type of elems iterating type + // for ( { property: p2 } of elems) { } + var propertySymbol = getPropertySymbolOfDestructuringAssignment(referenceLocation); + if (propertySymbol && searchSymbols.indexOf(propertySymbol) >= 0) { + return propertySymbol; + } + } + // If the reference location is the binding element and doesn't have property name + // then include the binding element in the related symbols + // let { a } : { a }; + var bindingElementPropertySymbol = getPropertySymbolOfObjectBindingPatternWithoutPropertyName(referenceSymbol); + if (bindingElementPropertySymbol && searchSymbols.indexOf(bindingElementPropertySymbol) >= 0) { + return bindingElementPropertySymbol; } // Unwrap symbols to get to the root (e.g. transient symbols as a result of widening) // Or a union property, use its underlying unioned symbols @@ -53878,37 +55055,36 @@ var ts; return undefined; }); } - function getPropertySymbolsFromContextualType(node) { - if (isNameOfPropertyAssignment(node)) { - var objectLiteral = node.parent.parent; - var contextualType = typeChecker.getContextualType(objectLiteral); - var name_41 = node.text; - if (contextualType) { - if (contextualType.flags & 16384 /* Union */) { - // This is a union type, first see if the property we are looking for is a union property (i.e. exists in all types) - // if not, search the constituent types for the property - var unionProperty = contextualType.getProperty(name_41); - if (unionProperty) { - return [unionProperty]; - } - else { - var result_5 = []; - ts.forEach(contextualType.types, function (t) { - var symbol = t.getProperty(name_41); - if (symbol) { - result_5.push(symbol); - } - }); - return result_5; - } - } - else { - var symbol_1 = contextualType.getProperty(name_41); - if (symbol_1) { - return [symbol_1]; - } - } + function getNameFromObjectLiteralElement(node) { + if (node.name.kind === 140 /* ComputedPropertyName */) { + var nameExpression = node.name.expression; + // treat computed property names where expression is string/numeric literal as just string/numeric literal + if (ts.isStringOrNumericLiteral(nameExpression.kind)) { + return nameExpression.text; } + return undefined; + } + return node.name.text; + } + function getPropertySymbolsFromContextualType(node) { + var objectLiteral = node.parent; + var contextualType = typeChecker.getContextualType(objectLiteral); + var name = getNameFromObjectLiteralElement(node); + if (name && contextualType) { + var result_5 = []; + var symbol_1 = contextualType.getProperty(name); + if (symbol_1) { + result_5.push(symbol_1); + } + if (contextualType.flags & 16384 /* Union */) { + ts.forEach(contextualType.types, function (t) { + var symbol = t.getProperty(name); + if (symbol) { + result_5.push(symbol); + } + }); + } + return result_5; } return undefined; } @@ -53961,10 +55137,10 @@ var ts; } var parent = node.parent; if (parent) { - if (parent.kind === 185 /* PostfixUnaryExpression */ || parent.kind === 184 /* PrefixUnaryExpression */) { + if (parent.kind === 186 /* PostfixUnaryExpression */ || parent.kind === 185 /* PrefixUnaryExpression */) { return true; } - else if (parent.kind === 186 /* BinaryExpression */ && parent.left === node) { + else if (parent.kind === 187 /* BinaryExpression */ && parent.left === node) { var operator = parent.operatorToken.kind; return 56 /* FirstAssignment */ <= operator && operator <= 68 /* LastAssignment */; } @@ -53995,33 +55171,33 @@ var ts; } function getMeaningFromDeclaration(node) { switch (node.kind) { - case 141 /* Parameter */: - case 217 /* VariableDeclaration */: - case 168 /* BindingElement */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: - case 252 /* PropertyAssignment */: - case 253 /* ShorthandPropertyAssignment */: - case 254 /* EnumMember */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 147 /* Constructor */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 219 /* FunctionDeclaration */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: - case 251 /* CatchClause */: + case 142 /* Parameter */: + case 218 /* VariableDeclaration */: + case 169 /* BindingElement */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: + case 253 /* PropertyAssignment */: + case 254 /* ShorthandPropertyAssignment */: + case 255 /* EnumMember */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 148 /* Constructor */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 220 /* FunctionDeclaration */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: + case 252 /* CatchClause */: return 1 /* Value */; - case 140 /* TypeParameter */: - case 221 /* InterfaceDeclaration */: - case 222 /* TypeAliasDeclaration */: - case 158 /* TypeLiteral */: + case 141 /* TypeParameter */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: + case 159 /* TypeLiteral */: return 2 /* Type */; - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: return 1 /* Value */ | 2 /* Type */; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: if (ts.isAmbientModule(node)) { return 4 /* Namespace */ | 1 /* Value */; } @@ -54031,15 +55207,15 @@ var ts; else { return 4 /* Namespace */; } - case 232 /* NamedImports */: - case 233 /* ImportSpecifier */: - case 228 /* ImportEqualsDeclaration */: - case 229 /* ImportDeclaration */: - case 234 /* ExportAssignment */: - case 235 /* ExportDeclaration */: + case 233 /* NamedImports */: + case 234 /* ImportSpecifier */: + case 229 /* ImportEqualsDeclaration */: + case 230 /* ImportDeclaration */: + case 235 /* ExportAssignment */: + case 236 /* ExportDeclaration */: return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; // An external module can be a Value - case 255 /* SourceFile */: + case 256 /* SourceFile */: return 4 /* Namespace */ | 1 /* Value */; } return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; @@ -54048,10 +55224,10 @@ var ts; if (ts.isRightSideOfQualifiedNameOrPropertyAccess(node)) { node = node.parent; } - return node.parent.kind === 154 /* TypeReference */ || - (node.parent.kind === 193 /* ExpressionWithTypeArguments */ && !ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent)) || + return node.parent.kind === 155 /* TypeReference */ || + (node.parent.kind === 194 /* ExpressionWithTypeArguments */ && !ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent)) || (node.kind === 97 /* ThisKeyword */ && !ts.isExpression(node)) || - node.kind === 164 /* ThisType */; + node.kind === 165 /* ThisType */; } function isNamespaceReference(node) { return isQualifiedNameNamespaceReference(node) || isPropertyAccessNamespaceReference(node); @@ -54059,32 +55235,32 @@ var ts; function isPropertyAccessNamespaceReference(node) { var root = node; var isLastClause = true; - if (root.parent.kind === 171 /* PropertyAccessExpression */) { - while (root.parent && root.parent.kind === 171 /* PropertyAccessExpression */) { + if (root.parent.kind === 172 /* PropertyAccessExpression */) { + while (root.parent && root.parent.kind === 172 /* PropertyAccessExpression */) { root = root.parent; } isLastClause = root.name === node; } - if (!isLastClause && root.parent.kind === 193 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 250 /* HeritageClause */) { + if (!isLastClause && root.parent.kind === 194 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 251 /* HeritageClause */) { var decl = root.parent.parent.parent; - return (decl.kind === 220 /* ClassDeclaration */ && root.parent.parent.token === 106 /* ImplementsKeyword */) || - (decl.kind === 221 /* InterfaceDeclaration */ && root.parent.parent.token === 83 /* ExtendsKeyword */); + return (decl.kind === 221 /* ClassDeclaration */ && root.parent.parent.token === 106 /* ImplementsKeyword */) || + (decl.kind === 222 /* InterfaceDeclaration */ && root.parent.parent.token === 83 /* ExtendsKeyword */); } return false; } function isQualifiedNameNamespaceReference(node) { var root = node; var isLastClause = true; - if (root.parent.kind === 138 /* QualifiedName */) { - while (root.parent && root.parent.kind === 138 /* QualifiedName */) { + if (root.parent.kind === 139 /* QualifiedName */) { + while (root.parent && root.parent.kind === 139 /* QualifiedName */) { root = root.parent; } isLastClause = root.right === node; } - return root.parent.kind === 154 /* TypeReference */ && !isLastClause; + return root.parent.kind === 155 /* TypeReference */ && !isLastClause; } function isInRightSideOfImport(node) { - while (node.parent.kind === 138 /* QualifiedName */) { + while (node.parent.kind === 139 /* QualifiedName */) { node = node.parent; } return ts.isInternalModuleImportEqualsDeclaration(node.parent) && node.parent.moduleReference === node; @@ -54094,15 +55270,15 @@ var ts; // import a = |b|; // Namespace // import a = |b.c|; // Value, type, namespace // import a = |b.c|.d; // Namespace - if (node.parent.kind === 138 /* QualifiedName */ && + if (node.parent.kind === 139 /* QualifiedName */ && node.parent.right === node && - node.parent.parent.kind === 228 /* ImportEqualsDeclaration */) { + node.parent.parent.kind === 229 /* ImportEqualsDeclaration */) { return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; } return 4 /* Namespace */; } function getMeaningFromLocation(node) { - if (node.parent.kind === 234 /* ExportAssignment */) { + if (node.parent.kind === 235 /* ExportAssignment */) { return 1 /* Value */ | 2 /* Type */ | 4 /* Namespace */; } else if (isInRightSideOfImport(node)) { @@ -54138,20 +55314,20 @@ var ts; var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); // Get node at the location var node = ts.getTouchingPropertyName(sourceFile, startPos); - if (!node) { + if (node === sourceFile) { return; } switch (node.kind) { - case 171 /* PropertyAccessExpression */: - case 138 /* QualifiedName */: + case 172 /* PropertyAccessExpression */: + case 139 /* QualifiedName */: case 9 /* StringLiteral */: - case 165 /* StringLiteralType */: + case 166 /* StringLiteralType */: case 84 /* FalseKeyword */: case 99 /* TrueKeyword */: case 93 /* NullKeyword */: case 95 /* SuperKeyword */: case 97 /* ThisKeyword */: - case 164 /* ThisType */: + case 165 /* ThisType */: case 69 /* Identifier */: break; // Cant create the text span @@ -54168,7 +55344,7 @@ var ts; // If this is name of a module declarations, check if this is right side of dotted module name // If parent of the module declaration which is parent of this node is module declaration and its body is the module declaration that this node is name of // Then this name is name from dotted module - if (nodeForStartPos.parent.parent.kind === 224 /* ModuleDeclaration */ && + if (nodeForStartPos.parent.parent.kind === 225 /* ModuleDeclaration */ && nodeForStartPos.parent.parent.body === nodeForStartPos.parent) { // Use parent module declarations name for start pos nodeForStartPos = nodeForStartPos.parent.parent.name; @@ -54209,10 +55385,10 @@ var ts; // That means we're calling back into the host around every 1.2k of the file we process. // Lib.d.ts has similar numbers. switch (kind) { - case 224 /* ModuleDeclaration */: - case 220 /* ClassDeclaration */: - case 221 /* InterfaceDeclaration */: - case 219 /* FunctionDeclaration */: + case 225 /* ModuleDeclaration */: + case 221 /* ClassDeclaration */: + case 222 /* InterfaceDeclaration */: + case 220 /* FunctionDeclaration */: cancellationToken.throwIfCancellationRequested(); } } @@ -54266,7 +55442,7 @@ var ts; */ function hasValueSideModule(symbol) { return ts.forEach(symbol.declarations, function (declaration) { - return declaration.kind === 224 /* ModuleDeclaration */ && + return declaration.kind === 225 /* ModuleDeclaration */ && ts.getModuleInstanceState(declaration) === 1 /* Instantiated */; }); } @@ -54427,16 +55603,16 @@ var ts; pushClassification(tag.tagName.pos, tag.tagName.end - tag.tagName.pos, 18 /* docCommentTagName */); pos = tag.tagName.end; switch (tag.kind) { - case 274 /* JSDocParameterTag */: + case 275 /* JSDocParameterTag */: processJSDocParameterTag(tag); break; - case 277 /* JSDocTemplateTag */: + case 278 /* JSDocTemplateTag */: processJSDocTemplateTag(tag); break; - case 276 /* JSDocTypeTag */: + case 277 /* JSDocTypeTag */: processElement(tag.typeExpression); break; - case 275 /* JSDocReturnTag */: + case 276 /* JSDocReturnTag */: processElement(tag.typeExpression); break; } @@ -54503,10 +55679,10 @@ var ts; return true; } var classifiedElementName = tryClassifyJsxElementName(node); - if (!ts.isToken(node) && node.kind !== 243 /* JsxText */ && classifiedElementName === undefined) { + if (!ts.isToken(node) && node.kind !== 244 /* JsxText */ && classifiedElementName === undefined) { return false; } - var tokenStart = node.kind === 243 /* JsxText */ ? node.pos : classifyLeadingTriviaAndGetTokenStart(node); + var tokenStart = node.kind === 244 /* JsxText */ ? node.pos : classifyLeadingTriviaAndGetTokenStart(node); var tokenWidth = node.end - tokenStart; ts.Debug.assert(tokenWidth >= 0); if (tokenWidth > 0) { @@ -54519,22 +55695,22 @@ var ts; } function tryClassifyJsxElementName(token) { switch (token.parent && token.parent.kind) { - case 242 /* JsxOpeningElement */: + case 243 /* JsxOpeningElement */: if (token.parent.tagName === token) { return 19 /* jsxOpenTagName */; } break; - case 244 /* JsxClosingElement */: + case 245 /* JsxClosingElement */: if (token.parent.tagName === token) { return 20 /* jsxCloseTagName */; } break; - case 241 /* JsxSelfClosingElement */: + case 242 /* JsxSelfClosingElement */: if (token.parent.tagName === token) { return 21 /* jsxSelfClosingTagName */; } break; - case 245 /* JsxAttribute */: + case 246 /* JsxAttribute */: if (token.parent.name === token) { return 22 /* jsxAttribute */; } @@ -54562,17 +55738,17 @@ var ts; if (token) { if (tokenKind === 56 /* EqualsToken */) { // the '=' in a variable declaration is special cased here. - if (token.parent.kind === 217 /* VariableDeclaration */ || - token.parent.kind === 144 /* PropertyDeclaration */ || - token.parent.kind === 141 /* Parameter */ || - token.parent.kind === 245 /* JsxAttribute */) { + if (token.parent.kind === 218 /* VariableDeclaration */ || + token.parent.kind === 145 /* PropertyDeclaration */ || + token.parent.kind === 142 /* Parameter */ || + token.parent.kind === 246 /* JsxAttribute */) { return 5 /* operator */; } } - if (token.parent.kind === 186 /* BinaryExpression */ || - token.parent.kind === 184 /* PrefixUnaryExpression */ || - token.parent.kind === 185 /* PostfixUnaryExpression */ || - token.parent.kind === 187 /* ConditionalExpression */) { + if (token.parent.kind === 187 /* BinaryExpression */ || + token.parent.kind === 185 /* PrefixUnaryExpression */ || + token.parent.kind === 186 /* PostfixUnaryExpression */ || + token.parent.kind === 188 /* ConditionalExpression */) { return 5 /* operator */; } } @@ -54581,8 +55757,8 @@ var ts; else if (tokenKind === 8 /* NumericLiteral */) { return 4 /* numericLiteral */; } - else if (tokenKind === 9 /* StringLiteral */ || tokenKind === 165 /* StringLiteralType */) { - return token.parent.kind === 245 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */; + else if (tokenKind === 9 /* StringLiteral */ || tokenKind === 166 /* StringLiteralType */) { + return token.parent.kind === 246 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */; } else if (tokenKind === 10 /* RegularExpressionLiteral */) { // TODO: we should get another classification type for these literals. @@ -54592,38 +55768,38 @@ var ts; // TODO (drosen): we should *also* get another classification type for these literals. return 6 /* stringLiteral */; } - else if (tokenKind === 243 /* JsxText */) { + else if (tokenKind === 244 /* JsxText */) { return 23 /* jsxText */; } else if (tokenKind === 69 /* Identifier */) { if (token) { switch (token.parent.kind) { - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: if (token.parent.name === token) { return 11 /* className */; } return; - case 140 /* TypeParameter */: + case 141 /* TypeParameter */: if (token.parent.name === token) { return 15 /* typeParameterName */; } return; - case 221 /* InterfaceDeclaration */: + case 222 /* InterfaceDeclaration */: if (token.parent.name === token) { return 13 /* interfaceName */; } return; - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: if (token.parent.name === token) { return 12 /* enumName */; } return; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: if (token.parent.name === token) { return 14 /* moduleName */; } return; - case 141 /* Parameter */: + case 142 /* Parameter */: if (token.parent.name === token) { return 17 /* parameterName */; } @@ -54767,19 +55943,19 @@ var ts; var commentOwner; findOwner: for (commentOwner = tokenAtPos; commentOwner; commentOwner = commentOwner.parent) { switch (commentOwner.kind) { - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 147 /* Constructor */: - case 220 /* ClassDeclaration */: - case 199 /* VariableStatement */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 148 /* Constructor */: + case 221 /* ClassDeclaration */: + case 200 /* VariableStatement */: break findOwner; - case 255 /* SourceFile */: + case 256 /* SourceFile */: return undefined; - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: // If in walking up the tree, we hit a a nested namespace declaration, // then we must be somewhere within a dotted namespace name; however we don't // want to give back a JSDoc template for the 'b' or 'c' in 'namespace a.b.c { }'. - if (commentOwner.parent.kind === 224 /* ModuleDeclaration */) { + if (commentOwner.parent.kind === 225 /* ModuleDeclaration */) { return undefined; } break findOwner; @@ -54816,11 +55992,34 @@ var ts; (tokenStart === position ? newLine + indentationStr : ""); return { newText: result, caretOffset: preamble.length }; } + function isValidBraceCompletionAtPostion(fileName, position, openingBrace) { + // '<' is currently not supported, figuring out if we're in a Generic Type vs. a comparison is too + // expensive to do during typing scenarios + // i.e. whether we're dealing with: + // var x = new foo<| ( with class foo{} ) + // or + // var y = 3 <| + if (openingBrace === 60 /* lessThan */) { + return false; + } + var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + // Check if in a context where we don't want to perform any insertion + if (ts.isInString(sourceFile, position) || ts.isInComment(sourceFile, position)) { + return false; + } + if (ts.isInsideJsxElementOrAttribute(sourceFile, position)) { + return openingBrace === 123 /* openBrace */; + } + if (ts.isInTemplateString(sourceFile, position)) { + return false; + } + return true; + } function getParametersForJsDocOwningNode(commentOwner) { if (ts.isFunctionLike(commentOwner)) { return commentOwner.parameters; } - if (commentOwner.kind === 199 /* VariableStatement */) { + if (commentOwner.kind === 200 /* VariableStatement */) { var varStatement = commentOwner; var varDeclarations = varStatement.declarationList.declarations; if (varDeclarations.length === 1 && varDeclarations[0].initializer) { @@ -54838,17 +56037,17 @@ var ts; * @returns the parameters of a signature found on the RHS if one exists; otherwise 'emptyArray'. */ function getParametersFromRightHandSideOfAssignment(rightHandSide) { - while (rightHandSide.kind === 177 /* ParenthesizedExpression */) { + while (rightHandSide.kind === 178 /* ParenthesizedExpression */) { rightHandSide = rightHandSide.expression; } switch (rightHandSide.kind) { - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return rightHandSide.parameters; - case 191 /* ClassExpression */: + case 192 /* ClassExpression */: for (var _i = 0, _a = rightHandSide.members; _i < _a.length; _i++) { var member = _a[_i]; - if (member.kind === 147 /* Constructor */) { + if (member.kind === 148 /* Constructor */) { return member.parameters; } } @@ -54980,47 +56179,68 @@ var ts; (char >= 48 /* _0 */ && char <= 57 /* _9 */); } } + function getStringLiteralTypeForNode(node, typeChecker) { + var searchNode = node.parent.kind === 166 /* StringLiteralType */ ? node.parent : node; + var type = typeChecker.getTypeAtLocation(searchNode); + if (type && type.flags & 256 /* StringLiteral */) { + return type; + } + return undefined; + } function getRenameInfo(fileName, position) { synchronizeHostData(); var sourceFile = getValidSourceFile(fileName); var typeChecker = program.getTypeChecker(); + var defaultLibFileName = host.getDefaultLibFileName(host.getCompilationSettings()); + var canonicalDefaultLibName = getCanonicalFileName(ts.normalizePath(defaultLibFileName)); var node = ts.getTouchingWord(sourceFile, position); // Can only rename an identifier. - if (node && node.kind === 69 /* Identifier */) { - var symbol = typeChecker.getSymbolAtLocation(node); - // Only allow a symbol to be renamed if it actually has at least one declaration. - if (symbol) { - var declarations = symbol.getDeclarations(); - if (declarations && declarations.length > 0) { - // Disallow rename for elements that are defined in the standard TypeScript library. - var defaultLibFileName = host.getDefaultLibFileName(host.getCompilationSettings()); - var canonicalDefaultLibName = getCanonicalFileName(ts.normalizePath(defaultLibFileName)); - if (defaultLibFileName) { - for (var _i = 0, declarations_11 = declarations; _i < declarations_11.length; _i++) { - var current = declarations_11[_i]; - var sourceFile_3 = current.getSourceFile(); - // TODO (drosen): When is there no source file? - if (!sourceFile_3) { - continue; - } - var canonicalName = getCanonicalFileName(ts.normalizePath(sourceFile_3.fileName)); - if (canonicalName === canonicalDefaultLibName) { - return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library)); - } + if (node) { + if (node.kind === 69 /* Identifier */ || + node.kind === 9 /* StringLiteral */ || + isLiteralNameOfPropertyDeclarationOrIndexAccess(node)) { + var symbol = typeChecker.getSymbolAtLocation(node); + // Only allow a symbol to be renamed if it actually has at least one declaration. + if (symbol) { + var declarations = symbol.getDeclarations(); + if (declarations && declarations.length > 0) { + // Disallow rename for elements that are defined in the standard TypeScript library. + if (ts.forEach(declarations, isDefinedInLibraryFile)) { + return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library)); + } + var displayName = ts.stripQuotes(ts.getDeclaredName(typeChecker, symbol, node)); + var kind = getSymbolKind(symbol, node); + if (kind) { + return { + canRename: true, + kind: kind, + displayName: displayName, + localizedErrorMessage: undefined, + fullDisplayName: typeChecker.getFullyQualifiedName(symbol), + kindModifiers: getSymbolModifiers(symbol), + triggerSpan: createTriggerSpanForNode(node, sourceFile) + }; } } - var displayName = ts.stripQuotes(ts.getDeclaredName(typeChecker, symbol, node)); - var kind = getSymbolKind(symbol, node); - if (kind) { - return { - canRename: true, - kind: kind, - displayName: displayName, - localizedErrorMessage: undefined, - fullDisplayName: typeChecker.getFullyQualifiedName(symbol), - kindModifiers: getSymbolModifiers(symbol), - triggerSpan: ts.createTextSpan(node.getStart(), node.getWidth()) - }; + } + else if (node.kind === 9 /* StringLiteral */) { + var type = getStringLiteralTypeForNode(node, typeChecker); + if (type) { + if (isDefinedInLibraryFile(node)) { + return getRenameInfoError(ts.getLocaleSpecificMessage(ts.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library)); + } + else { + var displayName = ts.stripQuotes(type.text); + return { + canRename: true, + kind: ScriptElementKind.variableElement, + displayName: displayName, + localizedErrorMessage: undefined, + fullDisplayName: displayName, + kindModifiers: ScriptElementKindModifier.none, + triggerSpan: createTriggerSpanForNode(node, sourceFile) + }; + } } } } @@ -55037,6 +56257,26 @@ var ts; triggerSpan: undefined }; } + function isDefinedInLibraryFile(declaration) { + if (defaultLibFileName) { + var sourceFile_3 = declaration.getSourceFile(); + var canonicalName = getCanonicalFileName(ts.normalizePath(sourceFile_3.fileName)); + if (canonicalName === canonicalDefaultLibName) { + return true; + } + } + return false; + } + function createTriggerSpanForNode(node, sourceFile) { + var start = node.getStart(sourceFile); + var width = node.getWidth(sourceFile); + if (node.kind === 9 /* StringLiteral */) { + // Exclude the quotes + start += 1; + width -= 2; + } + return ts.createTextSpan(start, width); + } } return { dispose: dispose, @@ -55072,6 +56312,7 @@ var ts; getFormattingEditsForDocument: getFormattingEditsForDocument, getFormattingEditsAfterKeystroke: getFormattingEditsAfterKeystroke, getDocCommentTemplateAtPosition: getDocCommentTemplateAtPosition, + isValidBraceCompletionAtPostion: isValidBraceCompletionAtPostion, getEmitOutput: getEmitOutput, getNonBoundSourceFile: getNonBoundSourceFile, getProgram: getProgram @@ -55102,8 +56343,9 @@ var ts; // then we want 'something' to be in the name table. Similarly, if we have // "a['propname']" then we want to store "propname" in the name table. if (ts.isDeclarationName(node) || - node.parent.kind === 239 /* ExternalModuleReference */ || - isArgumentOfElementAccessExpression(node)) { + node.parent.kind === 240 /* ExternalModuleReference */ || + isArgumentOfElementAccessExpression(node) || + ts.isLiteralComputedPropertyDeclarationName(node)) { nameTable[node.text] = nameTable[node.text] === undefined ? node.pos : -1; } break; @@ -55115,7 +56357,7 @@ var ts; function isArgumentOfElementAccessExpression(node) { return node && node.parent && - node.parent.kind === 172 /* ElementAccessExpression */ && + node.parent.kind === 173 /* ElementAccessExpression */ && node.parent.argumentExpression === node; } /// Classifier @@ -55163,7 +56405,7 @@ var ts; function canFollow(keyword1, keyword2) { if (ts.isAccessibilityModifier(keyword1)) { if (keyword2 === 123 /* GetKeyword */ || - keyword2 === 130 /* SetKeyword */ || + keyword2 === 131 /* SetKeyword */ || keyword2 === 121 /* ConstructorKeyword */ || keyword2 === 113 /* StaticKeyword */) { // Allow things like "public get", "public constructor" and "public static". @@ -55322,10 +56564,10 @@ var ts; angleBracketStack--; } else if (token === 117 /* AnyKeyword */ || - token === 131 /* StringKeyword */ || - token === 129 /* NumberKeyword */ || + token === 132 /* StringKeyword */ || + token === 130 /* NumberKeyword */ || token === 120 /* BooleanKeyword */ || - token === 132 /* SymbolKeyword */) { + token === 133 /* SymbolKeyword */) { if (angleBracketStack > 0 && !syntacticClassifierAbsent) { // If it looks like we're could be in something generic, don't classify this // as a keyword. We may just get overwritten by the syntactic classifier, @@ -55374,7 +56616,7 @@ var ts; var end = scanner.getTextPos(); addResult(start, end, classFromKind(token)); if (end >= text.length) { - if (token === 9 /* StringLiteral */ || token === 165 /* StringLiteralType */) { + if (token === 9 /* StringLiteral */ || token === 166 /* StringLiteralType */) { // Check to see if we finished up on a multiline string literal. var tokenText = scanner.getTokenText(); if (scanner.isUnterminated()) { @@ -55497,7 +56739,7 @@ var ts; } } function isKeyword(token) { - return token >= 70 /* FirstKeyword */ && token <= 137 /* LastKeyword */; + return token >= 70 /* FirstKeyword */ && token <= 138 /* LastKeyword */; } function classFromKind(token) { if (isKeyword(token)) { @@ -55513,7 +56755,7 @@ var ts; case 8 /* NumericLiteral */: return 4 /* numericLiteral */; case 9 /* StringLiteral */: - case 165 /* StringLiteralType */: + case 166 /* StringLiteralType */: return 6 /* stringLiteral */; case 10 /* RegularExpressionLiteral */: return 7 /* regularExpressionLiteral */; @@ -55587,7 +56829,7 @@ var ts; // token at position will return let keyword on second line as the token but we would like to use // token on same line if trailing trivia (comments or white spaces on same line) part of the last token on that line tokenAtLocation = ts.findPrecedingToken(tokenAtLocation.pos, sourceFile); - // Its a blank line + // It's a blank line if (!tokenAtLocation || sourceFile.getLineAndCharacterOfPosition(tokenAtLocation.getEnd()).line !== lineOfPosition) { return undefined; } @@ -55625,113 +56867,113 @@ var ts; function spanInNode(node) { if (node) { switch (node.kind) { - case 199 /* VariableStatement */: + case 200 /* VariableStatement */: // Span on first variable declaration return spanInVariableDeclaration(node.declarationList.declarations[0]); - case 217 /* VariableDeclaration */: - case 144 /* PropertyDeclaration */: - case 143 /* PropertySignature */: + case 218 /* VariableDeclaration */: + case 145 /* PropertyDeclaration */: + case 144 /* PropertySignature */: return spanInVariableDeclaration(node); - case 141 /* Parameter */: + case 142 /* Parameter */: return spanInParameterDeclaration(node); - case 219 /* FunctionDeclaration */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 147 /* Constructor */: - case 178 /* FunctionExpression */: - case 179 /* ArrowFunction */: + case 220 /* FunctionDeclaration */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 148 /* Constructor */: + case 179 /* FunctionExpression */: + case 180 /* ArrowFunction */: return spanInFunctionDeclaration(node); - case 198 /* Block */: + case 199 /* Block */: if (ts.isFunctionBlock(node)) { return spanInFunctionBlock(node); } // Fall through - case 225 /* ModuleBlock */: + case 226 /* ModuleBlock */: return spanInBlock(node); - case 251 /* CatchClause */: + case 252 /* CatchClause */: return spanInBlock(node.block); - case 201 /* ExpressionStatement */: + case 202 /* ExpressionStatement */: // span on the expression return textSpan(node.expression); - case 210 /* ReturnStatement */: + case 211 /* ReturnStatement */: // span on return keyword and expression if present return textSpan(node.getChildAt(0), node.expression); - case 204 /* WhileStatement */: + case 205 /* WhileStatement */: // Span on while(...) return textSpanEndingAtNextToken(node, node.expression); - case 203 /* DoStatement */: + case 204 /* DoStatement */: // span in statement of the do statement return spanInNode(node.statement); - case 216 /* DebuggerStatement */: + case 217 /* DebuggerStatement */: // span on debugger keyword return textSpan(node.getChildAt(0)); - case 202 /* IfStatement */: + case 203 /* IfStatement */: // set on if(..) span return textSpanEndingAtNextToken(node, node.expression); - case 213 /* LabeledStatement */: + case 214 /* LabeledStatement */: // span in statement return spanInNode(node.statement); - case 209 /* BreakStatement */: - case 208 /* ContinueStatement */: + case 210 /* BreakStatement */: + case 209 /* ContinueStatement */: // On break or continue keyword and label if present return textSpan(node.getChildAt(0), node.label); - case 205 /* ForStatement */: + case 206 /* ForStatement */: return spanInForStatement(node); - case 206 /* ForInStatement */: + case 207 /* ForInStatement */: // span of for (a in ...) return textSpanEndingAtNextToken(node, node.expression); - case 207 /* ForOfStatement */: + case 208 /* ForOfStatement */: // span in initializer return spanInInitializerOfForLike(node); - case 212 /* SwitchStatement */: + case 213 /* SwitchStatement */: // span on switch(...) return textSpanEndingAtNextToken(node, node.expression); - case 248 /* CaseClause */: - case 249 /* DefaultClause */: + case 249 /* CaseClause */: + case 250 /* DefaultClause */: // span in first statement of the clause return spanInNode(node.statements[0]); - case 215 /* TryStatement */: + case 216 /* TryStatement */: // span in try block return spanInBlock(node.tryBlock); - case 214 /* ThrowStatement */: + case 215 /* ThrowStatement */: // span in throw ... return textSpan(node, node.expression); - case 234 /* ExportAssignment */: + case 235 /* ExportAssignment */: // span on export = id return textSpan(node, node.expression); - case 228 /* ImportEqualsDeclaration */: + case 229 /* ImportEqualsDeclaration */: // import statement without including semicolon return textSpan(node, node.moduleReference); - case 229 /* ImportDeclaration */: + case 230 /* ImportDeclaration */: // import statement without including semicolon return textSpan(node, node.moduleSpecifier); - case 235 /* ExportDeclaration */: + case 236 /* ExportDeclaration */: // import statement without including semicolon return textSpan(node, node.moduleSpecifier); - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: // span on complete module if it is instantiated if (ts.getModuleInstanceState(node) !== 1 /* Instantiated */) { return undefined; } - case 220 /* ClassDeclaration */: - case 223 /* EnumDeclaration */: - case 254 /* EnumMember */: - case 168 /* BindingElement */: + case 221 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: + case 255 /* EnumMember */: + case 169 /* BindingElement */: // span on complete node return textSpan(node); - case 211 /* WithStatement */: + case 212 /* WithStatement */: // span in statement return spanInNode(node.statement); - case 142 /* Decorator */: + case 143 /* Decorator */: return spanInNodeArray(node.parent.decorators); - case 166 /* ObjectBindingPattern */: - case 167 /* ArrayBindingPattern */: + case 167 /* ObjectBindingPattern */: + case 168 /* ArrayBindingPattern */: return spanInBindingPattern(node); // No breakpoint in interface, type alias - case 221 /* InterfaceDeclaration */: - case 222 /* TypeAliasDeclaration */: + case 222 /* InterfaceDeclaration */: + case 223 /* TypeAliasDeclaration */: return undefined; // Tokens: case 23 /* SemicolonToken */: @@ -55761,7 +57003,7 @@ var ts; case 72 /* CatchKeyword */: case 85 /* FinallyKeyword */: return spanInNextNode(node); - case 137 /* OfKeyword */: + case 138 /* OfKeyword */: return spanInOfKeyword(node); default: // Destructuring pattern in destructuring assignment @@ -55774,13 +57016,13 @@ var ts; // a or ...c or d: x from // [a, b, ...c] or { a, b } or { d: x } from destructuring pattern if ((node.kind === 69 /* Identifier */ || - node.kind == 190 /* SpreadElementExpression */ || - node.kind === 252 /* PropertyAssignment */ || - node.kind === 253 /* ShorthandPropertyAssignment */) && + node.kind == 191 /* SpreadElementExpression */ || + node.kind === 253 /* PropertyAssignment */ || + node.kind === 254 /* ShorthandPropertyAssignment */) && ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) { return textSpan(node); } - if (node.kind === 186 /* BinaryExpression */) { + if (node.kind === 187 /* BinaryExpression */) { var binaryExpression = node; // Set breakpoint in destructuring pattern if its destructuring assignment // [a, b, c] or {a, b, c} of @@ -55803,22 +57045,22 @@ var ts; } if (ts.isExpression(node)) { switch (node.parent.kind) { - case 203 /* DoStatement */: + case 204 /* DoStatement */: // Set span as if on while keyword return spanInPreviousNode(node); - case 142 /* Decorator */: + case 143 /* Decorator */: // Set breakpoint on the decorator emit return spanInNode(node.parent); - case 205 /* ForStatement */: - case 207 /* ForOfStatement */: + case 206 /* ForStatement */: + case 208 /* ForOfStatement */: return textSpan(node); - case 186 /* BinaryExpression */: + case 187 /* BinaryExpression */: if (node.parent.operatorToken.kind === 24 /* CommaToken */) { - // if this is comma expression, the breakpoint is possible in this expression + // If this is a comma expression, the breakpoint is possible in this expression return textSpan(node); } break; - case 179 /* ArrowFunction */: + case 180 /* ArrowFunction */: if (node.parent.body === node) { // If this is body of arrow function, it is allowed to have the breakpoint return textSpan(node); @@ -55827,13 +57069,13 @@ var ts; } } // If this is name of property assignment, set breakpoint in the initializer - if (node.parent.kind === 252 /* PropertyAssignment */ && + if (node.parent.kind === 253 /* PropertyAssignment */ && node.parent.name === node && !ts.isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.parent)) { return spanInNode(node.parent.initializer); } // Breakpoint in type assertion goes to its operand - if (node.parent.kind === 176 /* TypeAssertionExpression */ && node.parent.type === node) { + if (node.parent.kind === 177 /* TypeAssertionExpression */ && node.parent.type === node) { return spanInNextNode(node.parent.type); } // return type of function go to previous token @@ -55841,8 +57083,8 @@ var ts; return spanInPreviousNode(node); } // initializer of variable/parameter declaration go to previous node - if ((node.parent.kind === 217 /* VariableDeclaration */ || - node.parent.kind === 141 /* Parameter */)) { + if ((node.parent.kind === 218 /* VariableDeclaration */ || + node.parent.kind === 142 /* Parameter */)) { var paramOrVarDecl = node.parent; if (paramOrVarDecl.initializer === node || paramOrVarDecl.type === node || @@ -55850,7 +57092,7 @@ var ts; return spanInPreviousNode(node); } } - if (node.parent.kind === 186 /* BinaryExpression */) { + if (node.parent.kind === 187 /* BinaryExpression */) { var binaryExpression = node.parent; if (ts.isArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.left) && (binaryExpression.right === node || @@ -55876,10 +57118,10 @@ var ts; } function spanInVariableDeclaration(variableDeclaration) { // If declaration of for in statement, just set the span in parent - if (variableDeclaration.parent.parent.kind === 206 /* ForInStatement */) { + if (variableDeclaration.parent.parent.kind === 207 /* ForInStatement */) { return spanInNode(variableDeclaration.parent.parent); } - // If this is a destructuring pattern set breakpoint in binding pattern + // If this is a destructuring pattern, set breakpoint in binding pattern if (ts.isBindingPattern(variableDeclaration.name)) { return spanInBindingPattern(variableDeclaration.name); } @@ -55887,14 +57129,14 @@ var ts; // or its declaration from 'for of' if (variableDeclaration.initializer || (variableDeclaration.flags & 1 /* Export */) || - variableDeclaration.parent.parent.kind === 207 /* ForOfStatement */) { + variableDeclaration.parent.parent.kind === 208 /* ForOfStatement */) { return textSpanFromVariableDeclaration(variableDeclaration); } var declarations = variableDeclaration.parent.declarations; if (declarations && declarations[0] !== variableDeclaration) { - // If we cant set breakpoint on this declaration, set it on previous one + // If we cannot set breakpoint on this declaration, set it on previous one // Because the variable declaration may be binding pattern and - // we would like to set breakpoint in last binding element if thats the case, + // we would like to set breakpoint in last binding element if that's the case, // use preceding token instead return spanInNode(ts.findPrecedingToken(variableDeclaration.pos, sourceFile, variableDeclaration.parent)); } @@ -55906,7 +57148,7 @@ var ts; } function spanInParameterDeclaration(parameter) { if (ts.isBindingPattern(parameter.name)) { - // set breakpoint in binding pattern + // Set breakpoint in binding pattern return spanInBindingPattern(parameter.name); } else if (canHaveSpanInParameterDeclaration(parameter)) { @@ -55927,7 +57169,7 @@ var ts; } function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) { return !!(functionDeclaration.flags & 1 /* Export */) || - (functionDeclaration.parent.kind === 220 /* ClassDeclaration */ && functionDeclaration.kind !== 147 /* Constructor */); + (functionDeclaration.parent.kind === 221 /* ClassDeclaration */ && functionDeclaration.kind !== 148 /* Constructor */); } function spanInFunctionDeclaration(functionDeclaration) { // No breakpoints in the function signature @@ -55950,26 +57192,26 @@ var ts; } function spanInBlock(block) { switch (block.parent.kind) { - case 224 /* ModuleDeclaration */: + case 225 /* ModuleDeclaration */: if (ts.getModuleInstanceState(block.parent) !== 1 /* Instantiated */) { return undefined; } // Set on parent if on same line otherwise on first statement - case 204 /* WhileStatement */: - case 202 /* IfStatement */: - case 206 /* ForInStatement */: + case 205 /* WhileStatement */: + case 203 /* IfStatement */: + case 207 /* ForInStatement */: return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]); // Set span on previous token if it starts on same line otherwise on the first statement of the block - case 205 /* ForStatement */: - case 207 /* ForOfStatement */: + case 206 /* ForStatement */: + case 208 /* ForOfStatement */: return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]); } // Default action is to set on first statement return spanInNode(block.statements[0]); } function spanInInitializerOfForLike(forLikeStatement) { - if (forLikeStatement.initializer.kind === 218 /* VariableDeclarationList */) { - // declaration list, set breakpoint in first declaration + if (forLikeStatement.initializer.kind === 219 /* VariableDeclarationList */) { + // Declaration list - set breakpoint in first declaration var variableDeclarationList = forLikeStatement.initializer; if (variableDeclarationList.declarations.length > 0) { return spanInNode(variableDeclarationList.declarations[0]); @@ -55993,23 +57235,23 @@ var ts; } function spanInBindingPattern(bindingPattern) { // Set breakpoint in first binding element - var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 192 /* OmittedExpression */ ? element : undefined; }); + var firstBindingElement = ts.forEach(bindingPattern.elements, function (element) { return element.kind !== 193 /* OmittedExpression */ ? element : undefined; }); if (firstBindingElement) { return spanInNode(firstBindingElement); } // Empty binding pattern of binding element, set breakpoint on binding element - if (bindingPattern.parent.kind === 168 /* BindingElement */) { + if (bindingPattern.parent.kind === 169 /* BindingElement */) { return textSpan(bindingPattern.parent); } // Variable declaration is used as the span return textSpanFromVariableDeclaration(bindingPattern.parent); } function spanInArrayLiteralOrObjectLiteralDestructuringPattern(node) { - ts.Debug.assert(node.kind !== 167 /* ArrayBindingPattern */ && node.kind !== 166 /* ObjectBindingPattern */); - var elements = node.kind === 169 /* ArrayLiteralExpression */ ? + ts.Debug.assert(node.kind !== 168 /* ArrayBindingPattern */ && node.kind !== 167 /* ObjectBindingPattern */); + var elements = node.kind === 170 /* ArrayLiteralExpression */ ? node.elements : node.properties; - var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 192 /* OmittedExpression */ ? element : undefined; }); + var firstBindingElement = ts.forEach(elements, function (element) { return element.kind !== 193 /* OmittedExpression */ ? element : undefined; }); if (firstBindingElement) { return spanInNode(firstBindingElement); } @@ -56017,18 +57259,18 @@ var ts; // just nested element in another destructuring assignment // set breakpoint on assignment when parent is destructuring assignment // Otherwise set breakpoint for this element - return textSpan(node.parent.kind === 186 /* BinaryExpression */ ? node.parent : node); + return textSpan(node.parent.kind === 187 /* BinaryExpression */ ? node.parent : node); } // Tokens: function spanInOpenBraceToken(node) { switch (node.parent.kind) { - case 223 /* EnumDeclaration */: + case 224 /* EnumDeclaration */: var enumDeclaration = node.parent; return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile)); - case 220 /* ClassDeclaration */: + case 221 /* ClassDeclaration */: var classDeclaration = node.parent; return spanInNodeIfStartsOnSameLine(ts.findPrecedingToken(node.pos, sourceFile, node.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile)); - case 226 /* CaseBlock */: + case 227 /* CaseBlock */: return spanInNodeIfStartsOnSameLine(node.parent.parent, node.parent.clauses[0]); } // Default to parent node @@ -56036,24 +57278,24 @@ var ts; } function spanInCloseBraceToken(node) { switch (node.parent.kind) { - case 225 /* ModuleBlock */: - // If this is not instantiated module block no bp span + case 226 /* ModuleBlock */: + // If this is not an instantiated module block, no bp span if (ts.getModuleInstanceState(node.parent.parent) !== 1 /* Instantiated */) { return undefined; } - case 223 /* EnumDeclaration */: - case 220 /* ClassDeclaration */: + case 224 /* EnumDeclaration */: + case 221 /* ClassDeclaration */: // Span on close brace token return textSpan(node); - case 198 /* Block */: + case 199 /* Block */: if (ts.isFunctionBlock(node.parent)) { // Span on close brace token return textSpan(node); } - // fall through. - case 251 /* CatchClause */: + // fall through + case 252 /* CatchClause */: return spanInNode(ts.lastOrUndefined(node.parent.statements)); - case 226 /* CaseBlock */: + case 227 /* CaseBlock */: // breakpoint in last statement of the last clause var caseBlock = node.parent; var lastClause = ts.lastOrUndefined(caseBlock.clauses); @@ -56061,7 +57303,7 @@ var ts; return spanInNode(ts.lastOrUndefined(lastClause.statements)); } return undefined; - case 166 /* ObjectBindingPattern */: + case 167 /* ObjectBindingPattern */: // Breakpoint in last binding element or binding pattern if it contains no elements var bindingPattern = node.parent; return spanInNode(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern); @@ -56077,7 +57319,7 @@ var ts; } function spanInCloseBracketToken(node) { switch (node.parent.kind) { - case 167 /* ArrayBindingPattern */: + case 168 /* ArrayBindingPattern */: // Breakpoint in last binding element or binding pattern if it contains no elements var bindingPattern = node.parent; return textSpan(ts.lastOrUndefined(bindingPattern.elements) || bindingPattern); @@ -56092,12 +57334,12 @@ var ts; } } function spanInOpenParenToken(node) { - if (node.parent.kind === 203 /* DoStatement */ || - node.parent.kind === 173 /* CallExpression */ || - node.parent.kind === 174 /* NewExpression */) { + if (node.parent.kind === 204 /* DoStatement */ || + node.parent.kind === 174 /* CallExpression */ || + node.parent.kind === 175 /* NewExpression */) { return spanInPreviousNode(node); } - if (node.parent.kind === 177 /* ParenthesizedExpression */) { + if (node.parent.kind === 178 /* ParenthesizedExpression */) { return spanInNextNode(node); } // Default to parent node @@ -56106,21 +57348,21 @@ var ts; function spanInCloseParenToken(node) { // Is this close paren token of parameter list, set span in previous token switch (node.parent.kind) { - case 178 /* FunctionExpression */: - case 219 /* FunctionDeclaration */: - case 179 /* ArrowFunction */: - case 146 /* MethodDeclaration */: - case 145 /* MethodSignature */: - case 148 /* GetAccessor */: - case 149 /* SetAccessor */: - case 147 /* Constructor */: - case 204 /* WhileStatement */: - case 203 /* DoStatement */: - case 205 /* ForStatement */: - case 207 /* ForOfStatement */: - case 173 /* CallExpression */: - case 174 /* NewExpression */: - case 177 /* ParenthesizedExpression */: + case 179 /* FunctionExpression */: + case 220 /* FunctionDeclaration */: + case 180 /* ArrowFunction */: + case 147 /* MethodDeclaration */: + case 146 /* MethodSignature */: + case 149 /* GetAccessor */: + case 150 /* SetAccessor */: + case 148 /* Constructor */: + case 205 /* WhileStatement */: + case 204 /* DoStatement */: + case 206 /* ForStatement */: + case 208 /* ForOfStatement */: + case 174 /* CallExpression */: + case 175 /* NewExpression */: + case 178 /* ParenthesizedExpression */: return spanInPreviousNode(node); // Default to parent node default: @@ -56130,20 +57372,20 @@ var ts; function spanInColonToken(node) { // Is this : specifying return annotation of the function declaration if (ts.isFunctionLike(node.parent) || - node.parent.kind === 252 /* PropertyAssignment */ || - node.parent.kind === 141 /* Parameter */) { + node.parent.kind === 253 /* PropertyAssignment */ || + node.parent.kind === 142 /* Parameter */) { return spanInPreviousNode(node); } return spanInNode(node.parent); } function spanInGreaterThanOrLessThanToken(node) { - if (node.parent.kind === 176 /* TypeAssertionExpression */) { + if (node.parent.kind === 177 /* TypeAssertionExpression */) { return spanInNextNode(node); } return spanInNode(node.parent); } function spanInWhileKeyword(node) { - if (node.parent.kind === 203 /* DoStatement */) { + if (node.parent.kind === 204 /* DoStatement */) { // Set span on while expression return textSpanEndingAtNextToken(node, node.parent.expression); } @@ -56151,8 +57393,8 @@ var ts; return spanInNode(node.parent); } function spanInOfKeyword(node) { - if (node.parent.kind === 207 /* ForOfStatement */) { - // set using next token + if (node.parent.kind === 208 /* ForOfStatement */) { + // Set using next token return spanInNextNode(node); } // Default to parent node @@ -56181,7 +57423,7 @@ var ts; /* @internal */ var debugObjectHost = this; // We need to use 'null' to interface with the managed side. -/* tslint:disable:no-null */ +/* tslint:disable:no-null-keyword */ /* tslint:disable:no-in-operator */ /* @internal */ var ts; @@ -56351,6 +57593,9 @@ var ts; if ("directoryExists" in this.shimHost) { this.directoryExists = function (directoryName) { return _this.shimHost.directoryExists(directoryName); }; } + if ("realpath" in this.shimHost) { + this.realpath = function (path) { return _this.shimHost.realpath(path); }; + } } CoreServicesShimHostAdapter.prototype.readDirectory = function (rootDir, extension, exclude, depth) { // Wrap the API changes for 2.0 release. This try/catch @@ -56583,6 +57828,10 @@ var ts; var _this = this; return this.forwardJSONCall("getBraceMatchingAtPosition('" + fileName + "', " + position + ")", function () { return _this.languageService.getBraceMatchingAtPosition(fileName, position); }); }; + LanguageServiceShimObject.prototype.isValidBraceCompletionAtPostion = function (fileName, position, openingBrace) { + var _this = this; + return this.forwardJSONCall("isValidBraceCompletionAtPostion('" + fileName + "', " + position + ", " + openingBrace + ")", function () { return _this.languageService.isValidBraceCompletionAtPostion(fileName, position, openingBrace); }); + }; /// GET SMART INDENT LanguageServiceShimObject.prototype.getIndentationAtPosition = function (fileName, position, options /*Services.EditorOptions*/) { var _this = this; @@ -56780,6 +58029,7 @@ var ts; options: {}, typingOptions: {}, files: [], + raw: {}, errors: [realizeDiagnostic(result.error, "\r\n")] }; } @@ -56789,6 +58039,7 @@ var ts; options: configFile.options, typingOptions: configFile.typingOptions, files: configFile.fileNames, + raw: configFile.raw, errors: realizeDiagnostics(configFile.errors, "\r\n") }; }); diff --git a/scripts/configureNightly.ts b/scripts/configureNightly.ts index 640f330b376..8553c15ebd0 100644 --- a/scripts/configureNightly.ts +++ b/scripts/configureNightly.ts @@ -67,7 +67,7 @@ function getNightlyVersionString(versionString: string): string { const now = new Date(); const timeStr = now.toISOString().replace(/:|T|\.|-/g, "").slice(0, 8); - return `${versionString}-dev.${timeStr}`; + return `${versionString}-dev.${timeStr}-1.0`; } main(); \ No newline at end of file diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 304e77271a7..a7cb0d12758 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -1764,8 +1764,8 @@ namespace ts { case SyntaxKind.ImportSpecifier: case SyntaxKind.ExportSpecifier: return declareSymbolAndAddToSymbolTable(node, SymbolFlags.Alias, SymbolFlags.AliasExcludes); - case SyntaxKind.GlobalModuleExportDeclaration: - return bindGlobalModuleExportDeclaration(node); + case SyntaxKind.NamespaceExportDeclaration: + return bindNamespaceExportDeclaration(node); case SyntaxKind.ImportClause: return bindImportClause(node); case SyntaxKind.ExportDeclaration: @@ -1815,7 +1815,7 @@ namespace ts { } } - function bindGlobalModuleExportDeclaration(node: GlobalModuleExportDeclaration) { + function bindNamespaceExportDeclaration(node: NamespaceExportDeclaration) { if (node.modifiers && node.modifiers.length) { file.bindDiagnostics.push(createDiagnosticForNode(node, Diagnostics.Modifiers_cannot_appear_here)); } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 6a720d947df..489abd1ae51 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -79,6 +79,7 @@ namespace ts { getIndexTypeOfType, getBaseTypes, getReturnTypeOfSignature, + getNonNullableType, getSymbolsInScope, getSymbolAtLocation, getShorthandAssignmentValueSymbol, @@ -120,9 +121,9 @@ namespace ts { const nullType = createIntrinsicType(TypeFlags.Null | nullableWideningFlags, "null"); const emptyArrayElementType = createIntrinsicType(TypeFlags.Undefined | TypeFlags.ContainsUndefinedOrNull, "undefined"); const unknownType = createIntrinsicType(TypeFlags.Any, "unknown"); + const neverType = createIntrinsicType(TypeFlags.Never, "never"); const emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); - const nothingType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); const emptyGenericType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined); emptyGenericType.instantiations = {}; @@ -638,6 +639,7 @@ namespace ts { let propertyWithInvalidInitializer: Node; const errorLocation = location; let grandparent: Node; + let isInExternalModule = false; loop: while (location) { // Locals of a source file are not in scope (because they get merged into the global symbol table) @@ -685,6 +687,7 @@ namespace ts { switch (location.kind) { case SyntaxKind.SourceFile: if (!isExternalOrCommonJsModule(location)) break; + isInExternalModule = true; case SyntaxKind.ModuleDeclaration: const moduleExports = getSymbolOfNode(location).exports; if (location.kind === SyntaxKind.SourceFile || isAmbientModule(location)) { @@ -878,6 +881,14 @@ namespace ts { checkResolvedBlockScopedVariable(exportOrLocalSymbol, errorLocation); } } + + // If we're in an external module, we can't reference symbols created from UMD export declarations + if (result && isInExternalModule) { + const decls = result.declarations; + if (decls && decls.length === 1 && decls[0].kind === SyntaxKind.NamespaceExportDeclaration) { + error(errorLocation, Diagnostics.Identifier_0_must_be_imported_from_a_module, name); + } + } } return result; } @@ -1075,7 +1086,7 @@ namespace ts { return getExternalModuleMember(node.parent.parent.parent, node); } - function getTargetOfGlobalModuleExportDeclaration(node: GlobalModuleExportDeclaration): Symbol { + function getTargetOfGlobalModuleExportDeclaration(node: NamespaceExportDeclaration): Symbol { return resolveExternalModuleSymbol(node.parent.symbol); } @@ -1103,8 +1114,8 @@ namespace ts { return getTargetOfExportSpecifier(node); case SyntaxKind.ExportAssignment: return getTargetOfExportAssignment(node); - case SyntaxKind.GlobalModuleExportDeclaration: - return getTargetOfGlobalModuleExportDeclaration(node); + case SyntaxKind.NamespaceExportDeclaration: + return getTargetOfGlobalModuleExportDeclaration(node); } } @@ -2029,12 +2040,7 @@ namespace ts { writeUnionOrIntersectionType(type, flags); } else if (type.flags & TypeFlags.Anonymous) { - if (type === nothingType) { - writer.writeKeyword("nothing"); - } - else { - writeAnonymousType(type, flags); - } + writeAnonymousType(type, flags); } else if (type.flags & TypeFlags.StringLiteral) { writer.writeStringLiteral(`"${escapeString((type).text)}"`); @@ -2749,7 +2755,7 @@ namespace ts { // assigned by contextual typing. function getTypeForBindingElementParent(node: VariableLikeDeclaration) { const symbol = getSymbolOfNode(node); - return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node); + return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration(node, /*includeOptionality*/ false); } function getTextOfPropertyName(name: PropertyName): string { @@ -2884,8 +2890,12 @@ namespace ts { return undefined; } + function addOptionality(type: Type, optional: boolean): Type { + return strictNullChecks && optional ? addNullableKind(type, TypeFlags.Undefined) : type; + } + // Return the inferred type for a variable, parameter, or property declaration - function getTypeForVariableLikeDeclaration(declaration: VariableLikeDeclaration): Type { + function getTypeForVariableLikeDeclaration(declaration: VariableLikeDeclaration, includeOptionality: boolean): Type { if (declaration.flags & NodeFlags.JavaScriptFile) { // If this is a variable in a JavaScript file, then use the JSDoc type (if it has // one as its type), otherwise fallback to the below standard TS codepaths to @@ -2915,8 +2925,7 @@ namespace ts { // Use type from type annotation if one is present if (declaration.type) { - const type = getTypeFromTypeNode(declaration.type); - return strictNullChecks && declaration.questionToken ? addNullableKind(type, TypeFlags.Undefined) : type; + return addOptionality(getTypeFromTypeNode(declaration.type), /*optional*/ declaration.questionToken && includeOptionality); } if (declaration.kind === SyntaxKind.Parameter) { @@ -2938,13 +2947,13 @@ namespace ts { ? getContextuallyTypedThisType(func) : getContextuallyTypedParameterType(declaration); if (type) { - return strictNullChecks && declaration.questionToken ? addNullableKind(type, TypeFlags.Undefined) : type; + return addOptionality(type, /*optional*/ declaration.questionToken && includeOptionality); } } // Use the type of the initializer expression if one is present if (declaration.initializer) { - return checkExpressionCached(declaration.initializer); + return addOptionality(checkExpressionCached(declaration.initializer), /*optional*/ declaration.questionToken && includeOptionality); } // If it is a short-hand property assignment, use the type of the identifier @@ -3047,7 +3056,7 @@ namespace ts { // binding pattern [x, s = ""]. Because the contextual type is a tuple type, the resulting type of [1, "one"] is the // tuple type [number, string]. Thus, the type inferred for 'x' is number and the type inferred for 's' is string. function getWidenedTypeForVariableLikeDeclaration(declaration: VariableLikeDeclaration, reportErrors?: boolean): Type { - let type = getTypeForVariableLikeDeclaration(declaration); + let type = getTypeForVariableLikeDeclaration(declaration, /*includeOptionality*/ true); if (type) { if (reportErrors) { reportErrorsFromWidening(declaration, type); @@ -3215,7 +3224,9 @@ namespace ts { function getTypeOfFuncClassEnumModule(symbol: Symbol): Type { const links = getSymbolLinks(symbol); if (!links.type) { - links.type = createObjectType(TypeFlags.Anonymous, symbol); + const type = createObjectType(TypeFlags.Anonymous, symbol); + links.type = strictNullChecks && symbol.flags & SymbolFlags.Optional ? + addNullableKind(type, TypeFlags.Undefined) : type; } return links.type; } @@ -3670,6 +3681,7 @@ namespace ts { case SyntaxKind.VoidKeyword: case SyntaxKind.UndefinedKeyword: case SyntaxKind.NullKeyword: + case SyntaxKind.NeverKeyword: case SyntaxKind.StringLiteralType: return true; case SyntaxKind.ArrayType: @@ -4577,12 +4589,7 @@ namespace ts { function getErasedSignature(signature: Signature): Signature { if (!signature.typeParameters) return signature; if (!signature.erasedSignatureCache) { - if (signature.target) { - signature.erasedSignatureCache = instantiateSignature(getErasedSignature(signature.target), signature.mapper); - } - else { - signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), /*eraseTypeParameters*/ true); - } + signature.erasedSignatureCache = instantiateSignature(signature, createTypeEraser(signature.typeParameters), /*eraseTypeParameters*/ true); } return signature.erasedSignatureCache; } @@ -5005,7 +5012,7 @@ namespace ts { if (type.flags & TypeFlags.Undefined) typeSet.containsUndefined = true; if (type.flags & TypeFlags.Null) typeSet.containsNull = true; } - else if (type !== nothingType && !contains(typeSet, type)) { + else if (type !== neverType && !contains(typeSet, type)) { typeSet.push(type); } } @@ -5046,7 +5053,7 @@ namespace ts { // a named type that circularly references itself. function getUnionType(types: Type[], noSubtypeReduction?: boolean): Type { if (types.length === 0) { - return nothingType; + return neverType; } if (types.length === 1) { return types[0]; @@ -5066,7 +5073,7 @@ namespace ts { if (typeSet.length === 0) { return typeSet.containsNull ? nullType : typeSet.containsUndefined ? undefinedType : - nothingType; + neverType; } else if (typeSet.length === 1) { return typeSet[0]; @@ -5150,7 +5157,7 @@ namespace ts { function getTypeFromStringLiteralTypeNode(node: StringLiteralTypeNode): Type { const links = getNodeLinks(node); if (!links.resolvedType) { - links.resolvedType = getStringLiteralTypeForText(node.text); + links.resolvedType = getStringLiteralTypeForText(unescapeIdentifier(node.text)); } return links.resolvedType; } @@ -5214,6 +5221,8 @@ namespace ts { return undefinedType; case SyntaxKind.NullKeyword: return nullType; + case SyntaxKind.NeverKeyword: + return neverType; case SyntaxKind.ThisType: case SyntaxKind.ThisKeyword: return getTypeFromThisTypeNode(node); @@ -5460,7 +5469,7 @@ namespace ts { const declaration = node; if (declaration.typeParameters) { for (const d of declaration.typeParameters) { - if (contains(mappedTypes, getDeclaredTypeOfTypeParameter(d.symbol))) { + if (contains(mappedTypes, getDeclaredTypeOfTypeParameter(getSymbolOfNode(d)))) { return true; } } @@ -5859,28 +5868,28 @@ namespace ts { return isIdenticalTo(source, target); } - if (target.flags & TypeFlags.Any) return Ternary.True; - if (source.flags & TypeFlags.Undefined) { - if (!strictNullChecks || target.flags & (TypeFlags.Undefined | TypeFlags.Void) || source === emptyArrayElementType) return Ternary.True; - } - if (source.flags & TypeFlags.Null) { - if (!strictNullChecks || target.flags & TypeFlags.Null) return Ternary.True; - } - if (source.flags & TypeFlags.Enum && target === numberType) return Ternary.True; - if (source.flags & TypeFlags.Enum && target.flags & TypeFlags.Enum) { - if (result = enumRelatedTo(source, target, reportErrors)) { - return result; + if (!(target.flags & TypeFlags.Never)) { + if (target.flags & TypeFlags.Any || source.flags & TypeFlags.Never) return Ternary.True; + if (source.flags & TypeFlags.Undefined) { + if (!strictNullChecks || target.flags & (TypeFlags.Undefined | TypeFlags.Void) || source === emptyArrayElementType) return Ternary.True; + } + if (source.flags & TypeFlags.Null) { + if (!strictNullChecks || target.flags & TypeFlags.Null) return Ternary.True; + } + if (source.flags & TypeFlags.Enum && target === numberType) return Ternary.True; + if (source.flags & TypeFlags.Enum && target.flags & TypeFlags.Enum) { + if (result = enumRelatedTo(source, target, reportErrors)) { + return result; + } + } + if (source.flags & TypeFlags.StringLiteral && target === stringType) return Ternary.True; + if (relation === assignableRelation || relation === comparableRelation) { + if (source.flags & TypeFlags.Any) return Ternary.True; + if (source === numberType && target.flags & TypeFlags.Enum) return Ternary.True; + } + if (source.flags & TypeFlags.Boolean && target.flags & TypeFlags.Boolean) { + return Ternary.True; } - } - if (source.flags & TypeFlags.StringLiteral && target === stringType) return Ternary.True; - - if (relation === assignableRelation || relation === comparableRelation) { - if (isTypeAny(source)) return Ternary.True; - if (source === numberType && target.flags & TypeFlags.Enum) return Ternary.True; - } - - if (source.flags & TypeFlags.Boolean && target.flags & TypeFlags.Boolean) { - return Ternary.True; } if (source.flags & TypeFlags.FreshObjectLiteral) { @@ -6026,7 +6035,7 @@ namespace ts { if (type.flags & TypeFlags.ObjectType) { const resolved = resolveStructuredTypeMembers(type); if ((relation === assignableRelation || relation === comparableRelation) && - (type === globalObjectType || resolved.properties.length === 0) || + (type === globalObjectType || isEmptyObjectType(resolved)) || resolved.stringIndexInfo || resolved.numberIndexInfo || getPropertyOfType(type, name)) { return true; } @@ -6041,6 +6050,14 @@ namespace ts { return false; } + function isEmptyObjectType(t: ResolvedType) { + return t.properties.length === 0 && + t.callSignatures.length === 0 && + t.constructSignatures.length === 0 && + !t.stringIndexInfo && + !t.numberIndexInfo; + } + function hasExcessProperties(source: FreshObjectLiteralType, target: Type, reportErrors: boolean): boolean { if (!(target.flags & TypeFlags.ObjectLiteralPatternWithComputedProperties) && maybeTypeOfKind(target, TypeFlags.ObjectType)) { for (const prop of getPropertiesOfObjectType(source)) { @@ -6367,7 +6384,7 @@ namespace ts { if (kind === SignatureKind.Construct && sourceSignatures.length && targetSignatures.length) { if (isAbstractConstructorType(source) && !isAbstractConstructorType(target)) { // An abstract constructor type is not assignable to a non-abstract constructor type - // as it would otherwise be possible to new an abstract class. Note that the assignability + // as it would otherwise be possible to new an abstract class. Note that the assignability // check we perform for an extends clause excludes construct signatures from the target, // so this check never proceeds. if (reportErrors) { @@ -6824,41 +6841,59 @@ namespace ts { getSignaturesOfType(type, SignatureKind.Construct).length === 0; } + function createTransientSymbol(source: Symbol, type: Type) { + const symbol = createSymbol(source.flags | SymbolFlags.Transient, source.name); + 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: Type, f: (propertyType: Type) => Type) { + const members: SymbolTable = {}; + for (const property of getPropertiesOfObjectType(type)) { + const original = getTypeOfSymbol(property); + const updated = f(original); + members[property.name] = updated === original ? property : createTransientSymbol(property, updated); + }; + return members; + } + + /** + * If the the provided object literal is subject to the excess properties check, + * create a new that is exempt. Recursively mark object literal members as exempt. + * Leave signatures alone since they are not subject to the check. + */ function getRegularTypeOfObjectLiteral(type: Type): Type { - if (type.flags & TypeFlags.FreshObjectLiteral) { - let regularType = (type).regularType; - if (!regularType) { - regularType = createType((type).flags & ~TypeFlags.FreshObjectLiteral); - regularType.symbol = (type).symbol; - regularType.members = (type).members; - regularType.properties = (type).properties; - regularType.callSignatures = (type).callSignatures; - regularType.constructSignatures = (type).constructSignatures; - regularType.stringIndexInfo = (type).stringIndexInfo; - regularType.numberIndexInfo = (type).numberIndexInfo; - (type).regularType = regularType; - } + if (!(type.flags & TypeFlags.FreshObjectLiteral)) { + return type; + } + const regularType = (type).regularType; + if (regularType) { return regularType; } - return type; + + const resolved = type; + const members = transformTypeOfMembers(type, getRegularTypeOfObjectLiteral); + const regularNew = createAnonymousType(resolved.symbol, + members, + resolved.callSignatures, + resolved.constructSignatures, + resolved.stringIndexInfo, + resolved.numberIndexInfo); + regularNew.flags = resolved.flags & ~TypeFlags.FreshObjectLiteral; + (type).regularType = regularNew; + return regularNew; } function getWidenedTypeOfObjectLiteral(type: Type): Type { - const properties = getPropertiesOfObjectType(type); - const members: SymbolTable = {}; - forEach(properties, p => { - const propType = getTypeOfSymbol(p); - const widenedType = getWidenedType(propType); - if (propType !== widenedType) { - const symbol = createSymbol(p.flags | SymbolFlags.Transient, p.name); - symbol.declarations = p.declarations; - symbol.parent = p.parent; - symbol.type = widenedType; - symbol.target = p; - if (p.valueDeclaration) symbol.valueDeclaration = p.valueDeclaration; - p = symbol; - } - members[p.name] = p; + const members = transformTypeOfMembers(type, prop => { + const widened = getWidenedType(prop); + return prop === widened ? prop : widened; }); const stringIndexInfo = getIndexInfoOfType(type, IndexKind.String); const numberIndexInfo = getIndexInfoOfType(type, IndexKind.Number); @@ -7485,7 +7520,7 @@ namespace ts { function getTypeWithFacts(type: Type, include: TypeFacts) { if (!(type.flags & TypeFlags.Union)) { - return getTypeFacts(type) & include ? type : nothingType; + return getTypeFacts(type) & include ? type : neverType; } let firstType: Type; let types: Type[]; @@ -7502,7 +7537,7 @@ namespace ts { } } } - return firstType ? types ? getUnionType(types, /*noSubtypeReduction*/ true) : firstType : nothingType; + return firstType ? types ? getUnionType(types, /*noSubtypeReduction*/ true) : firstType : neverType; } function getTypeWithDefault(type: Type, defaultExpression: Expression) { @@ -7614,15 +7649,16 @@ namespace ts { getInitialTypeOfBindingElement(node); } - function getFlowTypeOfReference(reference: Node, declaredType: Type, initialType: Type) { + function getFlowTypeOfReference(reference: Node, declaredType: Type, assumeInitialized: boolean) { let key: string; - if (!reference.flowNode || declaredType === initialType && !(declaredType.flags & TypeFlags.Narrowable)) { + if (!reference.flowNode || assumeInitialized && !(declaredType.flags & TypeFlags.Narrowable)) { return declaredType; } + const initialType = assumeInitialized ? declaredType : addNullableKind(declaredType, TypeFlags.Undefined); const visitedFlowStart = visitedFlowCount; const result = getTypeAtFlowNode(reference.flowNode); visitedFlowCount = visitedFlowStart; - if (reference.parent.kind === SyntaxKind.NonNullExpression && getTypeWithFacts(result, TypeFacts.NEUndefinedOrNull) === nothingType) { + if (reference.parent.kind === SyntaxKind.NonNullExpression && getTypeWithFacts(result, TypeFacts.NEUndefinedOrNull) === neverType) { return declaredType; } return result; @@ -7710,7 +7746,7 @@ namespace ts { function getTypeAtFlowCondition(flow: FlowCondition) { let type = getTypeAtFlowNode(flow.antecedent); - if (type !== nothingType) { + if (type !== neverType) { // If we have an antecedent type (meaning we're reachable in some way), we first // attempt to narrow the antecedent type. If that produces the nothing type, then // we take the type guard as an indication that control could reach here in a @@ -7720,7 +7756,7 @@ namespace ts { // narrow that. const assumeTrue = (flow.flags & FlowFlags.TrueCondition) !== 0; type = narrowType(type, flow.expression, assumeTrue); - if (type === nothingType) { + if (type === neverType) { type = narrowType(declaredType, flow.expression, assumeTrue); } } @@ -7942,7 +7978,7 @@ namespace ts { const targetType = type.flags & TypeFlags.TypeParameter ? getApparentType(type) : type; return isTypeAssignableTo(candidate, targetType) ? candidate : isTypeAssignableTo(type, candidate) ? type : - nothingType; + neverType; } function narrowTypeByTypePredicate(type: Type, callExpression: CallExpression, assumeTrue: boolean): Type { @@ -8092,11 +8128,11 @@ namespace ts { return type; } const declaration = localOrExportSymbol.valueDeclaration; - const defaultsToDeclaredType = !strictNullChecks || type.flags & TypeFlags.Any || !declaration || + const assumeInitialized = !strictNullChecks || (type.flags & TypeFlags.Any) !== 0 || !declaration || getRootDeclaration(declaration).kind === SyntaxKind.Parameter || isInAmbientContext(declaration) || getContainingFunctionOrModule(declaration) !== getContainingFunctionOrModule(node); - const flowType = getFlowTypeOfReference(node, type, defaultsToDeclaredType ? type : addNullableKind(type, TypeFlags.Undefined)); - if (strictNullChecks && !(type.flags & TypeFlags.Any) && !(getNullableKind(type) & TypeFlags.Undefined) && getNullableKind(flowType) & TypeFlags.Undefined) { + const flowType = getFlowTypeOfReference(node, type, assumeInitialized); + if (!assumeInitialized && !(getNullableKind(type) & TypeFlags.Undefined) && getNullableKind(flowType) & TypeFlags.Undefined) { error(node, Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); // Return the declared type to reduce follow-on errors return type; @@ -8344,7 +8380,7 @@ namespace ts { if (isClassLike(container.parent)) { const symbol = getSymbolOfNode(container.parent); const type = container.flags & NodeFlags.Static ? getTypeOfSymbol(symbol) : (getDeclaredTypeOfSymbol(symbol)).thisType; - return getFlowTypeOfReference(node, type, type); + return getFlowTypeOfReference(node, type, /*assumeInitialized*/ true); } if (isInJavaScriptFile(node)) { @@ -8601,7 +8637,12 @@ namespace ts { } return createArrayType(getUnionType(restTypes)); } - return checkExpression(iife.arguments[indexOfParameter]); + const links = getNodeLinks(iife); + const cached = links.resolvedSignature; + links.resolvedSignature = anySignature; + const type = checkExpression(iife.arguments[indexOfParameter]); + links.resolvedSignature = cached; + return type; } } const contextualSignature = getContextualSignature(func); @@ -9504,20 +9545,18 @@ namespace ts { * element is not a class element, or the class element type cannot be determined, returns 'undefined'. * For example, in the element , the element instance type is `MyClass` (not `typeof MyClass`). */ - function getJsxElementInstanceType(node: JsxOpeningLikeElement) { - const valueType = checkExpression(node.tagName); - + function getJsxElementInstanceType(node: JsxOpeningLikeElement, valueType: Type) { + Debug.assert(!(valueType.flags & TypeFlags.Union)); if (isTypeAny(valueType)) { // Short-circuit if the class tag is using an element type 'any' return anyType; } - // Resolve the signatures, preferring constructors + // Resolve the signatures, preferring constructor let signatures = getSignaturesOfType(valueType, SignatureKind.Construct); if (signatures.length === 0) { // No construct signatures, try call signatures signatures = getSignaturesOfType(valueType, SignatureKind.Call); - if (signatures.length === 0) { // We found no signatures at all, which is an error error(node.tagName, Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures, getTextOfNode(node.tagName)); @@ -9565,6 +9604,103 @@ namespace ts { } } + /** + * Given React element instance type and the class type, resolve the Jsx type + * Pass elemType to handle individual type in the union typed element type. + */ + function getResolvedJsxType(node: JsxOpeningLikeElement, elemType?: Type, elemClassType?: Type): Type { + if (!elemType) { + elemType = checkExpression(node.tagName); + } + if (elemType.flags & TypeFlags.Union) { + const types = ( elemType).types; + return getUnionType(types.map(type => { + return getResolvedJsxType(node, type, elemClassType); + })); + } + + // Get the element instance type (the result of newing or invoking this tag) + const elemInstanceType = getJsxElementInstanceType(node, elemType); + + if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { + // Is this is a stateless function component? See if its single signature's return type is + // assignable to the JSX Element Type + if (jsxElementType) { + const callSignatures = elemType && getSignaturesOfType(elemType, SignatureKind.Call); + const callSignature = callSignatures && callSignatures.length > 0 && callSignatures[0]; + const callReturnType = callSignature && getReturnTypeOfSignature(callSignature); + let paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0])); + if (callReturnType && isTypeAssignableTo(callReturnType, jsxElementType)) { + // Intersect in JSX.IntrinsicAttributes if it exists + const intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes); + if (intrinsicAttributes !== unknownType) { + paramType = intersectTypes(intrinsicAttributes, paramType); + } + return paramType; + } + } + } + + // Issue an error if this return type isn't assignable to JSX.ElementClass + if (elemClassType) { + checkTypeRelatedTo(elemInstanceType, elemClassType, assignableRelation, node, Diagnostics.JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements); + } + + if (isTypeAny(elemInstanceType)) { + return elemInstanceType; + } + + const propsName = getJsxElementPropertiesName(); + if (propsName === undefined) { + // There is no type ElementAttributesProperty, return 'any' + return anyType; + } + else if (propsName === "") { + // If there is no e.g. 'props' member in ElementAttributesProperty, use the element class type instead + return elemInstanceType; + } + else { + const attributesType = getTypeOfPropertyOfType(elemInstanceType, propsName); + + if (!attributesType) { + // There is no property named 'props' on this instance type + return emptyObjectType; + } + else if (isTypeAny(attributesType) || (attributesType === unknownType)) { + // Props is of type 'any' or unknown + return attributesType; + } + else if (attributesType.flags & TypeFlags.Union) { + // Props cannot be a union type + error(node.tagName, Diagnostics.JSX_element_attributes_type_0_may_not_be_a_union_type, typeToString(attributesType)); + return anyType; + } + else { + // Normal case -- add in IntrinsicClassElements and IntrinsicElements + let apparentAttributesType = attributesType; + const intrinsicClassAttribs = getJsxType(JsxNames.IntrinsicClassAttributes); + if (intrinsicClassAttribs !== unknownType) { + const typeParams = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(intrinsicClassAttribs.symbol); + if (typeParams) { + if (typeParams.length === 1) { + apparentAttributesType = intersectTypes(createTypeReference(intrinsicClassAttribs, [elemInstanceType]), apparentAttributesType); + } + } + else { + apparentAttributesType = intersectTypes(attributesType, intrinsicClassAttribs); + } + } + + const intrinsicAttribs = getJsxType(JsxNames.IntrinsicAttributes); + if (intrinsicAttribs !== unknownType) { + apparentAttributesType = intersectTypes(intrinsicAttribs, apparentAttributesType); + } + + return apparentAttributesType; + } + } + } + /** * Given an opening/self-closing element, get the 'element attributes type', i.e. the type that tells * us which attributes are valid on a given element. @@ -9580,96 +9716,15 @@ namespace ts { else if (links.jsxFlags & JsxFlags.IntrinsicIndexedElement) { return links.resolvedJsxType = getIndexInfoOfSymbol(symbol, IndexKind.String).type; } + else { + return links.resolvedJsxType = unknownType; + } } else { - // Get the element instance type (the result of newing or invoking this tag) - const elemInstanceType = getJsxElementInstanceType(node); - const elemClassType = getJsxGlobalElementClassType(); - - if (!elemClassType || !isTypeAssignableTo(elemInstanceType, elemClassType)) { - // Is this is a stateless function component? See if its single signature's return type is - // assignable to the JSX Element Type - if (jsxElementType) { - const elemType = checkExpression(node.tagName); - const callSignatures = elemType && getSignaturesOfType(elemType, SignatureKind.Call); - const callSignature = callSignatures && callSignatures.length > 0 && callSignatures[0]; - const callReturnType = callSignature && getReturnTypeOfSignature(callSignature); - let paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0])); - if (callReturnType && isTypeAssignableTo(callReturnType, jsxElementType)) { - // Intersect in JSX.IntrinsicAttributes if it exists - const intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes); - if (intrinsicAttributes !== unknownType) { - paramType = intersectTypes(intrinsicAttributes, paramType); - } - return links.resolvedJsxType = paramType; - } - } - } - - // Issue an error if this return type isn't assignable to JSX.ElementClass - if (elemClassType) { - checkTypeRelatedTo(elemInstanceType, elemClassType, assignableRelation, node, Diagnostics.JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements); - } - - if (isTypeAny(elemInstanceType)) { - return links.resolvedJsxType = elemInstanceType; - } - - const propsName = getJsxElementPropertiesName(); - if (propsName === undefined) { - // There is no type ElementAttributesProperty, return 'any' - return links.resolvedJsxType = anyType; - } - else if (propsName === "") { - // If there is no e.g. 'props' member in ElementAttributesProperty, use the element class type instead - return links.resolvedJsxType = elemInstanceType; - } - else { - const attributesType = getTypeOfPropertyOfType(elemInstanceType, propsName); - - if (!attributesType) { - // There is no property named 'props' on this instance type - return links.resolvedJsxType = emptyObjectType; - } - else if (isTypeAny(attributesType) || (attributesType === unknownType)) { - // Props is of type 'any' or unknown - return links.resolvedJsxType = attributesType; - } - else if (attributesType.flags & TypeFlags.Union) { - // Props cannot be a union type - error(node.tagName, Diagnostics.JSX_element_attributes_type_0_may_not_be_a_union_type, typeToString(attributesType)); - return links.resolvedJsxType = anyType; - } - else { - // Normal case -- add in IntrinsicClassElements and IntrinsicElements - let apparentAttributesType = attributesType; - const intrinsicClassAttribs = getJsxType(JsxNames.IntrinsicClassAttributes); - if (intrinsicClassAttribs !== unknownType) { - const typeParams = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(intrinsicClassAttribs.symbol); - if (typeParams) { - if (typeParams.length === 1) { - apparentAttributesType = intersectTypes(createTypeReference(intrinsicClassAttribs, [elemInstanceType]), apparentAttributesType); - } - } - else { - apparentAttributesType = intersectTypes(attributesType, intrinsicClassAttribs); - } - } - - const intrinsicAttribs = getJsxType(JsxNames.IntrinsicAttributes); - if (intrinsicAttribs !== unknownType) { - apparentAttributesType = intersectTypes(intrinsicAttribs, apparentAttributesType); - } - - return links.resolvedJsxType = apparentAttributesType; - } - } + return links.resolvedJsxType = getResolvedJsxType(node, undefined, elemClassType); } - - return links.resolvedJsxType = unknownType; } - return links.resolvedJsxType; } @@ -9919,7 +9974,8 @@ namespace ts { } const propType = getTypeOfSymbol(prop); - if (node.kind !== SyntaxKind.PropertyAccessExpression || !(prop.flags & (SymbolFlags.Variable | SymbolFlags.Property | SymbolFlags.Accessor)) || isAssignmentTarget(node)) { + if (node.kind !== SyntaxKind.PropertyAccessExpression || isAssignmentTarget(node) || + !(propType.flags & TypeFlags.Union) && !(prop.flags & (SymbolFlags.Variable | SymbolFlags.Property | SymbolFlags.Accessor))) { return propType; } const leftmostNode = getLeftmostIdentifierOrThis(node); @@ -9936,7 +9992,7 @@ namespace ts { return propType; } } - return getFlowTypeOfReference(node, propType, propType); + return getFlowTypeOfReference(node, propType, /*assumeInitialized*/ true); } function isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: string): boolean { @@ -11455,6 +11511,12 @@ namespace ts { const links = getSymbolLinks(parameter); if (!links.type) { links.type = instantiateType(contextualType, mapper); + // if inference didn't come up with anything but {}, fall back to the binding pattern if present. + if (links.type === emptyObjectType && + (parameter.valueDeclaration.name.kind === SyntaxKind.ObjectBindingPattern || + parameter.valueDeclaration.name.kind === SyntaxKind.ArrayBindingPattern)) { + links.type = getTypeFromBindingPattern(parameter.valueDeclaration.name); + } assignBindingElementTypes(parameter.valueDeclaration); } else if (isInferentialContext(mapper)) { @@ -11534,7 +11596,7 @@ namespace ts { let types: Type[]; const funcIsGenerator = !!func.asteriskToken; if (funcIsGenerator) { - types = checkAndAggregateYieldOperandTypes(func.body, contextualMapper); + types = checkAndAggregateYieldOperandTypes(func, contextualMapper); if (types.length === 0) { const iterableIteratorAny = createIterableIteratorType(anyType); if (compilerOptions.noImplicitAny) { @@ -11545,8 +11607,10 @@ namespace ts { } } else { - const hasImplicitReturn = !!(func.flags & NodeFlags.HasImplicitReturn); - types = checkAndAggregateReturnExpressionTypes(func.body, contextualMapper, isAsync, hasImplicitReturn); + types = checkAndAggregateReturnExpressionTypes(func, contextualMapper); + if (!types) { + return neverType; + } if (types.length === 0) { if (isAsync) { // For an async function, the return type will not be void, but rather a Promise for void. @@ -11555,12 +11619,9 @@ namespace ts { error(func, Diagnostics.An_async_function_or_method_must_have_a_valid_awaitable_return_type); return unknownType; } - return promiseType; } - else { - return voidType; - } + return voidType; } } // When yield/return statements are contextually typed we allow the return type to be a union type. @@ -11604,10 +11665,10 @@ namespace ts { } } - function checkAndAggregateYieldOperandTypes(body: Block, contextualMapper?: TypeMapper): Type[] { + function checkAndAggregateYieldOperandTypes(func: FunctionLikeDeclaration, contextualMapper: TypeMapper): Type[] { const aggregatedTypes: Type[] = []; - forEachYieldExpression(body, yieldExpression => { + forEachYieldExpression(func.body, yieldExpression => { const expr = yieldExpression.expression; if (expr) { let type = checkExpressionCached(expr, contextualMapper); @@ -11626,10 +11687,12 @@ namespace ts { return aggregatedTypes; } - function checkAndAggregateReturnExpressionTypes(body: Block, contextualMapper: TypeMapper, isAsync: boolean, hasImplicitReturn: boolean): Type[] { + function checkAndAggregateReturnExpressionTypes(func: FunctionLikeDeclaration, contextualMapper: TypeMapper): Type[] { + const isAsync = isAsyncFunctionLike(func); const aggregatedTypes: Type[] = []; - let hasOmittedExpressions = false; - forEachReturnStatement(body, returnStatement => { + let hasReturnWithNoExpression = !!(func.flags & NodeFlags.HasImplicitReturn); + let hasReturnOfTypeNever = false; + forEachReturnStatement(func.body, returnStatement => { const expr = returnStatement.expression; if (expr) { let type = checkExpressionCached(expr, contextualMapper); @@ -11638,17 +11701,24 @@ namespace ts { // Promise/A+ compatible implementation will always assimilate any foreign promise, so the // return type of the body should be unwrapped to its awaited type, which should be wrapped in // the native Promise type by the caller. - type = checkAwaitedType(type, body.parent, Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member); + type = checkAwaitedType(type, func, Diagnostics.Return_expression_in_async_function_does_not_have_a_valid_callable_then_member); } - if (!contains(aggregatedTypes, type)) { + if (type === neverType) { + hasReturnOfTypeNever = true; + } + else if (!contains(aggregatedTypes, type)) { aggregatedTypes.push(type); } } else { - hasOmittedExpressions = true; + hasReturnWithNoExpression = true; } }); - if (strictNullChecks && aggregatedTypes.length && (hasOmittedExpressions || hasImplicitReturn)) { + if (aggregatedTypes.length === 0 && !hasReturnWithNoExpression && (hasReturnOfTypeNever || + func.kind === SyntaxKind.FunctionExpression || func.kind === SyntaxKind.ArrowFunction)) { + return undefined; + } + if (strictNullChecks && aggregatedTypes.length && hasReturnWithNoExpression) { if (!contains(aggregatedTypes, undefinedType)) { aggregatedTypes.push(undefinedType); } @@ -11683,7 +11753,10 @@ namespace ts { const hasExplicitReturn = func.flags & NodeFlags.HasExplicitReturn; - if (returnType && !hasExplicitReturn) { + if (returnType === neverType) { + error(func.type, Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point); + } + else if (returnType && !hasExplicitReturn) { // minimal check: function has syntactic return type annotation and no explicit return statements in the body // this function does not conform to the specification. // NOTE: having returnType !== undefined is a precondition for entering this branch so func.type will always be present @@ -11837,8 +11910,14 @@ namespace ts { if (symbol.flags & SymbolFlags.Property && (expr.kind === SyntaxKind.PropertyAccessExpression || expr.kind === SyntaxKind.ElementAccessExpression) && (expr as PropertyAccessExpression | ElementAccessExpression).expression.kind === SyntaxKind.ThisKeyword) { + // Look for if this is the constructor for the class that `symbol` is a property of. const func = getContainingFunction(expr); - return !(func && func.kind === SyntaxKind.Constructor && func.parent === symbol.valueDeclaration.parent); + if (!(func && func.kind === SyntaxKind.Constructor)) + return true; + // If func.parent is a class and symbol is a (readonly) property of that class, or + // if func is a constructor and symbol is a (readonly) parameter property declared in it, + // then symbol is writeable here. + return !(func.parent === symbol.valueDeclaration.parent || func === symbol.valueDeclaration.parent); } return true; } @@ -12809,7 +12888,7 @@ namespace ts { if (checkIfTypePredicateVariableIsDeclaredInBindingPattern( name, predicateVariableNode, - predicateVariableName)) { + predicateVariableName)) { return true; } } @@ -13394,7 +13473,7 @@ namespace ts { // Abstract methods can't have an implementation -- in particular, they don't need one. if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && - !(lastSeenNonAmbientDeclaration.flags & NodeFlags.Abstract)) { + !(lastSeenNonAmbientDeclaration.flags & NodeFlags.Abstract) && !lastSeenNonAmbientDeclaration.questionToken) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } @@ -14747,7 +14826,7 @@ namespace ts { arrayType = getUnionType(filter((arrayOrStringType as UnionType).types, t => !(t.flags & TypeFlags.StringLike))); } else if (arrayOrStringType.flags & TypeFlags.StringLike) { - arrayType = nothingType; + arrayType = neverType; } const hasStringConstituent = arrayOrStringType !== arrayType; let reportedError = false; @@ -14759,7 +14838,7 @@ namespace ts { // Now that we've removed all the StringLike types, if no constituents remain, then the entire // arrayOrStringType was a string. - if (arrayType === nothingType) { + if (arrayType === neverType) { return stringType; } } @@ -14820,7 +14899,7 @@ namespace ts { if (func) { const signature = getSignatureFromDeclaration(func); const returnType = getReturnTypeOfSignature(signature); - if (strictNullChecks || node.expression) { + if (strictNullChecks || node.expression || returnType === neverType) { const exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType; if (func.asteriskToken) { @@ -16343,14 +16422,11 @@ namespace ts { function checkSourceFileWorker(node: SourceFile) { const links = getNodeLinks(node); if (!(links.flags & NodeCheckFlags.TypeChecked)) { - // Check whether the file has declared it is the default lib, - // and whether the user has specifically chosen to avoid checking it. - if (compilerOptions.skipDefaultLibCheck) { - // If the user specified '--noLib' and a file has a '/// ', - // then we should treat that file as a default lib. - if (node.hasNoDefaultLib) { - return; - } + // If skipLibCheck is enabled, skip type checking if file is a declaration file. + // If skipDefaultLibCheck is enabled, skip type checking if file contains a + // '/// ' directive. + if (compilerOptions.skipLibCheck && node.isDeclarationFile || compilerOptions.skipDefaultLibCheck && node.hasNoDefaultLib) { + return; } // Grammar checking @@ -16837,7 +16913,7 @@ namespace ts { } if (isBindingPattern(node)) { - return getTypeForVariableLikeDeclaration(node.parent); + return getTypeForVariableLikeDeclaration(node.parent, /*includeOptionality*/ true); } if (isInRightSideOfImportOrExportAssignment(node)) { @@ -17431,7 +17507,7 @@ namespace ts { if (file.moduleAugmentations.length) { (augmentations || (augmentations = [])).push(file.moduleAugmentations); } - if (file.wasReferenced && file.symbol && file.symbol.globalExports) { + if (file.symbol && file.symbol.globalExports) { mergeSymbolTable(globals, file.symbol.globalExports); } }); @@ -18284,7 +18360,7 @@ namespace ts { } if (node.parent.kind === SyntaxKind.ObjectLiteralExpression) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, Diagnostics.A_class_member_cannot_be_declared_optional)) { + if (checkGrammarForInvalidQuestionMark(node, node.questionToken, Diagnostics.An_object_member_cannot_be_declared_optional)) { return true; } else if (node.body === undefined) { @@ -18293,9 +18369,6 @@ namespace ts { } if (isClassLike(node.parent)) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, Diagnostics.A_class_member_cannot_be_declared_optional)) { - return true; - } // Technically, computed properties in ambient contexts is disallowed // for property declarations and accessors too, not just methods. // However, property declarations disallow computed names in general, @@ -18517,8 +18590,7 @@ namespace ts { function checkGrammarProperty(node: PropertyDeclaration) { if (isClassLike(node.parent)) { - if (checkGrammarForInvalidQuestionMark(node, node.questionToken, Diagnostics.A_class_member_cannot_be_declared_optional) || - checkGrammarForNonSymbolComputedProperty(node.name, Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol)) { + if (checkGrammarForNonSymbolComputedProperty(node.name, Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol)) { return true; } } diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index abdfa3247e9..e6024ac5f82 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -139,6 +139,11 @@ namespace ts { name: "skipDefaultLibCheck", type: "boolean", }, + { + name: "skipLibCheck", + type: "boolean", + description: Diagnostics.Skip_type_checking_of_declaration_files, + }, { name: "out", type: "string", @@ -706,11 +711,11 @@ namespace ts { } else { // by default exclude node_modules, and any specificied output directory - exclude = ["node_modules"]; - const outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; - if (outDir) { - exclude.push(outDir); - } + exclude = ["node_modules", "bower_components", "jspm_packages"]; + } + const outDir = json["compilerOptions"] && json["compilerOptions"]["outDir"]; + if (outDir) { + exclude.push(outDir); } exclude = map(exclude, normalizeSlashes); diff --git a/src/compiler/declarationEmitter.ts b/src/compiler/declarationEmitter.ts index c24135ba52e..397b135bf23 100644 --- a/src/compiler/declarationEmitter.ts +++ b/src/compiler/declarationEmitter.ts @@ -395,6 +395,7 @@ namespace ts { case SyntaxKind.VoidKeyword: case SyntaxKind.UndefinedKeyword: case SyntaxKind.NullKeyword: + case SyntaxKind.NeverKeyword: case SyntaxKind.ThisType: case SyntaxKind.StringLiteralType: return writeTextOfNode(currentText, type); @@ -1129,7 +1130,7 @@ namespace ts { // what we want, namely the name expression enclosed in brackets. writeTextOfNode(currentText, node.name); // If optional property emit ? - if ((node.kind === SyntaxKind.PropertyDeclaration || node.kind === SyntaxKind.PropertySignature) && hasQuestionToken(node)) { + if ((node.kind === SyntaxKind.PropertyDeclaration || node.kind === SyntaxKind.PropertySignature || node.kind === SyntaxKind.Parameter) && hasQuestionToken(node)) { write("?"); } if ((node.kind === SyntaxKind.PropertyDeclaration || node.kind === SyntaxKind.PropertySignature) && node.parent.kind === SyntaxKind.TypeLiteral) { diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 9d8e7c7afda..eaffbe0364d 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -315,10 +315,6 @@ "category": "Error", "code": 1110 }, - "A class member cannot be declared optional.": { - "category": "Error", - "code": 1112 - }, "A 'default' clause cannot appear more than once in a 'switch' statement.": { "category": "Error", "code": 1113 @@ -447,7 +443,7 @@ "category": "Error", "code": 1147 }, - "Cannot compile modules unless the '--module' flag is provided with a valid module type. Consider setting the 'module' compiler option in a 'tsconfig.json' file.": { + "Cannot use imports, exports, or module augmentations when '--module' is 'none'.": { "category": "Error", "code": 1148 }, @@ -1751,6 +1747,10 @@ "category": "Error", "code": 2533 }, + "A function returning 'never' cannot have a reachable end point.": { + "category": "Error", + "code": 2534 + }, "JSX element attributes type '{0}' may not be a union type.": { "category": "Error", "code": 2600 @@ -1923,6 +1923,10 @@ "category": "Error", "code": 2685 }, + "Identifier '{0}' must be imported from a module": { + "category": "Error", + "code": 2686 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", "code": 4000 @@ -2296,7 +2300,7 @@ "category": "Error", "code": 5062 }, - "Substututions for pattern '{0}' should be an array.": { + "Substitutions for pattern '{0}' should be an array.": { "category": "Error", "code": 5063 }, @@ -2348,6 +2352,10 @@ "category": "Message", "code": 6011 }, + "Skip type checking of declaration files.": { + "category": "Message", + "code": 6012 + }, "Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES2015'": { "category": "Message", "code": 6015 @@ -2752,13 +2760,17 @@ "category": "Message", "code": 6130 }, + "Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'.": { + "category": "Error", + "code": 6131 + }, "The maximum dependency depth to search under node_modules and load JavaScript files": { "category": "Message", - "code": 6131 + "code": 6132 }, "No types specified in 'package.json' but 'allowJs' is set, so returning 'main' value of '{0}'": { "category": "Message", - "code": 6132 + "code": 6133 }, "Variable '{0}' implicitly has an '{1}' type.": { "category": "Error", diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index daebf8a930b..2672efb647c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -303,8 +303,8 @@ namespace ts { case SyntaxKind.ImportClause: return visitNode(cbNode, (node).name) || visitNode(cbNode, (node).namedBindings); - case SyntaxKind.GlobalModuleExportDeclaration: - return visitNode(cbNode, (node).name); + case SyntaxKind.NamespaceExportDeclaration: + return visitNode(cbNode, (node).name); case SyntaxKind.NamespaceImport: return visitNode(cbNode, (node).name); @@ -2368,6 +2368,7 @@ namespace ts { case SyntaxKind.BooleanKeyword: case SyntaxKind.SymbolKeyword: case SyntaxKind.UndefinedKeyword: + case SyntaxKind.NeverKeyword: // If these are followed by a dot, then parse these out as a dotted type reference instead. const node = tryParse(parseKeywordAndNoDot); return node || parseTypeReference(); @@ -2410,6 +2411,7 @@ namespace ts { case SyntaxKind.NullKeyword: case SyntaxKind.ThisKeyword: case SyntaxKind.TypeOfKeyword: + case SyntaxKind.NeverKeyword: case SyntaxKind.OpenBraceToken: case SyntaxKind.OpenBracketToken: case SyntaxKind.LessThanToken: @@ -5342,8 +5344,8 @@ namespace ts { return nextToken() === SyntaxKind.SlashToken; } - function parseGlobalModuleExportDeclaration(fullStart: number, decorators: NodeArray, modifiers: ModifiersArray): GlobalModuleExportDeclaration { - const exportDeclaration = createNode(SyntaxKind.GlobalModuleExportDeclaration, fullStart); + function parseGlobalModuleExportDeclaration(fullStart: number, decorators: NodeArray, modifiers: ModifiersArray): NamespaceExportDeclaration { + const exportDeclaration = createNode(SyntaxKind.NamespaceExportDeclaration, fullStart); exportDeclaration.decorators = decorators; exportDeclaration.modifiers = modifiers; parseExpected(SyntaxKind.AsKeyword); diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 49762cf22b4..57c1e86bc82 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1771,10 +1771,6 @@ namespace ts { reportFileNamesDifferOnlyInCasingError(fileName, file.fileName, refFile, refPos, refEnd); } - if (file) { - file.wasReferenced = file.wasReferenced || isReference; - } - // If this was a file found by a node_modules search, set the nodeModuleSearchDistance to parent distance + 1. if (isFileFromNodeSearch) { const newDistance = (refFile && refFile.nodeModuleSearchDistance) === undefined ? 1 : refFile.nodeModuleSearchDistance + 1; @@ -1797,7 +1793,6 @@ namespace ts { filesByName.set(path, file); if (file) { - file.wasReferenced = file.wasReferenced || isReference; file.path = path; // Default to same distance as parent. Add one if found by a search. @@ -2051,7 +2046,7 @@ namespace ts { } } else { - programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Substututions_for_pattern_0_should_be_an_array, key)); + programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Substitutions_for_pattern_0_should_be_an_array, key)); } } } @@ -2110,7 +2105,7 @@ namespace ts { else if (firstExternalModuleSourceFile && languageVersion < ScriptTarget.ES6 && options.module === ModuleKind.None) { // We cannot use createDiagnosticFromNode because nodes do not have parents yet const span = getErrorSpanForNode(firstExternalModuleSourceFile, firstExternalModuleSourceFile.externalModuleIndicator); - programDiagnostics.add(createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, Diagnostics.Cannot_compile_modules_unless_the_module_flag_is_provided_with_a_valid_module_type_Consider_setting_the_module_compiler_option_in_a_tsconfig_json_file)); + programDiagnostics.add(createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none)); } // Cannot specify module gen target of es6 when below es6 @@ -2119,8 +2114,14 @@ namespace ts { } // Cannot specify module gen that isn't amd or system with --out - if (outFile && options.module && !(options.module === ModuleKind.AMD || options.module === ModuleKind.System)) { - programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Only_amd_and_system_modules_are_supported_alongside_0, options.out ? "out" : "outFile")); + if (outFile) { + if (options.module && !(options.module === ModuleKind.AMD || options.module === ModuleKind.System)) { + programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Only_amd_and_system_modules_are_supported_alongside_0, options.out ? "out" : "outFile")); + } + else if (options.module === undefined && firstExternalModuleSourceFile) { + const span = getErrorSpanForNode(firstExternalModuleSourceFile, firstExternalModuleSourceFile.externalModuleIndicator); + programDiagnostics.add(createFileDiagnostic(firstExternalModuleSourceFile, span.start, span.length, Diagnostics.Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system, options.out ? "out" : "outFile")); + } } // there has to be common source directory if user specified --outdir || --sourceRoot diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 8979814a7a2..1a2748b38b1 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -91,6 +91,7 @@ namespace ts { "let": SyntaxKind.LetKeyword, "module": SyntaxKind.ModuleKeyword, "namespace": SyntaxKind.NamespaceKeyword, + "never": SyntaxKind.NeverKeyword, "new": SyntaxKind.NewKeyword, "null": SyntaxKind.NullKeyword, "number": SyntaxKind.NumberKeyword, diff --git a/src/compiler/types.ts b/src/compiler/types.ts index f7d5a7dc287..fb1062f0cc0 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -164,6 +164,7 @@ namespace ts { IsKeyword, ModuleKeyword, NamespaceKeyword, + NeverKeyword, ReadonlyKeyword, RequireKeyword, NumberKeyword, @@ -276,7 +277,7 @@ namespace ts { ModuleDeclaration, ModuleBlock, CaseBlock, - GlobalModuleExportDeclaration, + NamespaceExportDeclaration, ImportEqualsDeclaration, ImportDeclaration, ImportClause, @@ -1340,8 +1341,8 @@ namespace ts { name: Identifier; } - // @kind(SyntaxKind.GlobalModuleImport) - export interface GlobalModuleExportDeclaration extends DeclarationStatement { + // @kind(SyntaxKind.NamespaceExportDeclaration) + export interface NamespaceExportDeclaration extends DeclarationStatement { name: Identifier; moduleReference: LiteralLikeNode; } @@ -1600,8 +1601,6 @@ namespace ts { /* @internal */ commonJsModuleIndicator: Node; // The number of times node_modules was searched to locate the package containing this file /* @internal */ nodeModuleSearchDistance?: number; - // True if the file was a root file in a compilation or a /// reference targets - /* @internal */ wasReferenced?: boolean; /* @internal */ identifiers: Map; /* @internal */ nodeCount: number; @@ -1774,6 +1773,7 @@ namespace ts { getIndexTypeOfType(type: Type, kind: IndexKind): Type; getBaseTypes(type: InterfaceType): ObjectType[]; getReturnTypeOfSignature(signature: Signature): Type; + getNonNullableType(type: Type): Type; getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; getSymbolAtLocation(node: Node): Symbol; @@ -2172,11 +2172,12 @@ namespace ts { ESSymbol = 0x01000000, // Type of symbol primitive introduced in ES6 ThisType = 0x02000000, // This type ObjectLiteralPatternWithComputedProperties = 0x04000000, // Object literal type implied by binding pattern has computed properties + Never = 0x08000000, // Never type /* @internal */ Nullable = Undefined | Null, /* @internal */ - Intrinsic = Any | String | Number | Boolean | ESSymbol | Void | Undefined | Null, + Intrinsic = Any | String | Number | Boolean | ESSymbol | Void | Undefined | Null | Never, /* @internal */ Primitive = String | Number | Boolean | ESSymbol | Void | Undefined | Null | StringLiteral | Enum, StringLike = String | StringLiteral, @@ -2505,6 +2506,7 @@ namespace ts { maxNodeModuleJsDepth?: number; noImplicitUseStrict?: boolean; strictNullChecks?: boolean; + skipLibCheck?: boolean; listEmittedFiles?: boolean; lib?: string[]; /* @internal */ stripInternal?: boolean; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 233266df01f..8bd21b4454e 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -613,6 +613,7 @@ namespace ts { case SyntaxKind.BooleanKeyword: case SyntaxKind.SymbolKeyword: case SyntaxKind.UndefinedKeyword: + case SyntaxKind.NeverKeyword: return true; case SyntaxKind.VoidKeyword: return node.parent.kind !== SyntaxKind.VoidExpression; @@ -1260,8 +1261,15 @@ namespace ts { else if (lhs.expression.kind === SyntaxKind.PropertyAccessExpression) { // chained dot, e.g. x.y.z = expr; this var is the 'x.y' part const innerPropertyAccess = lhs.expression; - if (innerPropertyAccess.expression.kind === SyntaxKind.Identifier && innerPropertyAccess.name.text === "prototype") { - return SpecialPropertyAssignmentKind.PrototypeProperty; + if (innerPropertyAccess.expression.kind === SyntaxKind.Identifier) { + // module.exports.name = expr + const innerPropertyAccessIdentifier = innerPropertyAccess.expression; + if (innerPropertyAccessIdentifier.text === "module" && innerPropertyAccess.name.text === "exports") { + return SpecialPropertyAssignmentKind.ExportsProperty; + } + if (innerPropertyAccess.name.text === "prototype") { + return SpecialPropertyAssignmentKind.PrototypeProperty; + } } } @@ -1635,7 +1643,7 @@ namespace ts { // export default ... export function isAliasSymbolDeclaration(node: Node): boolean { return node.kind === SyntaxKind.ImportEqualsDeclaration || - node.kind === SyntaxKind.GlobalModuleExportDeclaration || + node.kind === SyntaxKind.NamespaceExportDeclaration || node.kind === SyntaxKind.ImportClause && !!(node).name || node.kind === SyntaxKind.NamespaceImport || node.kind === SyntaxKind.ImportSpecifier || diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index d6035aaa026..7f2972e8125 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -1968,12 +1968,12 @@ namespace FourSlash { } } - public verifyGetScriptLexicalStructureListCount(expected: number) { + public verifyNavigationBarCount(expected: number) { const items = this.languageService.getNavigationBarItems(this.activeFile.fileName); const actual = this.getNavigationBarItemsCount(items); if (expected !== actual) { - this.raiseError(`verifyGetScriptLexicalStructureListCount failed - found: ${actual} navigation items, expected: ${expected}.`); + this.raiseError(`verifyNavigationBarCount failed - found: ${actual} navigation items, expected: ${expected}.`); } } @@ -1989,36 +1989,50 @@ namespace FourSlash { return result; } - public verifyGetScriptLexicalStructureListContains(name: string, kind: string) { - const items = this.languageService.getNavigationBarItems(this.activeFile.fileName); + public verifyNavigationBarContains(name: string, kind: string, fileName?: string, parentName?: string, isAdditionalSpan?: boolean, markerPosition?: number) { + fileName = fileName || this.activeFile.fileName; + const items = this.languageService.getNavigationBarItems(fileName); if (!items || items.length === 0) { - this.raiseError("verifyGetScriptLexicalStructureListContains failed - found 0 navigation items, expected at least one."); + this.raiseError("verifyNavigationBarContains failed - found 0 navigation items, expected at least one."); } - if (this.navigationBarItemsContains(items, name, kind)) { + if (this.navigationBarItemsContains(items, name, kind, parentName)) { return; } - const missingItem = { name: name, kind: kind }; - this.raiseError(`verifyGetScriptLexicalStructureListContains failed - could not find the item: ${JSON.stringify(missingItem, undefined, 2)} in the returned list: (${JSON.stringify(items, undefined, 2)})`); + const missingItem = { name, kind, parentName }; + this.raiseError(`verifyNavigationBarContains failed - could not find the item: ${JSON.stringify(missingItem, undefined, 2)} in the returned list: (${JSON.stringify(items, undefined, 2)})`); } - private navigationBarItemsContains(items: ts.NavigationBarItem[], name: string, kind: string) { - if (items) { + private navigationBarItemsContains(items: ts.NavigationBarItem[], name: string, kind: string, parentName?: string) { + function recur(items: ts.NavigationBarItem[], curParentName: string) { for (let i = 0; i < items.length; i++) { const item = items[i]; - if (item && item.text === name && item.kind === kind) { + if (item && item.text === name && item.kind === kind && (!parentName || curParentName === parentName)) { return true; } - - if (this.navigationBarItemsContains(item.childItems, name, kind)) { + if (recur(item.childItems, item.text)) { return true; } } + return false; } + return recur(items, ""); + } - return false; + public verifyNavigationBarChildItem(parent: string, name: string, kind: string) { + const items = this.languageService.getNavigationBarItems(this.activeFile.fileName); + + for (let i = 0; i < items.length; i++) { + const item = items[i]; + if (item.text === parent) { + if (this.navigationBarItemsContains(item.childItems, name, kind)) + return; + const missingItem = { name, kind }; + this.raiseError(`verifyNavigationBarChildItem failed - could not find the item: ${JSON.stringify(missingItem)} in the children list: (${JSON.stringify(item.childItems, undefined, 2)})`); + } + } } public printNavigationItems(searchValue: string) { @@ -2033,11 +2047,11 @@ namespace FourSlash { } } - public printScriptLexicalStructureItems() { + public printNavigationBar() { const items = this.languageService.getNavigationBarItems(this.activeFile.fileName); const length = items && items.length; - Harness.IO.log(`NavigationItems list (${length} items)`); + Harness.IO.log(`Navigation bar (${length} items)`); for (let i = 0; i < length; i++) { const item = items[i]; @@ -3029,19 +3043,23 @@ namespace FourSlashInterface { this.DocCommentTemplate(/*expectedText*/ undefined, /*expectedOffset*/ undefined, /*empty*/ true); } - public getScriptLexicalStructureListCount(count: number) { - this.state.verifyGetScriptLexicalStructureListCount(count); + public navigationBarCount(count: number) { + this.state.verifyNavigationBarCount(count); } // TODO: figure out what to do with the unused arguments. - public getScriptLexicalStructureListContains( + public navigationBarContains( name: string, kind: string, fileName?: string, parentName?: string, isAdditionalSpan?: boolean, markerPosition?: number) { - this.state.verifyGetScriptLexicalStructureListContains(name, kind); + this.state.verifyNavigationBarContains(name, kind, fileName, parentName, isAdditionalSpan, markerPosition); + } + + public navigationBarChildItem(parent: string, name: string, kind: string) { + this.state.verifyNavigationBarChildItem(parent, name, kind); } public navigationItemsListCount(count: number, searchValue: string, matchKind?: string) { @@ -3234,8 +3252,8 @@ namespace FourSlashInterface { this.state.printNavigationItems(searchValue); } - public printScriptLexicalStructureItems() { - this.state.printScriptLexicalStructureItems(); + public printNavigationBar() { + this.state.printNavigationBar(); } public printReferences() { diff --git a/src/harness/harnessLanguageService.ts b/src/harness/harnessLanguageService.ts index 8aaff65febc..96f516632c7 100644 --- a/src/harness/harnessLanguageService.ts +++ b/src/harness/harnessLanguageService.ts @@ -641,6 +641,14 @@ namespace Harness.LanguageService { startGroup(): void { } + + setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): any { + return setTimeout(callback, ms, args); + } + + clearTimeout(timeoutId: any): void { + clearTimeout(timeoutId); + } } export class ServerLanguageServiceAdapter implements LanguageServiceAdapter { diff --git a/src/harness/instrumenter.ts b/src/harness/instrumenter.ts index b1b1750b8a8..b8f42e7e8bd 100644 --- a/src/harness/instrumenter.ts +++ b/src/harness/instrumenter.ts @@ -1,6 +1,6 @@ -declare var require: any, process: any; -var fs: any = require('fs'); -var path: any = require('path'); +declare const require: any, process: any; +const fs: any = require("fs"); +const path: any = require("path"); function instrumentForRecording(fn: string, tscPath: string) { instrument(tscPath, ` @@ -14,31 +14,31 @@ ts.sys = Playback.wrapSystem(ts.sys); ts.sys.startReplay("${ logFilename }");`); } -function instrument(tscPath: string, prepareCode: string, cleanupCode: string = '') { - var bak = tscPath + '.bak'; +function instrument(tscPath: string, prepareCode: string, cleanupCode = "") { + const bak = `${tscPath}.bak`; fs.exists(bak, (backupExists: boolean) => { - var filename = tscPath; + let filename = tscPath; if (backupExists) { filename = bak; } - fs.readFile(filename, 'utf-8', (err: any, tscContent: string) => { + fs.readFile(filename, "utf-8", (err: any, tscContent: string) => { if (err) throw err; fs.writeFile(bak, tscContent, (err: any) => { if (err) throw err; - fs.readFile(path.resolve(path.dirname(tscPath) + '/loggedIO.js'), 'utf-8', (err: any, loggerContent: string) => { + fs.readFile(path.resolve(path.dirname(tscPath) + "/loggedIO.js"), "utf-8", (err: any, loggerContent: string) => { if (err) throw err; - var invocationLine = 'ts.executeCommandLine(ts.sys.args);'; - var index1 = tscContent.indexOf(invocationLine); + const invocationLine = "ts.executeCommandLine(ts.sys.args);"; + const index1 = tscContent.indexOf(invocationLine); if (index1 < 0) { - throw new Error("Could not find " + invocationLine); + throw new Error(`Could not find ${invocationLine}`); } - var index2 = index1 + invocationLine.length; - var newContent = tscContent.substr(0, index1) + loggerContent + prepareCode + invocationLine + cleanupCode + tscContent.substr(index2) + '\r\n'; + const index2 = index1 + invocationLine.length; + const newContent = tscContent.substr(0, index1) + loggerContent + prepareCode + invocationLine + cleanupCode + tscContent.substr(index2) + "\r\n"; fs.writeFile(tscPath, newContent); }); }); @@ -46,15 +46,16 @@ function instrument(tscPath: string, prepareCode: string, cleanupCode: string = }); } -var isJson = (arg: string) => arg.indexOf(".json") > 0; +const isJson = (arg: string) => arg.indexOf(".json") > 0; -var record = process.argv.indexOf('record'); -var tscPath = process.argv[process.argv.length - 1]; +const record = process.argv.indexOf("record"); +const tscPath = process.argv[process.argv.length - 1]; if (record >= 0) { - console.log('Instrumenting ' + tscPath + ' for recording'); + console.log(`Instrumenting ${tscPath} for recording`); instrumentForRecording(process.argv[record + 1], tscPath); -} else if (process.argv.some(isJson)) { - var filename = process.argv.filter(isJson)[0]; +} +else if (process.argv.some(isJson)) { + const filename = process.argv.filter(isJson)[0]; instrumentForReplay(filename, tscPath); } diff --git a/src/lib/es2015.core.d.ts b/src/lib/es2015.core.d.ts index 71a8655350f..206b8b8f9bf 100644 --- a/src/lib/es2015.core.d.ts +++ b/src/lib/es2015.core.d.ts @@ -16,12 +16,12 @@ interface Array { * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: T) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: T) => boolean, thisArg?: any): number; /** * Returns the this object after filling the section identified by start and end with value @@ -493,4 +493,4 @@ interface StringConstructor { * @param substitutions A set of substitution values. */ raw(template: TemplateStringsArray, ...substitutions: any[]): string; -} \ No newline at end of file +} diff --git a/src/lib/es5.d.ts b/src/lib/es5.d.ts index 761bc48441f..dfd2bd4ff0c 100644 --- a/src/lib/es5.d.ts +++ b/src/lib/es5.d.ts @@ -864,6 +864,7 @@ declare const RegExp: RegExpConstructor; interface Error { name: string; message: string; + stack?: string; } interface ErrorConstructor { @@ -948,38 +949,22 @@ interface JSON { * If a member contains nested objects, the nested objects are transformed before the parent object is. */ parse(text: string, reviver?: (key: any, value: any) => any): any; - /** - * Converts a JavaScript value to a JavaScript Object Notation (JSON) string. - * @param value A JavaScript value, usually an object or array, to be converted. - */ - stringify(value: any): string; - /** - * Converts a JavaScript value to a JavaScript Object Notation (JSON) string. - * @param value A JavaScript value, usually an object or array, to be converted. - * @param replacer A function that transforms the results. - */ - stringify(value: any, replacer: (key: string, value: any) => any): string; - /** - * Converts a JavaScript value to a JavaScript Object Notation (JSON) string. - * @param value A JavaScript value, usually an object or array, to be converted. - * @param replacer Array that transforms the results. - */ - stringify(value: any, replacer: any[]): string; /** * Converts a JavaScript value to a JavaScript Object Notation (JSON) string. * @param value A JavaScript value, usually an object or array, to be converted. * @param replacer A function that transforms the results. * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read. */ - stringify(value: any, replacer: (key: string, value: any) => any, space: string | number): string; + stringify(value: any, replacer?: (key: string, value: any) => any, space?: string | number): string; /** * Converts a JavaScript value to a JavaScript Object Notation (JSON) string. * @param value A JavaScript value, usually an object or array, to be converted. - * @param replacer Array that transforms the results. + * @param replacer An array of strings and numbers that acts as a white list for selecting the object properties that will be stringified. * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read. */ - stringify(value: any, replacer: any[], space: string | number): string; + stringify(value: any, replacer?: (number | string)[] | null, space?: string | number): string; } + /** * An intrinsic object that provides functions to convert JavaScript values to and from the JavaScript Object Notation (JSON) format. */ @@ -1527,12 +1512,12 @@ interface Int8Array { * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. @@ -1800,12 +1785,12 @@ interface Uint8Array { * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. @@ -2074,12 +2059,12 @@ interface Uint8ClampedArray { * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. @@ -2347,12 +2332,12 @@ interface Int16Array { * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. @@ -2621,12 +2606,12 @@ interface Uint16Array { * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. @@ -2894,12 +2879,12 @@ interface Int32Array { * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. @@ -3167,12 +3152,12 @@ interface Uint32Array { * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. @@ -3440,12 +3425,12 @@ interface Float32Array { * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. @@ -3714,12 +3699,12 @@ interface Float64Array { * Returns the index of the first element in the array where predicate is true, and undefined * otherwise. * @param predicate find calls predicate once for each element of the array, in ascending - * order, until it finds one where predicate returns true. If such an element is found, find - * immediately returns that element value. Otherwise, find returns undefined. + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. * @param thisArg If provided, it will be used as the this value for each invocation of * predicate. If it is not provided, undefined is used instead. */ - findIndex(predicate: (value: number) => boolean, thisArg?: any): number | undefined; + findIndex(predicate: (value: number) => boolean, thisArg?: any): number; /** * Performs the specified action for each element in an array. diff --git a/src/server/client.ts b/src/server/client.ts index caeab6e3f3c..5c576347d19 100644 --- a/src/server/client.ts +++ b/src/server/client.ts @@ -1,5 +1,5 @@ /// - + namespace ts.server { export interface SessionClientHost extends LanguageServiceHost { @@ -21,27 +21,26 @@ namespace ts.server { export class SessionClient implements LanguageService { private sequence: number = 0; - private fileMapping: ts.Map = {}; private lineMaps: ts.Map = {}; private messages: string[] = []; private lastRenameEntry: RenameEntry; - + constructor(private host: SessionClientHost) { } - public onMessage(message: string): void { + public onMessage(message: string): void { this.messages.push(message); } - private writeMessage(message: string): void { + private writeMessage(message: string): void { this.host.writeMessage(message); } - private getLineMap(fileName: string): number[] { - var lineMap = ts.lookUp(this.lineMaps, fileName); + private getLineMap(fileName: string): number[] { + let lineMap = ts.lookUp(this.lineMaps, fileName); if (!lineMap) { - var scriptSnapshot = this.host.getScriptSnapshot(fileName); - lineMap = this.lineMaps[fileName] = ts.computeLineStarts(scriptSnapshot.getText(0, scriptSnapshot.getLength())); + const scriptSnapshot = this.host.getScriptSnapshot(fileName); + lineMap = this.lineMaps[fileName] = ts.computeLineStarts(scriptSnapshot.getText(0, scriptSnapshot.getLength())); } return lineMap; } @@ -51,7 +50,7 @@ namespace ts.server { } private positionToOneBasedLineOffset(fileName: string, position: number): protocol.Location { - var lineOffset = ts.computeLineAndCharacterOfPosition(this.getLineMap(fileName), position); + const lineOffset = ts.computeLineAndCharacterOfPosition(this.getLineMap(fileName), position); return { line: lineOffset.line + 1, offset: lineOffset.character + 1 @@ -59,8 +58,8 @@ namespace ts.server { } private convertCodeEditsToTextChange(fileName: string, codeEdit: protocol.CodeEdit): ts.TextChange { - var start = this.lineOffsetToPosition(fileName, codeEdit.start); - var end = this.lineOffsetToPosition(fileName, codeEdit.end); + const start = this.lineOffsetToPosition(fileName, codeEdit.start); + const end = this.lineOffsetToPosition(fileName, codeEdit.end); return { span: ts.createTextSpanFromBounds(start, end), @@ -69,12 +68,13 @@ namespace ts.server { } private processRequest(command: string, args?: any): T { - var request: protocol.Request = { - seq: this.sequence++, + const request: protocol.Request = { + seq: this.sequence, type: "request", arguments: args, command }; + this.sequence++; this.writeMessage(JSON.stringify(request)); @@ -82,34 +82,29 @@ namespace ts.server { } private processResponse(request: protocol.Request): T { - var lastMessage = this.messages.shift(); - Debug.assert(!!lastMessage, "Did not receive any responses."); - - // Read the content length - var contentLengthPrefix = "Content-Length: "; - var lines = lastMessage.split("\r\n"); - Debug.assert(lines.length >= 2, "Malformed response: Expected 3 lines in the response."); - - var contentLengthText = lines[0]; - Debug.assert(contentLengthText.indexOf(contentLengthPrefix) === 0, "Malformed response: Response text did not contain content-length header."); - var contentLength = parseInt(contentLengthText.substring(contentLengthPrefix.length)); - - // Read the body - var responseBody = lines[2]; - - // Verify content length - Debug.assert(responseBody.length + 1 === contentLength, "Malformed response: Content length did not match the response's body length."); - - try { - var response: T = JSON.parse(responseBody); - } - catch (e) { - throw new Error("Malformed response: Failed to parse server response: " + lastMessage + ". \r\n Error details: " + e.message); + let foundResponseMessage = false; + let lastMessage: string; + let response: T; + while (!foundResponseMessage) { + lastMessage = this.messages.shift(); + Debug.assert(!!lastMessage, "Did not receive any responses."); + const responseBody = processMessage(lastMessage); + try { + response = JSON.parse(responseBody); + // the server may emit events before emitting the response. We + // want to ignore these events for testing purpose. + if (response.type === "response") { + foundResponseMessage = true; + } + } + catch (e) { + throw new Error("Malformed response: Failed to parse server response: " + lastMessage + ". \r\n Error details: " + e.message); + } } // verify the sequence numbers Debug.assert(response.request_seq === request.seq, "Malformed response: response sequence number did not match request sequence number."); - + // unmarshal errors if (!response.success) { throw new Error("Error " + response.message); @@ -118,15 +113,33 @@ namespace ts.server { Debug.assert(!!response.body, "Malformed response: Unexpected empty response body."); return response; + + function processMessage(message: string) { + // Read the content length + const contentLengthPrefix = "Content-Length: "; + const lines = message.split("\r\n"); + Debug.assert(lines.length >= 2, "Malformed response: Expected 3 lines in the response."); + + const contentLengthText = lines[0]; + Debug.assert(contentLengthText.indexOf(contentLengthPrefix) === 0, "Malformed response: Response text did not contain content-length header."); + const contentLength = parseInt(contentLengthText.substring(contentLengthPrefix.length)); + + // Read the body + const responseBody = lines[2]; + + // Verify content length + Debug.assert(responseBody.length + 1 === contentLength, "Malformed response: Content length did not match the response's body length."); + return responseBody; + } } - openFile(fileName: string, content?: string, scriptKindName?: "TS" | "JS" | "TSX" | "JSX"): void { - var args: protocol.OpenRequestArgs = { file: fileName, fileContent: content, scriptKindName }; + openFile(fileName: string, content?: string, scriptKindName?: "TS" | "JS" | "TSX" | "JSX"): void { + const args: protocol.OpenRequestArgs = { file: fileName, fileContent: content, scriptKindName }; this.processRequest(CommandNames.Open, args); } closeFile(fileName: string): void { - var args: protocol.FileRequestArgs = { file: fileName }; + const args: protocol.FileRequestArgs = { file: fileName }; this.processRequest(CommandNames.Close, args); } @@ -134,10 +147,10 @@ namespace ts.server { // clear the line map after an edit this.lineMaps[fileName] = undefined; - var lineOffset = this.positionToOneBasedLineOffset(fileName, start); - var endLineOffset = this.positionToOneBasedLineOffset(fileName, end); + const lineOffset = this.positionToOneBasedLineOffset(fileName, start); + const endLineOffset = this.positionToOneBasedLineOffset(fileName, end); - var args: protocol.ChangeRequestArgs = { + const args: protocol.ChangeRequestArgs = { file: fileName, line: lineOffset.line, offset: lineOffset.offset, @@ -150,18 +163,18 @@ namespace ts.server { } getQuickInfoAtPosition(fileName: string, position: number): QuickInfo { - var lineOffset = this.positionToOneBasedLineOffset(fileName, position); - var args: protocol.FileLocationRequestArgs = { + const lineOffset = this.positionToOneBasedLineOffset(fileName, position); + const args: protocol.FileLocationRequestArgs = { file: fileName, line: lineOffset.line, offset: lineOffset.offset }; - var request = this.processRequest(CommandNames.Quickinfo, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.Quickinfo, args); + const response = this.processResponse(request); - var start = this.lineOffsetToPosition(fileName, response.body.start); - var end = this.lineOffsetToPosition(fileName, response.body.end); + const start = this.lineOffsetToPosition(fileName, response.body.start); + const end = this.lineOffsetToPosition(fileName, response.body.end); return { kind: response.body.kind, @@ -173,68 +186,68 @@ namespace ts.server { } getProjectInfo(fileName: string, needFileNameList: boolean): protocol.ProjectInfo { - var args: protocol.ProjectInfoRequestArgs = { + const args: protocol.ProjectInfoRequestArgs = { file: fileName, needFileNameList: needFileNameList }; - var request = this.processRequest(CommandNames.ProjectInfo, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.ProjectInfo, args); + const response = this.processResponse(request); return { configFileName: response.body.configFileName, fileNames: response.body.fileNames }; } - + getCompletionsAtPosition(fileName: string, position: number): CompletionInfo { - var lineOffset = this.positionToOneBasedLineOffset(fileName, position); - var args: protocol.CompletionsRequestArgs = { + const lineOffset = this.positionToOneBasedLineOffset(fileName, position); + const args: protocol.CompletionsRequestArgs = { file: fileName, line: lineOffset.line, offset: lineOffset.offset, prefix: undefined }; - var request = this.processRequest(CommandNames.Completions, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.Completions, args); + const response = this.processResponse(request); - return { + return { isMemberCompletion: false, isNewIdentifierLocation: false, entries: response.body }; } - + getCompletionEntryDetails(fileName: string, position: number, entryName: string): CompletionEntryDetails { - var lineOffset = this.positionToOneBasedLineOffset(fileName, position); - var args: protocol.CompletionDetailsRequestArgs = { + const lineOffset = this.positionToOneBasedLineOffset(fileName, position); + const args: protocol.CompletionDetailsRequestArgs = { file: fileName, line: lineOffset.line, offset: lineOffset.offset, entryNames: [entryName] }; - var request = this.processRequest(CommandNames.CompletionDetails, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.CompletionDetails, args); + const response = this.processResponse(request); Debug.assert(response.body.length === 1, "Unexpected length of completion details response body."); return response.body[0]; } getNavigateToItems(searchValue: string): NavigateToItem[] { - var args: protocol.NavtoRequestArgs = { + const args: protocol.NavtoRequestArgs = { searchValue, file: this.host.getScriptFileNames()[0] }; - var request = this.processRequest(CommandNames.Navto, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.Navto, args); + const response = this.processResponse(request); return response.body.map(entry => { - var fileName = entry.file; - var start = this.lineOffsetToPosition(fileName, entry.start); - var end = this.lineOffsetToPosition(fileName, entry.end); - + const fileName = entry.file; + const start = this.lineOffsetToPosition(fileName, entry.start); + const end = this.lineOffsetToPosition(fileName, entry.end); + return { name: entry.name, containerName: entry.containerName || "", @@ -250,9 +263,9 @@ namespace ts.server { } getFormattingEditsForRange(fileName: string, start: number, end: number, options: ts.FormatCodeOptions): ts.TextChange[] { - var startLineOffset = this.positionToOneBasedLineOffset(fileName, start); - var endLineOffset = this.positionToOneBasedLineOffset(fileName, end); - var args: protocol.FormatRequestArgs = { + const startLineOffset = this.positionToOneBasedLineOffset(fileName, start); + const endLineOffset = this.positionToOneBasedLineOffset(fileName, end); + const args: protocol.FormatRequestArgs = { file: fileName, line: startLineOffset.line, offset: startLineOffset.offset, @@ -261,10 +274,10 @@ namespace ts.server { }; // TODO: handle FormatCodeOptions - var request = this.processRequest(CommandNames.Format, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.Format, args); + const response = this.processResponse(request); - return response.body.map(entry=> this.convertCodeEditsToTextChange(fileName, entry)); + return response.body.map(entry => this.convertCodeEditsToTextChange(fileName, entry)); } getFormattingEditsForDocument(fileName: string, options: ts.FormatCodeOptions): ts.TextChange[] { @@ -272,8 +285,8 @@ namespace ts.server { } getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions): ts.TextChange[] { - var lineOffset = this.positionToOneBasedLineOffset(fileName, position); - var args: protocol.FormatOnKeyRequestArgs = { + const lineOffset = this.positionToOneBasedLineOffset(fileName, position); + const args: protocol.FormatOnKeyRequestArgs = { file: fileName, line: lineOffset.line, offset: lineOffset.offset, @@ -281,27 +294,27 @@ namespace ts.server { }; // TODO: handle FormatCodeOptions - var request = this.processRequest(CommandNames.Formatonkey, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.Formatonkey, args); + const response = this.processResponse(request); - return response.body.map(entry=> this.convertCodeEditsToTextChange(fileName, entry)); + return response.body.map(entry => this.convertCodeEditsToTextChange(fileName, entry)); } getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[] { - var lineOffset = this.positionToOneBasedLineOffset(fileName, position); - var args: protocol.FileLocationRequestArgs = { + const lineOffset = this.positionToOneBasedLineOffset(fileName, position); + const args: protocol.FileLocationRequestArgs = { file: fileName, line: lineOffset.line, offset: lineOffset.offset, }; - var request = this.processRequest(CommandNames.Definition, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.Definition, args); + const response = this.processResponse(request); return response.body.map(entry => { - var fileName = entry.file; - var start = this.lineOffsetToPosition(fileName, entry.start); - var end = this.lineOffsetToPosition(fileName, entry.end); + const fileName = entry.file; + const start = this.lineOffsetToPosition(fileName, entry.start); + const end = this.lineOffsetToPosition(fileName, entry.end); return { containerKind: "", containerName: "", @@ -314,20 +327,20 @@ namespace ts.server { } getTypeDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[] { - var lineOffset = this.positionToOneBasedLineOffset(fileName, position); - var args: protocol.FileLocationRequestArgs = { + const lineOffset = this.positionToOneBasedLineOffset(fileName, position); + const args: protocol.FileLocationRequestArgs = { file: fileName, line: lineOffset.line, offset: lineOffset.offset, }; - var request = this.processRequest(CommandNames.TypeDefinition, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.TypeDefinition, args); + const response = this.processResponse(request); return response.body.map(entry => { - var fileName = entry.file; - var start = this.lineOffsetToPosition(fileName, entry.start); - var end = this.lineOffsetToPosition(fileName, entry.end); + const fileName = entry.file; + const start = this.lineOffsetToPosition(fileName, entry.start); + const end = this.lineOffsetToPosition(fileName, entry.end); return { containerKind: "", containerName: "", @@ -339,26 +352,26 @@ namespace ts.server { }); } - findReferences(fileName: string, position: number): ReferencedSymbol[]{ + findReferences(fileName: string, position: number): ReferencedSymbol[] { // Not yet implemented. return []; } getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[] { - var lineOffset = this.positionToOneBasedLineOffset(fileName, position); - var args: protocol.FileLocationRequestArgs = { + const lineOffset = this.positionToOneBasedLineOffset(fileName, position); + const args: protocol.FileLocationRequestArgs = { file: fileName, line: lineOffset.line, offset: lineOffset.offset, }; - var request = this.processRequest(CommandNames.References, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.References, args); + const response = this.processResponse(request); return response.body.refs.map(entry => { - var fileName = entry.file; - var start = this.lineOffsetToPosition(fileName, entry.start); - var end = this.lineOffsetToPosition(fileName, entry.end); + const fileName = entry.file; + const start = this.lineOffsetToPosition(fileName, entry.start); + const end = this.lineOffsetToPosition(fileName, entry.end); return { fileName: fileName, textSpan: ts.createTextSpanFromBounds(start, end), @@ -384,8 +397,8 @@ namespace ts.server { } getRenameInfo(fileName: string, position: number, findInStrings?: boolean, findInComments?: boolean): RenameInfo { - var lineOffset = this.positionToOneBasedLineOffset(fileName, position); - var args: protocol.RenameRequestArgs = { + const lineOffset = this.positionToOneBasedLineOffset(fileName, position); + const args: protocol.RenameRequestArgs = { file: fileName, line: lineOffset.line, offset: lineOffset.offset, @@ -393,14 +406,14 @@ namespace ts.server { findInComments }; - var request = this.processRequest(CommandNames.Rename, args); - var response = this.processResponse(request); - var locations: RenameLocation[] = []; + const request = this.processRequest(CommandNames.Rename, args); + const response = this.processResponse(request); + const locations: RenameLocation[] = []; response.body.locs.map((entry: protocol.SpanGroup) => { - var fileName = entry.file; + const fileName = entry.file; entry.locs.map((loc: protocol.TextSpan) => { - var start = this.lineOffsetToPosition(fileName, loc.start); - var end = this.lineOffsetToPosition(fileName, loc.end); + const start = this.lineOffsetToPosition(fileName, loc.start); + const end = this.lineOffsetToPosition(fileName, loc.end); locations.push({ textSpan: ts.createTextSpanFromBounds(start, end), fileName: fileName @@ -444,7 +457,7 @@ namespace ts.server { text: item.text, kind: item.kind, kindModifiers: item.kindModifiers || "", - spans: item.spans.map(span=> createTextSpanFromBounds(this.lineOffsetToPosition(fileName, span.start), this.lineOffsetToPosition(fileName, span.end))), + spans: item.spans.map(span => createTextSpanFromBounds(this.lineOffsetToPosition(fileName, span.start), this.lineOffsetToPosition(fileName, span.end))), childItems: this.decodeNavigationBarItems(item.childItems, fileName), indent: 0, bolded: false, @@ -453,12 +466,12 @@ namespace ts.server { } getNavigationBarItems(fileName: string): NavigationBarItem[] { - var args: protocol.FileRequestArgs = { + const args: protocol.FileRequestArgs = { file: fileName }; - var request = this.processRequest(CommandNames.NavBar, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.NavBar, args); + const response = this.processResponse(request); return this.decodeNavigationBarItems(response.body, fileName); } @@ -472,26 +485,26 @@ namespace ts.server { } getSignatureHelpItems(fileName: string, position: number): SignatureHelpItems { - var lineOffset = this.positionToOneBasedLineOffset(fileName, position); - var args: protocol.SignatureHelpRequestArgs = { + const lineOffset = this.positionToOneBasedLineOffset(fileName, position); + const args: protocol.SignatureHelpRequestArgs = { file: fileName, line: lineOffset.line, offset: lineOffset.offset }; - - var request = this.processRequest(CommandNames.SignatureHelp, args); - var response = this.processResponse(request); - + + const request = this.processRequest(CommandNames.SignatureHelp, args); + const response = this.processResponse(request); + if (!response.body) { return undefined; } - var helpItems: protocol.SignatureHelpItems = response.body; - var span = helpItems.applicableSpan; - var start = this.lineOffsetToPosition(fileName, span.start); - var end = this.lineOffsetToPosition(fileName, span.end); - - var result: SignatureHelpItems = { + const helpItems: protocol.SignatureHelpItems = response.body; + const span = helpItems.applicableSpan; + const start = this.lineOffsetToPosition(fileName, span.start); + const end = this.lineOffsetToPosition(fileName, span.end); + + const result: SignatureHelpItems = { items: helpItems.items, applicableSpan: { start: start, @@ -499,26 +512,26 @@ namespace ts.server { }, selectedItemIndex: helpItems.selectedItemIndex, argumentIndex: helpItems.argumentIndex, - argumentCount: helpItems.argumentCount, - } + argumentCount: helpItems.argumentCount, + }; return result; } getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[] { - var lineOffset = this.positionToOneBasedLineOffset(fileName, position); - var args: protocol.FileLocationRequestArgs = { + const lineOffset = this.positionToOneBasedLineOffset(fileName, position); + const args: protocol.FileLocationRequestArgs = { file: fileName, line: lineOffset.line, offset: lineOffset.offset, }; - var request = this.processRequest(CommandNames.Occurrences, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.Occurrences, args); + const response = this.processResponse(request); return response.body.map(entry => { - var fileName = entry.file; - var start = this.lineOffsetToPosition(fileName, entry.start); - var end = this.lineOffsetToPosition(fileName, entry.end); + const fileName = entry.file; + const start = this.lineOffsetToPosition(fileName, entry.start); + const end = this.lineOffsetToPosition(fileName, entry.end); return { fileName, textSpan: ts.createTextSpanFromBounds(start, end), @@ -528,17 +541,17 @@ namespace ts.server { } getDocumentHighlights(fileName: string, position: number, filesToSearch: string[]): DocumentHighlights[] { - let { line, offset } = this.positionToOneBasedLineOffset(fileName, position); - let args: protocol.DocumentHighlightsRequestArgs = { file: fileName, line, offset, filesToSearch }; + const { line, offset } = this.positionToOneBasedLineOffset(fileName, position); + const args: protocol.DocumentHighlightsRequestArgs = { file: fileName, line, offset, filesToSearch }; - let request = this.processRequest(CommandNames.DocumentHighlights, args); - let response = this.processResponse(request); + const request = this.processRequest(CommandNames.DocumentHighlights, args); + const response = this.processResponse(request); - let self = this; + const self = this; return response.body.map(convertToDocumentHighlights); function convertToDocumentHighlights(item: ts.server.protocol.DocumentHighlightsItem): ts.DocumentHighlights { - let { file, highlightSpans } = item; + const { file, highlightSpans } = item; return { fileName: file, @@ -546,8 +559,8 @@ namespace ts.server { }; function convertHighlightSpan(span: ts.server.protocol.HighlightSpan): ts.HighlightSpan { - let start = self.lineOffsetToPosition(file, span.start); - let end = self.lineOffsetToPosition(file, span.end); + const start = self.lineOffsetToPosition(file, span.start); + const end = self.lineOffsetToPosition(file, span.end); return { textSpan: ts.createTextSpanFromBounds(start, end), kind: span.kind @@ -561,31 +574,31 @@ namespace ts.server { } getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[] { - throw new Error("Not Implemented Yet."); + throw new Error("Not Implemented Yet."); } - + getDocCommentTemplateAtPosition(fileName: string, position: number): TextInsertion { - throw new Error("Not Implemented Yet."); + throw new Error("Not Implemented Yet."); } isValidBraceCompletionAtPostion(fileName: string, position: number, openingBrace: number): boolean { - throw new Error("Not Implemented Yet."); + throw new Error("Not Implemented Yet."); } getBraceMatchingAtPosition(fileName: string, position: number): TextSpan[] { - var lineOffset = this.positionToOneBasedLineOffset(fileName, position); - var args: protocol.FileLocationRequestArgs = { + const lineOffset = this.positionToOneBasedLineOffset(fileName, position); + const args: protocol.FileLocationRequestArgs = { file: fileName, line: lineOffset.line, offset: lineOffset.offset, }; - var request = this.processRequest(CommandNames.Brace, args); - var response = this.processResponse(request); + const request = this.processRequest(CommandNames.Brace, args); + const response = this.processResponse(request); return response.body.map(entry => { - var start = this.lineOffsetToPosition(fileName, entry.start); - var end = this.lineOffsetToPosition(fileName, entry.end); + const start = this.lineOffsetToPosition(fileName, entry.start); + const end = this.lineOffsetToPosition(fileName, entry.end); return { start: start, length: end - start, diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 77908779d9f..5502f74408e 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -32,7 +32,7 @@ namespace ts.server { children: ScriptInfo[] = []; // files referenced by this file defaultProject: Project; // project to use by default for file fileWatcher: FileWatcher; - formatCodeOptions = ts.clone(CompilerService.defaultFormatCodeOptions); + formatCodeOptions = ts.clone(CompilerService.getDefaultFormatCodeOptions(this.host)); path: Path; scriptKind: ScriptKind; @@ -533,7 +533,7 @@ namespace ts.server { // number becomes 0 for a watcher, then we should close it. directoryWatchersRefCount: ts.Map = {}; hostConfiguration: HostConfiguration; - timerForDetectingProjectFileListChanges: Map = {}; + timerForDetectingProjectFileListChanges: Map = {}; constructor(public host: ServerHost, public psLogger: Logger, public eventHandler?: ProjectServiceEventHandler) { // ts.disableIncrementalParsing = true; @@ -542,7 +542,7 @@ namespace ts.server { addDefaultHostConfiguration() { this.hostConfiguration = { - formatCodeOptions: ts.clone(CompilerService.defaultFormatCodeOptions), + formatCodeOptions: ts.clone(CompilerService.getDefaultFormatCodeOptions(this.host)), hostInfo: "Unknown host" }; } @@ -593,9 +593,9 @@ namespace ts.server { startTimerForDetectingProjectFileListChanges(project: Project) { if (this.timerForDetectingProjectFileListChanges[project.projectFilename]) { - clearTimeout(this.timerForDetectingProjectFileListChanges[project.projectFilename]); + this.host.clearTimeout(this.timerForDetectingProjectFileListChanges[project.projectFilename]); } - this.timerForDetectingProjectFileListChanges[project.projectFilename] = setTimeout( + this.timerForDetectingProjectFileListChanges[project.projectFilename] = this.host.setTimeout( () => this.handleProjectFileListChanges(project), 250 ); @@ -1122,8 +1122,13 @@ namespace ts.server { return { configFileName, configFileErrors: configResult.errors }; } else { + // even if opening config file was successful, it could still + // contain errors that were tolerated. this.log("Opened configuration file " + configFileName, "Info"); this.configuredProjects.push(configResult.project); + if (configResult.errors && configResult.errors.length > 0) { + return { configFileName, configFileErrors: configResult.errors }; + } } } else { @@ -1261,14 +1266,14 @@ namespace ts.server { } else { const project = this.createProject(configFilename, projectOptions); + let errors: Diagnostic[]; for (const rootFilename of projectOptions.files) { if (this.host.fileExists(rootFilename)) { const info = this.openFile(rootFilename, /*openedByClient*/ clientFileName == rootFilename); project.addRoot(info); } else { - const error = createCompilerDiagnostic(Diagnostics.File_0_not_found, rootFilename); - return { success: false, errors: [error] }; + (errors || (errors = [])).push(createCompilerDiagnostic(Diagnostics.File_0_not_found, rootFilename)); } } project.finishGraph(); @@ -1279,7 +1284,7 @@ namespace ts.server { path => this.directoryWatchedForSourceFilesChanged(project, path), /*recursive*/ true ); - return { success: true, project: project }; + return { success: true, project: project, errors }; } } @@ -1295,7 +1300,7 @@ namespace ts.server { } else { const oldFileNames = project.compilerService.host.roots.map(info => info.fileName); - const newFileNames = projectOptions.files; + const newFileNames = ts.filter(projectOptions.files, f => this.host.fileExists(f)); const fileNamesToRemove = oldFileNames.filter(f => newFileNames.indexOf(f) < 0); const fileNamesToAdd = newFileNames.filter(f => oldFileNames.indexOf(f) < 0); @@ -1377,23 +1382,25 @@ namespace ts.server { return ts.isExternalModule(sourceFile); } - static defaultFormatCodeOptions: ts.FormatCodeOptions = { - IndentSize: 4, - TabSize: 4, - NewLineCharacter: ts.sys ? ts.sys.newLine : "\n", - ConvertTabsToSpaces: true, - IndentStyle: ts.IndentStyle.Smart, - InsertSpaceAfterCommaDelimiter: true, - InsertSpaceAfterSemicolonInForStatements: true, - InsertSpaceBeforeAndAfterBinaryOperators: true, - InsertSpaceAfterKeywordsInControlFlowStatements: true, - InsertSpaceAfterFunctionKeywordForAnonymousFunctions: false, - InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false, - InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false, - InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false, - PlaceOpenBraceOnNewLineForFunctions: false, - PlaceOpenBraceOnNewLineForControlBlocks: false, - }; + static getDefaultFormatCodeOptions(host: ServerHost): ts.FormatCodeOptions { + return ts.clone({ + IndentSize: 4, + TabSize: 4, + NewLineCharacter: host.newLine || "\n", + ConvertTabsToSpaces: true, + IndentStyle: ts.IndentStyle.Smart, + InsertSpaceAfterCommaDelimiter: true, + InsertSpaceAfterSemicolonInForStatements: true, + InsertSpaceBeforeAndAfterBinaryOperators: true, + InsertSpaceAfterKeywordsInControlFlowStatements: true, + InsertSpaceAfterFunctionKeywordForAnonymousFunctions: false, + InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false, + InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false, + InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false, + PlaceOpenBraceOnNewLineForFunctions: false, + PlaceOpenBraceOnNewLineForControlBlocks: false, + }); + } } export interface LineCollection { diff --git a/src/server/server.ts b/src/server/server.ts index ec83f8cc716..767793024c2 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -266,16 +266,21 @@ namespace ts.server { } } + const sys = ts.sys; + // Override sys.write because fs.writeSync is not reliable on Node 4 - ts.sys.write = (s: string) => writeMessage(s); - ts.sys.watchFile = (fileName, callback) => { + sys.write = (s: string) => writeMessage(s); + sys.watchFile = (fileName, callback) => { const watchedFile = pollingWatchedFileSet.addFile(fileName, callback); return { close: () => pollingWatchedFileSet.removeFile(watchedFile) }; }; - const ioSession = new IOSession(ts.sys, logger); + sys.setTimeout = setTimeout; + sys.clearTimeout = clearTimeout; + + const ioSession = new IOSession(sys, logger); process.on("uncaughtException", function(err: Error) { ioSession.logError(err, "unknown"); }); diff --git a/src/server/session.ts b/src/server/session.ts index 8c6525a70e6..09b86da48cc 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -133,6 +133,8 @@ namespace ts.server { } export interface ServerHost extends ts.System { + setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): any; + clearTimeout(timeoutId: any): void; } export class Session { diff --git a/src/services/breakpoints.ts b/src/services/breakpoints.ts index c79a34b1bfa..02456f5add1 100644 --- a/src/services/breakpoints.ts +++ b/src/services/breakpoints.ts @@ -24,7 +24,7 @@ namespace ts.BreakpointResolver { // token on same line if trailing trivia (comments or white spaces on same line) part of the last token on that line tokenAtLocation = findPrecedingToken(tokenAtLocation.pos, sourceFile); - // Its a blank line + // It's a blank line if (!tokenAtLocation || sourceFile.getLineAndCharacterOfPosition(tokenAtLocation.getEnd()).line !== lineOfPosition) { return undefined; } @@ -312,7 +312,7 @@ namespace ts.BreakpointResolver { case SyntaxKind.BinaryExpression: if ((node.parent).operatorToken.kind === SyntaxKind.CommaToken) { - // if this is comma expression, the breakpoint is possible in this expression + // If this is a comma expression, the breakpoint is possible in this expression return textSpan(node); } break; @@ -387,7 +387,7 @@ namespace ts.BreakpointResolver { return spanInNode(variableDeclaration.parent.parent); } - // If this is a destructuring pattern set breakpoint in binding pattern + // If this is a destructuring pattern, set breakpoint in binding pattern if (isBindingPattern(variableDeclaration.name)) { return spanInBindingPattern(variableDeclaration.name); } @@ -402,9 +402,9 @@ namespace ts.BreakpointResolver { let declarations = variableDeclaration.parent.declarations; if (declarations && declarations[0] !== variableDeclaration) { - // If we cant set breakpoint on this declaration, set it on previous one + // If we cannot set breakpoint on this declaration, set it on previous one // Because the variable declaration may be binding pattern and - // we would like to set breakpoint in last binding element if thats the case, + // we would like to set breakpoint in last binding element if that's the case, // use preceding token instead return spanInNode(findPrecedingToken(variableDeclaration.pos, sourceFile, variableDeclaration.parent)); } @@ -418,7 +418,7 @@ namespace ts.BreakpointResolver { function spanInParameterDeclaration(parameter: ParameterDeclaration): TextSpan { if (isBindingPattern(parameter.name)) { - // set breakpoint in binding pattern + // Set breakpoint in binding pattern return spanInBindingPattern(parameter.name); } else if (canHaveSpanInParameterDeclaration(parameter)) { @@ -492,7 +492,7 @@ namespace ts.BreakpointResolver { function spanInInitializerOfForLike(forLikeStatement: ForStatement | ForOfStatement | ForInStatement): TextSpan { if (forLikeStatement.initializer.kind === SyntaxKind.VariableDeclarationList) { - // declaration list, set breakpoint in first declaration + // Declaration list - set breakpoint in first declaration let variableDeclarationList = forLikeStatement.initializer; if (variableDeclarationList.declarations.length > 0) { return spanInNode(variableDeclarationList.declarations[0]); @@ -578,7 +578,7 @@ namespace ts.BreakpointResolver { function spanInCloseBraceToken(node: Node): TextSpan { switch (node.parent.kind) { case SyntaxKind.ModuleBlock: - // If this is not instantiated module block no bp span + // If this is not an instantiated module block, no bp span if (getModuleInstanceState(node.parent.parent) !== ModuleInstanceState.Instantiated) { return undefined; } @@ -593,7 +593,7 @@ namespace ts.BreakpointResolver { // Span on close brace token return textSpan(node); } - // fall through. + // fall through case SyntaxKind.CatchClause: return spanInNode(lastOrUndefined((node.parent).statements)); @@ -714,7 +714,7 @@ namespace ts.BreakpointResolver { function spanInOfKeyword(node: Node): TextSpan { if (node.parent.kind === SyntaxKind.ForOfStatement) { - // set using next token + // Set using next token return spanInNextNode(node); } @@ -723,4 +723,4 @@ namespace ts.BreakpointResolver { } } } -} \ No newline at end of file +} diff --git a/src/services/formatting/formatting.ts b/src/services/formatting/formatting.ts index 7931f1ea733..20b20356907 100644 --- a/src/services/formatting/formatting.ts +++ b/src/services/formatting/formatting.ts @@ -20,13 +20,13 @@ namespace ts.formatting { Unknown = -1 } - /* + /* * Indentation for the scope that can be dynamically recomputed. - * i.e + * i.e * while(true) * { let x; * } - * Normally indentation is applied only to the first token in line so at glance 'var' should not be touched. + * Normally indentation is applied only to the first token in line so at glance 'var' should not be touched. * However if some format rule adds new line between '}' and 'var' 'var' will become * the first token in line so it should be indented */ @@ -48,15 +48,15 @@ namespace ts.formatting { * foo(bar({ * $ * })) - * Both 'foo', 'bar' introduce new indentation with delta = 4, but total indentation in $ is not 8. + * Both 'foo', 'bar' introduce new indentation with delta = 4, but total indentation in $ is not 8. * foo: { indentation: 0, delta: 4 } * bar: { indentation: foo.indentation + foo.delta = 4, delta: 4} however 'foo' and 'bar' are on the same line * so bar inherits indentation from foo and bar.delta will be 4 - * + * */ getDelta(child: TextRangeWithKind): number; /** - * Formatter calls this function when rule adds or deletes new lines from the text + * Formatter calls this function when rule adds or deletes new lines from the text * so indentation scope can adjust values of indentation and delta. */ recomputeIndentation(lineAddedByFormatting: boolean): void; @@ -130,9 +130,9 @@ namespace ts.formatting { function findOutermostParent(position: number, expectedTokenKind: SyntaxKind, sourceFile: SourceFile): Node { let precedingToken = findPrecedingToken(position, sourceFile); - // when it is claimed that trigger character was typed at given position + // when it is claimed that trigger character was typed at given position // we verify that there is a token with a matching kind whose end is equal to position (because the character was just typed). - // If this condition is not hold - then trigger character was typed in some other context, + // If this condition is not hold - then trigger character was typed in some other context, // i.e.in comment and thus should not trigger autoformatting if (!precedingToken || precedingToken.kind !== expectedTokenKind || @@ -142,12 +142,12 @@ namespace ts.formatting { // walk up and search for the parent node that ends at the same position with precedingToken. // for cases like this - // + // // let x = 1; // while (true) { - // } + // } // after typing close curly in while statement we want to reformat just the while statement. - // However if we just walk upwards searching for the parent that has the same end value - + // However if we just walk upwards searching for the parent that has the same end value - // we'll end up with the whole source file. isListElement allows to stop on the list element level let current = precedingToken; while (current && @@ -223,7 +223,7 @@ namespace ts.formatting { // 'index' tracks the index of the most recent error that was checked. while (true) { if (index >= sorted.length) { - // all errors in the range were already checked -> no error in specified range + // all errors in the range were already checked -> no error in specified range return false; } @@ -249,7 +249,7 @@ namespace ts.formatting { /** * Start of the original range might fall inside the comment - scanner will not yield appropriate results - * This function will look for token that is located before the start of target range + * This function will look for token that is located before the start of target range * and return its end as start position for the scanner. */ function getScanStartPosition(enclosingNode: Node, originalRange: TextRange, sourceFile: SourceFile): number { @@ -274,7 +274,7 @@ namespace ts.formatting { } /* - * For cases like + * For cases like * if (a || * b ||$ * c) {...} @@ -284,8 +284,8 @@ namespace ts.formatting { * Initial indentation for this node will be 0. * Binary expressions don't introduce new indentation scopes, however it is possible * that some parent node on the same line does - like if statement in this case. - * Note that we are considering parents only from the same line with initial node - - * if parent is on the different line - its delta was already contributed + * Note that we are considering parents only from the same line with initial node - + * if parent is on the different line - its delta was already contributed * to the initial indentation. */ function getOwnOrInheritedDelta(n: Node, options: FormatCodeOptions, sourceFile: SourceFile): number { @@ -364,10 +364,10 @@ namespace ts.formatting { // local functions /** Tries to compute the indentation for a list element. - * If list element is not in range then - * function will pick its actual indentation + * If list element is not in range then + * function will pick its actual indentation * so it can be pushed downstream as inherited indentation. - * If list element is in the range - its indentation will be equal + * If list element is in the range - its indentation will be equal * to inherited indentation from its predecessors. */ function tryComputeIndentationForListItem(startPos: number, @@ -378,7 +378,7 @@ namespace ts.formatting { if (rangeOverlapsWithStartEnd(range, startPos, endPos) || rangeContainsStartEnd(range, startPos, endPos) /* Not to miss zero-range nodes e.g. JsxText */) { - + if (inheritedIndentation !== Constants.Unknown) { return inheritedIndentation; } @@ -529,12 +529,12 @@ namespace ts.formatting { // a useful observations when tracking context node // / // [a] - // / | \ + // / | \ // [b] [c] [d] - // node 'a' is a context node for nodes 'b', 'c', 'd' + // node 'a' is a context node for nodes 'b', 'c', 'd' // except for the leftmost leaf token in [b] - in this case context node ('e') is located somewhere above 'a' // this rule can be applied recursively to child nodes of 'a'. - // + // // context node is set to parent node value after processing every child node // context node is set to parent of the token after processing every token @@ -567,7 +567,8 @@ namespace ts.formatting { parentDynamicIndentation: DynamicIndentation, parentStartLine: number, undecoratedParentStartLine: number, - isListItem: boolean): number { + isListItem: boolean, + isFirstListItem?: boolean): number { let childStartPos = child.getStart(sourceFile); @@ -626,6 +627,10 @@ namespace ts.formatting { childContextNode = node; + if (isFirstListItem && parent.kind === SyntaxKind.ArrayLiteralExpression && inheritedIndentation === Constants.Unknown) { + inheritedIndentation = childIndentation.indentation; + } + return inheritedIndentation; } @@ -665,8 +670,9 @@ namespace ts.formatting { } let inheritedIndentation = Constants.Unknown; - for (let child of nodes) { - inheritedIndentation = processChildNode(child, inheritedIndentation, node, listDynamicIndentation, startLine, startLine, /*isListElement*/ true) + for (let i = 0; i < nodes.length; i++) { + const child = nodes[i]; + inheritedIndentation = processChildNode(child, inheritedIndentation, node, listDynamicIndentation, startLine, startLine, /*isListElement*/ true, /*isFirstListItem*/ i === 0); } if (listEndToken !== SyntaxKind.Unknown) { @@ -674,7 +680,7 @@ namespace ts.formatting { let tokenInfo = formattingScanner.readTokenInfo(parent); // consume the list end token only if it is still belong to the parent // there might be the case when current token matches end token but does not considered as one - // function (x: function) <-- + // function (x: function) <-- // without this check close paren will be interpreted as list end token for function expression which is wrong if (tokenInfo.token.kind === listEndToken && rangeContainsRange(parent, tokenInfo.token)) { // consume list end token @@ -733,7 +739,7 @@ namespace ts.formatting { let commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind, tokenIndentation, container); for (let triviaItem of currentTokenInfo.leadingTrivia) { - const triviaInRange = rangeContainsRange(originalRange, triviaItem); + const triviaInRange = rangeContainsRange(originalRange, triviaItem); switch (triviaItem.kind) { case SyntaxKind.MultiLineCommentTrivia: if (triviaInRange) { @@ -826,7 +832,7 @@ namespace ts.formatting { if (rule.Operation.Action & (RuleAction.Space | RuleAction.Delete) && currentStartLine !== previousStartLine) { lineAdded = false; - // Handle the case where the next line is moved to be the end of this line. + // Handle the case where the next line is moved to be the end of this line. // In this case we don't indent the next line in the next pass. if (currentParent.getStart(sourceFile) === currentItem.pos) { dynamicIndentation.recomputeIndentation(/*lineAdded*/ false); @@ -834,7 +840,7 @@ namespace ts.formatting { } else if (rule.Operation.Action & RuleAction.NewLine && currentStartLine === previousStartLine) { lineAdded = true; - // Handle the case where token2 is moved to the new line. + // Handle the case where token2 is moved to the new line. // In this case we indent token2 in the next pass but we set // sameLineIndent flag to notify the indenter that the indentation is within the line. if (currentParent.getStart(sourceFile) === currentItem.pos) { diff --git a/src/services/navigateTo.ts b/src/services/navigateTo.ts index 8022e2fad7a..49707263c1f 100644 --- a/src/services/navigateTo.ts +++ b/src/services/navigateTo.ts @@ -2,7 +2,7 @@ namespace ts.NavigateTo { type RawNavigateToItem = { name: string; fileName: string; matchKind: PatternMatchKind; isCaseSensitive: boolean; declaration: Declaration }; - export function getNavigateToItems(program: Program, cancellationToken: CancellationToken, searchValue: string, maxResultCount: number): NavigateToItem[] { + export function getNavigateToItems(program: Program, checker: TypeChecker, cancellationToken: CancellationToken, searchValue: string, maxResultCount: number): NavigateToItem[] { const patternMatcher = createPatternMatcher(searchValue); let rawItems: RawNavigateToItem[] = []; @@ -49,6 +49,19 @@ namespace ts.NavigateTo { } }); + // Remove imports when the imported declaration is already in the list and has the same name. + rawItems = filter(rawItems, item => { + const decl = item.declaration; + if (decl.kind === SyntaxKind.ImportClause || decl.kind === SyntaxKind.ImportSpecifier || decl.kind === SyntaxKind.ImportEqualsDeclaration) { + const importer = checker.getSymbolAtLocation(decl.name); + const imported = checker.getAliasedSymbol(importer); + return importer.name !== imported.name; + } + else { + return true; + } + }); + rawItems.sort(compareNavigateToItems); if (maxResultCount !== undefined) { rawItems = rawItems.slice(0, maxResultCount); diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index d83d0738ec8..2cd93d3856c 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -46,7 +46,7 @@ namespace ts.NavigationBar { } function getChildNodes(nodes: Node[]): Node[] { - let childNodes: Node[] = []; + const childNodes: Node[] = []; function visit(node: Node) { switch (node.kind) { @@ -109,7 +109,7 @@ namespace ts.NavigationBar { } } - //for (let i = 0, n = nodes.length; i < n; i++) { + // for (let i = 0, n = nodes.length; i < n; i++) { // let node = nodes[i]; // if (node.kind === SyntaxKind.ClassDeclaration || @@ -123,13 +123,13 @@ namespace ts.NavigationBar { // else if (node.kind === SyntaxKind.VariableStatement) { // childNodes.push.apply(childNodes, (node).declarations); // } - //} + // } forEach(nodes, visit); return sortNodes(childNodes); } function getTopLevelNodes(node: SourceFile): Node[] { - let topLevelNodes: Node[] = []; + const topLevelNodes: Node[] = []; topLevelNodes.push(node); addTopLevelNodes(node.statements, topLevelNodes); @@ -157,7 +157,7 @@ namespace ts.NavigationBar { function addTopLevelNodes(nodes: Node[], topLevelNodes: Node[]): void { nodes = sortNodes(nodes); - for (let node of nodes) { + for (const node of nodes) { switch (node.kind) { case SyntaxKind.ClassDeclaration: topLevelNodes.push(node); @@ -176,6 +176,7 @@ namespace ts.NavigationBar { break; case SyntaxKind.EnumDeclaration: case SyntaxKind.InterfaceDeclaration: + case SyntaxKind.TypeAliasDeclaration: topLevelNodes.push(node); break; @@ -197,7 +198,7 @@ namespace ts.NavigationBar { } function hasNamedFunctionDeclarations(nodes: NodeArray): boolean { - for (let s of nodes) { + for (const s of nodes) { if (s.kind === SyntaxKind.FunctionDeclaration && !isEmpty((s).name.text)) { return true; } @@ -237,17 +238,17 @@ namespace ts.NavigationBar { } function getItemsWorker(nodes: Node[], createItem: (n: Node) => ts.NavigationBarItem): ts.NavigationBarItem[] { - let items: ts.NavigationBarItem[] = []; + const items: ts.NavigationBarItem[] = []; - let keyToItem: Map = {}; + const keyToItem: Map = {}; - for (let child of nodes) { - let item = createItem(child); + for (const child of nodes) { + const item = createItem(child); if (item !== undefined) { if (item.text.length > 0) { - let key = item.text + "-" + item.kind + "-" + item.indent; + const key = item.text + "-" + item.kind + "-" + item.indent; - let itemWithSameName = keyToItem[key]; + const itemWithSameName = keyToItem[key]; if (itemWithSameName) { // We had an item with the same name. Merge these items together. merge(itemWithSameName, item); @@ -274,8 +275,8 @@ namespace ts.NavigationBar { // Next, recursively merge or add any children in the source as appropriate. outer: - for (let sourceChild of source.childItems) { - for (let targetChild of target.childItems) { + for (const sourceChild of source.childItems) { + for (const targetChild of target.childItems) { if (targetChild.text === sourceChild.text && targetChild.kind === sourceChild.kind) { // Found a match. merge them. merge(targetChild, sourceChild); @@ -382,7 +383,7 @@ namespace ts.NavigationBar { return !text || text.trim() === ""; } - function getNavigationBarItem(text: string, kind: string, kindModifiers: string, spans: TextSpan[], childItems: NavigationBarItem[] = [], indent: number = 0): NavigationBarItem { + function getNavigationBarItem(text: string, kind: string, kindModifiers: string, spans: TextSpan[], childItems: NavigationBarItem[] = [], indent = 0): NavigationBarItem { if (isEmpty(text)) { return undefined; } @@ -422,6 +423,9 @@ namespace ts.NavigationBar { case SyntaxKind.FunctionDeclaration: return createFunctionItem(node); + + case SyntaxKind.TypeAliasDeclaration: + return createTypeAliasItem(node); } return undefined; @@ -433,7 +437,7 @@ namespace ts.NavigationBar { } // Otherwise, we need to aggregate each identifier to build up the qualified name. - let result: string[] = []; + const result: string[] = []; result.push(moduleDeclaration.name.text); @@ -447,9 +451,9 @@ namespace ts.NavigationBar { } function createModuleItem(node: ModuleDeclaration): NavigationBarItem { - let moduleName = getModuleName(node); + const moduleName = getModuleName(node); - let childItems = getItemsWorker(getChildNodes((getInnermostModule(node).body).statements), createChildItem); + const childItems = getItemsWorker(getChildNodes((getInnermostModule(node).body).statements), createChildItem); return getNavigationBarItem(moduleName, ts.ScriptElementKind.moduleElement, @@ -461,9 +465,9 @@ namespace ts.NavigationBar { function createFunctionItem(node: FunctionDeclaration): ts.NavigationBarItem { if (node.body && node.body.kind === SyntaxKind.Block) { - let childItems = getItemsWorker(sortNodes((node.body).statements), createChildItem); + const childItems = getItemsWorker(sortNodes((node.body).statements), createChildItem); - return getNavigationBarItem(!node.name ? "default": node.name.text, + return getNavigationBarItem(!node.name ? "default" : node.name.text, ts.ScriptElementKind.functionElement, getNodeModifiers(node), [getNodeSpan(node)], @@ -474,9 +478,18 @@ namespace ts.NavigationBar { return undefined; } + function createTypeAliasItem(node: TypeAliasDeclaration): ts.NavigationBarItem { + return getNavigationBarItem(node.name.text, + ts.ScriptElementKind.typeElement, + getNodeModifiers(node), + [getNodeSpan(node)], + [], + getIndent(node)); + } + function createMemberFunctionLikeItem(node: MethodDeclaration | ConstructorDeclaration): ts.NavigationBarItem { if (node.body && node.body.kind === SyntaxKind.Block) { - let childItems = getItemsWorker(sortNodes((node.body).statements), createChildItem); + const childItems = getItemsWorker(sortNodes((node.body).statements), createChildItem); let scriptElementKind: string; let memberFunctionName: string; if (node.kind === SyntaxKind.MethodDeclaration) { @@ -500,16 +513,16 @@ namespace ts.NavigationBar { } function createSourceFileItem(node: SourceFile): ts.NavigationBarItem { - let childItems = getItemsWorker(getChildNodes(node.statements), createChildItem); + const childItems = getItemsWorker(getChildNodes(node.statements), createChildItem); if (childItems === undefined || childItems.length === 0) { return undefined; } hasGlobalNode = true; - let rootName = isExternalModule(node) + const rootName = isExternalModule(node) ? "\"" + escapeString(getBaseFileName(removeFileExtension(normalizePath(node.fileName)))) + "\"" - : "" + : ""; return getNavigationBarItem(rootName, ts.ScriptElementKind.moduleElement, @@ -522,14 +535,14 @@ namespace ts.NavigationBar { let childItems: NavigationBarItem[]; if (node.members) { - let constructor = forEach(node.members, member => { + const constructor = forEach(node.members, member => { return member.kind === SyntaxKind.Constructor && member; }); // Add the constructor parameters in as children of the class (for property parameters). // Note that *all non-binding pattern named* parameters will be added to the nodes array, but parameters that // are not properties will be filtered out later by createChildItem. - let nodes: Node[] = removeDynamicallyNamedProperties(node); + const nodes: Node[] = removeDynamicallyNamedProperties(node); if (constructor) { addRange(nodes, filter(constructor.parameters, p => !isBindingPattern(p.name))); } @@ -537,7 +550,7 @@ namespace ts.NavigationBar { childItems = getItemsWorker(sortNodes(nodes), createChildItem); } - var nodeName = !node.name ? "default" : node.name.text; + const nodeName = !node.name ? "default" : node.name.text; return getNavigationBarItem( nodeName, @@ -549,7 +562,7 @@ namespace ts.NavigationBar { } function createEnumItem(node: EnumDeclaration): ts.NavigationBarItem { - let childItems = getItemsWorker(sortNodes(removeComputedProperties(node)), createChildItem); + const childItems = getItemsWorker(sortNodes(removeComputedProperties(node)), createChildItem); return getNavigationBarItem( node.name.text, ts.ScriptElementKind.enumElement, @@ -560,7 +573,7 @@ namespace ts.NavigationBar { } function createInterfaceItem(node: InterfaceDeclaration): ts.NavigationBarItem { - let childItems = getItemsWorker(sortNodes(removeDynamicallyNamedProperties(node)), createChildItem); + const childItems = getItemsWorker(sortNodes(removeDynamicallyNamedProperties(node)), createChildItem); return getNavigationBarItem( node.name.text, ts.ScriptElementKind.interfaceElement, @@ -578,7 +591,7 @@ namespace ts.NavigationBar { /** * Like removeComputedProperties, but retains the properties with well known symbol names */ - function removeDynamicallyNamedProperties(node: ClassDeclaration | InterfaceDeclaration): Declaration[]{ + function removeDynamicallyNamedProperties(node: ClassDeclaration | InterfaceDeclaration): Declaration[] { return filter(node.members, member => !hasDynamicName(member)); } @@ -606,11 +619,11 @@ namespace ts.NavigationBar { const anonClassText = ""; let indent = 0; - let rootName = isExternalModule(sourceFile) ? + const rootName = isExternalModule(sourceFile) ? "\"" + escapeString(getBaseFileName(removeFileExtension(normalizePath(sourceFile.fileName)))) + "\"" : ""; - let sourceFileItem = getNavBarItem(rootName, ScriptElementKind.moduleElement, [getNodeSpan(sourceFile)]); + const sourceFileItem = getNavBarItem(rootName, ScriptElementKind.moduleElement, [getNodeSpan(sourceFile)]); let topItem = sourceFileItem; // Walk the whole file, because we want to also find function expressions - which may be in variable initializer, @@ -643,12 +656,12 @@ namespace ts.NavigationBar { } } - function createNavBarItem(node: Node) : NavigationBarItem { + function createNavBarItem(node: Node): NavigationBarItem { switch (node.kind) { case SyntaxKind.VariableDeclaration: // Only add to the navbar if at the top-level of the file // Note: "const" and "let" are also SyntaxKind.VariableDeclarations - if(node.parent/*VariableDeclarationList*/.parent/*VariableStatement*/ + if (node.parent/*VariableDeclarationList*/.parent/*VariableStatement*/ .parent/*SourceFile*/.kind !== SyntaxKind.SourceFile) { return undefined; } @@ -711,7 +724,7 @@ namespace ts.NavigationBar { function getNavBarItem(text: string, kind: string, spans: TextSpan[], kindModifiers = ScriptElementKindModifier.none): NavigationBarItem { return { text, kind, kindModifiers, spans, childItems: [], indent, bolded: false, grayed: false - } + }; } function getDefineModuleItem(node: Node): NavigationBarItem { @@ -724,7 +737,7 @@ namespace ts.NavigationBar { return undefined; } const callExpr = node.parent as CallExpression; - if (callExpr.expression.kind !== SyntaxKind.Identifier || callExpr.expression.getText() !== 'define') { + if (callExpr.expression.kind !== SyntaxKind.Identifier || callExpr.expression.getText() !== "define") { return undefined; } diff --git a/src/services/services.ts b/src/services/services.ts index 4d4917ec601..35fb0887b3b 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -50,6 +50,7 @@ namespace ts { getStringIndexType(): Type; getNumberIndexType(): Type; getBaseTypes(): ObjectType[]; + getNonNullableType(): Type; } export interface Signature { @@ -735,6 +736,9 @@ namespace ts { ? this.checker.getBaseTypes(this) : undefined; } + getNonNullableType(): Type { + return this.checker.getNonNullableType(this); + } } class SignatureObject implements Signature { @@ -904,6 +908,7 @@ namespace ts { function visit(node: Node): void { switch (node.kind) { case SyntaxKind.FunctionDeclaration: + case SyntaxKind.FunctionExpression: case SyntaxKind.MethodDeclaration: case SyntaxKind.MethodSignature: const functionDeclaration = node; @@ -930,6 +935,7 @@ namespace ts { break; case SyntaxKind.ClassDeclaration: + case SyntaxKind.ClassExpression: case SyntaxKind.InterfaceDeclaration: case SyntaxKind.TypeAliasDeclaration: case SyntaxKind.EnumDeclaration: @@ -944,34 +950,25 @@ namespace ts { case SyntaxKind.SetAccessor: case SyntaxKind.TypeLiteral: addDeclaration(node); - // fall through - case SyntaxKind.Constructor: - case SyntaxKind.VariableStatement: - case SyntaxKind.VariableDeclarationList: - case SyntaxKind.ObjectBindingPattern: - case SyntaxKind.ArrayBindingPattern: - case SyntaxKind.ModuleBlock: forEachChild(node, visit); break; - case SyntaxKind.Block: - if (isFunctionBlock(node)) { - forEachChild(node, visit); - } - break; - case SyntaxKind.Parameter: - // Only consider properties defined as constructor parameters - if (!(node.flags & NodeFlags.AccessibilityModifier)) { + // Only consider parameter properties + if (!(node.flags & NodeFlags.ParameterPropertyModifier)) { break; } // fall through case SyntaxKind.VariableDeclaration: - case SyntaxKind.BindingElement: - if (isBindingPattern((node).name)) { - forEachChild((node).name, visit); + case SyntaxKind.BindingElement: { + const decl = node; + if (isBindingPattern(decl.name)) { + forEachChild(decl.name, visit); break; } + if (decl.initializer) + visit(decl.initializer); + } case SyntaxKind.EnumMember: case SyntaxKind.PropertyDeclaration: case SyntaxKind.PropertySignature: @@ -1008,6 +1005,9 @@ namespace ts { } } break; + + default: + forEachChild(node, visit); } } } @@ -1542,68 +1542,74 @@ namespace ts { export const unknown = ""; export const warning = "warning"; - // predefined type (void) or keyword (class) + /** predefined type (void) or keyword (class) */ export const keyword = "keyword"; - // top level script node + /** top level script node */ export const scriptElement = "script"; - // module foo {} + /** module foo {} */ export const moduleElement = "module"; - // class X {} + /** class X {} */ export const classElement = "class"; - // var x = class X {} + /** var x = class X {} */ export const localClassElement = "local class"; - // interface Y {} + /** interface Y {} */ export const interfaceElement = "interface"; - // type T = ... + /** type T = ... */ export const typeElement = "type"; - // enum E + /** enum E */ export const enumElement = "enum"; - // Inside module and script only - // const v = .. + /** + * Inside module and script only + * const v = .. + */ export const variableElement = "var"; - // Inside function + /** Inside function */ export const localVariableElement = "local var"; - // Inside module and script only - // function f() { } + /** + * Inside module and script only + * function f() { } + */ export const functionElement = "function"; - // Inside function + /** Inside function */ export const localFunctionElement = "local function"; - // class X { [public|private]* foo() {} } + /** class X { [public|private]* foo() {} } */ export const memberFunctionElement = "method"; - // class X { [public|private]* [get|set] foo:number; } + /** class X { [public|private]* [get|set] foo:number; } */ export const memberGetAccessorElement = "getter"; export const memberSetAccessorElement = "setter"; - // class X { [public|private]* foo:number; } - // interface Y { foo:number; } + /** + * class X { [public|private]* foo:number; } + * interface Y { foo:number; } + */ export const memberVariableElement = "property"; - // class X { constructor() { } } + /** class X { constructor() { } } */ export const constructorImplementationElement = "constructor"; - // interface Y { ():number; } + /** interface Y { ():number; } */ export const callSignatureElement = "call"; - // interface Y { []:number; } + /** interface Y { []:number; } */ export const indexSignatureElement = "index"; - // interface Y { new():Y; } + /** interface Y { new():Y; } */ export const constructSignatureElement = "construct"; - // function foo(*Y*: string) + /** function foo(*Y*: string) */ export const parameterElement = "parameter"; export const typeParameterElement = "type parameter"; @@ -2770,7 +2776,9 @@ namespace ts { /* @internal */ export function getNodeKind(node: Node): string { switch (node.kind) { case SyntaxKind.ModuleDeclaration: return ScriptElementKind.moduleElement; - case SyntaxKind.ClassDeclaration: return ScriptElementKind.classElement; + case SyntaxKind.ClassDeclaration: + case SyntaxKind.ClassExpression: + return ScriptElementKind.classElement; case SyntaxKind.InterfaceDeclaration: return ScriptElementKind.interfaceElement; case SyntaxKind.TypeAliasDeclaration: return ScriptElementKind.typeElement; case SyntaxKind.EnumDeclaration: return ScriptElementKind.enumElement; @@ -2780,7 +2788,9 @@ namespace ts { : isLet(node) ? ScriptElementKind.letElement : ScriptElementKind.variableElement; - case SyntaxKind.FunctionDeclaration: return ScriptElementKind.functionElement; + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.FunctionExpression: + return ScriptElementKind.functionElement; case SyntaxKind.GetAccessor: return ScriptElementKind.memberGetAccessorElement; case SyntaxKind.SetAccessor: return ScriptElementKind.memberSetAccessorElement; case SyntaxKind.MethodDeclaration: @@ -2795,7 +2805,7 @@ namespace ts { case SyntaxKind.Constructor: return ScriptElementKind.constructorImplementationElement; case SyntaxKind.TypeParameter: return ScriptElementKind.typeParameterElement; case SyntaxKind.EnumMember: return ScriptElementKind.variableElement; - case SyntaxKind.Parameter: return (node.flags & NodeFlags.AccessibilityModifier) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement; + case SyntaxKind.Parameter: return (node.flags & NodeFlags.ParameterPropertyModifier) ? ScriptElementKind.memberVariableElement : ScriptElementKind.parameterElement; case SyntaxKind.ImportEqualsDeclaration: case SyntaxKind.ImportSpecifier: case SyntaxKind.ImportClause: @@ -4366,7 +4376,7 @@ namespace ts { (location.kind === SyntaxKind.ConstructorKeyword && location.parent.kind === SyntaxKind.Constructor)) { // At constructor keyword of constructor declaration // get the signature from the declaration and write it const functionDeclaration = location.parent; - const allSignatures = functionDeclaration.kind === SyntaxKind.Constructor ? type.getConstructSignatures() : type.getCallSignatures(); + const allSignatures = functionDeclaration.kind === SyntaxKind.Constructor ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures(); if (!typeChecker.isImplementationOfOverload(functionDeclaration)) { signature = typeChecker.getSignatureFromDeclaration(functionDeclaration); } @@ -4564,7 +4574,7 @@ namespace ts { symbolFlags & SymbolFlags.Signature || symbolFlags & SymbolFlags.Accessor || symbolKind === ScriptElementKind.memberFunctionElement) { - const allSignatures = type.getCallSignatures(); + const allSignatures = type.getNonNullableType().getCallSignatures(); addSignatureDisplayParts(allSignatures[0], allSignatures); } } @@ -4645,7 +4655,7 @@ namespace ts { const sourceFile = getValidSourceFile(fileName); const node = getTouchingPropertyName(sourceFile, position); - if (!node) { + if (node === sourceFile) { return undefined; } @@ -4802,18 +4812,6 @@ namespace ts { const sourceFile = getValidSourceFile(fileName); - const node = getTouchingPropertyName(sourceFile, position); - if (!node) { - return undefined; - } - - // Labels - if (isJumpStatementTarget(node)) { - const labelName = (node).text; - const label = getTargetLabel((node.parent), (node).text); - return label ? [createDefinitionInfo(label, ScriptElementKind.label, labelName, /*containerName*/ undefined)] : undefined; - } - /// Triple slash reference comments const comment = findReferenceInPosition(sourceFile.referencedFiles, position); if (comment) { @@ -4823,6 +4821,7 @@ namespace ts { } return undefined; } + // Type reference directives const typeReferenceDirective = findReferenceInPosition(sourceFile.typeReferenceDirectives, position); if (typeReferenceDirective) { @@ -4833,6 +4832,18 @@ namespace ts { return undefined; } + const node = getTouchingPropertyName(sourceFile, position); + if (node === sourceFile) { + return undefined; + } + + // Labels + if (isJumpStatementTarget(node)) { + const labelName = (node).text; + const label = getTargetLabel((node.parent), (node).text); + return label ? [createDefinitionInfo(label, ScriptElementKind.label, labelName, /*containerName*/ undefined)] : undefined; + } + const typeChecker = program.getTypeChecker(); let symbol = typeChecker.getSymbolAtLocation(node); @@ -4891,7 +4902,7 @@ namespace ts { const sourceFile = getValidSourceFile(fileName); const node = getTouchingPropertyName(sourceFile, position); - if (!node) { + if (node === sourceFile) { return undefined; } @@ -4941,8 +4952,7 @@ namespace ts { function getDocumentHighlights(fileName: string, position: number, filesToSearch: string[]): DocumentHighlights[] { synchronizeHostData(); - filesToSearch = map(filesToSearch, normalizeSlashes); - const sourceFilesToSearch = filter(program.getSourceFiles(), f => contains(filesToSearch, f.fileName)); + const sourceFilesToSearch = map(filesToSearch, f => program.getSourceFile(f)); const sourceFile = getValidSourceFile(fileName); const node = getTouchingWord(sourceFile, position); @@ -5628,7 +5638,7 @@ namespace ts { const sourceFile = getValidSourceFile(fileName); const node = getTouchingPropertyName(sourceFile, position); - if (!node) { + if (node === sourceFile) { return undefined; } @@ -6596,8 +6606,8 @@ namespace ts { /// NavigateTo function getNavigateToItems(searchValue: string, maxResultCount?: number): NavigateToItem[] { synchronizeHostData(); - - return ts.NavigateTo.getNavigateToItems(program, cancellationToken, searchValue, maxResultCount); + const checker = getProgram().getTypeChecker(); + return ts.NavigateTo.getNavigateToItems(program, checker, cancellationToken, searchValue, maxResultCount); } function getEmitOutput(fileName: string): EmitOutput { @@ -6795,7 +6805,7 @@ namespace ts { // Get node at the location const node = getTouchingPropertyName(sourceFile, startPos); - if (!node) { + if (node === sourceFile) { return; } diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 5a676a6692d..404fdf92d4d 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -370,7 +370,7 @@ namespace ts { if (lookInPreviousChild) { // actual start of the node is past the position - previous token should be at the end of previous child let candidate = findRightmostChildNodeWithTokens(children, /*exclusiveStartPosition*/ i); - return candidate && findRightmostToken(candidate) + return candidate && findRightmostToken(candidate); } else { // candidate should be in this node @@ -490,8 +490,8 @@ namespace ts { return forEach(commentRanges, jsDocPrefix); function jsDocPrefix(c: CommentRange): boolean { - var text = sourceFile.text; - return text.length >= c.pos + 3 && text[c.pos] === '/' && text[c.pos + 1] === '*' && text[c.pos + 2] === '*'; + const text = sourceFile.text; + return text.length >= c.pos + 3 && text[c.pos] === "/" && text[c.pos + 1] === "*" && text[c.pos + 2] === "*"; } } @@ -546,7 +546,7 @@ namespace ts { if (flags & NodeFlags.Export) result.push(ScriptElementKindModifier.exportedModifier); if (isInAmbientContext(node)) result.push(ScriptElementKindModifier.ambientModifier); - return result.length > 0 ? result.join(',') : ScriptElementKindModifier.none; + return result.length > 0 ? result.join(",") : ScriptElementKindModifier.none; } export function getTypeArgumentOrTypeParameterList(node: Node): NodeArray { @@ -629,7 +629,7 @@ namespace ts { // [a,b,c] from: // [a, b, c] = someExpression; if (node.parent.kind === SyntaxKind.BinaryExpression && - (node.parent).left === node && + (node.parent).left === node && (node.parent).operatorToken.kind === SyntaxKind.EqualsToken) { return true; } @@ -711,7 +711,7 @@ namespace ts { } function resetWriter() { - displayParts = [] + displayParts = []; lineStart = true; indent = 0; } @@ -768,7 +768,7 @@ namespace ts { } export function textOrKeywordPart(text: string) { - var kind = stringToToken(text); + const kind = stringToToken(text); return kind === undefined ? textPart(text) : keywordPart(kind); diff --git a/tests/baselines/reference/classWithOptionalParameter.errors.txt b/tests/baselines/reference/classWithOptionalParameter.errors.txt deleted file mode 100644 index 6e512c2a02e..00000000000 --- a/tests/baselines/reference/classWithOptionalParameter.errors.txt +++ /dev/null @@ -1,26 +0,0 @@ -tests/cases/conformance/types/namedTypes/classWithOptionalParameter.ts(4,6): error TS1112: A class member cannot be declared optional. -tests/cases/conformance/types/namedTypes/classWithOptionalParameter.ts(5,6): error TS1112: A class member cannot be declared optional. -tests/cases/conformance/types/namedTypes/classWithOptionalParameter.ts(9,6): error TS1112: A class member cannot be declared optional. -tests/cases/conformance/types/namedTypes/classWithOptionalParameter.ts(10,6): error TS1112: A class member cannot be declared optional. - - -==== tests/cases/conformance/types/namedTypes/classWithOptionalParameter.ts (4 errors) ==== - // classes do not permit optional parameters, these are errors - - class C { - x?: string; - ~ -!!! error TS1112: A class member cannot be declared optional. - f?() {} - ~ -!!! error TS1112: A class member cannot be declared optional. - } - - class C2 { - x?: T; - ~ -!!! error TS1112: A class member cannot be declared optional. - f?(x: T) {} - ~ -!!! error TS1112: A class member cannot be declared optional. - } \ No newline at end of file diff --git a/tests/baselines/reference/classWithOptionalParameter.symbols b/tests/baselines/reference/classWithOptionalParameter.symbols new file mode 100644 index 00000000000..b85cd5d7a07 --- /dev/null +++ b/tests/baselines/reference/classWithOptionalParameter.symbols @@ -0,0 +1,26 @@ +=== tests/cases/conformance/types/namedTypes/classWithOptionalParameter.ts === +// classes do not permit optional parameters, these are errors + +class C { +>C : Symbol(C, Decl(classWithOptionalParameter.ts, 0, 0)) + + x?: string; +>x : Symbol(C.x, Decl(classWithOptionalParameter.ts, 2, 9)) + + f?() {} +>f : Symbol(C.f, Decl(classWithOptionalParameter.ts, 3, 15)) +} + +class C2 { +>C2 : Symbol(C2, Decl(classWithOptionalParameter.ts, 5, 1)) +>T : Symbol(T, Decl(classWithOptionalParameter.ts, 7, 9)) + + x?: T; +>x : Symbol(C2.x, Decl(classWithOptionalParameter.ts, 7, 13)) +>T : Symbol(T, Decl(classWithOptionalParameter.ts, 7, 9)) + + f?(x: T) {} +>f : Symbol(C2.f, Decl(classWithOptionalParameter.ts, 8, 10)) +>x : Symbol(x, Decl(classWithOptionalParameter.ts, 9, 7)) +>T : Symbol(T, Decl(classWithOptionalParameter.ts, 7, 9)) +} diff --git a/tests/baselines/reference/classWithOptionalParameter.types b/tests/baselines/reference/classWithOptionalParameter.types new file mode 100644 index 00000000000..2c62aee6fab --- /dev/null +++ b/tests/baselines/reference/classWithOptionalParameter.types @@ -0,0 +1,26 @@ +=== tests/cases/conformance/types/namedTypes/classWithOptionalParameter.ts === +// classes do not permit optional parameters, these are errors + +class C { +>C : C + + x?: string; +>x : string + + f?() {} +>f : () => void +} + +class C2 { +>C2 : C2 +>T : T + + x?: T; +>x : T +>T : T + + f?(x: T) {} +>f : (x: T) => void +>x : T +>T : T +} diff --git a/tests/baselines/reference/declFileConstructors.js b/tests/baselines/reference/declFileConstructors.js index 44e816712fb..8e92b1a36ae 100644 --- a/tests/baselines/reference/declFileConstructors.js +++ b/tests/baselines/reference/declFileConstructors.js @@ -247,7 +247,7 @@ export declare class ConstructorWithPrivateParameterProperty { constructor(x: string); } export declare class ConstructorWithOptionalParameterProperty { - x: string; + x?: string; constructor(x?: string); } export declare class ConstructorWithParameterInitializer { @@ -281,7 +281,7 @@ declare class GlobalConstructorWithPrivateParameterProperty { constructor(x: string); } declare class GlobalConstructorWithOptionalParameterProperty { - x: string; + x?: string; constructor(x?: string); } declare class GlobalConstructorWithParameterInitializer { diff --git a/tests/baselines/reference/destructureOptionalParameter.js b/tests/baselines/reference/destructureOptionalParameter.js new file mode 100644 index 00000000000..b937d58412f --- /dev/null +++ b/tests/baselines/reference/destructureOptionalParameter.js @@ -0,0 +1,59 @@ +//// [destructureOptionalParameter.ts] + +declare function f1({ a, b }?: { a: number, b: string }): void; + +function f2({ a, b }: { a: number, b: number } = { a: 0, b: 0 }) { + a; + b; +} + +// Repro from #8681 + +interface Type { t: void } +interface QueryMetadata { q: void } + +interface QueryMetadataFactory { + (selector: Type | string, {descendants, read}?: { + descendants?: boolean; + read?: any; + }): ParameterDecorator; + new (selector: Type | string, {descendants, read}?: { + descendants?: boolean; + read?: any; + }): QueryMetadata; +} + + +//// [destructureOptionalParameter.js] +function f2(_a) { + var _b = _a === void 0 ? { a: 0, b: 0 } : _a, a = _b.a, b = _b.b; + a; + b; +} + + +//// [destructureOptionalParameter.d.ts] +declare function f1({a, b}?: { + a: number; + b: string; +}): void; +declare function f2({a, b}?: { + a: number; + b: number; +}): void; +interface Type { + t: void; +} +interface QueryMetadata { + q: void; +} +interface QueryMetadataFactory { + (selector: Type | string, {descendants, read}?: { + descendants?: boolean; + read?: any; + }): ParameterDecorator; + new (selector: Type | string, {descendants, read}?: { + descendants?: boolean; + read?: any; + }): QueryMetadata; +} diff --git a/tests/baselines/reference/destructureOptionalParameter.symbols b/tests/baselines/reference/destructureOptionalParameter.symbols new file mode 100644 index 00000000000..aa5252680cc --- /dev/null +++ b/tests/baselines/reference/destructureOptionalParameter.symbols @@ -0,0 +1,69 @@ +=== tests/cases/compiler/destructureOptionalParameter.ts === + +declare function f1({ a, b }?: { a: number, b: string }): void; +>f1 : Symbol(f1, Decl(destructureOptionalParameter.ts, 0, 0)) +>a : Symbol(a, Decl(destructureOptionalParameter.ts, 1, 21)) +>b : Symbol(b, Decl(destructureOptionalParameter.ts, 1, 24)) +>a : Symbol(a, Decl(destructureOptionalParameter.ts, 1, 32)) +>b : Symbol(b, Decl(destructureOptionalParameter.ts, 1, 43)) + +function f2({ a, b }: { a: number, b: number } = { a: 0, b: 0 }) { +>f2 : Symbol(f2, Decl(destructureOptionalParameter.ts, 1, 63)) +>a : Symbol(a, Decl(destructureOptionalParameter.ts, 3, 13)) +>b : Symbol(b, Decl(destructureOptionalParameter.ts, 3, 16)) +>a : Symbol(a, Decl(destructureOptionalParameter.ts, 3, 23)) +>b : Symbol(b, Decl(destructureOptionalParameter.ts, 3, 34)) +>a : Symbol(a, Decl(destructureOptionalParameter.ts, 3, 50)) +>b : Symbol(b, Decl(destructureOptionalParameter.ts, 3, 56)) + + a; +>a : Symbol(a, Decl(destructureOptionalParameter.ts, 3, 13)) + + b; +>b : Symbol(b, Decl(destructureOptionalParameter.ts, 3, 16)) +} + +// Repro from #8681 + +interface Type { t: void } +>Type : Symbol(Type, Decl(destructureOptionalParameter.ts, 6, 1)) +>t : Symbol(Type.t, Decl(destructureOptionalParameter.ts, 10, 16)) + +interface QueryMetadata { q: void } +>QueryMetadata : Symbol(QueryMetadata, Decl(destructureOptionalParameter.ts, 10, 26)) +>q : Symbol(QueryMetadata.q, Decl(destructureOptionalParameter.ts, 11, 25)) + +interface QueryMetadataFactory { +>QueryMetadataFactory : Symbol(QueryMetadataFactory, Decl(destructureOptionalParameter.ts, 11, 35)) + + (selector: Type | string, {descendants, read}?: { +>selector : Symbol(selector, Decl(destructureOptionalParameter.ts, 14, 5)) +>Type : Symbol(Type, Decl(destructureOptionalParameter.ts, 6, 1)) +>descendants : Symbol(descendants, Decl(destructureOptionalParameter.ts, 14, 31)) +>read : Symbol(read, Decl(destructureOptionalParameter.ts, 14, 43)) + + descendants?: boolean; +>descendants : Symbol(descendants, Decl(destructureOptionalParameter.ts, 14, 53)) + + read?: any; +>read : Symbol(read, Decl(destructureOptionalParameter.ts, 15, 30)) + + }): ParameterDecorator; +>ParameterDecorator : Symbol(ParameterDecorator, Decl(lib.d.ts, --, --)) + + new (selector: Type | string, {descendants, read}?: { +>selector : Symbol(selector, Decl(destructureOptionalParameter.ts, 18, 9)) +>Type : Symbol(Type, Decl(destructureOptionalParameter.ts, 6, 1)) +>descendants : Symbol(descendants, Decl(destructureOptionalParameter.ts, 18, 35)) +>read : Symbol(read, Decl(destructureOptionalParameter.ts, 18, 47)) + + descendants?: boolean; +>descendants : Symbol(descendants, Decl(destructureOptionalParameter.ts, 18, 57)) + + read?: any; +>read : Symbol(read, Decl(destructureOptionalParameter.ts, 19, 30)) + + }): QueryMetadata; +>QueryMetadata : Symbol(QueryMetadata, Decl(destructureOptionalParameter.ts, 10, 26)) +} + diff --git a/tests/baselines/reference/destructureOptionalParameter.types b/tests/baselines/reference/destructureOptionalParameter.types new file mode 100644 index 00000000000..2e569dee0a0 --- /dev/null +++ b/tests/baselines/reference/destructureOptionalParameter.types @@ -0,0 +1,72 @@ +=== tests/cases/compiler/destructureOptionalParameter.ts === + +declare function f1({ a, b }?: { a: number, b: string }): void; +>f1 : ({a, b}?: { a: number; b: string; } | undefined) => void +>a : number +>b : string +>a : number +>b : string + +function f2({ a, b }: { a: number, b: number } = { a: 0, b: 0 }) { +>f2 : ({a, b}?: { a: number; b: number; }) => void +>a : number +>b : number +>a : number +>b : number +>{ a: 0, b: 0 } : { a: number; b: number; } +>a : number +>0 : number +>b : number +>0 : number + + a; +>a : number + + b; +>b : number +} + +// Repro from #8681 + +interface Type { t: void } +>Type : Type +>t : void + +interface QueryMetadata { q: void } +>QueryMetadata : QueryMetadata +>q : void + +interface QueryMetadataFactory { +>QueryMetadataFactory : QueryMetadataFactory + + (selector: Type | string, {descendants, read}?: { +>selector : Type | string +>Type : Type +>descendants : boolean | undefined +>read : any + + descendants?: boolean; +>descendants : boolean | undefined + + read?: any; +>read : any + + }): ParameterDecorator; +>ParameterDecorator : (target: Object, propertyKey: string | symbol, parameterIndex: number) => void + + new (selector: Type | string, {descendants, read}?: { +>selector : Type | string +>Type : Type +>descendants : boolean | undefined +>read : any + + descendants?: boolean; +>descendants : boolean | undefined + + read?: any; +>read : any + + }): QueryMetadata; +>QueryMetadata : QueryMetadata +} + diff --git a/tests/baselines/reference/doubleUnderStringLiteralAssignability.errors.txt b/tests/baselines/reference/doubleUnderStringLiteralAssignability.errors.txt new file mode 100644 index 00000000000..c4226a83bfc --- /dev/null +++ b/tests/baselines/reference/doubleUnderStringLiteralAssignability.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/doubleUnderStringLiteralAssignability.ts(2,5): error TS2322: Type '"no_dunder"' is not assignable to type '"__dunder"'. + + +==== tests/cases/compiler/doubleUnderStringLiteralAssignability.ts (1 errors) ==== + var shouldBeOk: '__dunder' = '__dunder'; + var bad: '__dunder' = 'no_dunder'; + ~~~ +!!! error TS2322: Type '"no_dunder"' is not assignable to type '"__dunder"'. + var okok: '___thunder' = '___thunder'; + var alsoOk: '_sunder' = '_sunder'; + \ No newline at end of file diff --git a/tests/baselines/reference/doubleUnderStringLiteralAssignability.js b/tests/baselines/reference/doubleUnderStringLiteralAssignability.js new file mode 100644 index 00000000000..baf2b521948 --- /dev/null +++ b/tests/baselines/reference/doubleUnderStringLiteralAssignability.js @@ -0,0 +1,12 @@ +//// [doubleUnderStringLiteralAssignability.ts] +var shouldBeOk: '__dunder' = '__dunder'; +var bad: '__dunder' = 'no_dunder'; +var okok: '___thunder' = '___thunder'; +var alsoOk: '_sunder' = '_sunder'; + + +//// [doubleUnderStringLiteralAssignability.js] +var shouldBeOk = '__dunder'; +var bad = 'no_dunder'; +var okok = '___thunder'; +var alsoOk = '_sunder'; diff --git a/tests/baselines/reference/excessPropertyErrorForFunctionTypes.errors.txt b/tests/baselines/reference/excessPropertyErrorForFunctionTypes.errors.txt new file mode 100644 index 00000000000..dc9d6821e55 --- /dev/null +++ b/tests/baselines/reference/excessPropertyErrorForFunctionTypes.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/excessPropertyErrorForFunctionTypes.ts(4,44): error TS2322: Type '{ a: number; c: number; d: number; }' is not assignable to type '{ a: number; c: number; } | (() => any)'. + Object literal may only specify known properties, and 'd' does not exist in type '{ a: number; c: number; } | (() => any)'. + + +==== tests/cases/compiler/excessPropertyErrorForFunctionTypes.ts (1 errors) ==== + type FunctionType = () => any; + type DoesntWork = { a: number, c: number } | FunctionType; + + let doesntWork: DoesntWork = { a: 1, c: 2, d: 3 } + ~~~~ +!!! error TS2322: Type '{ a: number; c: number; d: number; }' is not assignable to type '{ a: number; c: number; } | (() => any)'. +!!! error TS2322: Object literal may only specify known properties, and 'd' does not exist in type '{ a: number; c: number; } | (() => any)'. \ No newline at end of file diff --git a/tests/baselines/reference/excessPropertyErrorForFunctionTypes.js b/tests/baselines/reference/excessPropertyErrorForFunctionTypes.js new file mode 100644 index 00000000000..d81608c79ba --- /dev/null +++ b/tests/baselines/reference/excessPropertyErrorForFunctionTypes.js @@ -0,0 +1,8 @@ +//// [excessPropertyErrorForFunctionTypes.ts] +type FunctionType = () => any; +type DoesntWork = { a: number, c: number } | FunctionType; + +let doesntWork: DoesntWork = { a: 1, c: 2, d: 3 } + +//// [excessPropertyErrorForFunctionTypes.js] +var doesntWork = { a: 1, c: 2, d: 3 }; diff --git a/tests/baselines/reference/fallbackToBindingPatternForTypeInference.js b/tests/baselines/reference/fallbackToBindingPatternForTypeInference.js new file mode 100644 index 00000000000..1c02ae83982 --- /dev/null +++ b/tests/baselines/reference/fallbackToBindingPatternForTypeInference.js @@ -0,0 +1,30 @@ +//// [fallbackToBindingPatternForTypeInference.ts] +declare function trans(f: (x: T) => string): number; +trans(({a}) => a); +trans(([b,c]) => 'foo'); +trans(({d: [e,f]}) => 'foo'); +trans(([{g},{h}]) => 'foo'); +trans(({a, b = 10}) => a); + + +//// [fallbackToBindingPatternForTypeInference.js] +trans(function (_a) { + var a = _a.a; + return a; +}); +trans(function (_a) { + var b = _a[0], c = _a[1]; + return 'foo'; +}); +trans(function (_a) { + var _b = _a.d, e = _b[0], f = _b[1]; + return 'foo'; +}); +trans(function (_a) { + var g = _a[0].g, h = _a[1].h; + return 'foo'; +}); +trans(function (_a) { + var a = _a.a, _b = _a.b, b = _b === void 0 ? 10 : _b; + return a; +}); diff --git a/tests/baselines/reference/fallbackToBindingPatternForTypeInference.symbols b/tests/baselines/reference/fallbackToBindingPatternForTypeInference.symbols new file mode 100644 index 00000000000..f57b234f39f --- /dev/null +++ b/tests/baselines/reference/fallbackToBindingPatternForTypeInference.symbols @@ -0,0 +1,34 @@ +=== tests/cases/compiler/fallbackToBindingPatternForTypeInference.ts === +declare function trans(f: (x: T) => string): number; +>trans : Symbol(trans, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 0)) +>T : Symbol(T, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 23)) +>f : Symbol(f, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 26)) +>x : Symbol(x, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 30)) +>T : Symbol(T, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 23)) + +trans(({a}) => a); +>trans : Symbol(trans, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 0)) +>a : Symbol(a, Decl(fallbackToBindingPatternForTypeInference.ts, 1, 8)) +>a : Symbol(a, Decl(fallbackToBindingPatternForTypeInference.ts, 1, 8)) + +trans(([b,c]) => 'foo'); +>trans : Symbol(trans, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 0)) +>b : Symbol(b, Decl(fallbackToBindingPatternForTypeInference.ts, 2, 8)) +>c : Symbol(c, Decl(fallbackToBindingPatternForTypeInference.ts, 2, 10)) + +trans(({d: [e,f]}) => 'foo'); +>trans : Symbol(trans, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 0)) +>e : Symbol(e, Decl(fallbackToBindingPatternForTypeInference.ts, 3, 12)) +>f : Symbol(f, Decl(fallbackToBindingPatternForTypeInference.ts, 3, 14)) + +trans(([{g},{h}]) => 'foo'); +>trans : Symbol(trans, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 0)) +>g : Symbol(g, Decl(fallbackToBindingPatternForTypeInference.ts, 4, 9)) +>h : Symbol(h, Decl(fallbackToBindingPatternForTypeInference.ts, 4, 13)) + +trans(({a, b = 10}) => a); +>trans : Symbol(trans, Decl(fallbackToBindingPatternForTypeInference.ts, 0, 0)) +>a : Symbol(a, Decl(fallbackToBindingPatternForTypeInference.ts, 5, 8)) +>b : Symbol(b, Decl(fallbackToBindingPatternForTypeInference.ts, 5, 10)) +>a : Symbol(a, Decl(fallbackToBindingPatternForTypeInference.ts, 5, 8)) + diff --git a/tests/baselines/reference/fallbackToBindingPatternForTypeInference.types b/tests/baselines/reference/fallbackToBindingPatternForTypeInference.types new file mode 100644 index 00000000000..fc41085098a --- /dev/null +++ b/tests/baselines/reference/fallbackToBindingPatternForTypeInference.types @@ -0,0 +1,49 @@ +=== tests/cases/compiler/fallbackToBindingPatternForTypeInference.ts === +declare function trans(f: (x: T) => string): number; +>trans : (f: (x: T) => string) => number +>T : T +>f : (x: T) => string +>x : T +>T : T + +trans(({a}) => a); +>trans(({a}) => a) : number +>trans : (f: (x: T) => string) => number +>({a}) => a : ({a}: { a: any; }) => any +>a : any +>a : any + +trans(([b,c]) => 'foo'); +>trans(([b,c]) => 'foo') : number +>trans : (f: (x: T) => string) => number +>([b,c]) => 'foo' : ([b, c]: [any, any]) => string +>b : any +>c : any +>'foo' : string + +trans(({d: [e,f]}) => 'foo'); +>trans(({d: [e,f]}) => 'foo') : number +>trans : (f: (x: T) => string) => number +>({d: [e,f]}) => 'foo' : ({d: [e, f]}: { d: [any, any]; }) => string +>d : any +>e : any +>f : any +>'foo' : string + +trans(([{g},{h}]) => 'foo'); +>trans(([{g},{h}]) => 'foo') : number +>trans : (f: (x: T) => string) => number +>([{g},{h}]) => 'foo' : ([{g}, {h}]: [{ g: any; }, { h: any; }]) => string +>g : any +>h : any +>'foo' : string + +trans(({a, b = 10}) => a); +>trans(({a, b = 10}) => a) : number +>trans : (f: (x: T) => string) => number +>({a, b = 10}) => a : ({a, b}: { a: any; b?: number; }) => any +>a : any +>b : number +>10 : number +>a : any + diff --git a/tests/baselines/reference/genericInheritedDefaultConstructors.js b/tests/baselines/reference/genericInheritedDefaultConstructors.js new file mode 100644 index 00000000000..170ef89abb2 --- /dev/null +++ b/tests/baselines/reference/genericInheritedDefaultConstructors.js @@ -0,0 +1,31 @@ +//// [genericInheritedDefaultConstructors.ts] +// repro from #8166 +interface Constructor { + new(...args: any[]): T; + prototype: T; +} + +class A { a: U; } +class B extends A { b: V; } +var c:Constructor> = B; // shouldn't error here + + +//// [genericInheritedDefaultConstructors.js] +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +var A = (function () { + function A() { + } + return A; +}()); +var B = (function (_super) { + __extends(B, _super); + function B() { + _super.apply(this, arguments); + } + return B; +}(A)); +var c = B; // shouldn't error here diff --git a/tests/baselines/reference/genericInheritedDefaultConstructors.symbols b/tests/baselines/reference/genericInheritedDefaultConstructors.symbols new file mode 100644 index 00000000000..42a98b54c16 --- /dev/null +++ b/tests/baselines/reference/genericInheritedDefaultConstructors.symbols @@ -0,0 +1,35 @@ +=== tests/cases/compiler/genericInheritedDefaultConstructors.ts === +// repro from #8166 +interface Constructor { +>Constructor : Symbol(Constructor, Decl(genericInheritedDefaultConstructors.ts, 0, 0)) +>T : Symbol(T, Decl(genericInheritedDefaultConstructors.ts, 1, 22)) + + new(...args: any[]): T; +>args : Symbol(args, Decl(genericInheritedDefaultConstructors.ts, 2, 8)) +>T : Symbol(T, Decl(genericInheritedDefaultConstructors.ts, 1, 22)) + + prototype: T; +>prototype : Symbol(Constructor.prototype, Decl(genericInheritedDefaultConstructors.ts, 2, 27)) +>T : Symbol(T, Decl(genericInheritedDefaultConstructors.ts, 1, 22)) +} + +class A { a: U; } +>A : Symbol(A, Decl(genericInheritedDefaultConstructors.ts, 4, 1)) +>U : Symbol(U, Decl(genericInheritedDefaultConstructors.ts, 6, 8)) +>a : Symbol(A.a, Decl(genericInheritedDefaultConstructors.ts, 6, 12)) +>U : Symbol(U, Decl(genericInheritedDefaultConstructors.ts, 6, 8)) + +class B extends A { b: V; } +>B : Symbol(B, Decl(genericInheritedDefaultConstructors.ts, 6, 20)) +>V : Symbol(V, Decl(genericInheritedDefaultConstructors.ts, 7, 8)) +>A : Symbol(A, Decl(genericInheritedDefaultConstructors.ts, 4, 1)) +>V : Symbol(V, Decl(genericInheritedDefaultConstructors.ts, 7, 8)) +>b : Symbol(B.b, Decl(genericInheritedDefaultConstructors.ts, 7, 25)) +>V : Symbol(V, Decl(genericInheritedDefaultConstructors.ts, 7, 8)) + +var c:Constructor> = B; // shouldn't error here +>c : Symbol(c, Decl(genericInheritedDefaultConstructors.ts, 8, 3)) +>Constructor : Symbol(Constructor, Decl(genericInheritedDefaultConstructors.ts, 0, 0)) +>B : Symbol(B, Decl(genericInheritedDefaultConstructors.ts, 6, 20)) +>B : Symbol(B, Decl(genericInheritedDefaultConstructors.ts, 6, 20)) + diff --git a/tests/baselines/reference/genericInheritedDefaultConstructors.types b/tests/baselines/reference/genericInheritedDefaultConstructors.types new file mode 100644 index 00000000000..e0b4b7251f9 --- /dev/null +++ b/tests/baselines/reference/genericInheritedDefaultConstructors.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/genericInheritedDefaultConstructors.ts === +// repro from #8166 +interface Constructor { +>Constructor : Constructor +>T : T + + new(...args: any[]): T; +>args : any[] +>T : T + + prototype: T; +>prototype : T +>T : T +} + +class A { a: U; } +>A : A +>U : U +>a : U +>U : U + +class B extends A { b: V; } +>B : B +>V : V +>A : A +>V : V +>b : V +>V : V + +var c:Constructor> = B; // shouldn't error here +>c : Constructor> +>Constructor : Constructor +>B : B +>B : typeof B + diff --git a/tests/baselines/reference/instanceOfAssignability.types b/tests/baselines/reference/instanceOfAssignability.types index 0a9e1a3e996..70d068fb0cc 100644 --- a/tests/baselines/reference/instanceOfAssignability.types +++ b/tests/baselines/reference/instanceOfAssignability.types @@ -133,8 +133,8 @@ function fn5(x: Derived1) { // 1.5: y: Derived1 // Want: ??? let y = x; ->y : nothing ->x : nothing +>y : never +>x : never } } diff --git a/tests/baselines/reference/instantiateCrossFileMerge.js b/tests/baselines/reference/instantiateCrossFileMerge.js new file mode 100644 index 00000000000..cf452b599bd --- /dev/null +++ b/tests/baselines/reference/instantiateCrossFileMerge.js @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/instantiateCrossFileMerge.ts] //// + +//// [first.ts] +declare class P { + constructor(callback: (resolve: (value: R) => void) => void); +} + +//// [second.ts] +interface P { } +new P(r => { r('foo') }); + + +//// [first.js] +//// [second.js] +new P(function (r) { r('foo'); }); diff --git a/tests/baselines/reference/instantiateCrossFileMerge.symbols b/tests/baselines/reference/instantiateCrossFileMerge.symbols new file mode 100644 index 00000000000..64f9586f48d --- /dev/null +++ b/tests/baselines/reference/instantiateCrossFileMerge.symbols @@ -0,0 +1,22 @@ +=== tests/cases/compiler/first.ts === +declare class P { +>P : Symbol(P, Decl(first.ts, 0, 0), Decl(second.ts, 0, 0)) +>R : Symbol(R, Decl(first.ts, 0, 16), Decl(second.ts, 0, 12)) + + constructor(callback: (resolve: (value: R) => void) => void); +>callback : Symbol(callback, Decl(first.ts, 1, 16)) +>resolve : Symbol(resolve, Decl(first.ts, 1, 27)) +>value : Symbol(value, Decl(first.ts, 1, 37)) +>R : Symbol(R, Decl(first.ts, 0, 16), Decl(second.ts, 0, 12)) +} + +=== tests/cases/compiler/second.ts === +interface P { } +>P : Symbol(P, Decl(first.ts, 0, 0), Decl(second.ts, 0, 0)) +>R : Symbol(R, Decl(first.ts, 0, 16), Decl(second.ts, 0, 12)) + +new P(r => { r('foo') }); +>P : Symbol(P, Decl(first.ts, 0, 0), Decl(second.ts, 0, 0)) +>r : Symbol(r, Decl(second.ts, 1, 14)) +>r : Symbol(r, Decl(second.ts, 1, 14)) + diff --git a/tests/baselines/reference/instantiateCrossFileMerge.types b/tests/baselines/reference/instantiateCrossFileMerge.types new file mode 100644 index 00000000000..8fbeaab3d1f --- /dev/null +++ b/tests/baselines/reference/instantiateCrossFileMerge.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/first.ts === +declare class P { +>P : P +>R : R + + constructor(callback: (resolve: (value: R) => void) => void); +>callback : (resolve: (value: R) => void) => void +>resolve : (value: R) => void +>value : R +>R : R +} + +=== tests/cases/compiler/second.ts === +interface P { } +>P : P +>R : R + +new P(r => { r('foo') }); +>new P(r => { r('foo') }) : P +>P : typeof P +>r => { r('foo') } : (r: (value: string) => void) => void +>r : (value: string) => void +>r('foo') : void +>r : (value: string) => void +>'foo' : string + diff --git a/tests/baselines/reference/intersectionTypeMembers.js b/tests/baselines/reference/intersectionTypeMembers.js index 9c1cd75d601..59968b007db 100644 --- a/tests/baselines/reference/intersectionTypeMembers.js +++ b/tests/baselines/reference/intersectionTypeMembers.js @@ -26,6 +26,23 @@ type F2 = (x: number) => number; var f: F1 & F2; var s = f("hello"); var n = f(42); + +interface D { + nested: { doublyNested: { d: string; }, different: { e: number } }; +} +interface E { + nested: { doublyNested: { f: string; }, other: {g: number } }; +} +const de: D & E = { + nested: { + doublyNested: { + d: 'yes', + f: 'no' + }, + different: { e: 12 }, + other: { g: 101 } + } +} //// [intersectionTypeMembers.js] @@ -42,3 +59,13 @@ xyz.x.c = "hello"; var f; var s = f("hello"); var n = f(42); +var de = { + nested: { + doublyNested: { + d: 'yes', + f: 'no' + }, + different: { e: 12 }, + other: { g: 101 } + } +}; diff --git a/tests/baselines/reference/intersectionTypeMembers.symbols b/tests/baselines/reference/intersectionTypeMembers.symbols index 9ec66ef64b9..be47b2960db 100644 --- a/tests/baselines/reference/intersectionTypeMembers.symbols +++ b/tests/baselines/reference/intersectionTypeMembers.symbols @@ -98,3 +98,51 @@ var n = f(42); >n : Symbol(n, Decl(intersectionTypeMembers.ts, 26, 3)) >f : Symbol(f, Decl(intersectionTypeMembers.ts, 24, 3)) +interface D { +>D : Symbol(D, Decl(intersectionTypeMembers.ts, 26, 14)) + + nested: { doublyNested: { d: string; }, different: { e: number } }; +>nested : Symbol(D.nested, Decl(intersectionTypeMembers.ts, 28, 13)) +>doublyNested : Symbol(doublyNested, Decl(intersectionTypeMembers.ts, 29, 13)) +>d : Symbol(d, Decl(intersectionTypeMembers.ts, 29, 29)) +>different : Symbol(different, Decl(intersectionTypeMembers.ts, 29, 43)) +>e : Symbol(e, Decl(intersectionTypeMembers.ts, 29, 56)) +} +interface E { +>E : Symbol(E, Decl(intersectionTypeMembers.ts, 30, 1)) + + nested: { doublyNested: { f: string; }, other: {g: number } }; +>nested : Symbol(E.nested, Decl(intersectionTypeMembers.ts, 31, 13)) +>doublyNested : Symbol(doublyNested, Decl(intersectionTypeMembers.ts, 32, 13)) +>f : Symbol(f, Decl(intersectionTypeMembers.ts, 32, 29)) +>other : Symbol(other, Decl(intersectionTypeMembers.ts, 32, 43)) +>g : Symbol(g, Decl(intersectionTypeMembers.ts, 32, 52)) +} +const de: D & E = { +>de : Symbol(de, Decl(intersectionTypeMembers.ts, 34, 5)) +>D : Symbol(D, Decl(intersectionTypeMembers.ts, 26, 14)) +>E : Symbol(E, Decl(intersectionTypeMembers.ts, 30, 1)) + + nested: { +>nested : Symbol(nested, Decl(intersectionTypeMembers.ts, 34, 19)) + + doublyNested: { +>doublyNested : Symbol(doublyNested, Decl(intersectionTypeMembers.ts, 35, 13)) + + d: 'yes', +>d : Symbol(d, Decl(intersectionTypeMembers.ts, 36, 23)) + + f: 'no' +>f : Symbol(f, Decl(intersectionTypeMembers.ts, 37, 21)) + + }, + different: { e: 12 }, +>different : Symbol(different, Decl(intersectionTypeMembers.ts, 39, 10)) +>e : Symbol(e, Decl(intersectionTypeMembers.ts, 40, 20)) + + other: { g: 101 } +>other : Symbol(other, Decl(intersectionTypeMembers.ts, 40, 29)) +>g : Symbol(g, Decl(intersectionTypeMembers.ts, 41, 16)) + } +} + diff --git a/tests/baselines/reference/intersectionTypeMembers.types b/tests/baselines/reference/intersectionTypeMembers.types index a97a54c7a81..2c4fbcc5fc1 100644 --- a/tests/baselines/reference/intersectionTypeMembers.types +++ b/tests/baselines/reference/intersectionTypeMembers.types @@ -114,3 +114,60 @@ var n = f(42); >f : ((x: string) => string) & ((x: number) => number) >42 : number +interface D { +>D : D + + nested: { doublyNested: { d: string; }, different: { e: number } }; +>nested : { doublyNested: { d: string; }; different: { e: number; }; } +>doublyNested : { d: string; } +>d : string +>different : { e: number; } +>e : number +} +interface E { +>E : E + + nested: { doublyNested: { f: string; }, other: {g: number } }; +>nested : { doublyNested: { f: string; }; other: { g: number; }; } +>doublyNested : { f: string; } +>f : string +>other : { g: number; } +>g : number +} +const de: D & E = { +>de : D & E +>D : D +>E : E +>{ nested: { doublyNested: { d: 'yes', f: 'no' }, different: { e: 12 }, other: { g: 101 } }} : { nested: { doublyNested: { d: string; f: string; }; different: { e: number; }; other: { g: number; }; }; } + + nested: { +>nested : { doublyNested: { d: string; f: string; }; different: { e: number; }; other: { g: number; }; } +>{ doublyNested: { d: 'yes', f: 'no' }, different: { e: 12 }, other: { g: 101 } } : { doublyNested: { d: string; f: string; }; different: { e: number; }; other: { g: number; }; } + + doublyNested: { +>doublyNested : { d: string; f: string; } +>{ d: 'yes', f: 'no' } : { d: string; f: string; } + + d: 'yes', +>d : string +>'yes' : string + + f: 'no' +>f : string +>'no' : string + + }, + different: { e: 12 }, +>different : { e: number; } +>{ e: 12 } : { e: number; } +>e : number +>12 : number + + other: { g: 101 } +>other : { g: number; } +>{ g: 101 } : { g: number; } +>g : number +>101 : number + } +} + diff --git a/tests/baselines/reference/isolatedModulesOut.errors.txt b/tests/baselines/reference/isolatedModulesOut.errors.txt index 7d16ac94666..157ae98fcb3 100644 --- a/tests/baselines/reference/isolatedModulesOut.errors.txt +++ b/tests/baselines/reference/isolatedModulesOut.errors.txt @@ -1,11 +1,14 @@ error TS5053: Option 'out' cannot be specified with option 'isolatedModules'. +tests/cases/compiler/file1.ts(2,1): error TS6131: Cannot compile modules using option 'out' unless the '--module' flag is 'amd' or 'system'. tests/cases/compiler/file2.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided. !!! error TS5053: Option 'out' cannot be specified with option 'isolatedModules'. -==== tests/cases/compiler/file1.ts (0 errors) ==== +==== tests/cases/compiler/file1.ts (1 errors) ==== export var x; + ~~~~~~~~~~~~~ +!!! error TS6131: Cannot compile modules using option 'out' unless the '--module' flag is 'amd' or 'system'. ==== tests/cases/compiler/file2.ts (1 errors) ==== var y; ~~~ diff --git a/tests/baselines/reference/json.stringify.js b/tests/baselines/reference/json.stringify.js new file mode 100644 index 00000000000..8dba6a892af --- /dev/null +++ b/tests/baselines/reference/json.stringify.js @@ -0,0 +1,16 @@ +//// [json.stringify.ts] + +var value = null; +JSON.stringify(value, undefined, 2); +JSON.stringify(value, null, 2); +JSON.stringify(value, ["a", 1], 2); +JSON.stringify(value, (k) => undefined, 2); +JSON.stringify(value, undefined, 2); + +//// [json.stringify.js] +var value = null; +JSON.stringify(value, undefined, 2); +JSON.stringify(value, null, 2); +JSON.stringify(value, ["a", 1], 2); +JSON.stringify(value, function (k) { return undefined; }, 2); +JSON.stringify(value, undefined, 2); diff --git a/tests/baselines/reference/json.stringify.symbols b/tests/baselines/reference/json.stringify.symbols new file mode 100644 index 00000000000..3c3c20ef30a --- /dev/null +++ b/tests/baselines/reference/json.stringify.symbols @@ -0,0 +1,39 @@ +=== tests/cases/compiler/json.stringify.ts === + +var value = null; +>value : Symbol(value, Decl(json.stringify.ts, 1, 3)) + +JSON.stringify(value, undefined, 2); +>JSON.stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>JSON : Symbol(JSON, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>value : Symbol(value, Decl(json.stringify.ts, 1, 3)) +>undefined : Symbol(undefined) + +JSON.stringify(value, null, 2); +>JSON.stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>JSON : Symbol(JSON, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>value : Symbol(value, Decl(json.stringify.ts, 1, 3)) + +JSON.stringify(value, ["a", 1], 2); +>JSON.stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>JSON : Symbol(JSON, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>value : Symbol(value, Decl(json.stringify.ts, 1, 3)) + +JSON.stringify(value, (k) => undefined, 2); +>JSON.stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>JSON : Symbol(JSON, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>value : Symbol(value, Decl(json.stringify.ts, 1, 3)) +>k : Symbol(k, Decl(json.stringify.ts, 5, 23)) +>undefined : Symbol(undefined) + +JSON.stringify(value, undefined, 2); +>JSON.stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>JSON : Symbol(JSON, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>value : Symbol(value, Decl(json.stringify.ts, 1, 3)) +>undefined : Symbol(undefined) + diff --git a/tests/baselines/reference/json.stringify.types b/tests/baselines/reference/json.stringify.types new file mode 100644 index 00000000000..7cce2d3ed24 --- /dev/null +++ b/tests/baselines/reference/json.stringify.types @@ -0,0 +1,55 @@ +=== tests/cases/compiler/json.stringify.ts === + +var value = null; +>value : null +>null : null + +JSON.stringify(value, undefined, 2); +>JSON.stringify(value, undefined, 2) : string +>JSON.stringify : { (value: any, replacer?: ((key: string, value: any) => any) | undefined, space?: string | number | undefined): string; (value: any, replacer?: (number | string)[] | null | undefined, space?: string | number | undefined): string; } +>JSON : JSON +>stringify : { (value: any, replacer?: ((key: string, value: any) => any) | undefined, space?: string | number | undefined): string; (value: any, replacer?: (number | string)[] | null | undefined, space?: string | number | undefined): string; } +>value : null +>undefined : undefined +>2 : number + +JSON.stringify(value, null, 2); +>JSON.stringify(value, null, 2) : string +>JSON.stringify : { (value: any, replacer?: ((key: string, value: any) => any) | undefined, space?: string | number | undefined): string; (value: any, replacer?: (number | string)[] | null | undefined, space?: string | number | undefined): string; } +>JSON : JSON +>stringify : { (value: any, replacer?: ((key: string, value: any) => any) | undefined, space?: string | number | undefined): string; (value: any, replacer?: (number | string)[] | null | undefined, space?: string | number | undefined): string; } +>value : null +>null : null +>2 : number + +JSON.stringify(value, ["a", 1], 2); +>JSON.stringify(value, ["a", 1], 2) : string +>JSON.stringify : { (value: any, replacer?: ((key: string, value: any) => any) | undefined, space?: string | number | undefined): string; (value: any, replacer?: (number | string)[] | null | undefined, space?: string | number | undefined): string; } +>JSON : JSON +>stringify : { (value: any, replacer?: ((key: string, value: any) => any) | undefined, space?: string | number | undefined): string; (value: any, replacer?: (number | string)[] | null | undefined, space?: string | number | undefined): string; } +>value : null +>["a", 1] : (string | number)[] +>"a" : string +>1 : number +>2 : number + +JSON.stringify(value, (k) => undefined, 2); +>JSON.stringify(value, (k) => undefined, 2) : string +>JSON.stringify : { (value: any, replacer?: ((key: string, value: any) => any) | undefined, space?: string | number | undefined): string; (value: any, replacer?: (number | string)[] | null | undefined, space?: string | number | undefined): string; } +>JSON : JSON +>stringify : { (value: any, replacer?: ((key: string, value: any) => any) | undefined, space?: string | number | undefined): string; (value: any, replacer?: (number | string)[] | null | undefined, space?: string | number | undefined): string; } +>value : null +>(k) => undefined : (k: string) => undefined +>k : string +>undefined : undefined +>2 : number + +JSON.stringify(value, undefined, 2); +>JSON.stringify(value, undefined, 2) : string +>JSON.stringify : { (value: any, replacer?: ((key: string, value: any) => any) | undefined, space?: string | number | undefined): string; (value: any, replacer?: (number | string)[] | null | undefined, space?: string | number | undefined): string; } +>JSON : JSON +>stringify : { (value: any, replacer?: ((key: string, value: any) => any) | undefined, space?: string | number | undefined): string; (value: any, replacer?: (number | string)[] | null | undefined, space?: string | number | undefined): string; } +>value : null +>undefined : undefined +>2 : number + diff --git a/tests/baselines/reference/moduleNoneErrors.errors.txt b/tests/baselines/reference/moduleNoneErrors.errors.txt index cb943050fa8..4838b99f85b 100644 --- a/tests/baselines/reference/moduleNoneErrors.errors.txt +++ b/tests/baselines/reference/moduleNoneErrors.errors.txt @@ -1,10 +1,10 @@ -tests/cases/compiler/a.ts(1,14): error TS1148: Cannot compile modules unless the '--module' flag is provided with a valid module type. Consider setting the 'module' compiler option in a 'tsconfig.json' file. +tests/cases/compiler/a.ts(1,14): error TS1148: Cannot use imports, exports, or module augmentations when '--module' is 'none'. ==== tests/cases/compiler/a.ts (1 errors) ==== export class Foo { ~~~ -!!! error TS1148: Cannot compile modules unless the '--module' flag is provided with a valid module type. Consider setting the 'module' compiler option in a 'tsconfig.json' file. +!!! error TS1148: Cannot use imports, exports, or module augmentations when '--module' is 'none'. foo: string; } \ No newline at end of file diff --git a/tests/baselines/reference/neverType.js b/tests/baselines/reference/neverType.js new file mode 100644 index 00000000000..56a1373903e --- /dev/null +++ b/tests/baselines/reference/neverType.js @@ -0,0 +1,195 @@ +//// [neverType.ts] + + +function error(message: string): never { + throw new Error(message); +} + +function errorVoid(message: string) { + throw new Error(message); +} + +function fail() { + return error("Something failed"); +} + +function failOrThrow(shouldFail: boolean) { + if (shouldFail) { + return fail(); + } + throw new Error(); +} + +function infiniteLoop1() { + while (true) { + } +} + +function infiniteLoop2(): never { + while (true) { + } +} + +function move1(direction: "up" | "down") { + switch (direction) { + case "up": + return 1; + case "down": + return -1; + } + return error("Should never get here"); +} + +function move2(direction: "up" | "down") { + return direction === "up" ? 1 : + direction === "down" ? -1 : + error("Should never get here"); +} + +function check(x: T | undefined) { + return x || error("Undefined value"); +} + +class C { + void1() { + throw new Error(); + } + void2() { + while (true) {} + } + never1(): never { + throw new Error(); + } + never2(): never { + while (true) {} + } +} + +function f1(x: string | number) { + if (typeof x === "boolean") { + x; // never + } +} + +function f2(x: string | number) { + while (true) { + if (typeof x === "boolean") { + return x; // never + } + } +} + +function test(cb: () => string) { + let s = cb(); + return s; +} + +let errorCallback = () => error("Error callback"); + +test(() => "hello"); +test(() => fail()); +test(() => { throw new Error(); }) +test(errorCallback); + + +//// [neverType.js] +function error(message) { + throw new Error(message); +} +function errorVoid(message) { + throw new Error(message); +} +function fail() { + return error("Something failed"); +} +function failOrThrow(shouldFail) { + if (shouldFail) { + return fail(); + } + throw new Error(); +} +function infiniteLoop1() { + while (true) { + } +} +function infiniteLoop2() { + while (true) { + } +} +function move1(direction) { + switch (direction) { + case "up": + return 1; + case "down": + return -1; + } + return error("Should never get here"); +} +function move2(direction) { + return direction === "up" ? 1 : + direction === "down" ? -1 : + error("Should never get here"); +} +function check(x) { + return x || error("Undefined value"); +} +var C = (function () { + function C() { + } + C.prototype.void1 = function () { + throw new Error(); + }; + C.prototype.void2 = function () { + while (true) { } + }; + C.prototype.never1 = function () { + throw new Error(); + }; + C.prototype.never2 = function () { + while (true) { } + }; + return C; +}()); +function f1(x) { + if (typeof x === "boolean") { + x; // never + } +} +function f2(x) { + while (true) { + if (typeof x === "boolean") { + return x; // never + } + } +} +function test(cb) { + var s = cb(); + return s; +} +var errorCallback = function () { return error("Error callback"); }; +test(function () { return "hello"; }); +test(function () { return fail(); }); +test(function () { throw new Error(); }); +test(errorCallback); + + +//// [neverType.d.ts] +declare function error(message: string): never; +declare function errorVoid(message: string): void; +declare function fail(): never; +declare function failOrThrow(shouldFail: boolean): never; +declare function infiniteLoop1(): void; +declare function infiniteLoop2(): never; +declare function move1(direction: "up" | "down"): number; +declare function move2(direction: "up" | "down"): number; +declare function check(x: T | undefined): T; +declare class C { + void1(): void; + void2(): void; + never1(): never; + never2(): never; +} +declare function f1(x: string | number): void; +declare function f2(x: string | number): never; +declare function test(cb: () => string): string; +declare let errorCallback: () => never; diff --git a/tests/baselines/reference/neverType.symbols b/tests/baselines/reference/neverType.symbols new file mode 100644 index 00000000000..4156934ddcc --- /dev/null +++ b/tests/baselines/reference/neverType.symbols @@ -0,0 +1,181 @@ +=== tests/cases/conformance/types/never/neverType.ts === + + +function error(message: string): never { +>error : Symbol(error, Decl(neverType.ts, 0, 0)) +>message : Symbol(message, Decl(neverType.ts, 2, 15)) + + throw new Error(message); +>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>message : Symbol(message, Decl(neverType.ts, 2, 15)) +} + +function errorVoid(message: string) { +>errorVoid : Symbol(errorVoid, Decl(neverType.ts, 4, 1)) +>message : Symbol(message, Decl(neverType.ts, 6, 19)) + + throw new Error(message); +>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>message : Symbol(message, Decl(neverType.ts, 6, 19)) +} + +function fail() { +>fail : Symbol(fail, Decl(neverType.ts, 8, 1)) + + return error("Something failed"); +>error : Symbol(error, Decl(neverType.ts, 0, 0)) +} + +function failOrThrow(shouldFail: boolean) { +>failOrThrow : Symbol(failOrThrow, Decl(neverType.ts, 12, 1)) +>shouldFail : Symbol(shouldFail, Decl(neverType.ts, 14, 21)) + + if (shouldFail) { +>shouldFail : Symbol(shouldFail, Decl(neverType.ts, 14, 21)) + + return fail(); +>fail : Symbol(fail, Decl(neverType.ts, 8, 1)) + } + throw new Error(); +>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +} + +function infiniteLoop1() { +>infiniteLoop1 : Symbol(infiniteLoop1, Decl(neverType.ts, 19, 1)) + + while (true) { + } +} + +function infiniteLoop2(): never { +>infiniteLoop2 : Symbol(infiniteLoop2, Decl(neverType.ts, 24, 1)) + + while (true) { + } +} + +function move1(direction: "up" | "down") { +>move1 : Symbol(move1, Decl(neverType.ts, 29, 1)) +>direction : Symbol(direction, Decl(neverType.ts, 31, 15)) + + switch (direction) { +>direction : Symbol(direction, Decl(neverType.ts, 31, 15)) + + case "up": + return 1; + case "down": + return -1; + } + return error("Should never get here"); +>error : Symbol(error, Decl(neverType.ts, 0, 0)) +} + +function move2(direction: "up" | "down") { +>move2 : Symbol(move2, Decl(neverType.ts, 39, 1)) +>direction : Symbol(direction, Decl(neverType.ts, 41, 15)) + + return direction === "up" ? 1 : +>direction : Symbol(direction, Decl(neverType.ts, 41, 15)) + + direction === "down" ? -1 : +>direction : Symbol(direction, Decl(neverType.ts, 41, 15)) + + error("Should never get here"); +>error : Symbol(error, Decl(neverType.ts, 0, 0)) +} + +function check(x: T | undefined) { +>check : Symbol(check, Decl(neverType.ts, 45, 1)) +>T : Symbol(T, Decl(neverType.ts, 47, 15)) +>x : Symbol(x, Decl(neverType.ts, 47, 18)) +>T : Symbol(T, Decl(neverType.ts, 47, 15)) + + return x || error("Undefined value"); +>x : Symbol(x, Decl(neverType.ts, 47, 18)) +>error : Symbol(error, Decl(neverType.ts, 0, 0)) +} + +class C { +>C : Symbol(C, Decl(neverType.ts, 49, 1)) + + void1() { +>void1 : Symbol(C.void1, Decl(neverType.ts, 51, 9)) + + throw new Error(); +>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + } + void2() { +>void2 : Symbol(C.void2, Decl(neverType.ts, 54, 5)) + + while (true) {} + } + never1(): never { +>never1 : Symbol(C.never1, Decl(neverType.ts, 57, 5)) + + throw new Error(); +>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + } + never2(): never { +>never2 : Symbol(C.never2, Decl(neverType.ts, 60, 5)) + + while (true) {} + } +} + +function f1(x: string | number) { +>f1 : Symbol(f1, Decl(neverType.ts, 64, 1)) +>x : Symbol(x, Decl(neverType.ts, 66, 12)) + + if (typeof x === "boolean") { +>x : Symbol(x, Decl(neverType.ts, 66, 12)) + + x; // never +>x : Symbol(x, Decl(neverType.ts, 66, 12)) + } +} + +function f2(x: string | number) { +>f2 : Symbol(f2, Decl(neverType.ts, 70, 1)) +>x : Symbol(x, Decl(neverType.ts, 72, 12)) + + while (true) { + if (typeof x === "boolean") { +>x : Symbol(x, Decl(neverType.ts, 72, 12)) + + return x; // never +>x : Symbol(x, Decl(neverType.ts, 72, 12)) + } + } +} + +function test(cb: () => string) { +>test : Symbol(test, Decl(neverType.ts, 78, 1)) +>cb : Symbol(cb, Decl(neverType.ts, 80, 14)) + + let s = cb(); +>s : Symbol(s, Decl(neverType.ts, 81, 7)) +>cb : Symbol(cb, Decl(neverType.ts, 80, 14)) + + return s; +>s : Symbol(s, Decl(neverType.ts, 81, 7)) +} + +let errorCallback = () => error("Error callback"); +>errorCallback : Symbol(errorCallback, Decl(neverType.ts, 85, 3)) +>error : Symbol(error, Decl(neverType.ts, 0, 0)) + +test(() => "hello"); +>test : Symbol(test, Decl(neverType.ts, 78, 1)) + +test(() => fail()); +>test : Symbol(test, Decl(neverType.ts, 78, 1)) +>fail : Symbol(fail, Decl(neverType.ts, 8, 1)) + +test(() => { throw new Error(); }) +>test : Symbol(test, Decl(neverType.ts, 78, 1)) +>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + +test(errorCallback); +>test : Symbol(test, Decl(neverType.ts, 78, 1)) +>errorCallback : Symbol(errorCallback, Decl(neverType.ts, 85, 3)) + diff --git a/tests/baselines/reference/neverType.types b/tests/baselines/reference/neverType.types new file mode 100644 index 00000000000..5424f61d1ed --- /dev/null +++ b/tests/baselines/reference/neverType.types @@ -0,0 +1,239 @@ +=== tests/cases/conformance/types/never/neverType.ts === + + +function error(message: string): never { +>error : (message: string) => never +>message : string + + throw new Error(message); +>new Error(message) : Error +>Error : ErrorConstructor +>message : string +} + +function errorVoid(message: string) { +>errorVoid : (message: string) => void +>message : string + + throw new Error(message); +>new Error(message) : Error +>Error : ErrorConstructor +>message : string +} + +function fail() { +>fail : () => never + + return error("Something failed"); +>error("Something failed") : never +>error : (message: string) => never +>"Something failed" : string +} + +function failOrThrow(shouldFail: boolean) { +>failOrThrow : (shouldFail: boolean) => never +>shouldFail : boolean + + if (shouldFail) { +>shouldFail : boolean + + return fail(); +>fail() : never +>fail : () => never + } + throw new Error(); +>new Error() : Error +>Error : ErrorConstructor +} + +function infiniteLoop1() { +>infiniteLoop1 : () => void + + while (true) { +>true : boolean + } +} + +function infiniteLoop2(): never { +>infiniteLoop2 : () => never + + while (true) { +>true : boolean + } +} + +function move1(direction: "up" | "down") { +>move1 : (direction: "up" | "down") => number +>direction : "up" | "down" + + switch (direction) { +>direction : "up" | "down" + + case "up": +>"up" : string + + return 1; +>1 : number + + case "down": +>"down" : string + + return -1; +>-1 : number +>1 : number + } + return error("Should never get here"); +>error("Should never get here") : never +>error : (message: string) => never +>"Should never get here" : string +} + +function move2(direction: "up" | "down") { +>move2 : (direction: "up" | "down") => number +>direction : "up" | "down" + + return direction === "up" ? 1 : +>direction === "up" ? 1 : direction === "down" ? -1 : error("Should never get here") : number +>direction === "up" : boolean +>direction : "up" | "down" +>"up" : string +>1 : number + + direction === "down" ? -1 : +>direction === "down" ? -1 : error("Should never get here") : number +>direction === "down" : boolean +>direction : "up" | "down" +>"down" : string +>-1 : number +>1 : number + + error("Should never get here"); +>error("Should never get here") : never +>error : (message: string) => never +>"Should never get here" : string +} + +function check(x: T | undefined) { +>check : (x: T | undefined) => T +>T : T +>x : T | undefined +>T : T + + return x || error("Undefined value"); +>x || error("Undefined value") : T +>x : T | undefined +>error("Undefined value") : never +>error : (message: string) => never +>"Undefined value" : string +} + +class C { +>C : C + + void1() { +>void1 : () => void + + throw new Error(); +>new Error() : Error +>Error : ErrorConstructor + } + void2() { +>void2 : () => void + + while (true) {} +>true : boolean + } + never1(): never { +>never1 : () => never + + throw new Error(); +>new Error() : Error +>Error : ErrorConstructor + } + never2(): never { +>never2 : () => never + + while (true) {} +>true : boolean + } +} + +function f1(x: string | number) { +>f1 : (x: string | number) => void +>x : string | number + + if (typeof x === "boolean") { +>typeof x === "boolean" : boolean +>typeof x : string +>x : string | number +>"boolean" : string + + x; // never +>x : never + } +} + +function f2(x: string | number) { +>f2 : (x: string | number) => never +>x : string | number + + while (true) { +>true : boolean + + if (typeof x === "boolean") { +>typeof x === "boolean" : boolean +>typeof x : string +>x : string | number +>"boolean" : string + + return x; // never +>x : never + } + } +} + +function test(cb: () => string) { +>test : (cb: () => string) => string +>cb : () => string + + let s = cb(); +>s : string +>cb() : string +>cb : () => string + + return s; +>s : string +} + +let errorCallback = () => error("Error callback"); +>errorCallback : () => never +>() => error("Error callback") : () => never +>error("Error callback") : never +>error : (message: string) => never +>"Error callback" : string + +test(() => "hello"); +>test(() => "hello") : string +>test : (cb: () => string) => string +>() => "hello" : () => string +>"hello" : string + +test(() => fail()); +>test(() => fail()) : string +>test : (cb: () => string) => string +>() => fail() : () => never +>fail() : never +>fail : () => never + +test(() => { throw new Error(); }) +>test(() => { throw new Error(); }) : string +>test : (cb: () => string) => string +>() => { throw new Error(); } : () => never +>new Error() : Error +>Error : ErrorConstructor + +test(errorCallback); +>test(errorCallback) : string +>test : (cb: () => string) => string +>errorCallback : () => never + diff --git a/tests/baselines/reference/neverTypeErrors1.errors.txt b/tests/baselines/reference/neverTypeErrors1.errors.txt new file mode 100644 index 00000000000..8fd6f9c924e --- /dev/null +++ b/tests/baselines/reference/neverTypeErrors1.errors.txt @@ -0,0 +1,50 @@ +tests/cases/conformance/types/never/neverTypeErrors1.ts(3,5): error TS2322: Type 'number' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors1.ts(4,5): error TS2322: Type 'string' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors1.ts(5,5): error TS2322: Type 'boolean' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors1.ts(6,5): error TS2322: Type 'undefined' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors1.ts(7,5): error TS2322: Type 'null' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors1.ts(8,5): error TS2322: Type '{}' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors1.ts(12,5): error TS2322: Type 'undefined' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors1.ts(16,12): error TS2322: Type 'number' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors1.ts(19,16): error TS2534: A function returning 'never' cannot have a reachable end point. + + +==== tests/cases/conformance/types/never/neverTypeErrors1.ts (9 errors) ==== + function f1() { + let x: never; + x = 1; + ~ +!!! error TS2322: Type 'number' is not assignable to type 'never'. + x = "abc"; + ~ +!!! error TS2322: Type 'string' is not assignable to type 'never'. + x = false; + ~ +!!! error TS2322: Type 'boolean' is not assignable to type 'never'. + x = undefined; + ~ +!!! error TS2322: Type 'undefined' is not assignable to type 'never'. + x = null; + ~ +!!! error TS2322: Type 'null' is not assignable to type 'never'. + x = {}; + ~ +!!! error TS2322: Type '{}' is not assignable to type 'never'. + } + + function f2(): never { + return; + ~~~~~~~ +!!! error TS2322: Type 'undefined' is not assignable to type 'never'. + } + + function f3(): never { + return 1; + ~ +!!! error TS2322: Type 'number' is not assignable to type 'never'. + } + + function f4(): never { + ~~~~~ +!!! error TS2534: A function returning 'never' cannot have a reachable end point. + } \ No newline at end of file diff --git a/tests/baselines/reference/neverTypeErrors1.js b/tests/baselines/reference/neverTypeErrors1.js new file mode 100644 index 00000000000..81b3f8f9cdb --- /dev/null +++ b/tests/baselines/reference/neverTypeErrors1.js @@ -0,0 +1,40 @@ +//// [neverTypeErrors1.ts] +function f1() { + let x: never; + x = 1; + x = "abc"; + x = false; + x = undefined; + x = null; + x = {}; +} + +function f2(): never { + return; +} + +function f3(): never { + return 1; +} + +function f4(): never { +} + +//// [neverTypeErrors1.js] +function f1() { + var x; + x = 1; + x = "abc"; + x = false; + x = undefined; + x = null; + x = {}; +} +function f2() { + return; +} +function f3() { + return 1; +} +function f4() { +} diff --git a/tests/baselines/reference/neverTypeErrors2.errors.txt b/tests/baselines/reference/neverTypeErrors2.errors.txt new file mode 100644 index 00000000000..c6292657ad1 --- /dev/null +++ b/tests/baselines/reference/neverTypeErrors2.errors.txt @@ -0,0 +1,51 @@ +tests/cases/conformance/types/never/neverTypeErrors2.ts(4,5): error TS2322: Type 'number' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors2.ts(5,5): error TS2322: Type 'string' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors2.ts(6,5): error TS2322: Type 'boolean' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors2.ts(7,5): error TS2322: Type 'undefined' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors2.ts(8,5): error TS2322: Type 'null' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors2.ts(9,5): error TS2322: Type '{}' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors2.ts(13,5): error TS2322: Type 'undefined' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors2.ts(17,12): error TS2322: Type 'number' is not assignable to type 'never'. +tests/cases/conformance/types/never/neverTypeErrors2.ts(20,16): error TS2534: A function returning 'never' cannot have a reachable end point. + + +==== tests/cases/conformance/types/never/neverTypeErrors2.ts (9 errors) ==== + + function f1() { + let x: never; + x = 1; + ~ +!!! error TS2322: Type 'number' is not assignable to type 'never'. + x = "abc"; + ~ +!!! error TS2322: Type 'string' is not assignable to type 'never'. + x = false; + ~ +!!! error TS2322: Type 'boolean' is not assignable to type 'never'. + x = undefined; + ~ +!!! error TS2322: Type 'undefined' is not assignable to type 'never'. + x = null; + ~ +!!! error TS2322: Type 'null' is not assignable to type 'never'. + x = {}; + ~ +!!! error TS2322: Type '{}' is not assignable to type 'never'. + } + + function f2(): never { + return; + ~~~~~~~ +!!! error TS2322: Type 'undefined' is not assignable to type 'never'. + } + + function f3(): never { + return 1; + ~ +!!! error TS2322: Type 'number' is not assignable to type 'never'. + } + + function f4(): never { + ~~~~~ +!!! error TS2534: A function returning 'never' cannot have a reachable end point. + } \ No newline at end of file diff --git a/tests/baselines/reference/neverTypeErrors2.js b/tests/baselines/reference/neverTypeErrors2.js new file mode 100644 index 00000000000..18c92922bc1 --- /dev/null +++ b/tests/baselines/reference/neverTypeErrors2.js @@ -0,0 +1,41 @@ +//// [neverTypeErrors2.ts] + +function f1() { + let x: never; + x = 1; + x = "abc"; + x = false; + x = undefined; + x = null; + x = {}; +} + +function f2(): never { + return; +} + +function f3(): never { + return 1; +} + +function f4(): never { +} + +//// [neverTypeErrors2.js] +function f1() { + var x; + x = 1; + x = "abc"; + x = false; + x = undefined; + x = null; + x = {}; +} +function f2() { + return; +} +function f3() { + return 1; +} +function f4() { +} diff --git a/tests/baselines/reference/objectLiteralMemberWithQuestionMark1.errors.txt b/tests/baselines/reference/objectLiteralMemberWithQuestionMark1.errors.txt index b10ba701143..f77bad8664c 100644 --- a/tests/baselines/reference/objectLiteralMemberWithQuestionMark1.errors.txt +++ b/tests/baselines/reference/objectLiteralMemberWithQuestionMark1.errors.txt @@ -1,7 +1,7 @@ -tests/cases/compiler/objectLiteralMemberWithQuestionMark1.ts(1,14): error TS1112: A class member cannot be declared optional. +tests/cases/compiler/objectLiteralMemberWithQuestionMark1.ts(1,14): error TS1162: An object member cannot be declared optional. ==== tests/cases/compiler/objectLiteralMemberWithQuestionMark1.ts (1 errors) ==== var v = { foo?() { } } ~ -!!! error TS1112: A class member cannot be declared optional. \ No newline at end of file +!!! error TS1162: An object member cannot be declared optional. \ No newline at end of file diff --git a/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt b/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt index a2269c29d11..74057195c64 100644 --- a/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt +++ b/tests/baselines/reference/objectTypesWithOptionalProperties.errors.txt @@ -1,9 +1,7 @@ -tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(12,6): error TS1112: A class member cannot be declared optional. -tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(20,6): error TS1112: A class member cannot be declared optional. tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts(24,6): error TS1162: An object member cannot be declared optional. -==== tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts (3 errors) ==== +==== tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts (1 errors) ==== // Basic uses of optional properties var a: { @@ -15,9 +13,7 @@ tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWith } class C { - x?: number; // error - ~ -!!! error TS1112: A class member cannot be declared optional. + x?: number; // ok } interface I2 { @@ -25,9 +21,7 @@ tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWith } class C2 { - x?: T; // error - ~ -!!! error TS1112: A class member cannot be declared optional. + x?: T; // ok } var b = { diff --git a/tests/baselines/reference/objectTypesWithOptionalProperties.js b/tests/baselines/reference/objectTypesWithOptionalProperties.js index 98141c048dd..9b2ada010d9 100644 --- a/tests/baselines/reference/objectTypesWithOptionalProperties.js +++ b/tests/baselines/reference/objectTypesWithOptionalProperties.js @@ -10,7 +10,7 @@ interface I { } class C { - x?: number; // error + x?: number; // ok } interface I2 { @@ -18,7 +18,7 @@ interface I2 { } class C2 { - x?: T; // error + x?: T; // ok } var b = { diff --git a/tests/baselines/reference/optionalMethods.js b/tests/baselines/reference/optionalMethods.js new file mode 100644 index 00000000000..42decf512e4 --- /dev/null +++ b/tests/baselines/reference/optionalMethods.js @@ -0,0 +1,147 @@ +//// [optionalMethods.ts] + +interface Foo { + a: number; + b?: number; + f(): number; + g?(): number; +} + +function test1(x: Foo) { + x.a; + x.b; + x.f; + x.g; + let f1 = x.f(); + let g1 = x.g && x.g(); + let g2 = x.g ? x.g() : 0; +} + +class Bar { + a: number; + b?: number; + c? = 2; + constructor(public d?: number, public e = 10) {} + f() { + return 1; + } + g?(): number; // Body of optional method can be omitted + h?() { + return 2; + } +} + +function test2(x: Bar) { + x.a; + x.b; + x.c; + x.d; + x.e; + x.f; + x.g; + let f1 = x.f(); + let g1 = x.g && x.g(); + let g2 = x.g ? x.g() : 0; + let h1 = x.h && x.h(); + let h2 = x.h ? x.h() : 0; +} + +class Base { + a?: number; + f?(): number; +} + +class Derived extends Base { + a = 1; + f(): number { return 1; } +} + + +//// [optionalMethods.js] +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +function test1(x) { + x.a; + x.b; + x.f; + x.g; + var f1 = x.f(); + var g1 = x.g && x.g(); + var g2 = x.g ? x.g() : 0; +} +var Bar = (function () { + function Bar(d, e) { + if (e === void 0) { e = 10; } + this.d = d; + this.e = e; + this.c = 2; + } + Bar.prototype.f = function () { + return 1; + }; + Bar.prototype.h = function () { + return 2; + }; + return Bar; +}()); +function test2(x) { + x.a; + x.b; + x.c; + x.d; + x.e; + x.f; + x.g; + var f1 = x.f(); + var g1 = x.g && x.g(); + var g2 = x.g ? x.g() : 0; + var h1 = x.h && x.h(); + var h2 = x.h ? x.h() : 0; +} +var Base = (function () { + function Base() { + } + return Base; +}()); +var Derived = (function (_super) { + __extends(Derived, _super); + function Derived() { + _super.apply(this, arguments); + this.a = 1; + } + Derived.prototype.f = function () { return 1; }; + return Derived; +}(Base)); + + +//// [optionalMethods.d.ts] +interface Foo { + a: number; + b?: number; + f(): number; + g?(): number; +} +declare function test1(x: Foo): void; +declare class Bar { + d?: number; + e: number; + a: number; + b?: number; + c?: number | undefined; + constructor(d?: number, e?: number); + f(): number; + g?(): number; + h?(): number; +} +declare function test2(x: Bar): void; +declare class Base { + a?: number; + f?(): number; +} +declare class Derived extends Base { + a: number; + f(): number; +} diff --git a/tests/baselines/reference/optionalMethods.symbols b/tests/baselines/reference/optionalMethods.symbols new file mode 100644 index 00000000000..55c5ec958da --- /dev/null +++ b/tests/baselines/reference/optionalMethods.symbols @@ -0,0 +1,203 @@ +=== tests/cases/conformance/types/namedTypes/optionalMethods.ts === + +interface Foo { +>Foo : Symbol(Foo, Decl(optionalMethods.ts, 0, 0)) + + a: number; +>a : Symbol(Foo.a, Decl(optionalMethods.ts, 1, 15)) + + b?: number; +>b : Symbol(Foo.b, Decl(optionalMethods.ts, 2, 14)) + + f(): number; +>f : Symbol(Foo.f, Decl(optionalMethods.ts, 3, 15)) + + g?(): number; +>g : Symbol(Foo.g, Decl(optionalMethods.ts, 4, 16)) +} + +function test1(x: Foo) { +>test1 : Symbol(test1, Decl(optionalMethods.ts, 6, 1)) +>x : Symbol(x, Decl(optionalMethods.ts, 8, 15)) +>Foo : Symbol(Foo, Decl(optionalMethods.ts, 0, 0)) + + x.a; +>x.a : Symbol(Foo.a, Decl(optionalMethods.ts, 1, 15)) +>x : Symbol(x, Decl(optionalMethods.ts, 8, 15)) +>a : Symbol(Foo.a, Decl(optionalMethods.ts, 1, 15)) + + x.b; +>x.b : Symbol(Foo.b, Decl(optionalMethods.ts, 2, 14)) +>x : Symbol(x, Decl(optionalMethods.ts, 8, 15)) +>b : Symbol(Foo.b, Decl(optionalMethods.ts, 2, 14)) + + x.f; +>x.f : Symbol(Foo.f, Decl(optionalMethods.ts, 3, 15)) +>x : Symbol(x, Decl(optionalMethods.ts, 8, 15)) +>f : Symbol(Foo.f, Decl(optionalMethods.ts, 3, 15)) + + x.g; +>x.g : Symbol(Foo.g, Decl(optionalMethods.ts, 4, 16)) +>x : Symbol(x, Decl(optionalMethods.ts, 8, 15)) +>g : Symbol(Foo.g, Decl(optionalMethods.ts, 4, 16)) + + let f1 = x.f(); +>f1 : Symbol(f1, Decl(optionalMethods.ts, 13, 7)) +>x.f : Symbol(Foo.f, Decl(optionalMethods.ts, 3, 15)) +>x : Symbol(x, Decl(optionalMethods.ts, 8, 15)) +>f : Symbol(Foo.f, Decl(optionalMethods.ts, 3, 15)) + + let g1 = x.g && x.g(); +>g1 : Symbol(g1, Decl(optionalMethods.ts, 14, 7)) +>x.g : Symbol(Foo.g, Decl(optionalMethods.ts, 4, 16)) +>x : Symbol(x, Decl(optionalMethods.ts, 8, 15)) +>g : Symbol(Foo.g, Decl(optionalMethods.ts, 4, 16)) +>x.g : Symbol(Foo.g, Decl(optionalMethods.ts, 4, 16)) +>x : Symbol(x, Decl(optionalMethods.ts, 8, 15)) +>g : Symbol(Foo.g, Decl(optionalMethods.ts, 4, 16)) + + let g2 = x.g ? x.g() : 0; +>g2 : Symbol(g2, Decl(optionalMethods.ts, 15, 7)) +>x.g : Symbol(Foo.g, Decl(optionalMethods.ts, 4, 16)) +>x : Symbol(x, Decl(optionalMethods.ts, 8, 15)) +>g : Symbol(Foo.g, Decl(optionalMethods.ts, 4, 16)) +>x.g : Symbol(Foo.g, Decl(optionalMethods.ts, 4, 16)) +>x : Symbol(x, Decl(optionalMethods.ts, 8, 15)) +>g : Symbol(Foo.g, Decl(optionalMethods.ts, 4, 16)) +} + +class Bar { +>Bar : Symbol(Bar, Decl(optionalMethods.ts, 16, 1)) + + a: number; +>a : Symbol(Bar.a, Decl(optionalMethods.ts, 18, 11)) + + b?: number; +>b : Symbol(Bar.b, Decl(optionalMethods.ts, 19, 14)) + + c? = 2; +>c : Symbol(Bar.c, Decl(optionalMethods.ts, 20, 15)) + + constructor(public d?: number, public e = 10) {} +>d : Symbol(Bar.d, Decl(optionalMethods.ts, 22, 16)) +>e : Symbol(Bar.e, Decl(optionalMethods.ts, 22, 34)) + + f() { +>f : Symbol(Bar.f, Decl(optionalMethods.ts, 22, 52)) + + return 1; + } + g?(): number; // Body of optional method can be omitted +>g : Symbol(Bar.g, Decl(optionalMethods.ts, 25, 5)) + + h?() { +>h : Symbol(Bar.h, Decl(optionalMethods.ts, 26, 17)) + + return 2; + } +} + +function test2(x: Bar) { +>test2 : Symbol(test2, Decl(optionalMethods.ts, 30, 1)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>Bar : Symbol(Bar, Decl(optionalMethods.ts, 16, 1)) + + x.a; +>x.a : Symbol(Bar.a, Decl(optionalMethods.ts, 18, 11)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>a : Symbol(Bar.a, Decl(optionalMethods.ts, 18, 11)) + + x.b; +>x.b : Symbol(Bar.b, Decl(optionalMethods.ts, 19, 14)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>b : Symbol(Bar.b, Decl(optionalMethods.ts, 19, 14)) + + x.c; +>x.c : Symbol(Bar.c, Decl(optionalMethods.ts, 20, 15)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>c : Symbol(Bar.c, Decl(optionalMethods.ts, 20, 15)) + + x.d; +>x.d : Symbol(Bar.d, Decl(optionalMethods.ts, 22, 16)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>d : Symbol(Bar.d, Decl(optionalMethods.ts, 22, 16)) + + x.e; +>x.e : Symbol(Bar.e, Decl(optionalMethods.ts, 22, 34)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>e : Symbol(Bar.e, Decl(optionalMethods.ts, 22, 34)) + + x.f; +>x.f : Symbol(Bar.f, Decl(optionalMethods.ts, 22, 52)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>f : Symbol(Bar.f, Decl(optionalMethods.ts, 22, 52)) + + x.g; +>x.g : Symbol(Bar.g, Decl(optionalMethods.ts, 25, 5)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>g : Symbol(Bar.g, Decl(optionalMethods.ts, 25, 5)) + + let f1 = x.f(); +>f1 : Symbol(f1, Decl(optionalMethods.ts, 40, 7)) +>x.f : Symbol(Bar.f, Decl(optionalMethods.ts, 22, 52)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>f : Symbol(Bar.f, Decl(optionalMethods.ts, 22, 52)) + + let g1 = x.g && x.g(); +>g1 : Symbol(g1, Decl(optionalMethods.ts, 41, 7)) +>x.g : Symbol(Bar.g, Decl(optionalMethods.ts, 25, 5)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>g : Symbol(Bar.g, Decl(optionalMethods.ts, 25, 5)) +>x.g : Symbol(Bar.g, Decl(optionalMethods.ts, 25, 5)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>g : Symbol(Bar.g, Decl(optionalMethods.ts, 25, 5)) + + let g2 = x.g ? x.g() : 0; +>g2 : Symbol(g2, Decl(optionalMethods.ts, 42, 7)) +>x.g : Symbol(Bar.g, Decl(optionalMethods.ts, 25, 5)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>g : Symbol(Bar.g, Decl(optionalMethods.ts, 25, 5)) +>x.g : Symbol(Bar.g, Decl(optionalMethods.ts, 25, 5)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>g : Symbol(Bar.g, Decl(optionalMethods.ts, 25, 5)) + + let h1 = x.h && x.h(); +>h1 : Symbol(h1, Decl(optionalMethods.ts, 43, 7)) +>x.h : Symbol(Bar.h, Decl(optionalMethods.ts, 26, 17)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>h : Symbol(Bar.h, Decl(optionalMethods.ts, 26, 17)) +>x.h : Symbol(Bar.h, Decl(optionalMethods.ts, 26, 17)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>h : Symbol(Bar.h, Decl(optionalMethods.ts, 26, 17)) + + let h2 = x.h ? x.h() : 0; +>h2 : Symbol(h2, Decl(optionalMethods.ts, 44, 7)) +>x.h : Symbol(Bar.h, Decl(optionalMethods.ts, 26, 17)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>h : Symbol(Bar.h, Decl(optionalMethods.ts, 26, 17)) +>x.h : Symbol(Bar.h, Decl(optionalMethods.ts, 26, 17)) +>x : Symbol(x, Decl(optionalMethods.ts, 32, 15)) +>h : Symbol(Bar.h, Decl(optionalMethods.ts, 26, 17)) +} + +class Base { +>Base : Symbol(Base, Decl(optionalMethods.ts, 45, 1)) + + a?: number; +>a : Symbol(Base.a, Decl(optionalMethods.ts, 47, 12)) + + f?(): number; +>f : Symbol(Base.f, Decl(optionalMethods.ts, 48, 15)) +} + +class Derived extends Base { +>Derived : Symbol(Derived, Decl(optionalMethods.ts, 50, 1)) +>Base : Symbol(Base, Decl(optionalMethods.ts, 45, 1)) + + a = 1; +>a : Symbol(Derived.a, Decl(optionalMethods.ts, 52, 28)) + + f(): number { return 1; } +>f : Symbol(Derived.f, Decl(optionalMethods.ts, 53, 10)) +} + diff --git a/tests/baselines/reference/optionalMethods.types b/tests/baselines/reference/optionalMethods.types new file mode 100644 index 00000000000..70fda27c012 --- /dev/null +++ b/tests/baselines/reference/optionalMethods.types @@ -0,0 +1,226 @@ +=== tests/cases/conformance/types/namedTypes/optionalMethods.ts === + +interface Foo { +>Foo : Foo + + a: number; +>a : number + + b?: number; +>b : number | undefined + + f(): number; +>f : () => number + + g?(): number; +>g : (() => number) | undefined +} + +function test1(x: Foo) { +>test1 : (x: Foo) => void +>x : Foo +>Foo : Foo + + x.a; +>x.a : number +>x : Foo +>a : number + + x.b; +>x.b : number | undefined +>x : Foo +>b : number | undefined + + x.f; +>x.f : () => number +>x : Foo +>f : () => number + + x.g; +>x.g : (() => number) | undefined +>x : Foo +>g : (() => number) | undefined + + let f1 = x.f(); +>f1 : number +>x.f() : number +>x.f : () => number +>x : Foo +>f : () => number + + let g1 = x.g && x.g(); +>g1 : number | undefined +>x.g && x.g() : number | undefined +>x.g : (() => number) | undefined +>x : Foo +>g : (() => number) | undefined +>x.g() : number +>x.g : () => number +>x : Foo +>g : () => number + + let g2 = x.g ? x.g() : 0; +>g2 : number +>x.g ? x.g() : 0 : number +>x.g : (() => number) | undefined +>x : Foo +>g : (() => number) | undefined +>x.g() : number +>x.g : () => number +>x : Foo +>g : () => number +>0 : number +} + +class Bar { +>Bar : Bar + + a: number; +>a : number + + b?: number; +>b : number | undefined + + c? = 2; +>c : number | undefined +>2 : number + + constructor(public d?: number, public e = 10) {} +>d : number | undefined +>e : number +>10 : number + + f() { +>f : () => number + + return 1; +>1 : number + } + g?(): number; // Body of optional method can be omitted +>g : (() => number) | undefined + + h?() { +>h : (() => number) | undefined + + return 2; +>2 : number + } +} + +function test2(x: Bar) { +>test2 : (x: Bar) => void +>x : Bar +>Bar : Bar + + x.a; +>x.a : number +>x : Bar +>a : number + + x.b; +>x.b : number | undefined +>x : Bar +>b : number | undefined + + x.c; +>x.c : number | undefined +>x : Bar +>c : number | undefined + + x.d; +>x.d : number | undefined +>x : Bar +>d : number | undefined + + x.e; +>x.e : number +>x : Bar +>e : number + + x.f; +>x.f : () => number +>x : Bar +>f : () => number + + x.g; +>x.g : (() => number) | undefined +>x : Bar +>g : (() => number) | undefined + + let f1 = x.f(); +>f1 : number +>x.f() : number +>x.f : () => number +>x : Bar +>f : () => number + + let g1 = x.g && x.g(); +>g1 : number | undefined +>x.g && x.g() : number | undefined +>x.g : (() => number) | undefined +>x : Bar +>g : (() => number) | undefined +>x.g() : number +>x.g : () => number +>x : Bar +>g : () => number + + let g2 = x.g ? x.g() : 0; +>g2 : number +>x.g ? x.g() : 0 : number +>x.g : (() => number) | undefined +>x : Bar +>g : (() => number) | undefined +>x.g() : number +>x.g : () => number +>x : Bar +>g : () => number +>0 : number + + let h1 = x.h && x.h(); +>h1 : number | undefined +>x.h && x.h() : number | undefined +>x.h : (() => number) | undefined +>x : Bar +>h : (() => number) | undefined +>x.h() : number +>x.h : () => number +>x : Bar +>h : () => number + + let h2 = x.h ? x.h() : 0; +>h2 : number +>x.h ? x.h() : 0 : number +>x.h : (() => number) | undefined +>x : Bar +>h : (() => number) | undefined +>x.h() : number +>x.h : () => number +>x : Bar +>h : () => number +>0 : number +} + +class Base { +>Base : Base + + a?: number; +>a : number | undefined + + f?(): number; +>f : (() => number) | undefined +} + +class Derived extends Base { +>Derived : Derived +>Base : Base + + a = 1; +>a : number +>1 : number + + f(): number { return 1; } +>f : () => number +>1 : number +} + diff --git a/tests/baselines/reference/outModuleConcatUnspecifiedModuleKind.errors.txt b/tests/baselines/reference/outModuleConcatUnspecifiedModuleKind.errors.txt new file mode 100644 index 00000000000..07282cd1350 --- /dev/null +++ b/tests/baselines/reference/outModuleConcatUnspecifiedModuleKind.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/a.ts(2,14): error TS6131: Cannot compile modules using option 'outFile' unless the '--module' flag is 'amd' or 'system'. + + +==== tests/cases/compiler/a.ts (1 errors) ==== + + export class A { } // module + ~ +!!! error TS6131: Cannot compile modules using option 'outFile' unless the '--module' flag is 'amd' or 'system'. + +==== tests/cases/compiler/b.ts (0 errors) ==== + var x = 0; // global \ No newline at end of file diff --git a/tests/baselines/reference/outModuleConcatUnspecifiedModuleKind.js b/tests/baselines/reference/outModuleConcatUnspecifiedModuleKind.js new file mode 100644 index 00000000000..48548400f7f --- /dev/null +++ b/tests/baselines/reference/outModuleConcatUnspecifiedModuleKind.js @@ -0,0 +1,11 @@ +//// [tests/cases/compiler/outModuleConcatUnspecifiedModuleKind.ts] //// + +//// [a.ts] + +export class A { } // module + +//// [b.ts] +var x = 0; // global + +//// [out.js] +var x = 0; // global diff --git a/tests/baselines/reference/pathsValidation1.errors.txt b/tests/baselines/reference/pathsValidation1.errors.txt index c6193be67ac..a2d7be5f355 100644 --- a/tests/baselines/reference/pathsValidation1.errors.txt +++ b/tests/baselines/reference/pathsValidation1.errors.txt @@ -1,6 +1,6 @@ -error TS5063: Substututions for pattern '*' should be an array. +error TS5063: Substitutions for pattern '*' should be an array. -!!! error TS5063: Substututions for pattern '*' should be an array. +!!! error TS5063: Substitutions for pattern '*' should be an array. ==== tests/cases/compiler/a.ts (0 errors) ==== let x = 1; \ No newline at end of file diff --git a/tests/baselines/reference/promiseVoidErrorCallback.types b/tests/baselines/reference/promiseVoidErrorCallback.types index 82b248f64bd..b536ab089bd 100644 --- a/tests/baselines/reference/promiseVoidErrorCallback.types +++ b/tests/baselines/reference/promiseVoidErrorCallback.types @@ -63,7 +63,7 @@ var x3 = f1() .then(f2, (e: Error) => { >then : { (onfulfilled?: (value: T1) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; (onfulfilled?: (value: T1) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; } >f2 : (x: T1) => T2 ->(e: Error) => { throw e;} : (e: Error) => void +>(e: Error) => { throw e;} : (e: Error) => never >e : Error >Error : Error diff --git a/tests/baselines/reference/readonlyConstructorAssignment.errors.txt b/tests/baselines/reference/readonlyConstructorAssignment.errors.txt new file mode 100644 index 00000000000..e764fe21eda --- /dev/null +++ b/tests/baselines/reference/readonlyConstructorAssignment.errors.txt @@ -0,0 +1,50 @@ +tests/cases/conformance/classes/constructorDeclarations/constructorParameters/readonlyConstructorAssignment.ts(13,9): error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. +tests/cases/conformance/classes/constructorDeclarations/constructorParameters/readonlyConstructorAssignment.ts(33,7): error TS2415: Class 'E' incorrectly extends base class 'D'. + Property 'x' is private in type 'D' but not in type 'E'. + + +==== tests/cases/conformance/classes/constructorDeclarations/constructorParameters/readonlyConstructorAssignment.ts (2 errors) ==== + // Tests that readonly parameter properties behave like regular readonly properties + + class A { + constructor(readonly x: number) { + this.x = 0; + } + } + + class B extends A { + constructor(x: number) { + super(x); + // Fails, x is readonly + this.x = 1; + ~~~~~~ +!!! error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property. + } + } + + class C extends A { + // This is the usual behavior of readonly properties: + // if one is redeclared in a base class, then it can be assigned to. + constructor(readonly x: number) { + super(x); + this.x = 1; + } + } + + class D { + constructor(private readonly x: number) { + this.x = 0; + } + } + + // Fails, can't redeclare readonly property + class E extends D { + ~ +!!! error TS2415: Class 'E' incorrectly extends base class 'D'. +!!! error TS2415: Property 'x' is private in type 'D' but not in type 'E'. + constructor(readonly x: number) { + super(x); + this.x = 1; + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/readonlyConstructorAssignment.js b/tests/baselines/reference/readonlyConstructorAssignment.js new file mode 100644 index 00000000000..40c292e4ce8 --- /dev/null +++ b/tests/baselines/reference/readonlyConstructorAssignment.js @@ -0,0 +1,92 @@ +//// [readonlyConstructorAssignment.ts] +// Tests that readonly parameter properties behave like regular readonly properties + +class A { + constructor(readonly x: number) { + this.x = 0; + } +} + +class B extends A { + constructor(x: number) { + super(x); + // Fails, x is readonly + this.x = 1; + } +} + +class C extends A { + // This is the usual behavior of readonly properties: + // if one is redeclared in a base class, then it can be assigned to. + constructor(readonly x: number) { + super(x); + this.x = 1; + } +} + +class D { + constructor(private readonly x: number) { + this.x = 0; + } +} + +// Fails, can't redeclare readonly property +class E extends D { + constructor(readonly x: number) { + super(x); + this.x = 1; + } +} + + +//// [readonlyConstructorAssignment.js] +// Tests that readonly parameter properties behave like regular readonly properties +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +var A = (function () { + function A(x) { + this.x = x; + this.x = 0; + } + return A; +}()); +var B = (function (_super) { + __extends(B, _super); + function B(x) { + _super.call(this, x); + // Fails, x is readonly + this.x = 1; + } + return B; +}(A)); +var C = (function (_super) { + __extends(C, _super); + // This is the usual behavior of readonly properties: + // if one is redeclared in a base class, then it can be assigned to. + function C(x) { + _super.call(this, x); + this.x = x; + this.x = 1; + } + return C; +}(A)); +var D = (function () { + function D(x) { + this.x = x; + this.x = 0; + } + return D; +}()); +// Fails, can't redeclare readonly property +var E = (function (_super) { + __extends(E, _super); + function E(x) { + _super.call(this, x); + this.x = x; + this.x = 1; + } + return E; +}(D)); diff --git a/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.symbols b/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.symbols index a6aa91e3a56..2596959de9e 100644 --- a/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.symbols +++ b/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.symbols @@ -562,9 +562,9 @@ class ListWrapper { >ListWrapper : Symbol(ListWrapper, Decl(staticAnonymousTypeNotReferencingTypeParameter.ts, 38, 1)) >l : Symbol(l, Decl(staticAnonymousTypeNotReferencingTypeParameter.ts, 113, 43)) >T : Symbol(T, Decl(staticAnonymousTypeNotReferencingTypeParameter.ts, 113, 16)) ->JSON.stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>JSON.stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) >JSON : Symbol(JSON, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) ->stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>stringify : Symbol(JSON.stringify, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) >l : Symbol(l, Decl(staticAnonymousTypeNotReferencingTypeParameter.ts, 113, 43)) static maximum(dit: typeof ListWrapper, list: T[], predicate: (t: T) => number): T { diff --git a/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.types b/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.types index 90148bdbb19..8d35f32707a 100644 --- a/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.types +++ b/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.types @@ -662,9 +662,9 @@ class ListWrapper { >l : T[] >T : T >JSON.stringify(l) : string ->JSON.stringify : { (value: any): string; (value: any, replacer: (key: string, value: any) => any): string; (value: any, replacer: any[]): string; (value: any, replacer: (key: string, value: any) => any, space: string | number): string; (value: any, replacer: any[], space: string | number): string; } +>JSON.stringify : { (value: any, replacer?: (key: string, value: any) => any, space?: string | number): string; (value: any, replacer?: (number | string)[], space?: string | number): string; } >JSON : JSON ->stringify : { (value: any): string; (value: any, replacer: (key: string, value: any) => any): string; (value: any, replacer: any[]): string; (value: any, replacer: (key: string, value: any) => any, space: string | number): string; (value: any, replacer: any[], space: string | number): string; } +>stringify : { (value: any, replacer?: (key: string, value: any) => any, space?: string | number): string; (value: any, replacer?: (number | string)[], space?: string | number): string; } >l : T[] static maximum(dit: typeof ListWrapper, list: T[], predicate: (t: T) => number): T { diff --git a/tests/baselines/reference/stringLiteralTypesAsTags01.types b/tests/baselines/reference/stringLiteralTypesAsTags01.types index 9f273cf93a9..7b8ac0a8c02 100644 --- a/tests/baselines/reference/stringLiteralTypesAsTags01.types +++ b/tests/baselines/reference/stringLiteralTypesAsTags01.types @@ -116,6 +116,6 @@ if (!hasKind(x, "B")) { } else { let d = x; ->d : nothing ->x : nothing +>d : never +>x : never } diff --git a/tests/baselines/reference/stringLiteralTypesAsTags02.types b/tests/baselines/reference/stringLiteralTypesAsTags02.types index bcfa74ef55f..290402cd299 100644 --- a/tests/baselines/reference/stringLiteralTypesAsTags02.types +++ b/tests/baselines/reference/stringLiteralTypesAsTags02.types @@ -110,6 +110,6 @@ if (!hasKind(x, "B")) { } else { let d = x; ->d : nothing ->x : nothing +>d : never +>x : never } diff --git a/tests/baselines/reference/stringLiteralTypesAsTags03.types b/tests/baselines/reference/stringLiteralTypesAsTags03.types index c7fdfc7152e..9d004982dda 100644 --- a/tests/baselines/reference/stringLiteralTypesAsTags03.types +++ b/tests/baselines/reference/stringLiteralTypesAsTags03.types @@ -113,6 +113,6 @@ if (!hasKind(x, "B")) { } else { let d = x; ->d : nothing ->x : nothing +>d : never +>x : never } diff --git a/tests/baselines/reference/subtypeRelationForNever.js b/tests/baselines/reference/subtypeRelationForNever.js new file mode 100644 index 00000000000..a50cbc9436b --- /dev/null +++ b/tests/baselines/reference/subtypeRelationForNever.js @@ -0,0 +1,16 @@ +//// [subtypeRelationForNever.ts] +function fail(message: string) : never { throw new Error(message); } +function withFew(values: a[], haveFew: (values: a[]) => r, haveNone: (reason: string) => r): r { + return values.length > 0 ? haveFew(values) : haveNone('No values.'); +} +function id(value: a) : a { return value; } +const result = withFew([1, 2, 3], id, fail); // expected result is number[] + + +//// [subtypeRelationForNever.js] +function fail(message) { throw new Error(message); } +function withFew(values, haveFew, haveNone) { + return values.length > 0 ? haveFew(values) : haveNone('No values.'); +} +function id(value) { return value; } +var result = withFew([1, 2, 3], id, fail); // expected result is number[] diff --git a/tests/baselines/reference/subtypeRelationForNever.symbols b/tests/baselines/reference/subtypeRelationForNever.symbols new file mode 100644 index 00000000000..76555a8ff15 --- /dev/null +++ b/tests/baselines/reference/subtypeRelationForNever.symbols @@ -0,0 +1,44 @@ +=== tests/cases/compiler/subtypeRelationForNever.ts === +function fail(message: string) : never { throw new Error(message); } +>fail : Symbol(fail, Decl(subtypeRelationForNever.ts, 0, 0)) +>message : Symbol(message, Decl(subtypeRelationForNever.ts, 0, 14)) +>Error : Symbol(Error, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>message : Symbol(message, Decl(subtypeRelationForNever.ts, 0, 14)) + +function withFew(values: a[], haveFew: (values: a[]) => r, haveNone: (reason: string) => r): r { +>withFew : Symbol(withFew, Decl(subtypeRelationForNever.ts, 0, 68)) +>a : Symbol(a, Decl(subtypeRelationForNever.ts, 1, 17)) +>r : Symbol(r, Decl(subtypeRelationForNever.ts, 1, 19)) +>values : Symbol(values, Decl(subtypeRelationForNever.ts, 1, 23)) +>a : Symbol(a, Decl(subtypeRelationForNever.ts, 1, 17)) +>haveFew : Symbol(haveFew, Decl(subtypeRelationForNever.ts, 1, 35)) +>values : Symbol(values, Decl(subtypeRelationForNever.ts, 1, 46)) +>a : Symbol(a, Decl(subtypeRelationForNever.ts, 1, 17)) +>r : Symbol(r, Decl(subtypeRelationForNever.ts, 1, 19)) +>haveNone : Symbol(haveNone, Decl(subtypeRelationForNever.ts, 1, 64)) +>reason : Symbol(reason, Decl(subtypeRelationForNever.ts, 1, 76)) +>r : Symbol(r, Decl(subtypeRelationForNever.ts, 1, 19)) +>r : Symbol(r, Decl(subtypeRelationForNever.ts, 1, 19)) + + return values.length > 0 ? haveFew(values) : haveNone('No values.'); +>values.length : Symbol(Array.length, Decl(lib.d.ts, --, --)) +>values : Symbol(values, Decl(subtypeRelationForNever.ts, 1, 23)) +>length : Symbol(Array.length, Decl(lib.d.ts, --, --)) +>haveFew : Symbol(haveFew, Decl(subtypeRelationForNever.ts, 1, 35)) +>values : Symbol(values, Decl(subtypeRelationForNever.ts, 1, 23)) +>haveNone : Symbol(haveNone, Decl(subtypeRelationForNever.ts, 1, 64)) +} +function id(value: a) : a { return value; } +>id : Symbol(id, Decl(subtypeRelationForNever.ts, 3, 1)) +>a : Symbol(a, Decl(subtypeRelationForNever.ts, 4, 12)) +>value : Symbol(value, Decl(subtypeRelationForNever.ts, 4, 15)) +>a : Symbol(a, Decl(subtypeRelationForNever.ts, 4, 12)) +>a : Symbol(a, Decl(subtypeRelationForNever.ts, 4, 12)) +>value : Symbol(value, Decl(subtypeRelationForNever.ts, 4, 15)) + +const result = withFew([1, 2, 3], id, fail); // expected result is number[] +>result : Symbol(result, Decl(subtypeRelationForNever.ts, 5, 5)) +>withFew : Symbol(withFew, Decl(subtypeRelationForNever.ts, 0, 68)) +>id : Symbol(id, Decl(subtypeRelationForNever.ts, 3, 1)) +>fail : Symbol(fail, Decl(subtypeRelationForNever.ts, 0, 0)) + diff --git a/tests/baselines/reference/subtypeRelationForNever.types b/tests/baselines/reference/subtypeRelationForNever.types new file mode 100644 index 00000000000..c577ee07862 --- /dev/null +++ b/tests/baselines/reference/subtypeRelationForNever.types @@ -0,0 +1,56 @@ +=== tests/cases/compiler/subtypeRelationForNever.ts === +function fail(message: string) : never { throw new Error(message); } +>fail : (message: string) => never +>message : string +>new Error(message) : Error +>Error : ErrorConstructor +>message : string + +function withFew(values: a[], haveFew: (values: a[]) => r, haveNone: (reason: string) => r): r { +>withFew : (values: a[], haveFew: (values: a[]) => r, haveNone: (reason: string) => r) => r +>a : a +>r : r +>values : a[] +>a : a +>haveFew : (values: a[]) => r +>values : a[] +>a : a +>r : r +>haveNone : (reason: string) => r +>reason : string +>r : r +>r : r + + return values.length > 0 ? haveFew(values) : haveNone('No values.'); +>values.length > 0 ? haveFew(values) : haveNone('No values.') : r +>values.length > 0 : boolean +>values.length : number +>values : a[] +>length : number +>0 : number +>haveFew(values) : r +>haveFew : (values: a[]) => r +>values : a[] +>haveNone('No values.') : r +>haveNone : (reason: string) => r +>'No values.' : string +} +function id(value: a) : a { return value; } +>id : (value: a) => a +>a : a +>value : a +>a : a +>a : a +>value : a + +const result = withFew([1, 2, 3], id, fail); // expected result is number[] +>result : number[] +>withFew([1, 2, 3], id, fail) : number[] +>withFew : (values: a[], haveFew: (values: a[]) => r, haveNone: (reason: string) => r) => r +>[1, 2, 3] : number[] +>1 : number +>2 : number +>3 : number +>id : (value: a) => a +>fail : (message: string) => never + diff --git a/tests/baselines/reference/throwInEnclosingStatements.types b/tests/baselines/reference/throwInEnclosingStatements.types index 32f0fb093bc..c0a43ca38f5 100644 --- a/tests/baselines/reference/throwInEnclosingStatements.types +++ b/tests/baselines/reference/throwInEnclosingStatements.types @@ -9,7 +9,7 @@ function fn(x) { } (x: T) => { throw x; } ->(x: T) => { throw x; } : (x: T) => void +>(x: T) => { throw x; } : (x: T) => never >T : T >x : T >T : T diff --git a/tests/baselines/reference/tsxUnionTypeComponent1.js b/tests/baselines/reference/tsxUnionTypeComponent1.js new file mode 100644 index 00000000000..11b41a2aa3d --- /dev/null +++ b/tests/baselines/reference/tsxUnionTypeComponent1.js @@ -0,0 +1,56 @@ +//// [file.tsx] + +import React = require('react'); + +interface ComponentProps { + AnyComponent: React.StatelessComponent | React.ComponentClass; +} + +class MyComponent extends React.Component { + render() { + const { AnyComponent } = this.props; + return (); + } +} + +// Stateless Component As Props + }/> + +// Component Class as Props +class MyButtonComponent extends React.Component<{},{}> { +} + + + + + +//// [file.js] +"use strict"; +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +var React = require('react'); +var MyComponent = (function (_super) { + __extends(MyComponent, _super); + function MyComponent() { + _super.apply(this, arguments); + } + MyComponent.prototype.render = function () { + var AnyComponent = this.props.AnyComponent; + return (React.createElement(AnyComponent, null)); + }; + return MyComponent; +}(React.Component)); +// Stateless Component As Props +React.createElement(MyComponent, {AnyComponent: function () { return React.createElement("button", null, "test"); }}); +// Component Class as Props +var MyButtonComponent = (function (_super) { + __extends(MyButtonComponent, _super); + function MyButtonComponent() { + _super.apply(this, arguments); + } + return MyButtonComponent; +}(React.Component)); +React.createElement(MyComponent, {AnyComponent: MyButtonComponent}); diff --git a/tests/baselines/reference/tsxUnionTypeComponent1.symbols b/tests/baselines/reference/tsxUnionTypeComponent1.symbols new file mode 100644 index 00000000000..73f7180f3b8 --- /dev/null +++ b/tests/baselines/reference/tsxUnionTypeComponent1.symbols @@ -0,0 +1,58 @@ +=== tests/cases/conformance/jsx/file.tsx === + +import React = require('react'); +>React : Symbol(React, Decl(file.tsx, 0, 0)) + +interface ComponentProps { +>ComponentProps : Symbol(ComponentProps, Decl(file.tsx, 1, 32)) + + AnyComponent: React.StatelessComponent | React.ComponentClass; +>AnyComponent : Symbol(ComponentProps.AnyComponent, Decl(file.tsx, 3, 26)) +>React : Symbol(React, Decl(file.tsx, 0, 0)) +>StatelessComponent : Symbol(React.StatelessComponent, Decl(react.d.ts, 139, 5)) +>React : Symbol(React, Decl(file.tsx, 0, 0)) +>ComponentClass : Symbol(React.ComponentClass, Decl(react.d.ts, 150, 5)) +} + +class MyComponent extends React.Component { +>MyComponent : Symbol(MyComponent, Decl(file.tsx, 5, 1)) +>React.Component : Symbol(React.Component, Decl(react.d.ts, 114, 55)) +>React : Symbol(React, Decl(file.tsx, 0, 0)) +>Component : Symbol(React.Component, Decl(react.d.ts, 114, 55)) +>ComponentProps : Symbol(ComponentProps, Decl(file.tsx, 1, 32)) + + render() { +>render : Symbol(MyComponent.render, Decl(file.tsx, 7, 63)) + + const { AnyComponent } = this.props; +>AnyComponent : Symbol(AnyComponent, Decl(file.tsx, 9, 15)) +>this.props : Symbol(React.Component.props, Decl(react.d.ts, 122, 30)) +>this : Symbol(MyComponent, Decl(file.tsx, 5, 1)) +>props : Symbol(React.Component.props, Decl(react.d.ts, 122, 30)) + + return (); +>AnyComponent : Symbol(AnyComponent, Decl(file.tsx, 9, 15)) + } +} + +// Stateless Component As Props + }/> +>MyComponent : Symbol(MyComponent, Decl(file.tsx, 5, 1)) +>AnyComponent : Symbol(ComponentProps.AnyComponent, Decl(file.tsx, 3, 26)) +>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 913, 43)) +>button : Symbol(JSX.IntrinsicElements.button, Decl(react.d.ts, 913, 43)) + +// Component Class as Props +class MyButtonComponent extends React.Component<{},{}> { +>MyButtonComponent : Symbol(MyButtonComponent, Decl(file.tsx, 15, 57)) +>React.Component : Symbol(React.Component, Decl(react.d.ts, 114, 55)) +>React : Symbol(React, Decl(file.tsx, 0, 0)) +>Component : Symbol(React.Component, Decl(react.d.ts, 114, 55)) +} + + +>MyComponent : Symbol(MyComponent, Decl(file.tsx, 5, 1)) +>AnyComponent : Symbol(ComponentProps.AnyComponent, Decl(file.tsx, 3, 26)) +>MyButtonComponent : Symbol(MyButtonComponent, Decl(file.tsx, 15, 57)) + + diff --git a/tests/baselines/reference/tsxUnionTypeComponent1.types b/tests/baselines/reference/tsxUnionTypeComponent1.types new file mode 100644 index 00000000000..ce6e3bbeecc --- /dev/null +++ b/tests/baselines/reference/tsxUnionTypeComponent1.types @@ -0,0 +1,64 @@ +=== tests/cases/conformance/jsx/file.tsx === + +import React = require('react'); +>React : typeof React + +interface ComponentProps { +>ComponentProps : ComponentProps + + AnyComponent: React.StatelessComponent | React.ComponentClass; +>AnyComponent : React.StatelessComponent | React.ComponentClass +>React : any +>StatelessComponent : React.StatelessComponent

+>React : any +>ComponentClass : React.ComponentClass

+} + +class MyComponent extends React.Component { +>MyComponent : MyComponent +>React.Component : React.Component +>React : typeof React +>Component : typeof React.Component +>ComponentProps : ComponentProps + + render() { +>render : () => JSX.Element + + const { AnyComponent } = this.props; +>AnyComponent : React.StatelessComponent | React.ComponentClass +>this.props : ComponentProps +>this : this +>props : ComponentProps + + return (); +>() : JSX.Element +> : JSX.Element +>AnyComponent : React.StatelessComponent | React.ComponentClass + } +} + +// Stateless Component As Props + }/> +> }/> : JSX.Element +>MyComponent : typeof MyComponent +>AnyComponent : any +>() => : () => JSX.Element +> : JSX.Element +>button : any +>button : any + +// Component Class as Props +class MyButtonComponent extends React.Component<{},{}> { +>MyButtonComponent : MyButtonComponent +>React.Component : React.Component<{}, {}> +>React : typeof React +>Component : typeof React.Component +} + + +> : JSX.Element +>MyComponent : typeof MyComponent +>AnyComponent : any +>MyButtonComponent : typeof MyButtonComponent + + diff --git a/tests/baselines/reference/tsxUnionTypeComponent2.errors.txt b/tests/baselines/reference/tsxUnionTypeComponent2.errors.txt new file mode 100644 index 00000000000..e5a5c77da4c --- /dev/null +++ b/tests/baselines/reference/tsxUnionTypeComponent2.errors.txt @@ -0,0 +1,17 @@ +tests/cases/conformance/jsx/file.tsx(8,2): error TS2604: JSX element type 'X' does not have any construct or call signatures. + + +==== tests/cases/conformance/jsx/file.tsx (1 errors) ==== + + import React = require('react'); + + type Invalid1 = React.ComponentClass | string; + + const X: Invalid1 = "Should fail to construct"; + + ; + ~ +!!! error TS2604: JSX element type 'X' does not have any construct or call signatures. + + + \ No newline at end of file diff --git a/tests/baselines/reference/tsxUnionTypeComponent2.js b/tests/baselines/reference/tsxUnionTypeComponent2.js new file mode 100644 index 00000000000..18e86eb8b4c --- /dev/null +++ b/tests/baselines/reference/tsxUnionTypeComponent2.js @@ -0,0 +1,18 @@ +//// [file.tsx] + +import React = require('react'); + +type Invalid1 = React.ComponentClass | string; + +const X: Invalid1 = "Should fail to construct"; + +; + + + + +//// [file.js] +"use strict"; +var React = require('react'); +var X = "Should fail to construct"; +React.createElement(X, null); diff --git a/tests/baselines/reference/typeGuardOfFormTypeOfBoolean.types b/tests/baselines/reference/typeGuardOfFormTypeOfBoolean.types index 564c6ceaa72..7a4b279b572 100644 --- a/tests/baselines/reference/typeGuardOfFormTypeOfBoolean.types +++ b/tests/baselines/reference/typeGuardOfFormTypeOfBoolean.types @@ -121,7 +121,7 @@ if (typeof strOrNum === "boolean") { let z1: {} = strOrNum; // {} >z1 : {} ->strOrNum : nothing +>strOrNum : never } else { let z2: string | number = strOrNum; // string | number @@ -215,6 +215,6 @@ if (typeof strOrNum !== "boolean") { else { let z2: {} = strOrNum; // {} >z2 : {} ->strOrNum : nothing +>strOrNum : never } diff --git a/tests/baselines/reference/typeGuardOfFormTypeOfNumber.types b/tests/baselines/reference/typeGuardOfFormTypeOfNumber.types index 51326c68cd9..c6a5615e75a 100644 --- a/tests/baselines/reference/typeGuardOfFormTypeOfNumber.types +++ b/tests/baselines/reference/typeGuardOfFormTypeOfNumber.types @@ -120,7 +120,7 @@ if (typeof strOrBool === "number") { let y1: {} = strOrBool; // {} >y1 : {} ->strOrBool : nothing +>strOrBool : never } else { let y2: string | boolean = strOrBool; // string | boolean @@ -212,6 +212,6 @@ if (typeof strOrBool !== "number") { else { let y2: {} = strOrBool; // {} >y2 : {} ->strOrBool : nothing +>strOrBool : never } diff --git a/tests/baselines/reference/typeGuardOfFormTypeOfOther.types b/tests/baselines/reference/typeGuardOfFormTypeOfOther.types index c8c150b5a3b..8e42a8e0d8e 100644 --- a/tests/baselines/reference/typeGuardOfFormTypeOfOther.types +++ b/tests/baselines/reference/typeGuardOfFormTypeOfOther.types @@ -105,7 +105,7 @@ if (typeof strOrNumOrBool === "Object") { let q1: {} = strOrNumOrBool; // {} >q1 : {} ->strOrNumOrBool : nothing +>strOrNumOrBool : never } else { let q2: string | number | boolean = strOrNumOrBool; // string | number | boolean @@ -178,6 +178,6 @@ if (typeof strOrNumOrBool !== "Object") { else { let q2: {} = strOrNumOrBool; // {} >q2 : {} ->strOrNumOrBool : nothing +>strOrNumOrBool : never } diff --git a/tests/baselines/reference/typeGuardOfFormTypeOfString.types b/tests/baselines/reference/typeGuardOfFormTypeOfString.types index 23c789fb987..971109215f7 100644 --- a/tests/baselines/reference/typeGuardOfFormTypeOfString.types +++ b/tests/baselines/reference/typeGuardOfFormTypeOfString.types @@ -121,7 +121,7 @@ if (typeof numOrBool === "string") { let x1: {} = numOrBool; // {} >x1 : {} ->numOrBool : nothing +>numOrBool : never } else { let x2: number | boolean = numOrBool; // number | boolean @@ -214,6 +214,6 @@ if (typeof numOrBool !== "string") { else { let x2: {} = numOrBool; // {} >x2 : {} ->numOrBool : nothing +>numOrBool : never } diff --git a/tests/baselines/reference/typeGuardsAsAssertions.types b/tests/baselines/reference/typeGuardsAsAssertions.types index 6ec84ada1f4..82e92a72d8d 100644 --- a/tests/baselines/reference/typeGuardsAsAssertions.types +++ b/tests/baselines/reference/typeGuardsAsAssertions.types @@ -259,7 +259,7 @@ function f4() { >"boolean" : string x; // nothing (boolean not in declared type) ->x : nothing +>x : never } x; // undefined >x : undefined diff --git a/tests/baselines/reference/typeGuardsWithInstanceOf.errors.txt b/tests/baselines/reference/typeGuardsWithInstanceOf.errors.txt index 662d3697159..dfcb8a598da 100644 --- a/tests/baselines/reference/typeGuardsWithInstanceOf.errors.txt +++ b/tests/baselines/reference/typeGuardsWithInstanceOf.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOf.ts(7,20): error TS2339: Property 'global' does not exist on type 'nothing'. +tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOf.ts(7,20): error TS2339: Property 'global' does not exist on type 'never'. ==== tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOf.ts (1 errors) ==== @@ -10,5 +10,5 @@ tests/cases/conformance/expressions/typeGuards/typeGuardsWithInstanceOf.ts(7,20) result = result2; } else if (!result.global) { ~~~~~~ -!!! error TS2339: Property 'global' does not exist on type 'nothing'. +!!! error TS2339: Property 'global' does not exist on type 'never'. } \ No newline at end of file diff --git a/tests/baselines/reference/typeReferenceDirectives11.errors.txt b/tests/baselines/reference/typeReferenceDirectives11.errors.txt new file mode 100644 index 00000000000..45433bf3b83 --- /dev/null +++ b/tests/baselines/reference/typeReferenceDirectives11.errors.txt @@ -0,0 +1,18 @@ +/mod1.ts(2,17): error TS6131: Cannot compile modules using option 'out' unless the '--module' flag is 'amd' or 'system'. + + +==== /mod2.ts (0 errors) ==== + + import {foo} from "./mod1"; + export const bar = foo(); +==== /types/lib/index.d.ts (0 errors) ==== + + + interface Lib { x } + +==== /mod1.ts (1 errors) ==== + + export function foo(): Lib { return {x: 1} } + ~~~ +!!! error TS6131: Cannot compile modules using option 'out' unless the '--module' flag is 'amd' or 'system'. + \ No newline at end of file diff --git a/tests/baselines/reference/typeReferenceDirectives11.symbols b/tests/baselines/reference/typeReferenceDirectives11.symbols deleted file mode 100644 index 875bb2a0900..00000000000 --- a/tests/baselines/reference/typeReferenceDirectives11.symbols +++ /dev/null @@ -1,23 +0,0 @@ -=== /mod2.ts === - -import {foo} from "./mod1"; ->foo : Symbol(foo, Decl(mod2.ts, 1, 8)) - -export const bar = foo(); ->bar : Symbol(bar, Decl(mod2.ts, 2, 12)) ->foo : Symbol(foo, Decl(mod2.ts, 1, 8)) - -=== /types/lib/index.d.ts === - - -interface Lib { x } ->Lib : Symbol(Lib, Decl(index.d.ts, 0, 0)) ->x : Symbol(Lib.x, Decl(index.d.ts, 2, 15)) - -=== /mod1.ts === - -export function foo(): Lib { return {x: 1} } ->foo : Symbol(foo, Decl(mod1.ts, 0, 0)) ->Lib : Symbol(Lib, Decl(index.d.ts, 0, 0)) ->x : Symbol(x, Decl(mod1.ts, 1, 37)) - diff --git a/tests/baselines/reference/typeReferenceDirectives11.types b/tests/baselines/reference/typeReferenceDirectives11.types deleted file mode 100644 index 93d80b7988a..00000000000 --- a/tests/baselines/reference/typeReferenceDirectives11.types +++ /dev/null @@ -1,26 +0,0 @@ -=== /mod2.ts === - -import {foo} from "./mod1"; ->foo : () => Lib - -export const bar = foo(); ->bar : Lib ->foo() : Lib ->foo : () => Lib - -=== /types/lib/index.d.ts === - - -interface Lib { x } ->Lib : Lib ->x : any - -=== /mod1.ts === - -export function foo(): Lib { return {x: 1} } ->foo : () => Lib ->Lib : Lib ->{x: 1} : { x: number; } ->x : number ->1 : number - diff --git a/tests/baselines/reference/typeReferenceDirectives12.errors.txt b/tests/baselines/reference/typeReferenceDirectives12.errors.txt new file mode 100644 index 00000000000..c1b3a6126b2 --- /dev/null +++ b/tests/baselines/reference/typeReferenceDirectives12.errors.txt @@ -0,0 +1,37 @@ +/main.ts(1,14): error TS6131: Cannot compile modules using option 'out' unless the '--module' flag is 'amd' or 'system'. + + +==== /mod2.ts (0 errors) ==== + import { Cls } from "./main"; + import "./mod1"; + + export const cls = Cls; + export const foo = new Cls().foo(); + export const bar = Cls.bar(); +==== /types/lib/index.d.ts (0 errors) ==== + + + interface Lib { x } + +==== /main.ts (1 errors) ==== + export class Cls { + ~~~ +!!! error TS6131: Cannot compile modules using option 'out' unless the '--module' flag is 'amd' or 'system'. + x + } + +==== /mod1.ts (0 errors) ==== + /// + + import {Cls} from "./main"; + Cls.prototype.foo = function() { return undefined; } + + declare module "./main" { + interface Cls { + foo(): Lib; + } + namespace Cls { + function bar(): Lib; + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/typeReferenceDirectives12.symbols b/tests/baselines/reference/typeReferenceDirectives12.symbols deleted file mode 100644 index 30b24c39284..00000000000 --- a/tests/baselines/reference/typeReferenceDirectives12.symbols +++ /dev/null @@ -1,68 +0,0 @@ -=== /mod2.ts === -import { Cls } from "./main"; ->Cls : Symbol(Cls, Decl(mod2.ts, 0, 8)) - -import "./mod1"; - -export const cls = Cls; ->cls : Symbol(cls, Decl(mod2.ts, 3, 12)) ->Cls : Symbol(Cls, Decl(mod2.ts, 0, 8)) - -export const foo = new Cls().foo(); ->foo : Symbol(foo, Decl(mod2.ts, 4, 12)) ->new Cls().foo : Symbol(Cls.foo, Decl(mod1.ts, 6, 19)) ->Cls : Symbol(Cls, Decl(mod2.ts, 0, 8)) ->foo : Symbol(Cls.foo, Decl(mod1.ts, 6, 19)) - -export const bar = Cls.bar(); ->bar : Symbol(bar, Decl(mod2.ts, 5, 12)) ->Cls.bar : Symbol(Cls.bar, Decl(mod1.ts, 9, 19)) ->Cls : Symbol(Cls, Decl(mod2.ts, 0, 8)) ->bar : Symbol(Cls.bar, Decl(mod1.ts, 9, 19)) - -=== /types/lib/index.d.ts === - - -interface Lib { x } ->Lib : Symbol(Lib, Decl(index.d.ts, 0, 0)) ->x : Symbol(Lib.x, Decl(index.d.ts, 2, 15)) - -=== /main.ts === -export class Cls { ->Cls : Symbol(Cls, Decl(main.ts, 0, 0), Decl(mod1.ts, 5, 25), Decl(mod1.ts, 8, 5)) - - x ->x : Symbol(Cls.x, Decl(main.ts, 0, 18)) -} - -=== /mod1.ts === -/// - -import {Cls} from "./main"; ->Cls : Symbol(Cls, Decl(mod1.ts, 2, 8)) - -Cls.prototype.foo = function() { return undefined; } ->Cls.prototype.foo : Symbol(Cls.foo, Decl(mod1.ts, 6, 19)) ->Cls.prototype : Symbol(Cls.prototype) ->Cls : Symbol(Cls, Decl(mod1.ts, 2, 8)) ->prototype : Symbol(Cls.prototype) ->foo : Symbol(Cls.foo, Decl(mod1.ts, 6, 19)) ->undefined : Symbol(undefined) - -declare module "./main" { - interface Cls { ->Cls : Symbol(Cls, Decl(main.ts, 0, 0), Decl(mod1.ts, 5, 25), Decl(mod1.ts, 8, 5)) - - foo(): Lib; ->foo : Symbol(Cls.foo, Decl(mod1.ts, 6, 19)) ->Lib : Symbol(Lib, Decl(index.d.ts, 0, 0)) - } - namespace Cls { ->Cls : Symbol(Cls, Decl(main.ts, 0, 0), Decl(mod1.ts, 5, 25), Decl(mod1.ts, 8, 5)) - - function bar(): Lib; ->bar : Symbol(bar, Decl(mod1.ts, 9, 19)) ->Lib : Symbol(Lib, Decl(index.d.ts, 0, 0)) - } -} - diff --git a/tests/baselines/reference/typeReferenceDirectives12.types b/tests/baselines/reference/typeReferenceDirectives12.types deleted file mode 100644 index bd429b91f1c..00000000000 --- a/tests/baselines/reference/typeReferenceDirectives12.types +++ /dev/null @@ -1,73 +0,0 @@ -=== /mod2.ts === -import { Cls } from "./main"; ->Cls : typeof Cls - -import "./mod1"; - -export const cls = Cls; ->cls : typeof Cls ->Cls : typeof Cls - -export const foo = new Cls().foo(); ->foo : Lib ->new Cls().foo() : Lib ->new Cls().foo : () => Lib ->new Cls() : Cls ->Cls : typeof Cls ->foo : () => Lib - -export const bar = Cls.bar(); ->bar : Lib ->Cls.bar() : Lib ->Cls.bar : () => Lib ->Cls : typeof Cls ->bar : () => Lib - -=== /types/lib/index.d.ts === - - -interface Lib { x } ->Lib : Lib ->x : any - -=== /main.ts === -export class Cls { ->Cls : Cls - - x ->x : any -} - -=== /mod1.ts === -/// - -import {Cls} from "./main"; ->Cls : typeof Cls - -Cls.prototype.foo = function() { return undefined; } ->Cls.prototype.foo = function() { return undefined; } : () => any ->Cls.prototype.foo : () => Lib ->Cls.prototype : Cls ->Cls : typeof Cls ->prototype : Cls ->foo : () => Lib ->function() { return undefined; } : () => any ->undefined : undefined - -declare module "./main" { - interface Cls { ->Cls : Cls - - foo(): Lib; ->foo : () => Lib ->Lib : Lib - } - namespace Cls { ->Cls : typeof Cls - - function bar(): Lib; ->bar : () => Lib ->Lib : Lib - } -} - diff --git a/tests/baselines/reference/umd-augmentation-3.symbols b/tests/baselines/reference/umd-augmentation-3.symbols index 4923c17954f..3193e83cd19 100644 --- a/tests/baselines/reference/umd-augmentation-3.symbols +++ b/tests/baselines/reference/umd-augmentation-3.symbols @@ -44,7 +44,7 @@ export = M2D; >M2D : Symbol(M2D, Decl(index.d.ts, 3, 13)) declare namespace M2D { ->M2D : Symbol(, Decl(index.d.ts, 3, 13), Decl(math2d-augment.d.ts, 0, 33)) +>M2D : Symbol(Math2d, Decl(index.d.ts, 3, 13), Decl(math2d-augment.d.ts, 0, 33)) interface Point { >Point : Symbol(Point, Decl(index.d.ts, 5, 23)) diff --git a/tests/baselines/reference/umd-augmentation-3.types b/tests/baselines/reference/umd-augmentation-3.types index 09a383dc881..854ebceff37 100644 --- a/tests/baselines/reference/umd-augmentation-3.types +++ b/tests/baselines/reference/umd-augmentation-3.types @@ -54,7 +54,7 @@ export = M2D; >M2D : typeof M2D declare namespace M2D { ->M2D : typeof +>M2D : typeof Math2d interface Point { >Point : Point diff --git a/tests/baselines/reference/umd5.errors.txt b/tests/baselines/reference/umd5.errors.txt index 19529ce195a..9628ad738db 100644 --- a/tests/baselines/reference/umd5.errors.txt +++ b/tests/baselines/reference/umd5.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/externalModules/a.ts(6,9): error TS2304: Cannot find name 'Foo'. +tests/cases/conformance/externalModules/a.ts(6,9): error TS2686: Identifier 'Foo' must be imported from a module ==== tests/cases/conformance/externalModules/a.ts (1 errors) ==== @@ -9,7 +9,7 @@ tests/cases/conformance/externalModules/a.ts(6,9): error TS2304: Cannot find nam // should error let z = Foo; ~~~ -!!! error TS2304: Cannot find name 'Foo'. +!!! error TS2686: Identifier 'Foo' must be imported from a module ==== tests/cases/conformance/externalModules/foo.d.ts (0 errors) ==== diff --git a/tests/baselines/reference/umd5.js b/tests/baselines/reference/umd5.js index d054daf93fd..f8e2321a0f1 100644 --- a/tests/baselines/reference/umd5.js +++ b/tests/baselines/reference/umd5.js @@ -23,4 +23,4 @@ Bar.fn(); var x; var y = x.n; // should error -var z = Foo; +var z = exports.Foo; diff --git a/tests/cases/compiler/destructureOptionalParameter.ts b/tests/cases/compiler/destructureOptionalParameter.ts new file mode 100644 index 00000000000..55744b6de0a --- /dev/null +++ b/tests/cases/compiler/destructureOptionalParameter.ts @@ -0,0 +1,25 @@ +// @strictNullChecks: true +// @declaration: true + +declare function f1({ a, b }?: { a: number, b: string }): void; + +function f2({ a, b }: { a: number, b: number } = { a: 0, b: 0 }) { + a; + b; +} + +// Repro from #8681 + +interface Type { t: void } +interface QueryMetadata { q: void } + +interface QueryMetadataFactory { + (selector: Type | string, {descendants, read}?: { + descendants?: boolean; + read?: any; + }): ParameterDecorator; + new (selector: Type | string, {descendants, read}?: { + descendants?: boolean; + read?: any; + }): QueryMetadata; +} diff --git a/tests/cases/compiler/doubleUnderStringLiteralAssignability.ts b/tests/cases/compiler/doubleUnderStringLiteralAssignability.ts new file mode 100644 index 00000000000..4a1ae75164c --- /dev/null +++ b/tests/cases/compiler/doubleUnderStringLiteralAssignability.ts @@ -0,0 +1,4 @@ +var shouldBeOk: '__dunder' = '__dunder'; +var bad: '__dunder' = 'no_dunder'; +var okok: '___thunder' = '___thunder'; +var alsoOk: '_sunder' = '_sunder'; diff --git a/tests/cases/compiler/excessPropertyErrorForFunctionTypes.ts b/tests/cases/compiler/excessPropertyErrorForFunctionTypes.ts new file mode 100644 index 00000000000..d86d6ddb77c --- /dev/null +++ b/tests/cases/compiler/excessPropertyErrorForFunctionTypes.ts @@ -0,0 +1,4 @@ +type FunctionType = () => any; +type DoesntWork = { a: number, c: number } | FunctionType; + +let doesntWork: DoesntWork = { a: 1, c: 2, d: 3 } \ No newline at end of file diff --git a/tests/cases/compiler/fallbackToBindingPatternForTypeInference.ts b/tests/cases/compiler/fallbackToBindingPatternForTypeInference.ts new file mode 100644 index 00000000000..9aa979c1020 --- /dev/null +++ b/tests/cases/compiler/fallbackToBindingPatternForTypeInference.ts @@ -0,0 +1,6 @@ +declare function trans(f: (x: T) => string): number; +trans(({a}) => a); +trans(([b,c]) => 'foo'); +trans(({d: [e,f]}) => 'foo'); +trans(([{g},{h}]) => 'foo'); +trans(({a, b = 10}) => a); diff --git a/tests/cases/compiler/genericInheritedDefaultConstructors.ts b/tests/cases/compiler/genericInheritedDefaultConstructors.ts new file mode 100644 index 00000000000..9b0bb94e877 --- /dev/null +++ b/tests/cases/compiler/genericInheritedDefaultConstructors.ts @@ -0,0 +1,9 @@ +// repro from #8166 +interface Constructor { + new(...args: any[]): T; + prototype: T; +} + +class A { a: U; } +class B extends A { b: V; } +var c:Constructor> = B; // shouldn't error here diff --git a/tests/cases/compiler/instantiateCrossFileMerge.ts b/tests/cases/compiler/instantiateCrossFileMerge.ts new file mode 100644 index 00000000000..00f5ce22faf --- /dev/null +++ b/tests/cases/compiler/instantiateCrossFileMerge.ts @@ -0,0 +1,8 @@ +// @filename: first.ts +declare class P { + constructor(callback: (resolve: (value: R) => void) => void); +} + +// @filename: second.ts +interface P { } +new P(r => { r('foo') }); diff --git a/tests/cases/compiler/json.stringify.ts b/tests/cases/compiler/json.stringify.ts new file mode 100644 index 00000000000..58400f859df --- /dev/null +++ b/tests/cases/compiler/json.stringify.ts @@ -0,0 +1,8 @@ +// @strictNullChecks: true + +var value = null; +JSON.stringify(value, undefined, 2); +JSON.stringify(value, null, 2); +JSON.stringify(value, ["a", 1], 2); +JSON.stringify(value, (k) => undefined, 2); +JSON.stringify(value, undefined, 2); \ No newline at end of file diff --git a/tests/cases/compiler/outModuleConcatUnspecifiedModuleKind.ts b/tests/cases/compiler/outModuleConcatUnspecifiedModuleKind.ts new file mode 100644 index 00000000000..976a47e2f78 --- /dev/null +++ b/tests/cases/compiler/outModuleConcatUnspecifiedModuleKind.ts @@ -0,0 +1,8 @@ +// @target: ES5 +// @outFile: out.js + +// @Filename: a.ts +export class A { } // module + +// @Filename: b.ts +var x = 0; // global \ No newline at end of file diff --git a/tests/cases/compiler/subtypeRelationForNever.ts b/tests/cases/compiler/subtypeRelationForNever.ts new file mode 100644 index 00000000000..f886d3937ae --- /dev/null +++ b/tests/cases/compiler/subtypeRelationForNever.ts @@ -0,0 +1,6 @@ +function fail(message: string) : never { throw new Error(message); } +function withFew(values: a[], haveFew: (values: a[]) => r, haveNone: (reason: string) => r): r { + return values.length > 0 ? haveFew(values) : haveNone('No values.'); +} +function id(value: a) : a { return value; } +const result = withFew([1, 2, 3], id, fail); // expected result is number[] diff --git a/tests/cases/conformance/classes/constructorDeclarations/constructorParameters/readonlyConstructorAssignment.ts b/tests/cases/conformance/classes/constructorDeclarations/constructorParameters/readonlyConstructorAssignment.ts new file mode 100644 index 00000000000..aeecf085f2f --- /dev/null +++ b/tests/cases/conformance/classes/constructorDeclarations/constructorParameters/readonlyConstructorAssignment.ts @@ -0,0 +1,38 @@ +// Tests that readonly parameter properties behave like regular readonly properties + +class A { + constructor(readonly x: number) { + this.x = 0; + } +} + +class B extends A { + constructor(x: number) { + super(x); + // Fails, x is readonly + this.x = 1; + } +} + +class C extends A { + // This is the usual behavior of readonly properties: + // if one is redeclared in a base class, then it can be assigned to. + constructor(readonly x: number) { + super(x); + this.x = 1; + } +} + +class D { + constructor(private readonly x: number) { + this.x = 0; + } +} + +// Fails, can't redeclare readonly property +class E extends D { + constructor(readonly x: number) { + super(x); + this.x = 1; + } +} diff --git a/tests/cases/conformance/jsx/tsxUnionTypeComponent1.tsx b/tests/cases/conformance/jsx/tsxUnionTypeComponent1.tsx new file mode 100644 index 00000000000..b9e50357185 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxUnionTypeComponent1.tsx @@ -0,0 +1,27 @@ +// @filename: file.tsx +// @jsx: react +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface ComponentProps { + AnyComponent: React.StatelessComponent | React.ComponentClass; +} + +class MyComponent extends React.Component { + render() { + const { AnyComponent } = this.props; + return (); + } +} + +// Stateless Component As Props + }/> + +// Component Class as Props +class MyButtonComponent extends React.Component<{},{}> { +} + + + diff --git a/tests/cases/conformance/jsx/tsxUnionTypeComponent2.tsx b/tests/cases/conformance/jsx/tsxUnionTypeComponent2.tsx new file mode 100644 index 00000000000..39807219661 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxUnionTypeComponent2.tsx @@ -0,0 +1,14 @@ +// @filename: file.tsx +// @jsx: react +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +type Invalid1 = React.ComponentClass | string; + +const X: Invalid1 = "Should fail to construct"; + +; + + diff --git a/tests/cases/conformance/types/intersection/intersectionTypeMembers.ts b/tests/cases/conformance/types/intersection/intersectionTypeMembers.ts index a8c92647f47..a350c657f61 100644 --- a/tests/cases/conformance/types/intersection/intersectionTypeMembers.ts +++ b/tests/cases/conformance/types/intersection/intersectionTypeMembers.ts @@ -25,3 +25,20 @@ type F2 = (x: number) => number; var f: F1 & F2; var s = f("hello"); var n = f(42); + +interface D { + nested: { doublyNested: { d: string; }, different: { e: number } }; +} +interface E { + nested: { doublyNested: { f: string; }, other: {g: number } }; +} +const de: D & E = { + nested: { + doublyNested: { + d: 'yes', + f: 'no' + }, + different: { e: 12 }, + other: { g: 101 } + } +} diff --git a/tests/cases/conformance/types/namedTypes/optionalMethods.ts b/tests/cases/conformance/types/namedTypes/optionalMethods.ts new file mode 100644 index 00000000000..932521425f9 --- /dev/null +++ b/tests/cases/conformance/types/namedTypes/optionalMethods.ts @@ -0,0 +1,58 @@ +// @strictNullChecks: true +// @declaration: true + +interface Foo { + a: number; + b?: number; + f(): number; + g?(): number; +} + +function test1(x: Foo) { + x.a; + x.b; + x.f; + x.g; + let f1 = x.f(); + let g1 = x.g && x.g(); + let g2 = x.g ? x.g() : 0; +} + +class Bar { + a: number; + b?: number; + c? = 2; + constructor(public d?: number, public e = 10) {} + f() { + return 1; + } + g?(): number; // Body of optional method can be omitted + h?() { + return 2; + } +} + +function test2(x: Bar) { + x.a; + x.b; + x.c; + x.d; + x.e; + x.f; + x.g; + let f1 = x.f(); + let g1 = x.g && x.g(); + let g2 = x.g ? x.g() : 0; + let h1 = x.h && x.h(); + let h2 = x.h ? x.h() : 0; +} + +class Base { + a?: number; + f?(): number; +} + +class Derived extends Base { + a = 1; + f(): number { return 1; } +} diff --git a/tests/cases/conformance/types/never/neverType.ts b/tests/cases/conformance/types/never/neverType.ts new file mode 100644 index 00000000000..d58471d62a9 --- /dev/null +++ b/tests/cases/conformance/types/never/neverType.ts @@ -0,0 +1,93 @@ +// @strictNullChecks: true +// @declaration: true + + +function error(message: string): never { + throw new Error(message); +} + +function errorVoid(message: string) { + throw new Error(message); +} + +function fail() { + return error("Something failed"); +} + +function failOrThrow(shouldFail: boolean) { + if (shouldFail) { + return fail(); + } + throw new Error(); +} + +function infiniteLoop1() { + while (true) { + } +} + +function infiniteLoop2(): never { + while (true) { + } +} + +function move1(direction: "up" | "down") { + switch (direction) { + case "up": + return 1; + case "down": + return -1; + } + return error("Should never get here"); +} + +function move2(direction: "up" | "down") { + return direction === "up" ? 1 : + direction === "down" ? -1 : + error("Should never get here"); +} + +function check(x: T | undefined) { + return x || error("Undefined value"); +} + +class C { + void1() { + throw new Error(); + } + void2() { + while (true) {} + } + never1(): never { + throw new Error(); + } + never2(): never { + while (true) {} + } +} + +function f1(x: string | number) { + if (typeof x === "boolean") { + x; // never + } +} + +function f2(x: string | number) { + while (true) { + if (typeof x === "boolean") { + return x; // never + } + } +} + +function test(cb: () => string) { + let s = cb(); + return s; +} + +let errorCallback = () => error("Error callback"); + +test(() => "hello"); +test(() => fail()); +test(() => { throw new Error(); }) +test(errorCallback); diff --git a/tests/cases/conformance/types/never/neverTypeErrors1.ts b/tests/cases/conformance/types/never/neverTypeErrors1.ts new file mode 100644 index 00000000000..8d78e863098 --- /dev/null +++ b/tests/cases/conformance/types/never/neverTypeErrors1.ts @@ -0,0 +1,20 @@ +function f1() { + let x: never; + x = 1; + x = "abc"; + x = false; + x = undefined; + x = null; + x = {}; +} + +function f2(): never { + return; +} + +function f3(): never { + return 1; +} + +function f4(): never { +} \ No newline at end of file diff --git a/tests/cases/conformance/types/never/neverTypeErrors2.ts b/tests/cases/conformance/types/never/neverTypeErrors2.ts new file mode 100644 index 00000000000..635d1c9c6ad --- /dev/null +++ b/tests/cases/conformance/types/never/neverTypeErrors2.ts @@ -0,0 +1,22 @@ +// @strictNullChecks: true + +function f1() { + let x: never; + x = 1; + x = "abc"; + x = false; + x = undefined; + x = null; + x = {}; +} + +function f2(): never { + return; +} + +function f3(): never { + return 1; +} + +function f4(): never { +} \ No newline at end of file diff --git a/tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts b/tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts index f80c3a5952d..7c05ff09e56 100644 --- a/tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts +++ b/tests/cases/conformance/types/objectTypeLiteral/methodSignatures/objectTypesWithOptionalProperties.ts @@ -9,7 +9,7 @@ interface I { } class C { - x?: number; // error + x?: number; // ok } interface I2 { @@ -17,7 +17,7 @@ interface I2 { } class C2 { - x?: T; // error + x?: T; // ok } var b = { diff --git a/tests/cases/fourslash/declarationExpressions.ts b/tests/cases/fourslash/declarationExpressions.ts new file mode 100644 index 00000000000..7f2a64d8ecf --- /dev/null +++ b/tests/cases/fourslash/declarationExpressions.ts @@ -0,0 +1,30 @@ +/// + +////class A {} +////const B = class C { +//// public x; +////}; +////function D() {} +////const E = function F() {} +////console.log(function() {}, class {}); // Expression with no name should have no effect. +////console.log(function inner() {}); +////String(function fun() { class cls { public prop; } })); + +function navExact(name: string, kind: string) { + verify.navigationItemsListContains(name, kind, name, "exact"); +} + +navExact("A", "class"); +navExact("B", "const"); +navExact("C", "class"); +navExact("x", "property"); + +navExact("D", "function"); +navExact("E", "const"); +navExact("F", "function") + +navExact("inner", "function"); + +navExact("fun", "function"); +navExact("cls", "class"); +navExact("prop", "property"); diff --git a/tests/cases/fourslash/deleteClassWithEnumPresent.ts b/tests/cases/fourslash/deleteClassWithEnumPresent.ts index 2b7a02ec717..29f7c61e259 100644 --- a/tests/cases/fourslash/deleteClassWithEnumPresent.ts +++ b/tests/cases/fourslash/deleteClassWithEnumPresent.ts @@ -5,4 +5,4 @@ goTo.marker(); edit.deleteAtCaret('class Bar { }'.length); -verify.getScriptLexicalStructureListContains('Foo', 'enum', 'tests/cases/fourslash/deleteClassWithEnumPresent.ts', ''); \ No newline at end of file +verify.navigationBarContains('Foo', 'enum', 'tests/cases/fourslash/deleteClassWithEnumPresent.ts', ''); \ No newline at end of file diff --git a/tests/cases/fourslash/formatArrayLiteralExpression.ts b/tests/cases/fourslash/formatArrayLiteralExpression.ts new file mode 100644 index 00000000000..9c2224f8414 --- /dev/null +++ b/tests/cases/fourslash/formatArrayLiteralExpression.ts @@ -0,0 +1,45 @@ +/// + +////export let Things = [{ +//// Hat: 'hat', /*1*/ +//// Glove: 'glove', +//// Umbrella: 'umbrella' +////},{/*2*/ +//// Salad: 'salad', /*3*/ +//// Burrito: 'burrito', +//// Pie: 'pie' +//// }];/*4*/ +//// +////export let Things2 = [ +////{ +//// Hat: 'hat', /*5*/ +//// Glove: 'glove', +//// Umbrella: 'umbrella' +////}/*6*/, +//// { +//// Salad: 'salad', /*7*/ +//// Burrito: ['burrito', 'carne asada', 'tinga de res', 'tinga de pollo'], /*8*/ +//// Pie: 'pie' +//// }];/*9*/ + +format.document(); + +goTo.marker("1"); +verify.currentLineContentIs(" Hat: 'hat',"); +goTo.marker("2"); +verify.currentLineContentIs("}, {"); +goTo.marker("3"); +verify.currentLineContentIs(" Salad: 'salad',"); +goTo.marker("4"); +verify.currentLineContentIs("}];"); + +goTo.marker("5"); +verify.currentLineContentIs(" Hat: 'hat',"); +goTo.marker("6"); +verify.currentLineContentIs(" },"); +goTo.marker("7"); +verify.currentLineContentIs(" Salad: 'salad',"); +goTo.marker("8"); +verify.currentLineContentIs(" Burrito: ['burrito', 'carne asada', 'tinga de res', 'tinga de pollo'],"); +goTo.marker("9"); +verify.currentLineContentIs(" }];"); diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index 48d69f0a85e..08883f163f2 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -175,8 +175,9 @@ declare namespace FourSlashInterface { DocCommentTemplate(expectedText: string, expectedOffset: number, empty?: boolean): void; noDocCommentTemplate(): void; - getScriptLexicalStructureListCount(count: number): void; - getScriptLexicalStructureListContains(name: string, kind: string, fileName?: string, parentName?: string, isAdditionalSpan?: boolean, markerPosition?: number): void; + navigationBarCount(count: number): void; + navigationBarContains(name: string, kind: string, fileName?: string, parentName?: string, isAdditionalSpan?: boolean, markerPosition?: number): void; + navigationBarChildItem(parent: string, text: string, kind: string): void; navigationItemsListCount(count: number, searchValue: string, matchKind?: string): void; navigationItemsListContains(name: string, kind: string, searchValue: string, matchKind: string, fileName?: string, parentName?: string): void; occurrencesAtPositionContains(range: Range, isWriteAccess?: boolean): void; @@ -236,6 +237,7 @@ declare namespace FourSlashInterface { printBreakpointAtCurrentLocation(): void; printNameOrDottedNameSpans(pos: number): void; printErrorList(): void; + printNavigationBar(): void; printNavigationItems(searchValue?: string): void; printScriptLexicalStructureItems(): void; printReferences(): void; diff --git a/tests/cases/fourslash/getNavigationBarItems.ts b/tests/cases/fourslash/getNavigationBarItems.ts new file mode 100644 index 00000000000..8e9b8de5b05 --- /dev/null +++ b/tests/cases/fourslash/getNavigationBarItems.ts @@ -0,0 +1,11 @@ +/// + +////class C { +//// foo; +//// ["bar"]: string; +////} + +verify.navigationBarCount(3); +verify.navigationBarContains("C", "class"); +verify.navigationBarChildItem("C", "[\"bar\"]", "property"); +verify.navigationBarChildItem("C", "foo", "property"); diff --git a/tests/cases/fourslash/hoverOverComment.ts b/tests/cases/fourslash/hoverOverComment.ts new file mode 100644 index 00000000000..a9549a932f7 --- /dev/null +++ b/tests/cases/fourslash/hoverOverComment.ts @@ -0,0 +1,11 @@ +/// + +////export function f() {} +//////foo +/////**///moo + +goTo.marker(); +verify.quickInfoIs(""); +verify.verifyDefinitionsName("", ""); +verify.typeDefinitionCountIs(0); +verify.referencesCountIs(0); diff --git a/tests/cases/fourslash/javascriptModules25.ts b/tests/cases/fourslash/javascriptModules25.ts new file mode 100644 index 00000000000..aceada8af21 --- /dev/null +++ b/tests/cases/fourslash/javascriptModules25.ts @@ -0,0 +1,13 @@ +/// +// @allowJs: true + +// @Filename: mod.js +//// function foo() { return {a: true}; } +//// module.exports.a = foo; + +// @Filename: app.js +//// import * as mod from "./mod" +//// mod./**/ + +goTo.marker(); +verify.completionListContains('a'); diff --git a/tests/cases/fourslash/navbar_const.ts b/tests/cases/fourslash/navbar_const.ts index 6c0738747f3..5d8b42607c8 100644 --- a/tests/cases/fourslash/navbar_const.ts +++ b/tests/cases/fourslash/navbar_const.ts @@ -1,9 +1,9 @@ /// -//// {| "itemName": "c", "kind": "const", "parentName": "" |}const c = 0; +//// {| "itemName": "c", "kind": "const", "parentName": "" |}const c = 0; test.markers().forEach(marker => { - verify.getScriptLexicalStructureListContains( + verify.navigationBarContains( marker.data.itemName, marker.data.kind, marker.fileName, diff --git a/tests/cases/fourslash/navbar_contains-no-duplicates.ts b/tests/cases/fourslash/navbar_contains-no-duplicates.ts index 49d570ed770..ec86e4b2f20 100644 --- a/tests/cases/fourslash/navbar_contains-no-duplicates.ts +++ b/tests/cases/fourslash/navbar_contains-no-duplicates.ts @@ -1,6 +1,6 @@ /// //// {| "itemName": "Windows", "kind": "module", "parentName": "" |}declare module Windows { -//// {| "itemName": "Foundation", "kind": "module", "parentName": "Windows" |}export module Foundation { +//// {| "itemName": "Foundation", "kind": "module", "parentName": "" |}export module Foundation { //// export var {| "itemName": "A", "kind": "var" |}A; //// {| "itemName": "Test", "kind": "class" |}export class Test { //// {| "itemName": "wow", "kind": "method" |}public wow(); @@ -9,7 +9,7 @@ //// } //// //// {| "itemName": "Windows", "kind": "module", "parentName": "", "isAdditionalRange": true |}declare module Windows { -//// {| "itemName": "Foundation", "kind": "module", "parentName": "Windows", "isAdditionalRange": true |}export module Foundation { +//// {| "itemName": "Foundation", "kind": "module", "parentName": "", "isAdditionalRange": true |}export module Foundation { //// export var {| "itemName": "B", "kind": "var" |}B; //// {| "itemName": "Test", "kind": "module" |}export module Test { //// {| "itemName": "Boom", "kind": "function" |}export function Boom(): number; @@ -29,7 +29,7 @@ test.markers().forEach(marker => { if (marker.data) { - verify.getScriptLexicalStructureListContains( + verify.navigationBarContains( marker.data.itemName, marker.data.kind, marker.fileName, @@ -38,4 +38,4 @@ test.markers().forEach(marker => { marker.position); } }); -verify.getScriptLexicalStructureListCount(12); \ No newline at end of file +verify.navigationBarCount(12); \ No newline at end of file diff --git a/tests/cases/fourslash/navbar_exportDefault.ts b/tests/cases/fourslash/navbar_exportDefault.ts index a8fe854fa28..a56eeb8b226 100644 --- a/tests/cases/fourslash/navbar_exportDefault.ts +++ b/tests/cases/fourslash/navbar_exportDefault.ts @@ -14,7 +14,7 @@ test.markers().forEach(marker => { goTo.file(marker.fileName); - verify.getScriptLexicalStructureListContains( + verify.navigationBarContains( marker.data.itemName, marker.data.kind, marker.fileName, diff --git a/tests/cases/fourslash/navbar_let.ts b/tests/cases/fourslash/navbar_let.ts index 841382abc53..c3b125526ef 100644 --- a/tests/cases/fourslash/navbar_let.ts +++ b/tests/cases/fourslash/navbar_let.ts @@ -3,7 +3,7 @@ //// {| "itemName": "c", "kind": "let", "parentName": "" |}let c = 0; test.markers().forEach(marker => { - verify.getScriptLexicalStructureListContains( + verify.navigationBarContains( marker.data.itemName, marker.data.kind, marker.fileName, diff --git a/tests/cases/fourslash/navigateToImport.ts b/tests/cases/fourslash/navigateToImport.ts new file mode 100644 index 00000000000..7247d443c4f --- /dev/null +++ b/tests/cases/fourslash/navigateToImport.ts @@ -0,0 +1,14 @@ +/// + +// @Filename: library.ts +////export function foo() {} +////export function bar() {} +// @Filename: user.ts +////import {foo, bar as baz} from './library'; + +verify.navigationItemsListCount(1, "foo"); +verify.navigationItemsListContains("foo", "function", "foo", "exact"); +verify.navigationItemsListCount(1, "bar"); +verify.navigationItemsListContains("bar", "function", "bar", "exact"); +verify.navigationItemsListCount(1, "baz"); +verify.navigationItemsListContains("baz", "alias", "baz", "exact"); diff --git a/tests/cases/fourslash/navigationBarItemsBindingPatterns.ts b/tests/cases/fourslash/navigationBarItemsBindingPatterns.ts index 2b363bfad3b..afac15daacc 100644 --- a/tests/cases/fourslash/navigationBarItemsBindingPatterns.ts +++ b/tests/cases/fourslash/navigationBarItemsBindingPatterns.ts @@ -6,16 +6,16 @@ ////const bar1, [c, d] ////var {e, x: [f, g]} = {a:1, x:[]}; -verify.getScriptLexicalStructureListCount(12); // global (1) + variable declarations (4) + binding patterns (7) -verify.getScriptLexicalStructureListContains("foo", "var"); -verify.getScriptLexicalStructureListContains("bar", "var"); -verify.getScriptLexicalStructureListContains("foo1", "let") -verify.getScriptLexicalStructureListContains("a", "let"); -verify.getScriptLexicalStructureListContains("b", "let"); -verify.getScriptLexicalStructureListContains("bar1", "const"); -verify.getScriptLexicalStructureListContains("c", "const"); -verify.getScriptLexicalStructureListContains("d", "const"); -verify.getScriptLexicalStructureListContains("e", "var"); -verify.getScriptLexicalStructureListContains("f", "var"); -verify.getScriptLexicalStructureListContains("g", "var"); +verify.navigationBarCount(12); // global (1) + variable declarations (4) + binding patterns (7) +verify.navigationBarContains("foo", "var"); +verify.navigationBarContains("bar", "var"); +verify.navigationBarContains("foo1", "let") +verify.navigationBarContains("a", "let"); +verify.navigationBarContains("b", "let"); +verify.navigationBarContains("bar1", "const"); +verify.navigationBarContains("c", "const"); +verify.navigationBarContains("d", "const"); +verify.navigationBarContains("e", "var"); +verify.navigationBarContains("f", "var"); +verify.navigationBarContains("g", "var"); diff --git a/tests/cases/fourslash/navigationBarItemsBindingPatternsInConstructor.ts b/tests/cases/fourslash/navigationBarItemsBindingPatternsInConstructor.ts index c496a0281e3..84c1d09efe7 100644 --- a/tests/cases/fourslash/navigationBarItemsBindingPatternsInConstructor.ts +++ b/tests/cases/fourslash/navigationBarItemsBindingPatternsInConstructor.ts @@ -11,4 +11,4 @@ //// } ////} -verify.getScriptLexicalStructureListCount(6); // 2x(class + field + constructor) +verify.navigationBarCount(6); // 2x(class + field + constructor) diff --git a/tests/cases/fourslash/navigationBarItemsEmptyConstructors.ts b/tests/cases/fourslash/navigationBarItemsEmptyConstructors.ts index 570b2f7518c..2255d29e293 100644 --- a/tests/cases/fourslash/navigationBarItemsEmptyConstructors.ts +++ b/tests/cases/fourslash/navigationBarItemsEmptyConstructors.ts @@ -5,8 +5,8 @@ //// } ////} -verify.getScriptLexicalStructureListContains("Test", "class"); -verify.getScriptLexicalStructureListContains("constructor", "constructor"); +verify.navigationBarContains("Test", "class"); +verify.navigationBarContains("constructor", "constructor"); // no other items -verify.getScriptLexicalStructureListCount(2); \ No newline at end of file +verify.navigationBarCount(2); \ No newline at end of file diff --git a/tests/cases/fourslash/navigationBarItemsExports.ts b/tests/cases/fourslash/navigationBarItemsExports.ts index d9db125b9b0..b88b60d0efb 100644 --- a/tests/cases/fourslash/navigationBarItemsExports.ts +++ b/tests/cases/fourslash/navigationBarItemsExports.ts @@ -11,8 +11,8 @@ test.markers().forEach((marker) => { if (marker.data) { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); } }); -verify.getScriptLexicalStructureListCount(4); +verify.navigationBarCount(4); diff --git a/tests/cases/fourslash/navigationBarItemsFunctions.ts b/tests/cases/fourslash/navigationBarItemsFunctions.ts index b683790c60d..0948923c046 100644 --- a/tests/cases/fourslash/navigationBarItemsFunctions.ts +++ b/tests/cases/fourslash/navigationBarItemsFunctions.ts @@ -17,7 +17,7 @@ ////} test.markers().forEach((marker) => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(8); // 4 functions + global. Note: there are 8 because of the functions show up at the top level and as child items. +verify.navigationBarCount(8); // 4 functions + global. Note: there are 8 because of the functions show up at the top level and as child items. diff --git a/tests/cases/fourslash/navigationBarItemsFunctionsBroken.ts b/tests/cases/fourslash/navigationBarItemsFunctionsBroken.ts index 7846a9723d1..e8bf1d33fc3 100644 --- a/tests/cases/fourslash/navigationBarItemsFunctionsBroken.ts +++ b/tests/cases/fourslash/navigationBarItemsFunctionsBroken.ts @@ -6,7 +6,7 @@ ////} test.markers().forEach((marker) => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(3); // and 'f'. \ No newline at end of file +verify.navigationBarCount(3); // and 'f'. \ No newline at end of file diff --git a/tests/cases/fourslash/navigationBarItemsFunctionsBroken2.ts b/tests/cases/fourslash/navigationBarItemsFunctionsBroken2.ts index 50bf91e02d6..9576d4dd789 100644 --- a/tests/cases/fourslash/navigationBarItemsFunctionsBroken2.ts +++ b/tests/cases/fourslash/navigationBarItemsFunctionsBroken2.ts @@ -7,7 +7,7 @@ ////} test.markers().forEach((marker) => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(3); // and 'f' \ No newline at end of file +verify.navigationBarCount(3); // and 'f' \ No newline at end of file diff --git a/tests/cases/fourslash/navigationBarItemsImports.ts b/tests/cases/fourslash/navigationBarItemsImports.ts index 8b0d02bd9f5..53619da310a 100644 --- a/tests/cases/fourslash/navigationBarItemsImports.ts +++ b/tests/cases/fourslash/navigationBarItemsImports.ts @@ -18,8 +18,8 @@ test.markers().forEach((marker) => { if (marker.data) { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); } }); -verify.getScriptLexicalStructureListCount(9); +verify.navigationBarCount(9); diff --git a/tests/cases/fourslash/navigationBarItemsInsideMethodsAndConstructors.ts b/tests/cases/fourslash/navigationBarItemsInsideMethodsAndConstructors.ts index 4dcca43af35..22ae359c737 100644 --- a/tests/cases/fourslash/navigationBarItemsInsideMethodsAndConstructors.ts +++ b/tests/cases/fourslash/navigationBarItemsInsideMethodsAndConstructors.ts @@ -2,11 +2,11 @@ ////class Class { //// constructor() { -//// {| "itemName": "LocalFunctionInConstructor", "kind": "function", "parentName": "Class"|}function LocalFunctionInConstructor() { +//// {| "itemName": "LocalFunctionInConstructor", "kind": "function", "parentName": "constructor"|}function LocalFunctionInConstructor() { //// //// } //// -//// {| "itemName": "LocalInterfaceInConstrcutor", "kind": "interface", "parentName": "foo"|}interface LocalInterfaceInConstrcutor { +//// {| "itemName": "LocalInterfaceInConstrcutor", "kind": "interface", "parentName": ""|}interface LocalInterfaceInConstrcutor { //// } //// //// enum LocalEnumInConstructor { @@ -15,17 +15,17 @@ //// } //// //// method() { -//// {| "itemName": "LocalFunctionInMethod", "kind": "function", "parentName": "foo"|}function LocalFunctionInMethod() { -//// {| "itemName": "LocalFunctionInLocalFunctionInMethod", "kind": "function", "parentName": "bar"|}function LocalFunctionInLocalFunctionInMethod() { +//// {| "itemName": "LocalFunctionInMethod", "kind": "function", "parentName": "method"|}function LocalFunctionInMethod() { +//// {| "itemName": "LocalFunctionInLocalFunctionInMethod", "kind": "function", "parentName": "LocalFunctionInMethod"|}function LocalFunctionInLocalFunctionInMethod() { //// //// } //// } //// -//// {| "itemName": "LocalInterfaceInMethod", "kind": "interface", "parentName": "foo"|}interface LocalInterfaceInMethod { +//// {| "itemName": "LocalInterfaceInMethod", "kind": "interface", "parentName": ""|}interface LocalInterfaceInMethod { //// } //// -//// enum LocalEnumInMethod { -//// {| "itemName": "LocalEnumMemberInMethod", "kind": "property", "parentName": "foo"|}LocalEnumMemberInMethod, +//// {| "itemName": "LocalEnumInMethod", "kind": "enum", "parentName": ""|}enum LocalEnumInMethod { +//// {| "itemName": "LocalEnumMemberInMethod", "kind": "property", "parentName": "LocalEnumInMethod"|}LocalEnumMemberInMethod, //// } //// } //// @@ -35,8 +35,8 @@ ////} test.markers().forEach((marker) => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); // no other items -verify.getScriptLexicalStructureListCount(17); +verify.navigationBarCount(17); diff --git a/tests/cases/fourslash/navigationBarItemsItems.ts b/tests/cases/fourslash/navigationBarItemsItems.ts index 67e14fe1009..10dd8beb8f3 100644 --- a/tests/cases/fourslash/navigationBarItemsItems.ts +++ b/tests/cases/fourslash/navigationBarItemsItems.ts @@ -13,28 +13,28 @@ ////{| "itemName": "Shapes", "kind": "module", "parentName": "" |}module Shapes { //// //// // Class -//// {| "itemName": "Point", "kind": "class", "parentName": "Shapes" |}export class Point implements IPoint { -//// {| "itemName": "constructor", "kind": "constructor", "parentName": "Shapes.Point" |}constructor (public x: number, public y: number) { } +//// {| "itemName": "Point", "kind": "class", "parentName": "" |}export class Point implements IPoint { +//// {| "itemName": "constructor", "kind": "constructor", "parentName": "Point" |}constructor (public x: number, public y: number) { } //// //// // Instance member -//// {| "itemName": "getDist", "kind": "method", "parentName": "Shapes.Point" |}getDist() { return Math.sqrt(this.x * this.x + this.y * this.y); } +//// {| "itemName": "getDist", "kind": "method", "parentName": "Point" |}getDist() { return Math.sqrt(this.x * this.x + this.y * this.y); } //// //// // Getter -//// {| "itemName": "value", "kind": "getter", "parentName": "Shapes.Point" |}get value(): number { return 0; } +//// {| "itemName": "value", "kind": "getter", "parentName": "Point" |}get value(): number { return 0; } //// //// // Setter -//// {| "itemName": "value", "kind": "setter", "parentName": "Shapes.Point" |}set value(newValue: number) { return; } +//// {| "itemName": "value", "kind": "setter", "parentName": "Point" |}set value(newValue: number) { return; } //// //// // Static member -//// {| "itemName": "origin", "kind": "property", "parentName": "Shapes.Point" |}static origin = new Point(0, 0); +//// {| "itemName": "origin", "kind": "property", "parentName": "Point" |}static origin = new Point(0, 0); //// //// // Static method -//// {| "itemName": "getOrigin", "kind": "method", "parentName": "Shapes.Point" |}private static getOrigin() { return Point.origin;} +//// {| "itemName": "getOrigin", "kind": "method", "parentName": "Point" |}private static getOrigin() { return Point.origin;} //// } //// -//// {| "itemName": "Values", "kind": "enum", "parentName": "Shapes" |}enum Values { +//// {| "itemName": "Values", "kind": "enum", "parentName": "" |}enum Values { //// value1, -//// {| "itemName": "value2", "kind": "property", "parentName": "Shapes.Values" |}value2, +//// {| "itemName": "value2", "kind": "property", "parentName": "Values" |}value2, //// value3, //// } ////} @@ -45,8 +45,8 @@ test.markers().forEach((marker) => { if (marker.data) { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); } }); -verify.getScriptLexicalStructureListCount(23); +verify.navigationBarCount(23); diff --git a/tests/cases/fourslash/navigationBarItemsItems2.ts b/tests/cases/fourslash/navigationBarItemsItems2.ts index 3b94260ddbd..d4ffde54051 100644 --- a/tests/cases/fourslash/navigationBarItemsItems2.ts +++ b/tests/cases/fourslash/navigationBarItemsItems2.ts @@ -8,5 +8,5 @@ edit.insertLine("module A"); edit.insert("export class "); // should not crash -verify.getScriptLexicalStructureListCount(2); +verify.navigationBarCount(2); diff --git a/tests/cases/fourslash/navigationBarItemsItemsContainsNoAnonymousFunctions.ts b/tests/cases/fourslash/navigationBarItemsItemsContainsNoAnonymousFunctions.ts index b7430ad03de..dac6e96ab93 100644 --- a/tests/cases/fourslash/navigationBarItemsItemsContainsNoAnonymousFunctions.ts +++ b/tests/cases/fourslash/navigationBarItemsItemsContainsNoAnonymousFunctions.ts @@ -30,15 +30,15 @@ ////} goTo.marker("file1"); -verify.getScriptLexicalStructureListCount(0); +verify.navigationBarCount(0); goTo.marker("file2"); -verify.getScriptLexicalStructureListContains("", "module"); -verify.getScriptLexicalStructureListContains("x", "var"); -verify.getScriptLexicalStructureListCount(2); +verify.navigationBarContains("", "module"); +verify.navigationBarContains("x", "var"); +verify.navigationBarCount(2); goTo.marker("file3"); -verify.getScriptLexicalStructureListContains("", "module"); -verify.getScriptLexicalStructureListContains("foo", "function"); -verify.getScriptLexicalStructureListContains("bar", "function"); -verify.getScriptLexicalStructureListCount(5); \ No newline at end of file +verify.navigationBarContains("", "module"); +verify.navigationBarContains("foo", "function"); +verify.navigationBarContains("bar", "function"); +verify.navigationBarCount(5); \ No newline at end of file diff --git a/tests/cases/fourslash/navigationBarItemsItemsExternalModules.ts b/tests/cases/fourslash/navigationBarItemsItemsExternalModules.ts index 550f1aed783..64a595cafb1 100644 --- a/tests/cases/fourslash/navigationBarItemsItemsExternalModules.ts +++ b/tests/cases/fourslash/navigationBarItemsItemsExternalModules.ts @@ -5,7 +5,7 @@ ////} test.markers().forEach((marker) => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(2); // external module node + class + property +verify.navigationBarCount(2); // external module node + class + property diff --git a/tests/cases/fourslash/navigationBarItemsItemsExternalModules2.ts b/tests/cases/fourslash/navigationBarItemsItemsExternalModules2.ts index b0bf6eb3fa2..7c1c32cff76 100644 --- a/tests/cases/fourslash/navigationBarItemsItemsExternalModules2.ts +++ b/tests/cases/fourslash/navigationBarItemsItemsExternalModules2.ts @@ -9,7 +9,7 @@ ////export var x: number; test.markers().forEach((marker) => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(4); // external module node + variable in module + class + property +verify.navigationBarCount(4); // external module node + variable in module + class + property diff --git a/tests/cases/fourslash/navigationBarItemsItemsExternalModules3.ts b/tests/cases/fourslash/navigationBarItemsItemsExternalModules3.ts index 9ef49e38776..6e6dc9871cc 100644 --- a/tests/cases/fourslash/navigationBarItemsItemsExternalModules3.ts +++ b/tests/cases/fourslash/navigationBarItemsItemsExternalModules3.ts @@ -5,11 +5,11 @@ //// {| "itemName": "s", "kind": "property", "parentName": "Bar" |}public s: string; ////} ////{| "itemName": "\"my fil\\\"e\"", "kind": "module" |} -////{| "itemName": "x", "kind": "var", "parentName": "\"file\"" |} +////{| "itemName": "x", "kind": "var", "parentName": "\"my fil\\\"e\"" |} ////export var x: number; test.markers().forEach((marker) => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(4); // external module node + variable in module + class + property +verify.navigationBarCount(4); // external module node + variable in module + class + property diff --git a/tests/cases/fourslash/navigationBarItemsItemsModuleVariables.ts b/tests/cases/fourslash/navigationBarItemsItemsModuleVariables.ts index 85bf609105c..afc1acfb9cb 100644 --- a/tests/cases/fourslash/navigationBarItemsItemsModuleVariables.ts +++ b/tests/cases/fourslash/navigationBarItemsItemsModuleVariables.ts @@ -19,12 +19,12 @@ //// export var z = 0; ////} goTo.marker("file1"); -verify.getScriptLexicalStructureListContains("Module1", "module"); -verify.getScriptLexicalStructureListContains("x", "var"); +verify.navigationBarContains("Module1", "module"); +verify.navigationBarContains("x", "var"); // nothing else should show up -verify.getScriptLexicalStructureListCount(2); +verify.navigationBarCount(2); goTo.marker("file2"); -verify.getScriptLexicalStructureListContains("Module1.SubModule", "module"); -verify.getScriptLexicalStructureListContains("y", "var"); -verify.getScriptLexicalStructureListCount(2); +verify.navigationBarContains("Module1.SubModule", "module"); +verify.navigationBarContains("y", "var"); +verify.navigationBarCount(2); diff --git a/tests/cases/fourslash/navigationBarItemsMissingName1.ts b/tests/cases/fourslash/navigationBarItemsMissingName1.ts index c5282d696f3..98321039c5a 100644 --- a/tests/cases/fourslash/navigationBarItemsMissingName1.ts +++ b/tests/cases/fourslash/navigationBarItemsMissingName1.ts @@ -9,8 +9,8 @@ test.markers().forEach((marker) => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); /// Only have two named elements. -verify.getScriptLexicalStructureListCount(2); +verify.navigationBarCount(2); diff --git a/tests/cases/fourslash/navigationBarItemsMissingName2.ts b/tests/cases/fourslash/navigationBarItemsMissingName2.ts index bf0dc038991..d26aa0b553d 100644 --- a/tests/cases/fourslash/navigationBarItemsMissingName2.ts +++ b/tests/cases/fourslash/navigationBarItemsMissingName2.ts @@ -8,4 +8,4 @@ // The class is unnamed, so its method is not included either. -verify.getScriptLexicalStructureListCount(2); +verify.navigationBarCount(2); diff --git a/tests/cases/fourslash/navigationBarItemsModules.ts b/tests/cases/fourslash/navigationBarItemsModules.ts index a5fc9b641f9..895a9e23a06 100644 --- a/tests/cases/fourslash/navigationBarItemsModules.ts +++ b/tests/cases/fourslash/navigationBarItemsModules.ts @@ -27,9 +27,9 @@ //// ////{| "itemName": "A", "kind": "module" |} ////module A { -//// {| "itemName": "B", "kind": "module", "parentName": "E" |} +//// {| "itemName": "B", "kind": "module", "parentName": "" |} //// module B { -//// {| "itemName": "C", "kind": "module", "parentName": "F" |} +//// {| "itemName": "C", "kind": "module", "parentName": "" |} //// module C { //// {| "itemName": "x", "kind": "var", "parentName": "C" |} //// declare var x; @@ -39,10 +39,10 @@ test.markers().forEach((marker) => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); /// We have 8 module keywords, and 4 var keywords. /// The declarations of A.B.C.x do not get merged, so the 4 vars are independent. /// The two 'A' modules, however, do get merged, so in reality we have 7 modules. -verify.getScriptLexicalStructureListCount(11); +verify.navigationBarCount(11); diff --git a/tests/cases/fourslash/navigationBarItemsMultilineStringIdentifiers.ts b/tests/cases/fourslash/navigationBarItemsMultilineStringIdentifiers.ts index 59eca486b62..8856c4c044a 100644 --- a/tests/cases/fourslash/navigationBarItemsMultilineStringIdentifiers.ts +++ b/tests/cases/fourslash/navigationBarItemsMultilineStringIdentifiers.ts @@ -35,7 +35,7 @@ test.markers().forEach((marker) => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(9); // interface w/ 2 properties, class w/ 2 properties, 3 modules \ No newline at end of file +verify.navigationBarCount(9); // interface w/ 2 properties, class w/ 2 properties, 3 modules \ No newline at end of file diff --git a/tests/cases/fourslash/navigationBarItemsPropertiesDefinedInConstructors.ts b/tests/cases/fourslash/navigationBarItemsPropertiesDefinedInConstructors.ts index adda43066a3..9b3f4aacd9c 100644 --- a/tests/cases/fourslash/navigationBarItemsPropertiesDefinedInConstructors.ts +++ b/tests/cases/fourslash/navigationBarItemsPropertiesDefinedInConstructors.ts @@ -6,10 +6,10 @@ //// } ////} -verify.getScriptLexicalStructureListContains("List", "class"); -verify.getScriptLexicalStructureListContains("constructor", "constructor"); -verify.getScriptLexicalStructureListContains("a", "property"); -verify.getScriptLexicalStructureListContains("b", "property"); +verify.navigationBarContains("List", "class"); +verify.navigationBarContains("constructor", "constructor"); +verify.navigationBarContains("a", "property"); +verify.navigationBarContains("b", "property"); // no other items -verify.getScriptLexicalStructureListCount(4); \ No newline at end of file +verify.navigationBarCount(4); \ No newline at end of file diff --git a/tests/cases/fourslash/navigationBarItemsSymbols1.ts b/tests/cases/fourslash/navigationBarItemsSymbols1.ts index e3dde6738e9..c9df85b3ece 100644 --- a/tests/cases/fourslash/navigationBarItemsSymbols1.ts +++ b/tests/cases/fourslash/navigationBarItemsSymbols1.ts @@ -11,7 +11,7 @@ ////} test.markers().forEach(marker => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(test.markers().length); \ No newline at end of file +verify.navigationBarCount(test.markers().length); \ No newline at end of file diff --git a/tests/cases/fourslash/navigationBarItemsSymbols2.ts b/tests/cases/fourslash/navigationBarItemsSymbols2.ts index d048de895ec..579a6353c13 100644 --- a/tests/cases/fourslash/navigationBarItemsSymbols2.ts +++ b/tests/cases/fourslash/navigationBarItemsSymbols2.ts @@ -9,7 +9,7 @@ ////} test.markers().forEach(marker => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(test.markers().length); \ No newline at end of file +verify.navigationBarCount(test.markers().length); \ No newline at end of file diff --git a/tests/cases/fourslash/navigationBarItemsSymbols3.ts b/tests/cases/fourslash/navigationBarItemsSymbols3.ts index 19f81037559..5677c0b6301 100644 --- a/tests/cases/fourslash/navigationBarItemsSymbols3.ts +++ b/tests/cases/fourslash/navigationBarItemsSymbols3.ts @@ -7,7 +7,7 @@ ////} test.markers().forEach(marker => { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(test.markers().length); \ No newline at end of file +verify.navigationBarCount(test.markers().length); \ No newline at end of file diff --git a/tests/cases/fourslash/navigationBarItemsTypeAlias.ts b/tests/cases/fourslash/navigationBarItemsTypeAlias.ts new file mode 100644 index 00000000000..50923256533 --- /dev/null +++ b/tests/cases/fourslash/navigationBarItemsTypeAlias.ts @@ -0,0 +1,6 @@ +/// + +////type T = number | string; + +verify.navigationBarCount(1); +verify.navigationBarContains("T", "type"); diff --git a/tests/cases/fourslash/navigationItemsInConstructorsExactMatch.ts b/tests/cases/fourslash/navigationItemsInConstructorsExactMatch.ts index 10397813fd0..5c6cf91a40a 100644 --- a/tests/cases/fourslash/navigationItemsInConstructorsExactMatch.ts +++ b/tests/cases/fourslash/navigationItemsInConstructorsExactMatch.ts @@ -2,7 +2,7 @@ ////class Test { //// private search1: number; -//// constructor(public search2: boolean, search3: string) { +//// constructor(public search2: boolean, readonly search3: string, search4: string) { //// } ////} @@ -10,3 +10,4 @@ var searchValue = "search"; verify.navigationItemsListContains("search1", "property", searchValue, "prefix"); verify.navigationItemsListContains("search2", "property", searchValue, "prefix"); +verify.navigationItemsListContains("search3", "property", searchValue, "prefix"); diff --git a/tests/cases/fourslash/quickInfoForContextuallyTypedIife.ts b/tests/cases/fourslash/quickInfoForContextuallyTypedIife.ts new file mode 100644 index 00000000000..50a04876fc9 --- /dev/null +++ b/tests/cases/fourslash/quickInfoForContextuallyTypedIife.ts @@ -0,0 +1,38 @@ +/// + +////(({ q/*1*/, qq/*2*/ }, x/*3*/, { p/*4*/ }) => { +//// var s: number = q/*5*/; +//// var t: number = qq/*6*/; +//// var u: number = p/*7*/; +//// var v: number = x/*8*/; +//// return q; })({ q: 13, qq: 12 }, 1, { p: 14 }); +////((a/*9*/, b/*10*/, c/*11*/) => [a/*12*/,b/*13*/,c/*14*/])("foo", 101, false); + +goTo.marker('1'); +verify.quickInfoIs("var q: number"); +goTo.marker('2'); +verify.quickInfoIs("var qq: number"); +goTo.marker('3'); +verify.quickInfoIs("(parameter) x: number"); +goTo.marker('4'); +verify.quickInfoIs("var p: number"); +goTo.marker('5'); +verify.quickInfoIs("var q: number"); +goTo.marker('6'); +verify.quickInfoIs("var qq: number"); +goTo.marker('7'); +verify.quickInfoIs("var p: number"); +goTo.marker('8'); +verify.quickInfoIs("(parameter) x: number"); +goTo.marker('9'); +verify.quickInfoIs("(parameter) a: string"); +goTo.marker('10'); +verify.quickInfoIs("(parameter) b: number"); +goTo.marker('11'); +verify.quickInfoIs("(parameter) c: boolean"); +goTo.marker('12'); +verify.quickInfoIs("(parameter) a: string"); +goTo.marker('13'); +verify.quickInfoIs("(parameter) b: number"); +goTo.marker('14'); +verify.quickInfoIs("(parameter) c: boolean"); diff --git a/tests/cases/fourslash/server/navbar01.ts b/tests/cases/fourslash/server/navbar01.ts index 82ded5e6f54..ef6ae650eff 100644 --- a/tests/cases/fourslash/server/navbar01.ts +++ b/tests/cases/fourslash/server/navbar01.ts @@ -13,28 +13,28 @@ ////{| "itemName": "Shapes", "kind": "module", "parentName": "" |}module Shapes { //// //// // Class -//// {| "itemName": "Point", "kind": "class", "parentName": "Shapes" |}export class Point implements IPoint { -//// {| "itemName": "constructor", "kind": "constructor", "parentName": "Shapes.Point" |}constructor (public x: number, public y: number) { } +//// {| "itemName": "Point", "kind": "class", "parentName": "" |}export class Point implements IPoint { +//// {| "itemName": "constructor", "kind": "constructor", "parentName": "Point" |}constructor (public x: number, public y: number) { } //// //// // Instance member -//// {| "itemName": "getDist", "kind": "method", "parentName": "Shapes.Point" |}getDist() { return Math.sqrt(this.x * this.x + this.y * this.y); } +//// {| "itemName": "getDist", "kind": "method", "parentName": "Point" |}getDist() { return Math.sqrt(this.x * this.x + this.y * this.y); } //// //// // Getter -//// {| "itemName": "value", "kind": "getter", "parentName": "Shapes.Point" |}get value(): number { return 0; } +//// {| "itemName": "value", "kind": "getter", "parentName": "Point" |}get value(): number { return 0; } //// //// // Setter -//// {| "itemName": "value", "kind": "setter", "parentName": "Shapes.Point" |}set value(newValue: number) { return; } +//// {| "itemName": "value", "kind": "setter", "parentName": "Point" |}set value(newValue: number) { return; } //// //// // Static member -//// {| "itemName": "origin", "kind": "property", "parentName": "Shapes.Point" |}static origin = new Point(0, 0); +//// {| "itemName": "origin", "kind": "property", "parentName": "Point" |}static origin = new Point(0, 0); //// //// // Static method -//// {| "itemName": "getOrigin", "kind": "method", "parentName": "Shapes.Point" |}private static getOrigin() { return Point.origin;} +//// {| "itemName": "getOrigin", "kind": "method", "parentName": "Point" |}private static getOrigin() { return Point.origin;} //// } //// -//// {| "itemName": "Values", "kind": "enum", "parentName": "Shapes" |}enum Values { +//// {| "itemName": "Values", "kind": "enum", "parentName": "" |}enum Values { //// value1, -//// {| "itemName": "value2", "kind": "property", "parentName": "Shapes.Values" |}value2, +//// {| "itemName": "value2", "kind": "property", "parentName": "Values" |}value2, //// value3, //// } ////} @@ -45,8 +45,8 @@ test.markers().forEach((marker) => { if (marker.data) { - verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); + verify.navigationBarContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); } }); -verify.getScriptLexicalStructureListCount(23); +verify.navigationBarCount(23); diff --git a/tests/cases/fourslash/server/projectWithNonExistentFiles.ts b/tests/cases/fourslash/server/projectWithNonExistentFiles.ts new file mode 100644 index 00000000000..ceba136bf96 --- /dev/null +++ b/tests/cases/fourslash/server/projectWithNonExistentFiles.ts @@ -0,0 +1,13 @@ +/// + +// @Filename: a.ts +////export var test = "test String" + +// @Filename: b.ts +////export var test2 = "test String" + +// @Filename: tsconfig.json +////{ "files": ["a.ts", "c.ts", "b.ts"] } + +goTo.file("a.ts"); +verify.ProjectInfo(["lib.d.ts", "a.ts", "b.ts"]) diff --git a/tests/cases/fourslash/shims-pp/getNavigationBarItems.ts b/tests/cases/fourslash/shims-pp/getNavigationBarItems.ts index 6c0738747f3..a2cdb80baef 100644 --- a/tests/cases/fourslash/shims-pp/getNavigationBarItems.ts +++ b/tests/cases/fourslash/shims-pp/getNavigationBarItems.ts @@ -3,7 +3,7 @@ //// {| "itemName": "c", "kind": "const", "parentName": "" |}const c = 0; test.markers().forEach(marker => { - verify.getScriptLexicalStructureListContains( + verify.navigationBarContains( marker.data.itemName, marker.data.kind, marker.fileName, diff --git a/tests/cases/fourslash/shims/getNavigationBarItems.ts b/tests/cases/fourslash/shims/getNavigationBarItems.ts index 6c0738747f3..a2cdb80baef 100644 --- a/tests/cases/fourslash/shims/getNavigationBarItems.ts +++ b/tests/cases/fourslash/shims/getNavigationBarItems.ts @@ -3,7 +3,7 @@ //// {| "itemName": "c", "kind": "const", "parentName": "" |}const c = 0; test.markers().forEach(marker => { - verify.getScriptLexicalStructureListContains( + verify.navigationBarContains( marker.data.itemName, marker.data.kind, marker.fileName, diff --git a/tests/cases/unittests/cachingInServerLSHost.ts b/tests/cases/unittests/cachingInServerLSHost.ts index 58bcd76e246..17de3c6de02 100644 --- a/tests/cases/unittests/cachingInServerLSHost.ts +++ b/tests/cases/unittests/cachingInServerLSHost.ts @@ -1,12 +1,12 @@ /// -module ts { +namespace ts { interface File { name: string; content: string; } - function createDefaultServerHost(fileMap: Map): server.ServerHost { + function createDefaultServerHost(fileMap: Map): server.ServerHost { let existingDirectories: Map = {}; forEachValue(fileMap, v => { let dir = getDirectoryPath(v.name); @@ -54,13 +54,15 @@ module ts { watchFile: (path, callback) => { return { close: () => { } - } + }; }, watchDirectory: (path, callback, recursive?) => { return { close: () => { } - } - } + }; + }, + setTimeout, + clearTimeout }; } @@ -79,8 +81,8 @@ module ts { let projectService = new server.ProjectService(serverHost, logger); let rootScriptInfo = projectService.openFile(rootFile, /* openedByClient */true); let project = projectService.createInferredProject(rootScriptInfo); - project.setProjectOptions( {files: [rootScriptInfo.fileName], compilerOptions: {module: ts.ModuleKind.AMD} } ); - return { + project.setProjectOptions({ files: [rootScriptInfo.fileName], compilerOptions: { module: ts.ModuleKind.AMD } }); + return { project, rootScriptInfo }; @@ -97,22 +99,22 @@ module ts { name: "c:/f1.ts", content: `foo()` }; - + let serverHost = createDefaultServerHost({ [root.name]: root, [imported.name]: imported }); let { project, rootScriptInfo } = createProject(root.name, serverHost); // ensure that imported file was found let diags = project.compilerService.languageService.getSemanticDiagnostics(imported.name); assert.equal(diags.length, 1); - + let originalFileExists = serverHost.fileExists; { // patch fileExists to make sure that disk is not touched serverHost.fileExists = (fileName): boolean => { - assert.isTrue(false, "fileExists should not be called"); + assert.isTrue(false, "fileExists should not be called"); return false; }; - + let newContent = `import {x} from "f1" var x: string = 1;`; rootScriptInfo.editContent(0, rootScriptInfo.content.length, newContent); @@ -128,21 +130,20 @@ module ts { return false; } fileExistsIsCalled = true; - assert.isTrue(fileName.indexOf('/f2.') !== -1); + assert.isTrue(fileName.indexOf("/f2.") !== -1); return originalFileExists.call(serverHost, fileName); }; let newContent = `import {x} from "f2"`; rootScriptInfo.editContent(0, rootScriptInfo.content.length, newContent); - + try { // trigger synchronization to make sure that LSHost will try to find 'f2' module on disk project.compilerService.languageService.getSemanticDiagnostics(imported.name); - assert.isTrue(false, `should not find file '${imported.name}'`) + assert.isTrue(false, `should not find file '${imported.name}'`); } - catch(e) { + catch (e) { assert.isTrue(e.message.indexOf(`Could not find file: '${imported.name}'.`) === 0); } - assert.isTrue(fileExistsIsCalled); } { @@ -150,45 +151,45 @@ module ts { serverHost.fileExists = (fileName): boolean => { if (fileName === "lib.d.ts") { return false; - } + } fileExistsCalled = true; - assert.isTrue(fileName.indexOf('/f1.') !== -1); + assert.isTrue(fileName.indexOf("/f1.") !== -1); return originalFileExists.call(serverHost, fileName); }; - + let newContent = `import {x} from "f1"`; rootScriptInfo.editContent(0, rootScriptInfo.content.length, newContent); project.compilerService.languageService.getSemanticDiagnostics(imported.name); assert.isTrue(fileExistsCalled); - + // setting compiler options discards module resolution cache fileExistsCalled = false; - + let opts = ts.clone(project.projectOptions); opts.compilerOptions = ts.clone(opts.compilerOptions); opts.compilerOptions.target = ts.ScriptTarget.ES5; project.setProjectOptions(opts); - + project.compilerService.languageService.getSemanticDiagnostics(imported.name); assert.isTrue(fileExistsCalled); } }); - + it("loads missing files from disk", () => { let root: File = { - name: 'c:/foo.ts', + name: `c:/foo.ts`, content: `import {x} from "bar"` }; - + let imported: File = { - name: 'c:/bar.d.ts', + name: `c:/bar.d.ts`, content: `export var y = 1` - }; - + }; + let fileMap: Map = { [root.name]: root }; let serverHost = createDefaultServerHost(fileMap); let originalFileExists = serverHost.fileExists; - + let fileExistsCalledForBar = false; serverHost.fileExists = fileName => { if (fileName === "lib.d.ts") { @@ -197,25 +198,25 @@ module ts { if (!fileExistsCalledForBar) { fileExistsCalledForBar = fileName.indexOf("/bar.") !== -1; } - + return originalFileExists.call(serverHost, fileName); }; - + let { project, rootScriptInfo } = createProject(root.name, serverHost); let diags = project.compilerService.languageService.getSemanticDiagnostics(root.name); assert.isTrue(fileExistsCalledForBar, "'fileExists' should be called"); assert.isTrue(diags.length === 1, "one diagnostic expected"); assert.isTrue(typeof diags[0].messageText === "string" && ((diags[0].messageText).indexOf("Cannot find module") === 0), "should be 'cannot find module' message"); - + // assert that import will success once file appear on disk fileMap[imported.name] = imported; fileExistsCalledForBar = false; - rootScriptInfo.editContent(0, rootScriptInfo.content.length, `import {y} from "bar"`) - + rootScriptInfo.editContent(0, rootScriptInfo.content.length, `import {y} from "bar"`); + diags = project.compilerService.languageService.getSemanticDiagnostics(root.name); assert.isTrue(fileExistsCalledForBar, "'fileExists' should be called"); assert.isTrue(diags.length === 0); - }) + }); }); } \ No newline at end of file diff --git a/tests/cases/unittests/session.ts b/tests/cases/unittests/session.ts index ee9742482cd..a90f7d2ec84 100644 --- a/tests/cases/unittests/session.ts +++ b/tests/cases/unittests/session.ts @@ -18,7 +18,9 @@ namespace ts.server { getExecutingFilePath(): string { return void 0; }, getCurrentDirectory(): string { return void 0; }, readDirectory(): string[] { return []; }, - exit(): void {} + exit(): void { }, + setTimeout(callback, ms, ...args) { return 0; }, + clearTimeout(timeoutId) { } }; const mockLogger: Logger = { close(): void {}, diff --git a/tests/cases/unittests/tsconfigParsing.ts b/tests/cases/unittests/tsconfigParsing.ts index ec025e0b210..776d9495e87 100644 --- a/tests/cases/unittests/tsconfigParsing.ts +++ b/tests/cases/unittests/tsconfigParsing.ts @@ -170,5 +170,36 @@ namespace ts { ["/apath/.git/a.ts", "/apath/.b.ts", "/apath/..c.ts"] ) }); + + it("always exclude outDir", () => { + const tsconfigWithoutExclude = + `{ + "compilerOptions": { + "outDir": "bin" + } + }`; + const tsconfigWithExclude = + `{ + "compilerOptions": { + "outDir": "bin" + }, + "exclude": [ "obj" ] + }`; + const rootDir = "/"; + const allFiles = ["/bin/a.ts", "/b.ts"]; + const expectedFiles = ["/b.ts"]; + assertParseFileList(tsconfigWithoutExclude, "tsconfig.json", rootDir, allFiles, expectedFiles); + assertParseFileList(tsconfigWithExclude, "tsconfig.json", rootDir, allFiles, expectedFiles); + }) + + it("implicitly exclude common package folders", () => { + assertParseFileList( + `{}`, + "tsconfig.json", + "/", + ["/node_modules/a.ts", "/bower_components/b.ts", "/jspm_packages/c.ts", "/d.ts", "/folder/e.ts"], + ["/d.ts", "/folder/e.ts"] + ) + }) }); } diff --git a/tests/cases/unittests/versionCache.ts b/tests/cases/unittests/versionCache.ts index c1d283ca8cd..131b40278a7 100644 --- a/tests/cases/unittests/versionCache.ts +++ b/tests/cases/unittests/versionCache.ts @@ -1,13 +1,13 @@ /// /// -module ts { +namespace ts { function editFlat(position: number, deletedLength: number, newText: string, source: string) { return source.substring(0, position) + newText + source.substring(position + deletedLength, source.length); } function lineColToPosition(lineIndex: server.LineIndex, line: number, col: number) { - var lineInfo = lineIndex.lineNumberToInfo(line); + const lineInfo = lineIndex.lineNumberToInfo(line); return (lineInfo.offset + col - 1); } @@ -19,9 +19,9 @@ module ts { assert.equal(editedText, checkText); } - describe('VersionCache TS code', () => { + describe(`VersionCache TS code`, () => { let validateEditAtLineCharIndex: (line: number, char: number, deleteLength: number, insertString: string) => void; - + before(() => { let testContent = `/// var x = 10; @@ -32,9 +32,9 @@ class Point { } k=y; var p:Point=new Point(); -var q:Point=p;` +var q:Point=p;`; - let {lines, lineMap} = server.LineIndex.linesFromText(testContent); + let { lines } = server.LineIndex.linesFromText(testContent); assert.isTrue(lines.length > 0, "Failed to initialize test text. Expected text to have at least one line"); let lineIndex = new server.LineIndex(); @@ -48,34 +48,34 @@ var q:Point=p;` after(() => { validateEditAtLineCharIndex = undefined; - }) + }); - it('change 9 1 0 1 {"y"}', () => { + it(`change 9 1 0 1 {"y"}`, () => { validateEditAtLineCharIndex(9, 1, 0, "y"); }); - it('change 9 2 0 1 {"."}', () => { + it(`change 9 2 0 1 {"."}`, () => { validateEditAtLineCharIndex(9, 2, 0, "."); }); - it('change 9 3 0 1 {"\\n"}', () => { + it(`change 9 3 0 1 {"\\n"}`, () => { validateEditAtLineCharIndex(9, 3, 0, "\n"); }); - it('change 10 1 0 10 {"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n"}', () => { + it(`change 10 1 0 10 {"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n"}`, () => { validateEditAtLineCharIndex(10, 1, 0, "\n\n\n\n\n\n\n\n\n\n"); }); - it('change 19 1 1 0', () => { + it(`change 19 1 1 0`, () => { validateEditAtLineCharIndex(19, 1, 1, ""); }); - it('change 18 1 1 0', () => { + it(`change 18 1 1 0`, () => { validateEditAtLineCharIndex(18, 1, 1, ""); }); }); - describe('VersionCache simple text', () => { + describe(`VersionCache simple text`, () => { let validateEditAtPosition: (position: number, deleteLength: number, insertString: string) => void; let testContent: string; let lines: string[]; @@ -88,7 +88,7 @@ that ate the grass that was purple at the tips and grew 1cm per day`; - ({lines, lineMap} = server.LineIndex.linesFromText(testContent)); + ({ lines, lineMap } = server.LineIndex.linesFromText(testContent)); assert.isTrue(lines.length > 0, "Failed to initialize test text. Expected text to have at least one line"); let lineIndex = new server.LineIndex(); @@ -96,90 +96,90 @@ and grew 1cm per day`; validateEditAtPosition = (position: number, deleteLength: number, insertString: string) => { validateEdit(lineIndex, testContent, position, deleteLength, insertString); - } + }; }); after(() => { - validateEditAtPosition = undefined; - testContent = undefined; - lines = undefined; - lineMap = undefined; + validateEditAtPosition = undefined; + testContent = undefined; + lines = undefined; + lineMap = undefined; }); - it('Insert at end of file', () => { + it(`Insert at end of file`, () => { validateEditAtPosition(testContent.length, 0, "hmmmm...\r\n"); }); - it('Unusual line endings merge', () => { + it(`Unusual line endings merge`, () => { validateEditAtPosition(lines[0].length - 1, lines[1].length, ""); }); - it('Delete whole line and nothing but line (last line)', () => { + it(`Delete whole line and nothing but line (last line)`, () => { validateEditAtPosition(lineMap[lineMap.length - 2], lines[lines.length - 1].length, ""); }); - it('Delete whole line and nothing but line (first line)', () => { + it(`Delete whole line and nothing but line (first line)`, () => { validateEditAtPosition(0, lines[0].length, ""); }); - it('Delete whole line (first line) and insert with no line breaks', () => { + it(`Delete whole line (first line) and insert with no line breaks`, () => { validateEditAtPosition(0, lines[0].length, "moo, moo, moo! "); }); - it('Delete whole line (first line) and insert with multiple line breaks', () => { + it(`Delete whole line (first line) and insert with multiple line breaks`, () => { validateEditAtPosition(0, lines[0].length, "moo, \r\nmoo, \r\nmoo! "); }); - it('Delete multiple lines and nothing but lines (first and second lines)', () => { + it(`Delete multiple lines and nothing but lines (first and second lines)`, () => { validateEditAtPosition(0, lines[0].length + lines[1].length, ""); }); - it('Delete multiple lines and nothing but lines (second and third lines)', () => { + it(`Delete multiple lines and nothing but lines (second and third lines)`, () => { validateEditAtPosition(lines[0].length, lines[1].length + lines[2].length, ""); }); - it('Insert multiple line breaks', () => { + it(`Insert multiple line breaks`, () => { validateEditAtPosition(21, 1, "cr...\r\ncr...\r\ncr...\r\ncr...\r\ncr...\r\ncr...\r\ncr...\r\ncr...\r\ncr...\r\ncr...\r\ncr...\r\ncr"); }); - it('Insert multiple line breaks', () => { + it(`Insert multiple line breaks`, () => { validateEditAtPosition(21, 1, "cr...\r\ncr...\r\ncr"); }); - it('Insert multiple line breaks with leading \\n', () => { + it(`Insert multiple line breaks with leading \\n`, () => { validateEditAtPosition(21, 1, "\ncr...\r\ncr...\r\ncr"); }); - it('Single line no line breaks deleted or inserted, delete 1 char', () => { + it(`Single line no line breaks deleted or inserted, delete 1 char`, () => { validateEditAtPosition(21, 1, ""); }); - it('Single line no line breaks deleted or inserted, insert 1 char', () => { + it(`Single line no line breaks deleted or inserted, insert 1 char`, () => { validateEditAtPosition(21, 0, "b"); }); - it('Single line no line breaks deleted or inserted, delete 1, insert 2 chars', () => { + it(`Single line no line breaks deleted or inserted, delete 1, insert 2 chars`, () => { validateEditAtPosition(21, 1, "cr"); }); - it('Delete across line break (just the line break)', () => { + it(`Delete across line break (just the line break)`, () => { validateEditAtPosition(21, 22, ""); }); - it('Delete across line break', () => { + it(`Delete across line break`, () => { validateEditAtPosition(21, 32, ""); }); - it('Delete across multiple line breaks and insert no line breaks', () => { + it(`Delete across multiple line breaks and insert no line breaks`, () => { validateEditAtPosition(21, 42, ""); }); - it('Delete across multiple line breaks and insert text', () => { + it(`Delete across multiple line breaks and insert text`, () => { validateEditAtPosition(21, 42, "slithery "); }); }); - describe('VersionCache stress test', () => { + describe(`VersionCache stress test`, () => { let rsa: number[] = []; let la: number[] = []; let las: number[] = []; @@ -187,7 +187,7 @@ and grew 1cm per day`; let ersa: number[] = []; let ela: number[] = []; const iterationCount = 20; - //const iterationCount = 20000; // uncomment for testing + // const iterationCount = 20000; // uncomment for testing let lines: string[]; let lineMap: number[]; let lineIndex: server.LineIndex; @@ -200,7 +200,7 @@ and grew 1cm per day`; let totalChars = testContent.length; assert.isTrue(totalChars > 0, "Failed to read test file."); - ({lines, lineMap} = server.LineIndex.linesFromText(testContent)); + ({ lines, lineMap } = server.LineIndex.linesFromText(testContent)); assert.isTrue(lines.length > 0, "Failed to initialize test text. Expected text to have at least one line"); lineIndex = new server.LineIndex(); @@ -271,7 +271,7 @@ and grew 1cm per day`; }); it("Edit ScriptVersionCache ", () => { - let svc = server.ScriptVersionCache.fromString(ts.sys, testContent); + let svc = server.ScriptVersionCache.fromString(ts.sys, testContent); let checkText = testContent; for (let i = 0; i < iterationCount; i++) { @@ -316,4 +316,4 @@ and grew 1cm per day`; } }); }); -} +} \ No newline at end of file